Αφιερώνεται στην οικογένεια μου Δικτυακή Προσομοίωση με OMNeT++ - Σεπτέμβριος 2010 Σελίδα 1
Πτυχιακή Εργασία Παντελής Σταμπουλής Σελίδα 2
Ευχαριστίες Μέσω αυτού του βήματος επιθυμώ να ευχαριστήσω όλους όσους διαδραμάτισαν κάποιο ρόλο σε αυτή την πτυχιακή εργασία : Στον επίκουρο καθηγητή κ. Παναγιώτη Φουληρά για την εμπιστοσύνη που μου επέδειξε κατά την ανάθεση της πτυχιακής εργασίας και για την πολύτιμη βοήθεια του και τη συνεχή καθοδήγηση Στην οικογένεια μου που στηρίζει πάντα τις επιλογές μου και μου δίνει δύναμη να προχωρήσω Δικτυακή Προσομοίωση με OMNeT++ - Σεπτέμβριος 2010 Σελίδα 3
Πτυχιακή Εργασία Παντελής Σταμπουλής Σελίδα 4
Σύνοψη Πτυχιακής Τα τελευταία χρόνια υπήρξε μια αλματώδης ανάπτυξη στις τεχνολογίες και τις υποδομές του Internet. Αυτό είχε ως άμεσο αποτέλεσμα την δημιουργία όλο και περισσοτέρων υπηρεσιών που προσφέρουν στο χρήστη μεταφορά δεδομένων σε πραγματικό χρόνο και πιο ειδικά multimedia περιεχόμενο. Το κυρίαρχο πρωτόκολλο που χρησιμοποιείται για τη μεταφορά real-time δεδομένων είναι το RTP (Real-time Transport Protocol) τα πακέτα του οποίου συνήθως ενσωματώνονται μέσα σε UDP datagrams. Αυτές οι streaming υπηρεσίες όμως έχουν ειδικές απαιτήσεις όσον αφορά το χρόνο παράδοσης των πακέτων τους. Πιο συγκεκριμένα, επειδή η αναπαραγωγή των δεδομένων γίνεται σε πραγματικό χρόνο όταν φτάσουν στον παραλήπτη η καθυστέρηση των πακέτων πάνω από ένα συγκεκριμένο χρονικό όριο μπορεί να τα καταστήσει άχρηστα. Για παράδειγμα αν η αναπαραγωγή ενός αρχείου video έχει προχωρήσει στο καρέ με τον αριθμό 100, αν εκείνη τη στιγμή φθάσει το καρέ με τον αριθμό 99 δε θα χρησιμοποιηθεί. Αυτό το φαινόμενο προκαλεί μεγάλη σπατάλη του διαθέσιμου bandwidth. Στα πλαίσια αυτής της πτυχιακής εργασίας προτείνεται μια μέθοδος φιλτραρίσματος με τη βοήθεια της οποίας είναι δυνατόν να αναγνωρίζονται εγκαίρως τα προβληματικά πακέτα RTP και να απορρίπτονται έτσι ώστε να ελευθερώνεται bandwidth για άλλες υπηρεσίες που το έχουν ανάγκη. Περιγράφεται η λειτουργικότητα και η κατασκευή ενός φίλτρου που μπορεί να ενσωματωθεί σε έναν τυπικό δρομολογητή. Πολλοί διαδοχικοί δρομολογητές λειτουργούν συνδυαστικά προσφέροντας καλύτερα αποτελέσματα. Στόχος όμως της εργασίας δεν είναι μόνο η κατασκευή του φίλτρου αλλά και ο έλεγχος της αποτελεσματικότητας του. Για την εξαγωγή λοιπόν συμπερασμάτων σχετικά με την αποδοτικότητα της μεθόδου χρησιμοποιήθηκε η τεχνική της προσομοίωσης. Μελετήθηκε διεξοδικά ο προσομοιωτής OMNeT++ και το framework για δικτυακές προσομοιώσεις INET με στόχο την πλήρη κατανόηση τους αλλά και τη δημιουργία μοντέλων δικτύων. Δημιουργήθηκε ακόμη και εγχειρίδιο χρήσης για τον προσομοιωτή έτσι ώστε ακόμα και ένας αρχάριος χρήστης να είναι σε θέση,διαβάζοντας το, να εκτελέσει δικτυακές προσομοιώσεις. Διενεργήθηκαν εκτενείς προσομοιώσεις τα αποτελέσματα των οποίων περιγράφονται στο τέλος της εργασίας και μπορούν να οδηγήσουν τον αναγνώστη σε ενδιαφέροντα συμπεράσματα. Δικτυακή Προσομοίωση με OMNeT++ - Σεπτέμβριος 2010 Σελίδα 5
Πτυχιακή Εργασία Παντελής Σταμπουλής Σελίδα 6
Στοιχεία Συγγραφέα : Ο Παντελής Σταμπουλής είναι προπτυχιακός φοιτητής του τμήματος Εφαρμοσμένης Πληροφορικής του Πανεπιστημίου Μακεδονίας. Διεύθυνση: Κιλκισίου 14, 54639, Θεσσαλονίκη Ηλ. Διεύθυνση: it0786@uom.gr Δικτυακή Προσομοίωση με OMNeT++ - Σεπτέμβριος 2010 Σελίδα 7
Πτυχιακή Εργασία Παντελής Σταμπουλής Σελίδα 8
Περιεχόμενα 1. Εισαγωγή... 11 2. Real Time Multimedia στο Internet : Πρωτόκολλα και δρομολογητές... 15 2.1. Τα πρωτόκολλα μεταφοράς δεδομένων σε πραγματικό χρόνο... 16 2.1.1. RSVP (Resource ReSerVation Protocol)... 17 2.1.2. RTP ( Real-time Transport Protocol)... 17 2.1.3. RTP Control Protocol (RTCP)... 20 2.1.4. RTSP (Real-Time Streaming Protocol)... 22 2.2. Routers και Συμφόρηση... 22 3. Εργαλεία προσομοίωσης... 27 3.1. Δικτυακοί προσομοιωτές [WEI08]... 27 3.1.1. The Network Simulator - ns-2... 27 3.1.2. ns-3... 28 3.1.3. OMNeT++... 28 3.1.4. JiST... 28 3.2. Ένα σύντομο εγχειρίδιο χρήσης για τον OMNeT++ 4.0 [VAR09]... 29 3.2.1. Εισαγωγή... 29 3.2.2. ΕΠΙΣΚΟΠΗΣΗ ΤΟΥ OMNeT++... 30 3.2.3. Η ΓΛΩΣΣΑ ΝΕD... 32 3.2.4. Simple Modules... 35 3.2.5. Μηνύματα... 38 3.2.6. Η Βιβλιοθήκη προσομοίωσης... 40 3.2.7. Δημιουργώντας προγράμματα προσομοίωσης (δες section 7)... 43 3.2.8. Διαμορφώνοντας την προσομοίωση(omnetpp.ini) (δες section 8)... 44 3.2.9. Εκτελώντας την προσομοίωση (δες section 9)... 45 3.2.10. Γραφικά και Animation... 47 Δικτυακή Προσομοίωση με OMNeT++ - Σεπτέμβριος 2010 Σελίδα 9
3.2.11. Αναλύοντας τα αποτελέσματα της προσομοίωσης (δες section 11)... 47 3.2.12. Eventlog (δες section 12)... 48 3.3. Τα «δεδομένα» της προσομοίωσης... 49 4. Η μέθοδος για RTP filtering και εξοικονόμηση bandwidth... 51 4.1. Η βασική ιδέα... 51 4.1. Σχετικά θέματα... 52 4.2.1. Αναγνώριση rtp πακέτων... 52 4.2.2. Αναγνώριση μεμονωμένων ροών rtp πακέτων... 53 4.2.3. Ταξινόμηση... 53 4.2.4. Το φιλτράρισμα των πακέτων RTP... 54 4.2.5. Ροές του RTP και ταξινόμηση... 55 4.2.6. Τα RTP πακέτα που δεν πληρούν τους περιορισμούς χρόνου... 57 4.2.7. Αξιολόγηση της επίδοσης του φίλτρου... 57 5. Πειραματισμοί και αποτελέσματα... 59 5.1. Περιγραφή των παραμέτρων των προσομοιώσεων... 59 5.2. Προβλήματα με το RTP και οι λύσεις τους... 61 5.3. Περιγραφή της τοπολογίας των δικτύων... 64 5.4. Αποτελέσματα... 65 5.4.1. Δύο Διαδοχικοί filterrouters... 65 5.4.2. Τρεις Διαδοχικοί filterrouters... 75 5.4.3. Τέσσερις Διαδοχικοί filterrouters... 85 5.4.4. Πέντε Διαδοχικοί filterrouters... 95 6. Συμπεράσματα... 105 7. Βιβλιογραφία... 107 Πτυχιακή Εργασία Παντελής Σταμπουλής Σελίδα 10
1. Εισαγωγή Οι πρόσφατες εξελίξεις στην επιστήμη της πληροφορικής, στις τεχνολογίες συμπίεσης αλλά και στις υποδομές των δικτύων τόσο σε επίπεδο hardware αλλά και σε software έχουν κάνει εφικτή την παροχή υπηρεσιών μέσω του Internet που προσφέρουν μεταφορά πολυμεσικού περιεχομένου σε πραγματικό χρόνο. Τα πολυμέσα πραγματικού χρόνου, όπως γίνεται εύκολα αντιληπτό από το όνομα τους, έχουν αυστηρούς χρονικούς περιορισμούς. Για παράδειγμα τα δεδομένα ήχου και video πρέπει να αναπαράγονται συνεχώς και χωρίς διακοπές. Αν τα δεδομένα δεν φτάσουν στον παραλήπτη την στιγμή που πρέπει και υποστούν καθυστέρηση που θα ξεπερνάει ένα συγκεκριμένο όριο τότε η αναπαραγωγή θα παγώσει, γεγονός αρκετά ενοχλητικό για τον χρήστη. Το κυρίαρχο πρωτόκολλο αυτή την στιγμή για την μεταφορά streaming πολυμέσων είναι το RTP (Realtime Transport Protocol) τα πακέτα του οποίου ενσωματώνονται συνήθως σε UDP datagrams για να φτάσουν στον προορισμό τους. Η μεταφορά σε πραγματικό χρόνο «ζωντανού» ή αποθηκευμένου video αποτελεί το κυρίαρχο κομμάτι των πολυμέσων που διακινούνται καθημερινά μέσω του Internet. Κατά συνέπεια καταναλώνουν ένα πολύ μεγάλο μέρος του συνολικού bandwidth. Το πρόβλημα όμως έγκειται στο γεγονός ότι το bandwidth δεν είναι απεριόριστο και επομένως και η παραμικρή σπατάλη του μοιάζει με περιττή πολυτέλεια που δε μπορούμε να ανεχθούμε. Μια τέτοια σημαντική σπατάλη συντελείται αναπόφευκτα κατά την μεταφορά πολυμεσικού περιεχομένου σε πραγματικό χρόνο. Και αυτό γιατί τα πακέτα που μεταφέρουν τα δεδομένα υπόκεινται αναγκαστικά σε καθυστερήσεις καθώς ταξιδεύουν δια μέσω των διάφορων δικτύων μέχρι να φτάσουν στον προορισμό τους. Πολλές φορές αυτή η καθυστέρηση ξεπερνάει κάποιο όριο με αποτέλεσμα όταν τα πακέτα φτάσουν τελικά στον προορισμό τους η αναπαραγωγή να έχει προχωρήσει και τα δεδομένα που μεταφέρουν να είναι άχρηστα. Αυτά τα «άχρηστα» πακέτα όμως παίρνουν την θέση κάποιων άλλων πακέτων τα οποία επιθυμούμε να φτάσουν στον προορισμό τους. Θα ήταν πολύ χρήσιμο αν υπήρχε μια αποδοτική μέθοδος με την οποία αυτά τα καθυστερημένα πακέτα θα μπορούσαν να αναγνωρίζονται το συντομότερο δυνατό και να απορρίπτονται ελευθερώνοντας έτσι bandwidth για άλλες χρήσεις. Αυτό ακριβώς είναι και το θέμα αυτής της πτυχιακής εργασίας. Στα πλαίσια της εργασίας προτείνεται μια συγκεκριμένη μέθοδος με την οποία μπορεί να επιτευχθεί ο παραπάνω στόχος, η εξοικονόμηση bandwidth. Θα περιγραφεί η λειτουργία ενός Δικτυακή Προσομοίωση με OMNeT++ - Σεπτέμβριος 2010 Σελίδα 11
ειδικού φίλτρου το οποίο θα μπορεί να τοποθετηθεί στους ενδιάμεσους δρομολογητές ενός δικτύου. Αυτό το φίλτρο θα έχει την δυνατότητα να αναγνωρίζει τις ροές δεδομένων RTP και να φιλτράρει μεγάλο μέρος των καθυστερημένων πακέτων RTP που θα είναι άχρηστα αν φτάσουν στον προορισμό τους. Στόχος μας όμως δεν είναι απλά να περιγράψουμε την λειτουργικότητα και τις αρχές στις οποίες θα στηρίζεται το συγκεκριμένο φίλτρο. Επιθυμούμε να διαπιστώσουμε κατά πόσο είναι αποτελεσματικό στην πράξη. Για αυτό το λόγο αφού το φίλτρο δημιουργήθηκε από το μηδέν εφαρμόσαμε την τεχνική της προσομοίωσης για να μελετήσουμε τα αποτελέσματα του. Χρησιμοποιήθηκε ο προσομοιωτής OMNeT++ v. 4.0 και το framework INET για την δημιουργία πολλών μοντέλων δικτύων στα οποία τέθηκε σε λειτουργία το φίλτρο. Τα αποτελέσματα καταγράφηκαν και αναλύθηκαν οδηγώντας μας σε χρήσιμα συμπεράσματα. Η δομή της εργασίας έχει ως εξής: Στο δεύτερο κεφάλαιο που ακολουθεί γίνεται μια αναφορά στην μεταφορά δεδομένων πραγματικού χρόνου μέσω του Internet και στα χαρακτηριστικά της. Συγκεκριμένα ποια πρωτόκολλα χρησιμοποιούνται για αυτό τον σκοπό με αναλυτική παρουσίαση του RTP και του RTCP που είναι και αυτά που μας ενδιαφέρουν άμεσα. Επίσης υπάρχει και μια αναφορά στις λειτουργίες των δρομολογητών αλλά και στις τεχνικές που χρησιμοποιούν για να ελέγξουν και να αντιμετωπίσουν την συμφόρηση. Γίνεται λόγος ειδικά για την συμφόρηση γιατί αποτελεί κυρίαρχό παράγοντα που θα επηρεάσει την αποτελεσματικότητα της πρότασης μας. Στο τρίτο κεφάλαιο αφού περιγραφεί γενικά το τι εστί η τεχνική της προσομοίωσης ακολουθεί μια αναφορά για κάθε δικτυακό προσομοιωτή που χρησιμοποιείται ευρέως αυτή την εποχή και τα ιδιαίτερα χαρακτηριστικά του. Επίσης περιγράφεται το τι είδους δεδομένα μπορούν να χρησιμοποιηθούν για την αναπαράσταση των streaming πολυμέσων έτσι ώστε οι προσομοιώσεις να γίνουν πιο ρεαλιστικές. Τέλος μέσα σε αυτό το κεφάλαιο υπάρχει και ένα σύντομο εγχειρίδιο που αφορά τον OMNeT++ v. 4.0, τον προσομοιωτή δηλαδή που χρησιμοποιήθηκε για τα πειράματα μας. Αυτό τον εγχειρίδιο περιγράφει τον τρόπο λειτουργίας και την φιλοσοφία του προσομοιωτή και είναι ιδιαίτερα χρήσιμο για τους αρχάριους χρήστες που θέλουν να ασχοληθούν μαζί του. Στο τέταρτο κεφάλαιο γίνεται αναλυτική αναφορά στα χαρακτηριστικά του φίλτρου και στον τρόπο λειτουργίας του. Δηλαδή πως αντιμετωπίζει τις ροές RTP και φιλτράρει τα πακέτα που πρέπει. Επιπλέον περιγράφονται και οι μετρικές με τις οποίες θα αξιολογήσουμε την αποδοτικότητα του. Στο πέμπτο κεφάλαιο περιγράφεται αναλυτικά το πώς «στήθηκαν» οι προσομοιώσεις, οι τοπολογίες των δικτύων που δημιουργήθηκαν αλλά και γιατί επιλέχθηκαν οι τιμές των παραμέτρων που χρησιμοποιήθηκαν. Ακολουθούν οι αναλυτικές παρουσιάσεις των δικτύων και των αποτελεσμάτων που προέκυψαν από τις προσομοιώσεις. Πτυχιακή Εργασία Παντελής Σταμπουλής Σελίδα 12
Στο τελευταίο κεφάλαιο γίνεται η ανάλυση των αποτελεσμάτων και η εξαγωγή των συμπερασμάτων που προκύπτουν από αυτά. Θα απαντήσουμε δηλαδή στο ερώτημα κατά πόσο είναι αποτελεσματική η μέθοδος που προτείνουμε και αν αξίζει να υλοποιηθεί στην πράξη. Δικτυακή Προσομοίωση με OMNeT++ - Σεπτέμβριος 2010 Σελίδα 13
Πτυχιακή Εργασία Παντελής Σταμπουλής Σελίδα 14
2. Real Time Multimedia στο Internet : Πρωτόκολλα και δρομολογητές Τα δίκτυα υπολογιστών σχεδιάστηκαν για να συνδέουν υπολογιστές που βρίσκονται σε διαφορετικές τοποθεσίες έτσι ώστε να μπορούν να επικοινωνούν και να ανταλλάσσουν δεδομένα. Στις πρώιμες εποχές των δικτύων το μεγαλύτερο μέρος των δεδομένων που διακινούνταν ήταν μορφής κειμένου. Σήμερα, με την ανάπτυξη των πολυμέσων και των δικτυακών τεχνολογιών, τα πολυμεσικά δεδομένα είναι αυτά που κυριαρχούν και καταναλώνουν τη μερίδα του λέοντος όσον αφορά το διαθέσιμο bandwidth. Ο ήχος και το video γίνονται όλο και πιο δημοφιλή στο internet κάνοντας δυνατή την εμφάνιση στην αγορά νέων υπηρεσιών όπως η τηλεφωνία μέσω internet (voice over IP), η τηλεόραση μέσω internet (internet TV), η τηλεδιάσκεψη κ.τ.λ.. Στο μέλλον αναμένονται και άλλες διαδραστικές υπηρεσίες που θα βασίζονται σε πολυμεσικό περιεχόμενο και θα αλλάξουν την καθημερινότητα των χρηστών. [CHE08] Από τεχνική σκοπιά η εκτεταμένη χρήση πολυμεσικού περιεχομένου μέσω δικτύων αφορά την δημιουργία της υποδομής του hardware και του software ώστε τα δίκτυα να είναι σε θέση να ανταπεξέλθουν στις νέες απαιτήσεις και ιδιαιτερότητες αυτών των μέσων. Αυτό το έργο όμως δεν είναι καθόλου εύκολο καθώς υπάρχουν κυρίως τρεις βασικές δυσκολίες [WU01]: Πρώτα απ όλα, αν συγκριθούν οι εφαρμογές πολυμέσων με τις εφαρμογές που χρησιμοποιούν δεδομένα κειμένου απαιτούν πολύ μεγαλύτερο bandwidth. Για παράδειγμα ένα απλό video clip με διάρκεια 25s και ανάλυση 320x240 μπορεί να έχει μέγεθος 2,3 ΜΒ, μέγεθος που αντιστοιχεί σε 1000 σελίδες απλού κειμένου. Δεύτερον, οι περισσότερες εφαρμογές απαιτούν την διακίνηση δεδομένων σε πραγματικό χρόνο (real-time traffic). O ήχος και η εικόνα πρέπει δηλαδή να αναπαράγονται συνεχώς με τον ρυθμό με τον οποίο λαμβάνονται. Αν τα δεδομένα δεν καταφέρουν να φτάσουν στον προορισμό τους την κατάλληλη στιγμή τότε η αναπαραγωγή θα «παγώσει», γεγονός που θα γίνει αντιληπτό από τον θεατή. Για παράδειγμα, στην τηλεφωνία μέσω internet (VoIP), το ανθρώπινο αυτί μπορεί να ανεχθεί καθυστέρηση έως 250 ms. Αν η καθυστέρηση περάσει αυτό το όριο τότε η ποιότητα της κλήσης δεν θα είναι αποδεκτή. Λειτουργώντας προσθετικά επάνω στην καθυστέρηση, και η συμφόρηση του δικτύου μπορεί να έχει ακόμα πιο σημαντικές επιπτώσεις πάνω στη διακίνηση δεδομένων σε πραγματικό χρόνο. Αν σε ένα δίκτυο Δικτυακή Προσομοίωση με OMNeT++ - Σεπτέμβριος 2010 Σελίδα 15
υπάρχει συμφόρηση η μόνη επίπτωση σε δεδομένα non real-time είναι ότι η μεταφορά χρειάζεται περισσότερο χρόνο για να ολοκληρωθεί. Αντιθέτως, αν τα real-time δεδομένα δεν φτάσουν στην ώρα τους θεωρούνται άχρηστα και απορρίπτονται. Αν δεν ληφθούν τα κατάλληλα μέτρα, η αναμετάδοση αυτών των δεδομένων θα επιδεινώσει την κατάσταση οδηγώντας στην κατάρρευση του δικτύου. Τρίτον, για τις περισσότερες εφαρμογές πολυμέσων ο παραλήπτης έχει διαθέσιμο buffer περιορισμένης χωρητικότητας. Αν δεν ληφθούν μέτρα για να ελεχθεί η ροή των δεδομένων που στέλνονται, τότε το buffer μπορεί να υπερχειλίσει, οδηγώντας είτε στην απώλεια δεδομένων και στην μείωση της ποιότητας είτε στο να μείνει άδειο και να οδηγήσει την εφαρμογή σε λιμοκτονία (starvation). Όλα τα παραπάνω αποτελούν σημαντικά προβλήματα γιατί, στην πραγματικότητα, τα δίκτυα παγκοσμίως μοιράζονται σε εκατομμύρια χρήστες, έχουν περιορισμένο bandwidth και καθυστέρηση που δε μπορεί να προβλεφθεί. Έτσι γίνεται επιτακτική η ανάγκη σχεδίασης ειδικών πρωτοκόλλων που θα δουλεύουν πάνω από την καρδιά του internet δηλαδή την στοίβα πρωτοκόλλων TCP/IP και θα λύνουν τα προβλήματα που επισημάναμε. 2.1. Τα πρωτόκολλα μεταφοράς δεδομένων σε πραγματικό χρόνο Η λύση για πολυμέσα πάνω από IP είναι η ταξινόμηση όλης της κίνησης, η διάθεση προτεραιότητας για διάφορες εφαρμογές και η δημιουργία κρατήσεων. Το Integrated Services Working Group που ανήκει στο IETF (Internet Engineering Task Force) ανέπτυξε ένα βελτιωμένο μοντέλο υπηρεσιών internet που ονομάστηκε Integrated Services που περιλαμβάνει υπηρεσίες καλύτερης προσπάθειας και υπηρεσίες πραγματικού χρόνου. Οι υπηρεσίες πραγματικού χρόνου επιτρέπουν σε δίκτυα IP να παρέχουν ποιότητα υπηρεσιών σε εφαρμογές πολυμέσων. Τα πρωτόκολλα που ανήκουν σε αυτήν την ομάδα και χρησιμοποιούνται για την μεταφορά πολυμεσικών δεδομένων σε πραγματικό χρόνο είναι τα RSVP, RTP, RTCP και RTSP. Παρακάτω ακολουθεί μια περιγραφή αυτών των πρωτοκόλλων με ιδιαίτερη έμφαση στο RTP και RTCP [LIU09]. Πτυχιακή Εργασία Παντελής Σταμπουλής Σελίδα 16
2.1.1. RSVP (Resource ReSerVation Protocol) To RSVP είναι ένα πρωτόκολλο ελέγχου δικτύου που επιτρέπει σε έναν παραλήπτη να απαιτήσει μια ειδική ποιότητα υπηρεσιών (QoS) από άκρη σε άκρη για τις ροές δεδομένων. Οι εφαρμογές πραγματικού χρόνου χρησιμοποιούν το RSVP για να εξασφαλίζουν τους απαραίτητους πόρους στα ενδιάμεσα routers κατά μήκους της διαδρομής μετάδοσης με στόχο το απαιτούμενο bandwidth να είναι διαθέσιμο όταν ξεκινήσει η μεταφορά των πολυμεσικών δεδομένων. Το RSVP, όπως είπαμε, χρησιμοποιείται για να ορίσει κρατήσεις δικτυακών πόρων. Όταν μια εφαρμογή-παραλήπτης σε έναν υπολογιστή απαιτεί μια συγκεκριμένη ποιότητα υπηρεσιών για να λειτουργήσει, χρησιμοποιεί το RSVP για να «κοινοποιήσει» τις απαιτήσεις της στους ενδιάμεσους routers. Το RSVP είναι υπεύθυνο για την διαπραγμάτευση των παραμέτρων σύνδεσης με αυτούς τους routers και αν η σύνδεση τελικά επιτευχθεί τότε φροντίζει να διατηρεί όλα τα εμπλεκόμενα μέρη στην επιθυμητή κατάσταση μέχρι να ολοκληρωθεί η μεταφορά των δεδομένων. 2.1.2. RTP ( Real-time Transport Protocol) Το πρωτόκολλο RTP ορίζει μια μορφή πακέτων για τη μεταφορά ήχου και βίντεο μέσω του internet. Αναπτύχθηκε από το Audio Video Transport Working Group του ΙΕTF και εμφανίστηκε πρώτη φορά το 1996 με το RFC 1889. Το RTP χρησιμοποιείται εκτενώς σε συστήματα επικοινωνίας και ψυχαγωγίας που χρησιμοποιούν streaming πολυμέσα, δηλαδή μεταφορά των πολυμεσικών δεδομένων και αναπαραγωγή τους σε πραγματικό χρόνο. Τέτοια συστήματα είναι η τηλεφωνία μέσω internet και οι βιντεοδιασκέψεις. Το RTP συνήθως χρησιμοποιείται σε συνδυασμό με το RTCP που θα αναλυθεί παρακάτω. Ενώ το RTP μεταφέρει τις ροές των δεδομένων, το RTCP χρησιμοποιείται για να παρακολουθεί και να καταγράφει στατιστικά στοιχεία για την μετάδοση και την ποιότητα των υπηρεσιών καθώς και για την αποστολή δεδομένων ελέγχου [FOU09]. Είναι σχεδιασμένο για μεταφορά ροών δεδομένων ήχου και βίντεο σε πραγματικό χρόνο, είτε από άκρο σε άκρο, είτε προς πολλαπλούς προορισμούς μέσω πολυεκπομπής (multicast). Δεν παρέχει καμία εγγύηση για την επιτυχημένη αποστολή των δεδομένων, αλλά με την αρίθμηση των πακέτων που χρησιμοποιεί μας επιτρέπει να γνωρίζουμε ποια πακέτα έχουν χαθεί. Είναι το πιο δημοφιλές πρωτόκολλο στο internet όσον αφορά τα streaming πολυμέσα και χρησιμοποιείται σε συνδυασμό με ένα κατάλληλο profile. Οι εφαρμογές πολυμέσων απαιτούν έγκαιρη μεταφορά πακέτων, ενώ αντιθέτως μπορούν να ανεχθούν την απώλεια πακέτων μέχρι κάποιον βαθμό. Για παράδειγμα, η απώλεια ενός πακέτου σε μια εφαρμογή ήχου μπορεί να οδηγήσει Δικτυακή Προσομοίωση με OMNeT++ - Σεπτέμβριος 2010 Σελίδα 17
σε απώλεια ενός κλάσματος του δευτερολέπτου της ηχητικής πληροφορίας. Αυτή η απώλεια όμως με τις τεχνικές που χρησιμοποιούνται μπορεί να μη γίνει αντιληπτή από το ανθρώπινο αυτί. Έτσι μπορούμε να πούμε ότι μας ενδιαφέρει περισσότερο η χρονική εγκυρότητα των δεδομένων παρά η αξιόπιστη μεταφορά τους. Αυτός είναι και ο λόγος που το TCP δεν χρησιμοποιείται συνήθως από το RTP καθώς εισάγει καθυστέρηση λόγω της εγκαθίδρυσης των συνδέσεων και της διόρθωσης των λαθών. Έτσι οι περισσότερες υλοποιήσεις του RTP «τρέχουν» πάνω από το πολύ πιο απλό UDP. Συνεδρίες (Sessions) Για να ξεκινήσει μια συνεδρία RTP, η εφαρμογή ορίζει ένα ζευγάρι από θύρες προορισμού (δηλαδή εκτός από την διεύθυνση IP του παραλήπτη ορίζει μια θύρα για το RTP και μια για το RTCP). Κάθε ροή δεδομένων μεταφέρεται σε ξεχωριστή συνεδρία RTP, μαζί με τα δικά της πακέτα RTCP που περιγράφουν την ποιότητα λήψης της. Για παράδειγμα ο ήχος και η εικόνα σε ένα video clip θα μεταφέρονται με διαφορετικές συνεδρίες στον παραλήπτη και θα συγχρονίζονται στον τελικό προορισμό για την αναπαραγωγή. Επίσης ο χρήστης έχει τη δυνατότητα να επιλέξει μόνο μία από τις 2 ροές (δηλαδή μόνο ήχο ή βίντεο χωρίς ήχο). Profiles και payload formats Μία από τις βασικές σχεδιαστικές αρχές του RTP ήταν η ευρεία υποστήριξη μιας μεγάλης ποικιλίας εφαρμογών και η παροχή ενός ευέλικτου μηχανισμού με τον οποίο νέες εφαρμογές θα μπορούσαν να χρησιμοποιήσουν το RTP χωρίς να χρειάζεται να το τροποποιήσουν. Για κάθε είδος εφαρμογής (audio, video) το RTP ορίζει ένα profile και ένα ή περισσότερα payload formats. To profile παρέχει ένα σύνολο από πληροφορίες που χρησιμοποιούνται για την ερμηνεία των πεδίων στην κεφαλίδα του πακέτου RTP ενώ το payload format χρησιμοποιείται για την ερμηνεία του ωφέλιμου φορτίου του πακέτου που ακολουθεί την κεφαλίδα. Κάθε profile συνοδεύεται από διάφορα payload formats, κάθε ένα από τα οποία περιγράφει την μεταφορά ενός συγκεκριμένου τύπου πολυμεσικού αρχείου. Τα payload formats μπορούν να ορίσουν μια επιπρόσθετη κεφαλίδα που θα ακολουθεί την κύρια κεφαλίδα του πακέτου RTP. Μερικά από τα audio payload formats είναι: G.711, G.723, G.726, G.729, GSM, MP3, DTMF κ.τ.λ. Μερικά από τα video payload formats είναι τα H.261, H.263, MPEG κ.τ.λ. Πτυχιακή Εργασία Παντελής Σταμπουλής Σελίδα 18
Η κεφαλίδα του πακέτου RTP Σχ. 2.1 Μορφή Κεφαλίδος Πακέτου RTP. Η κεφαλίδα του πακέτου RTP έχει την μορφή που φαίνεται στο Σχ. 2.1. Το ελάχιστο μέγεθος της κεφαλίδας είναι 12 bytes. Μετά από αυτή μπορεί να υπάρχουν προαιρετικές επεκτάσεις και στο τέλος ακολουθεί το ωφέλιμο φορτίο του πακέτου που περιέχει τα δεδομένα. Ακολουθεί μια σύντομη περιγραφή των πεδίων της κεφαλίδας. Ver. (2 bit): Υποδεικνύει την έκδοση του πρωτοκόλλου. P (Padding, 1 bit): Χρησιμοποιείται για να υποδηλώσει αν υπάρχουν πρόσθετα bytes στο τέλος του πακέτου. Αυτά τα bytes χρησιμοποιούνται για να γεμίζουν ένα block συγκεκριμένου μεγέθους. X (Extension, 1 bit): Υποδηλώνει την ύπαρξη πρόσθετης κεφαλίδας επέκτασης ανάμεσα στην κύρια κεφαλίδα και στο ωφέλιμο φορτίο. CC (CSRC Count, 4 bits): Περιέχει τον αριθμό των CSRC αναγνωριστικών (περιγράφονται παρακάτω) που ακολουθούν την κύρια κεφαλίδα. Μ (Marker, 1 bit): Χρησιμοποιείται στο επίπεδο εφαρμογής και καθορίζεται από το profile που χρησιμοποιείται. Αν έχει την τιμή 1 τότε σημαίνει πως τα δεδομένα του πακέτου έχουν κάποια ξεχωριστή σημασία για την εφαρμογή. PT (Payload Type, 7 bits): Υποδηλώνει την μορφή των δεδομένων του ωφέλιμου φορτίου και καθορίζει τον τρόπο με τον οποίο θα τα ερμηνεύσει η εφαρμογή. Αυτό καθορίζεται από το profile που χρησιμοποιείται. Sequence Number (16 bits): To sequence number αυξάνεται κατά ένα για κάθε πακέτο RTP που στέλνεται και χρησιμοποιείται από τον παραλήπτη για να ανιχνεύει τα χαμένα πακέτα αλλά και για να τα τοποθετεί στην σωστή σειρά ώστε να καταστεί δυνατή η αναπαραγωγή του αρχείου. Το RTP δεν προβαίνει σε καμία ενέργεια όταν εντοπίσει απώλεια πακέτου αλλά αφήνεται στην εφαρμογή να αποφασίσει ποια θα είναι η ενέργεια που θα εκτελεστεί. Για παράδειγμα μια εφαρμογή video μπορεί να αναπαράγει το τελευταίο γνωστό frame στην θέση αυτού που δεν έφτασε. Timestamp (32 bits): Χρησιμοποιείται ώστε ο δέκτης να μπορεί να αναπαράγει τα δείγματα που έχουν ληφθεί σε κατάλληλα χρονικά Δικτυακή Προσομοίωση με OMNeT++ - Σεπτέμβριος 2010 Σελίδα 19
διαστήματα και με τον σωστό ρυθμό. Όταν υπάρχουν πολλές ροές δεδομένων τα timestamps είναι ανεξάρτητα σε κάθε ροή και μπορεί να μην είναι κατάλληλα για τον συγχρονισμό των ροών. Ο συγχρονισμός των ροών π.χ. του ήχου και της εικόνας σε ένα video clip είναι αρμοδιότητα της εφαρμογής. SSRC (Synchronization source identifier, 32 bits): Ορίζει μοναδικά την πηγή προέλευσης της ροής. CSRC: Απαριθμεί τις συμβάλλουσες πηγές μιας ροής δεδομένων που έχει παραχθεί από πολλαπλές πηγές. Αυτό το πεδίο είναι προαιρετικό. Κεφαλίδα Επέκτασης: Τα πρώτα 32 bits περιέχουν ένα αναγνωριστικό για το profile και καθορίζουν το μήκος της επέκτασης. Είναι προαιρετική. Σε συνδυασμό με το RTP, ένα ολοκληρωμένο σύστημα συνήθως χρησιμοποιεί και άλλα πρωτόκολλα για την αρχικοποίηση και τον έλεγχο των συνεδριών (sessions). Ένας αποστολέας RTP είναι υπεύθυνος για σύλληψη δεδομένων ήχου και video και για την μετατροπή τους σε frames χρησιμοποιώντας έναν κατάλληλο κωδικοποιητή. Αυτά τα frames στη συνέχεια στέλνονται σαν RTP πακέτα. Ο αποστολέας μπορεί περιστασιακά να εκτελεί ενέργειες διόρθωσης λαθών και ελέγχου της συμφόρησης. Ο αποστολέας μπορεί να πραγματοποιήσει αλλαγές στον ρυθμό της μετάδοσης ανάλογα με τις αναφορές που λαμβάνει από το RTCP. O παραλήπτης RTP συλλέγει τα πακέτα από το δίκτυο, χειρίζεται τις όποιες απώλειες πακέτων, πραγματοποιεί τον συγχρονισμό των ροών τις αποκωδικοποιεί και παρουσιάζει το πολυμεσικό περιεχόμενο στο χρήστη. 2.1.3. RTP Control Protocol (RTCP) To RTCP είναι αδελφό πρωτόκολλο με το RTP. Παρέχει στατιστικά στοιχεία και πληροφορίες ελέγχου για μια ροή δεδομένων RTP. Συνοδεύει το RTP στη μεταφορά αλλά το ίδιο δεν μεταφέρει δεδομένα πολυμέσων. Η κύρια λειτουργία του είναι να παρέχει στον αποστολέα RTP ανατροφοδότηση σχετικά με την ποιότητα των υπηρεσιών (QoS) στέλνοντας στατιστικά στοιχεία που αφορούν τη μεταφορά και τη λήψη των πακέτων RTP. Συγκεντρώνει δεδομένα όπως ο αριθμός των πακέτων που έχουν μεταδοθεί, ο αριθμός των χαμένων πακέτων, το jitter και το round-trip delay. Μια εφαρμογή μπορεί να χρησιμοποιήσει αυτά τα δεδομένα για να μεταβάλλει τις παραμέτρους της σύνδεσης όπως ο ρυθμός μετάδοσης των πακέτων ή να χρησιμοποιήσει διαφορετικό codec. Πτυχιακή Εργασία Παντελής Σταμπουλής Σελίδα 20
Λειτουργίες του RTCP Το RTCP παρέχει τρεις βασικές λειτουργίες που πρέπει να υλοποιούνται σε κάθε συνεδρία RTP: Όπως είπαμε και παραπάνω η κύρια λειτουργία του είναι να συλλέγει στατιστικά στοιχεία πάνω σε παραμέτρους ποιότητας της σύνδεσης και να τα αποστέλλει στον αποστολέα των πολυμεσικών δεδομένων και σε άλλους συμμετέχοντες. Έτσι ο αποστολέας μπορεί να βελτιστοποιήσει τις παραμέτρους μετάδοσης. Παρέχει αναγνωριστικά σε όλους τους συμμετέχοντες σε μια συνεδρία. Αν και ένα αναγνωριστικό πηγής (SSRC) μια ροής RTP πρέπει να είναι μοναδικό, το στιγμιαίο «δέσιμο» των SSRC αναγνωριστικών με κάποιον συμμετέχοντα μπορεί να αλλάξει κατά τη διάρκεια της συνεδρίας. Οι αναφορές του RTCP στέλνονται από όλους τους συμμετέχοντες ακόμη και σε multicast που περιλαμβάνει χιλιάδες παραλήπτες. Αυτή η κίνηση των πακέτων αυξάνεται αναλογικά με τον αριθμό των συμμετεχόντων. Έτσι, για να αποφευχθεί η συμφόρηση το πρωτόκολλο πρέπει να χειρίζεται το bandwidth της συνεδρίας. Αυτό γίνεται δυνατό με τον δυναμικό έλεγχο της συχνότητας αποστολής των RTCP αναφορών. Το bandwidth που καταναλώνει το RTCP δεν πρέπει να υπερβαίνει το 5% του συνολικού bandwidth της συνεδρίας. Τύποι μηνυμάτων RTCP To RTCP περιλαμβάνει διάφορους τύπους πακέτων όπως sender report, receiver report, source description και το bye. Επιπροσθέτως το πρωτόκολλα είναι επεκτάσιμο και επιτρέπει ειδικά πακέτα σχετικά με την εφαρμογή. Sender Report (SR): Το πακέτο SR στέλνεται περιοδικά από τους ενεργούς αποστολείς σε μια συνεδρία για να αναφέρει στατιστικά στοιχεία σχετικά με την μετάδοση και τη λήψη των πακέτων σε ένα συγκεκριμένο διάστημα. Περιέχει ένα απόλυτο timestamp που είναι ο αριθμός των δευτερολέπτων που έχουν περάσει από τα μεσάνυχτα της 1 ης Ιανουάριου του 1900. Αυτό το timestamp επιτρέπει στον παραλήπτη να συγχρονίζει τα μηνύματα RTP. Είναι πολύ σημαντικό όταν μεταδίδονται ταυτόχρονα και ήχος και video επειδή οι ροές αυτές χρησιμοποιούν ανεξάρτητα σχετικά timestamps. Receiver Report (RR): Τα πακέτα RR στέλνονται από τους παθητικούς συμμετέχοντες, αυτούς δηλαδή που δεν στέλνουν RTP πακέτα. Η αναφορά ενημερώνει τους RTP Senders για την ποιότητα των υπηρεσιών. Source Description (SDES): Ένα μήνυμα SDES χρησιμοποιείται για να στείλει τα αναγνωριστικά των συμμετεχόντων στους υπόλοιπους συμμετέχοντες. Δικτυακή Προσομοίωση με OMNeT++ - Σεπτέμβριος 2010 Σελίδα 21
End of participation (BYE): Μια πηγή στέλνει ένα μήνυμα BYE για να κλείσει μια ροή δεδομένων. Χρησιμοποιείται από έναν συμμετέχοντα για να ανακοινώσει ότι εγκαταλείπει την συνεδρία. 2.1.4. RTSP (Real-Time Streaming Protocol) To RTSP είναι ένα πρωτόκολλο παρουσίασης πολυμέσων που βασίζεται στο μοντέλο client-server και επιτρέπει την ελεγχόμενη διανομή ροών πολυμεσικών δεδομένων μέσα από ΙΡ δίκτυα. Το RTSP είναι ένα πρωτόκολλο που λειτουργεί σε επίπεδο εφαρμογής και είναι σχεδιασμένο να συνεργάζεται με πρωτόκολλα χαμηλότερου επιπέδου όπως το RTP και το RSVP ώστε να παρέχει ολοκληρωμένες υπηρεσίες streaming μέσω του Internet. Παρέχει λειτουργικότητα απομακρυσμένου ελέγχου πάνω στις ροές ήχου και video όπως pause, fast forward, reverse κ.τ.λ. που παραπέμπουν σε λειτουργίες ενός επιτραπέζιου player πολυμέσων. Ακόμη επιτρέπει την επιλογή του καναλιού μεταφοράς όπως το UDP και το ΤCP. Λειτουργίες του RTSP Το RTSP εγκαθιδρύει και ελέγχει ροές ήχου και video ανάμεσα στους media servers και στους clients. Παρέχει τις ακόλουθες λειτουργίες : Ανάκτηση πολυμέσων από τον media server: Ο πελάτης μπορεί να ζητήσει μια περιγραφή παρουσίασης και να ζητήσει από τον server να εγκαθιδρύσει μια συνεδρία για να αποστείλει τα δεδομένα. Πρόσκληση ενός media server σε μια συνεδρία: Ο media server μπορεί να προσκληθεί σε μια συνεδρία ώστε να αναπαράγει πολυμεσικό περιεχόμενο. Προσθήκη media σε μια υπάρχουσα παρουσίαση: Ο Server ή ο client μπορούν να ειδοποιήσουν ο ένας τον άλλο για πρόσθετα πολυμεσικά δεδομένα που είναι διαθέσιμα. Ο στόχος του RTSP είναι να παρέχει τις ίδιες υπηρεσίες για streamed video και ήχο που παρέχει το HTTP για κείμενο και γραφικά. Κάθε παρουσίαση πολυμέσων αναγνωρίζεται από ένα RTSP URL. Οι λεπτομέρειες της παρουσίασης και οι ιδιότητες των πολυμέσων ορίζονται σε ένα αρχείο περιγραφής που μπορεί να ανακτηθεί από τον client μέσω http ή mail. 2.2. Routers και Συμφόρηση Ένα router είναι μια συσκευή που συνδέει δύο ή περισσότερα δίκτυα υπολογιστών και επιλεκτικά μεταφέρει πακέτα δεδομένων από το ένα δίκτυα στο Πτυχιακή Εργασία Παντελής Σταμπουλής Σελίδα 22
άλλο. Κάθε πακέτο περιέχει πληροφορίες διεύθυνσης που το router χρησιμοποιεί για να αποφασίσει αν ο αποστολέας και ο παραλήπτης βρίσκονται στο ίδιο δίκτυο ή αν το πακέτο θα πρέπει να μεταφερθεί σε διαφορετικό δίκτυο. Όταν χρησιμοποιούνται πολλά routers που ενώνουν πολλά δίκτυα, τότε τα routers ανταλλάσουν πληροφορίες ώστε το καθένα να δημιουργήσει ένα πίνακα με τα βέλτιστα δρομολόγια που πρέπει να ακολουθήσει ένα πακέτο για τον κάθε προορισμό. Ένα router είναι μια δικτυακή συσκευή που περιλαμβάνει software και hardware με σκοπό την δρομολόγηση και την προώθηση πακέτων δεδομένων. Έχει το λιγότερο δύο διαδικτυακές διεπαφές που κάθε μια μπορεί να αντιστοιχεί σε δίκτυο διαφορετικής τεχνολογίας και υποδομής. Έτσι το hardware του router περιέχει κυκλώματα που μετατρέπουν σήματα από μια μορφή σε άλλη επιτρέποντας την επικοινωνία μεταξύ διαφορετικών δικτύων καθιστώντας έτσι δυνατή την ύπαρξη του Internet [FLO05]. Έτσι, επιγραμματικά ένα router λειτουργεί σε δύο επίπεδα: Επίπεδο ελέγχου, όπου το router κατασκευάζει έναν πίνακα που ονομάζεται πίνακας δρομολόγησης και περιγράφει το πώς πρέπει να προωθηθεί ένα πακέτο και μέσω ποιας διεπαφής. Αυτός ο πίνακας μπορεί να κατασκευαστεί με στατικό τρόπο δηλώνοντας ρητά τις διαδρομές είτε με δυναμικό τρόπο μέσω κατάλληλων πρωτοκόλλων. Επίπεδο προώθησης, όπου το router στην πραγματικότητα προωθεί τα πακέτα από διεπαφές εισόδου προς τις διεπαφές εξόδου εξάγοντας πληροφορίες από τη διεύθυνση του πακέτου και από τον πίνακα δρομολόγησης. Εκτός όμως από αυτές τις βασικές λειτουργίες, ένα router πρέπει να μπορεί να χειρίζεται και την συμφόρηση, δηλαδή την κατάσταση στην οποία τα εισερχόμενα πακέτα είναι περισσότερα από αυτά που μπορεί να εξυπηρετήσει. Τρεις πολιτικές που συνήθως χρησιμοποιούνται στο internet είναι οι εξής: tail drop, random early detection (RED) και weighted random early detection (WRED). H μέθοδος tail drop είναι ένας απλός αλγόριθμος διαχείρισης ουράς που χρησιμοποιείται από τα routers στο Internet για να αποφασίσουν πότε θα απορρίψουν κάποιο πακέτο. Σε αντίθεση με πιο πολύπλοκους αλγορίθμους αυτή η μέθοδος δεν διαφοροποιεί με κανένα τρόπο την κίνηση και κάθε πακέτο αντιμετωπίζεται με ακριβώς τον ίδιο τρόπο. Όταν η ουρά έχει καλύψει τη μέγιστη χωρητικότητα της τότε κάθε νέο πακέτο που εισέρχεται στον router απορρίπτεται μέχρι να ελευθερωθεί χώρος. Αυτή η μέθοδος μπορεί να δημιουργήσει αρκετά προβλήματα στους tcp senders καθώς υπάρχει η περίπτωση να «πνιγούν» λόγω αυξημένης συμφόρησης. Και αυτό γιατί τα πακέτα ack καθυστερούν πάρα πολύ να φτάσουν στον προορισμό τους. Δικτυακή Προσομοίωση με OMNeT++ - Σεπτέμβριος 2010 Σελίδα 23
Η μέθοδος Random Early Detection (RED) είναι ένας ενεργός αλγόριθμος διαχείρισης ουράς καθώς επίσης και ένας μηχανισμός για αποφυγή της συμφόρησης (βλ. Σχ. 2.2). Στην tail drop όπως είδαμε ένα router συγκεντρώνει όσα περισσότερα πακέτα μπορεί και απλά απορρίπτει αυτά που δε χωράνε. Αν οι ουρές είναι συνεχώς γεμάτες τότε το δίκτυο υποφέρει από συμφόρηση. H tail drop δεν μοιράζει δίκαια το διαθέσιμο buffer ανάμεσα στις ροές δεδομένων και μπορεί να οδηγήσει σε πολλά προβλήματα ειδικά όσον αφορά το TCP. H RED αντιμετωπίζει αυτά τα προβλήματα: Παρακολουθεί το μέσο μέγεθος της ουράς και απορρίπτει πακέτα βασιζόμενη πάνω σε στατιστικές πιθανότητες. Αν η ουρά είναι σχεδόν άδεια τότε όλα τα πακέτα γίνονται δεκτά. Καθώς η ουρά γεμίζει η πιθανότητα να απορριφθεί ένα πακέτο αυξάνεται. Όταν η ουρά είναι γεμάτη η πιθανότητα έχει φτάσει την τιμή 1 και όλα τα πακέτα απορρίπτονται. Η RED είναι πιο δίκαιη από την tail drop με την έννοια ότι δεν αδικεί τις ροές που χρησιμοποιούν ένα μικρό τμήμα του bandwidth. Με όσο μεγαλύτερο ρυθμό μεταδίδει ένα αποστολέας τόσο μεγαλύτερη είναι η πιθανότητα να απορριφτούν τα πακέτα του. Η απλή μέθοδος RED δεν υποστηρίζει διαφοροποίηση με βάση την ποιότητα των υπηρεσιών (QoS) κάτι το οποίο κάνει η WRED που θα περιγραφεί παρακάτω. Πτυχιακή Εργασία Παντελής Σταμπουλής Σελίδα 24
Σχ. 2.2. Μέθοδος RED Η μέθοδος Weighted random early detection (WRED) αποτελεί μια επέκταση της RED. Σε αυτή μια ουρά μπορεί να έχει διάφορα κατώτατα όρια. Κάθε όριο συσχετίζεται με μια συγκεκριμένη προτεραιότητα IP ή DSCP κ.τ.λ. Για παράδειγμα μια ουρά μπορεί να έχει κατώτερα όρια για πακέτα χαμηλότερης προτεραιότητας. Με αυτό τον τρόπο τα πακέτα χαμηλότερης προτεραιότητας θα απορρίπτονται με μεγαλύτερους ρυθμούς ενώ τα άλλα πακέτα θα προστατεύονται. Όπως αναφέραμε και προηγουμένως, σήμερα υπάρχει μια ραγδαία εξάπλωση υπηρεσιών streaming multimedia στο Internet. Αυτές οι υπηρεσίες καταναλώνουν ένα μεγάλο ποσοστό του συνολικού bandwidth των δικτύων. Το πρωτόκολλο που χρησιμοποιείται κυρίως από αυτές τις υπηρεσίες για τη μεταφορά των πακέτων είναι το RTP που «τρέχει» πάνω από UDP. Το RTP όμως έχει αυστηρές απαιτήσεις όσον αφορά το χρόνο παράδοσης των πακέτων και τις καθυστερήσεις καθώς μεταφέρει δεδομένα σε πραγματικό χρόνο. Παρατηρώντας την λειτουργία του πρωτοκόλλου γίνεται εύκολα η εξής διαπίστωση. Πολλά πακέτα που ταξιδεύουν μέσω του Internet υπόκεινται σε Δικτυακή Προσομοίωση με OMNeT++ - Σεπτέμβριος 2010 Σελίδα 25
μεγάλες καθυστερήσεις με αποτέλεσμα όταν φτάσουν τελικά στον προορισμό τους να είναι άχρηστα για τους παραλήπτες. Αυτά ακριβώς τα πακέτα όσο βρίσκονται ακόμα στο στάδιο της μεταφοράς και διέρχονται από τα διάφορα routers αποτελούν μια τεράστια σπατάλη σε bandwidth καθυστερώντας άλλα πακέτα να φτάσουν στον προορισμό τους. Αυτά τα πακέτα θα έπρεπε να αναγνωρίζονται το συντομότερο δυνατό και να απορρίπτονται από τους routers. Σε αυτή ακριβώς την ιδέα βασίζεται και η παρούσα εργασία. Πιο συγκεκριμένα υλοποιήθηκε ειδικό φίλτρο το οποίο και εγκαθίσταται στους ενδιάμεσους routers ενός δικτύου. Αυτό το φίλτρο εντοπίζει τα πακέτα RTP και έχει την δυνατότητα να τα απορρίπτει αν πληρούν κάποια κριτήρια. Το σημαντικότερο κριτήριο είναι η καθυστέρηση. Όταν ένα πακέτο μιας ροής δεδομένων φτάσει σε ένα router και η καθυστέρηση του υπερβαίνει κάποιο όριο, τότε αυτό απορρίπτεται. Λεπτομέρειες σχετικά με την κατασκευή του φίλτρου και του τρόπου λειτουργίας του θα ακολουθήσουν σε επόμενο κεφάλαιο. Πρέπει πάντως να τονιστεί πως τα δεδομένα που προέκυψαν από εκτεταμένες προσομοιώσεις που διενεργήθηκαν είναι αρκετά ενθαρρυντικά ως προς την αποτελεσματικότητα του. Πτυχιακή Εργασία Παντελής Σταμπουλής Σελίδα 26
3. Εργαλεία προσομοίωσης Για την υλοποίηση της βασικής ιδέας της εργασίας και την εξακρίβωση της αποτελεσματικότητάς της με μετρήσιμα στοιχεία χρησιμοποιήθηκε η τεχνική της προσομοίωσης. Η Προσομοίωση Δικτύων είναι μια μέθοδος με την οποία δημιουργούμε το μοντέλο ενός δικτύου μέσω λογισμικού και το τροφοδοτούμε με δεδομένα εισόδου. Παρατηρώντας τα αποτελέσματα αυτών των δεδομένων πάνω στο μοντέλο μπορούμε να οδηγηθούμε σε συμπεράσματα για την λειτουργία των πραγματικών δικτύων. Θα ακολουθήσει μια περιγραφή των δικτυακών προσομοιωτών που χρησιμοποιούνται ευρέως, με σημαντικότερούς τους ns-2 και OMNeT++ v. 4.0. Ο πρώτος είναι πιο διαδεδομένος και υποστηρίζει περισσότερα πρωτόκολλα ενώ ο δεύτερος είναι ταχύτερος και με πληρέστερη τεκμηρίωση. Ειδικά για τον OMNeT++ γίνεται εκτενής αναφορά στις λειτουργίες και τα χαρακτηριστικά του καθώς είναι και το εργαλείο που χρησιμοποιήθηκε για τη διενέργεια των προσομοιώσεων και την εξαγωγή των αποτελεσμάτων. Τέλος, εφόσον μας ενδιαφέρει η προσομοίωση δικτύων στα οποία μεταφέρεται streaming video με τη βοήθεια του πρωτοκόλλου RTP, αναλύονται το είδος και τα χαρακτηριστικά των «δεδομένων» που μπορούν να χρησιμοποιηθούν για την αναπαράσταση των ροών της πολυμεσικής πληροφορίας. 3.1. Δικτυακοί προσομοιωτές [WEI08] 3.1.1. The Network Simulator - ns-2 Οι προσομοιώσεις δικτύων στον ns-2 δημιουργούνται με την βοήθεια κώδικα σε C++ ο οποίος χρησιμοποιείται για να μοντελοποιήσει τη συμπεριφορά των κόμβων του δικτύου, αλλά και της γλώσσας script OTcl που ελέγχει την προσομοίωση και καθορίζει περαιτέρω πτυχές όπως για παράδειγμα η τοπολογία του δικτύου. Αυτός ο σχεδιασμός αρχικά επιλέχθηκε για να αποφεύγονται οι άσκοπες μεταγλωττίσεις αν γινόταν κάποια αλλαγή στο δίκτυο. Το 1996 (όταν εμφανίστηκε ο ns-2 για πρώτη φορά) αυτό ήταν αρκετά σημαντικό αφού η μεταγλωττίσεις C++ κώδικα επιβράδυναν αρκετά τα συστήματα. Όμως με τα Δικτυακή Προσομοίωση με OMNeT++ - Σεπτέμβριος 2010 Σελίδα 27
σημερινά δεδομένα αυτός ο σχεδιασμός δεν θεωρείται αποδοτικός καθώς μειώνει σημαντικά την απόδοση της προσομοίωσης, γεγονός πολύ σημαντικό για προσομοιώσεις ευρείας κλίμακας με εκατοντάδες κόμβους. Ο χρήστης δεν χρειάζεται να γνωρίζει C++, εκτός αν θέλει να προσθέσει κάποιο καινούργιο πρωτόκολλο ή λειτουργία που δεν υπάρχει ήδη. Σε γενικές γραμμές τα βασικά βήματα για τη δημιουργία μιας προσομοίωσης σε ns-2 είναι τα εξής: Δημιουργία της τοπολογίας του δικτύου και ορισμός παραμέτρων Ρύθμιση της δρομολόγησης μεταξύ των κόμβων Δημιουργία συνδέσεων στο επίπεδο αναφοράς [ΠΟΙΟ ΕΙΝΑΙ ΤΟ ΕΠΙΠΕΔΟ ΑΝΑΦΟΡΑΣ; ΔΕΝ ΕΙΔΑ ΚΑΝΕΝΑΝ ΟΡΙΣΜΟ] Δημιουργία γεννητριών κινήσεως Εκτέλεση της προσομοίωσης 3.1.2. ns-3 Όπως και ο προκάτοχός του το ns-3 στηρίζεται στην C++ για την υλοποίηση των μοντέλων προσομοίωσης. Η διαφορά όμως έγκειται στο γεγονός ότι δεν χρησιμοποιεί πια την OTcl για να ελέγχει την προσομοίωση, λύνοντας έτσι αρκετά προβλήματα. Έτσι, για μια προσομοίωση μπορεί να χρησιμοποιηθεί μόνο C++ και σε μερικές περιπτώσεις και Python. Επίσης έχει πολύ καλές δυνατότητες επέκτασης και αρκετά βελτιωμένη απόδοση. 3.1.3. OMNeT++ Σε αντίθεση με τον ns-2 και ns-3, ο OMNeT++ δεν είναι μόνο δικτυακός προσομοιωτής, αλλά ένας προσομοιωτής διακεκριμένων γεγονότων γενικής χρήσης. Περισσότερο όμως χρησιμοποιείται για προσομοιώσεις δικτύων κάνοντας χρήση του πακέτου INET το οποίο περιέχει μια εκτεταμένη βιβλιοθήκη πρωτοκόλλων. Στην συνέχεια του κεφαλαίου θα ακολουθήσει μια εκτεταμένη αναφορά στον ΟΜΝeT++ και στον τρόπο λειτουργίας του. 3.1.4. JiST Μια νέα προσέγγιση στο χώρο των δικτυακών προσομοιώσεων είναι το JiST (Java in Simulation Time) που όπως είναι φανερό και από το όνομα του χρησιμοποιεί την Java για την υλοποίηση των προσομοιώσεων. Οι προσομοιώσεις στο JiST αποτελούνται από οντότητες που αναπαριστούν στοιχεία του δικτύου με τα γεγονότα της προσομοίωσης να σχηματίζονται από κλήσεις μεθόδων αυτών των οντοτήτων. Πτυχιακή Εργασία Παντελής Σταμπουλής Σελίδα 28
3.2. Ένα σύντομο εγχειρίδιο χρήσης για τον OMNeT++ 4.0 [VAR09] 3.2.1. Εισαγωγή Το ακόλουθο εγχειρίδιο έχει ως στόχο να βοηθήσει έναν σχετικά έμπειρο στα δίκτυα χρήστη να πραγματοποιήσει προσομοιώσεις σε σύντομο χρονικό διάστημα με την βοήθεια του OMNeT++. Δεν αποτελεί προσπάθεια αντικατάστασης του επίσημου manual καθώς καλύπτει μόνο βασικά στοιχεία του προσομοιωτή αλλά λειτουργεί σαν οδηγός για αυτόν. Για κάθε θέμα υπάρχει και η αναφορά προς το User Manual που υπάρχει στο Documentation του OMNeT++ (π.χ. δες section X.X.X) έτσι ώστε ο χρήστης να επιλέγει τα σημεία που θέλει να δώσει βαρύτητα και να μην χάνεται στην πληθώρα των λεπτομερειών. Το πρώτο βασικό συστατικό στοιχείο της μελέτης είναι το περιβάλλον ανάπτυξης του OMNeT++. Αυτό αποτελείται κατά βάση από το Eclispe, το help του οποίου παραθέτει όλες τις απαιτούμενες πληροφορίες για να εξοικειωθεί ο ενδιαφερόμενος αναγνώστης σε μία πρώτη προσέγγιση. Πιο συγκεκριμένα αυτά είναι το Workbench User Guide και το C/C++ Development User Guide [σελ. 3 του OMNeT++ User Guide]. Η μέθοδος μελέτης που προτείνουμε είναι η εξής: 1. Διαβάστε το παρόν εγχειρίδιο και για κάθε θέμα που σας ενδιαφέρει ακολουθήστε την παραπομπή και ανατρέξτε στο User Manual. 2. Στη συνέχεια μελετήστε το IDE User Guide διεξοδικά καθώς είναι αρκετά κατατοπιστικό με πληθώρα επεξηγηματικών εικόνων. Η μελέτη του επίσης ολοκληρώνεται σε σχετικά σύντομο χρονικό διάστημα. 3. Τέλος ακολουθήστε τις οδηγίες του TicToc tutorial που θα το βρείτε στο Documentation. Ύστερα από αυτά τα βήματα θα είστε σε θέση να δημιουργήσετε και να εκτελέσετε τις δικές σας προσομοιώσεις. Στην συνέχεια και εφόσον θέλετε να ασχοληθείτε με προσομοιώσεις δικτύων υπολογιστών είναι απαραίτητη η εγκατάσταση και η μελέτη του INET Framework. Αυτό στην ουσία αποτελεί μια βιβλιοθήκη από έτοιμα simple και compound modules που προσομοιώνουν διαδικτυακές συσκευές και πρωτόκολλα. Για την κατανόησή του προτείνουμε τα εξής βήματα: 1. Εγκατάσταση και ενασχόληση με το INET Demo. Αυτό παρέχει κάποια έτοιμα μοντέλα για πειραματισμό. 2. Μελέτη των εισαγωγικών θεμάτων του Documentation του INET. 3. Ενασχόληση με το Guided Tour που βρίσκεται στο Documentation και αποτελεί έναν οδηγό για τα βασικά στοιχεία. Δικτυακή Προσομοίωση με OMNeT++ - Σεπτέμβριος 2010 Σελίδα 29
4. Τέλος, όταν θέλουμε να δημιουργήσουμε ένα δικό μας μοντέλο και ξέρουμε ποια πρωτόκολλα πρέπει να χρησιμοποιήσουμε και ποια θα είναι η τοπολογία του, τότε μπορούμε να ανατρέχουμε στις λίστες του INET Documentation και να μελετούμε τα συγκεκριμένα modules που μας ενδιαφέρουν. 3.2.2. ΕΠΙΣΚΟΠΗΣΗ ΤΟΥ OMNeT++ Το OMNeT++ είναι ένας αντικειμενοστραφής προσομοιωτής διακεκριμένων γεγονότων (Discrete Event Simulator DES). Διαθέτει μια «γενική» αρχιτεκτονική έτσι μπορεί να χρησιμοποιηθεί σε διάφορους τομείς όπως: Μοντελοποίηση ασύρματων και ενσύρματων δικτύων επικοινωνιών Μοντελοποίηση πρωτοκόλλων Μοντελοποίηση δικτύων ουρών Μοντελοποίηση μικροεπεξεργαστών και άλλων συστημάτων hardware Γενικά μπορεί να χρησιμοποιηθεί για την προσομοίωση οποιουδήποτε συστήματος για το οποίο είναι κατάλληλη η προσέγγιση των διακεκριμένων γεγονότων και το οποίο μπορεί να αντιστοιχηθεί σε οντότητες που επικοινωνούν μεταξύ τους ανταλλάσοντας μηνύματα. 3.2.2.1. Modules Τα δομικά στοιχεία ενός μοντέλου στο OMNeT++ είναι τα modules. Τα modules θα τα χαρακτηρίζαμε ως αυτόνομες μονάδες οι οποίες επικοινωνούν με το πέρασμα μηνυμάτων. Τα ενεργά modules, αυτά δηλαδή που διαθέτουν κάποια λειτουργικότητα και τους αλγορίθμους, θα τα ονομάζουμε simple modules. Αυτά γράφονται σε C++ και χρησιμοποιούν την βιβλιοθήκη προσομοίωσης στην οποία θα αναφερθούμε εκτενώς σε επόμενο κεφάλαιο. Το σημαντικότερο που πρέπει να κατανοήσουμε για τα simple modules είναι το γεγονός ότι είναι επαναχρησιμοποιήσιμα και μπορούν να συνδυαστούν μεταξύ τους σχηματίζοντας σύνθετες οντότητες τα compound modules. Το βάθος αυτής της ιεραρχίας δεν έχει όριο. Από αυτήν την οπτική γωνία όλο το τελικό μοντέλο που θα δημιουργήσουμε είναι στην ουσία ένα compound module. Η δομή του μοντέλου περιγράφεται στην γλώσσα ΝΕD η οποία αποτελεί συστατικό μέρος του ΟMNeT++. Και τα simple και τα compound modules είναι στιγμιότυπα κάποιου τύπου module που έχει ορίσει ο χρήστης. Αυτά τα module types μπορούν να αποθηκευτούν σε ξεχωριστά αρχεία σχηματίζοντας βιβλιοθήκες που μπορούν να χρησιμοποιηθούν σε διάφορα projects. Πτυχιακή Εργασία Παντελής Σταμπουλής Σελίδα 30
3.2.2.2. Messages, gates, connections Τα modules επικοινωνούν μεταξύ τους με την ανταλλαγή μηνυμάτων (messages). Σε πραγματικές προσομοιώσεις ένα μήνυμα μπορεί να αναπαριστά π.χ. ένα πλαίσιο ή ένα πακέτο σε δίκτυο υπολογιστών. Ένα μήνυμα μπορεί να περιέχει αφηρημένα δεδομένα και στέλνεται είτε μέσα από θύρες (gates) και συνδέσεις(connections) είτε κατευθείαν στον προορισμό τους. Όταν ένα μήνυμα στέλνεται από ένα module στον εαυτό του τότε το ονομάζουμε self message. Οι θύρες (gates) είναι οι διασυνδέσεις εισόδου και εξόδου των modules. Υπάρχουν τρεις τύποι: input, output και inout. Tα μηνύματα στέλνονται έξω μέσω των output gates και φτάνουν στο module σε μια input gate. Δύο θύρες συνδέονται μεταξύ τους με μια σύνδεση (connection). Σε μια σύνδεση μπορούν να αντιστοιχηθούν τρεις παράμετροι για την ρεαλιστική μοντελοποίηση ενός δικτύου: Propagation delay Αναπαραγωγή καθυστέρησης, δηλαδή ο χρόνος που καθυστερεί ένα μήνυμα όταν ταξιδεύει διαμέσου της σύνδεσης. Bit error rate καθορίζει την πιθανότητα λάθους στη μετάδοση. Data rate ρυθμός μετάδοσης δεδομένων, καθορίζεται σε bits/sec. 3.2.2.3. Παράμετροι ( Parameters) Τα modules μπορούν να έχουν παραμέτρους. Θα χαρακτηρίζαμε τις παραμέτρους σαν μια μορφή μεταβλητών που μπορούν να χρησιμοποιηθούν για τον καθορισμό της συμπεριφοράς των simple modules και για την παραμετροποίηση της τοπολογίας του μοντέλου. Μπορούν να πάρουν αριθμητικές, αλφαριθμητικές και Boolean τιμές. 3.2.2.4. Προγραμματίζοντας τους αλγορίθμους Τα simple modules περιέχουν αλγορίθμους σε συναρτήσεις C++ οι οποίες συνδυάζονται με τις έτοιμες κλάσεις της βιβλιοθήκης προσομοίωσης. Τα αντικείμενα της προσομοίωσης, όπως modules, messages, queues, κ.α. αναπαρίστανται με έτοιμες κλάσεις που έχουν σχεδιαστεί να δουλεύουν μαζί αποτελεσματικά. 3.2.2.5. Δημιουργία και εκτέλεση προσομοίωσης Είναι σημαντικό να κατανοήσουμε πως στο OMNeT++ ένα μοντέλο αποτελείται από τα ακόλουθα συστατικά μέρη αρχεία: Αρχεία NED: περιγράφουν την δομή των modules με τις παραμέτρους, τις θύρες, κ.τ.λ. Ορισμοί μηνυμάτων (.msg files). Χρησιμοποιούνται για τον ορισμό των τύπων των μηνυμάτων και των πεδίων τους. Το ΟMNeT++ τα μεταφράζει σε κλάσεις C++. Πηγαίος κώδικας των simple modules (αρχεία.h/.cc). Δικτυακή Προσομοίωση με OMNeT++ - Σεπτέμβριος 2010 Σελίδα 31
Οι γενικές αρχές λειτουργίας του προσομοιωτή είναι οι εξής: Πρώτα τα.msg files μεταφράζονται σε κώδικα C++ και στην συνέχεια όλα τα πηγαία αρχεία μεταγλωττίζονται και συνδέονται με τον πυρήνα προσομοίωσης και την βιβλιοθήκη της διασύνδεσης χρήστη για να σχηματιστεί το εκτελέσιμο αρχείο. Στο τέλος φορτώνονται τα αρχεία.ned και διαβάζεται το αρχείο διαμόρφωσης (.ini) στο οποίο θα αναφερθούμε παρακάτω. Η προσομοίωση ξεκινά. Τα αποτελέσματα της προσομοίωσης γράφονται σε αρχεία δεδομένων (vector files, scalar files) τα οποία μπορούν να αναλυθούν με τα εργαλεία του OMNeT++ ή με κάποιο άλλο λογισμικό. 3.2.3. Η ΓΛΩΣΣΑ ΝΕD Ακολουθεί μια περιγραφή της γλώσσας ΝED και των κύριων χαρακτηριστικών της. Ο χρήστης περιγράφει την δομή του μοντέλου της προσομοίωσης με την γλώσσα NED (ΝΕtwork Description). Μας επιτρέπει να δηλώσουμε simple modules, να τα συνδέσουμε και να τα συναρμολογήσουμε σχηματίζοντας compound modules. 3.2.3.1. Simple modules (δες section 3.3) Όπως ξέρουμε τα simple modules είναι τα ενεργά συστατικά μέρη του μοντέλου και τα ορίζουμε με την δεσμευμένη λέξη simple. Ακολουθεί ένα παράδειγμα δήλωσης Simple module: simple Module_name { parameters: int x; @display( i=block/queue) gates: input in; output out; } Και ο τομέας parameters και ο τομέας gates είναι προαιρετικός. Είναι πολύ σημαντικό να προσέξουμε ότι η δήλωση ενός module στην γλώσσα NED (η οποία περιέχεται σε ένα αρχείο με κατάληξη.ned) δεν περιέχει καθόλου κώδικα για να ορίσει την λειτουργία του module. Αυτός ο κώδικας περιέχεται σε μια κλάση C++. Αρχικά το OMNeT++ ψάχνει να εντοπίσει μια κλάση με το ίδιο όνομα όπως ο τύπος NED που δηλώσαμε (στο παράδειγμα παραπάνω ως: «Module_name»). Μπορούμε Πτυχιακή Εργασία Παντελής Σταμπουλής Σελίδα 32
όμως να δηλώσουμε ρητά την κλάση η οποία περιέχει τον κώδικα του module με την ιδιότητα @class. Επίσης μπορούμε να επεκτείνουμε τις δυνατότητες μιας κλάσης δημιουργώντας υποκλάσεις από αυτήν. Μια υποκλάση της Module_name που ορίσαμε παραπάνω είναι η εξής: simple specialmodule_name extends Module_name { x = 10; } 3.2.3.2. Compound modules (δες section 3.4) Ένα compound module ομαδοποιεί άλλα modules σε μια μεγαλύτερη μονάδα, αλλά δεν έχει κώδικα C++ που να σχετίζεται με αυτό. Η συμπεριφορά του είναι το αποτέλεσμα της συνεργασίας των simple modules που το αποτελούν. Η δήλωση ενός τέτοιου module έχει την παρακάτω μορφή: module Comp_mod { types:.. parameters:. submodules :. connections:. } Τα modules που αποτελούν το compound module γράφονται κάτω από την δεσμευμένη λέξη submodules. Οι τύποι των καναλιών και των modules που χρησιμοποιούνται μόνο τοπικά μπορούν να γραφούν κάτω από το types:. Για τα κανάλια θα μιλήσουμε παρακάτω. Φυσικά και στα compound modules μπορούμε να δημιουργήσουμε άλλα modules που να κληρονομούν και να επεκτείνουν τις δυνατότητες τους με την βοήθεια του extends. Δικτυακή Προσομοίωση με OMNeT++ - Σεπτέμβριος 2010 Σελίδα 33
3.2.3.3. Kανάλια (channels) (δες section 3.5) Τα κανάλια ενσωματώνουν παραμέτρους και συμπεριφορά για τις συνδέσεις (connections). Όπως και στα simple modules έτσι και στα κανάλια υπάρχει από πίσω τους μια κλάση C++. Ένα παράδειγμα είναι το εξής: channel CustomChannel // χρειάζεται μια κλάση με το όνομα CustomChannel { }. Συνήθως δεν χρειάζεται να γράψουμε τις δικές μας κλάσεις για κανάλια γιατί χρησιμοποιούμε τις έτοιμες που μας προσφέρει το OMNeT++. Αυτές είναι : ned.idealchannel ned.delaychannel ned.dataratechannel Για τις παραμέτρους του κάθε τύπου μπορείτε να ανατρέξετε στο manual του OMNeT++. Ακολουθεί ένα παράδειγμα: channel C extends ned.dataratechannel { datarate = 100Mbps; delay = 100us; ber = 1e -10; } 3.2.3.4. Παράμετροι (δες section 3.6) Όπως είπαμε και προηγουμένως οι παράμετροι είναι μεταβλητές που ανήκουν σε ένα module. Μπορεί να είναι του τύπου int, double, bool, string και xml. Παίρνουν τις τιμές τους είτε από τα αρχεία NED, είτε από τα αρχεία διαμόρφωσης (.ini), είτε κατά τη διάρκεια της προσομοίωσης από τον χρήστη. Αν η τιμή μιας παραμέτρου οριστεί με ρητό τρόπο σε ένα αρχείο NED, τότε δεν μπορεί να αλλάξει από ένα αρχείο διαμόρφωσης. Μπορούμε επίσης να ορίσουμε μια default τιμή η οποία θα εφαρμόζεται αν δεν δοθεί τιμή στην παράμετρο με άλλο τρόπο.( = default( ). Αν ορίσουμε μια παράμετρο με τον τροποποιητή volatile, τότε η παράμετρος θα υπολογίζεται κάθε φορά που διαβάζεται. 3.2.3.5. Θύρες (Gates) (δες section 3.7) Οι θύρες είναι τα σημεία επικοινωνίας των modules. Εκτός από απλές θύρες μπορούμε να δημιουργήσουμε και gate vectors (διανύσματα από θύρες ουσιαστικά έναν μονοδιάστατο πίνακα). Το μέγεθος των διανυσμάτων μπορούμε να Πτυχιακή Εργασία Παντελής Σταμπουλής Σελίδα 34