Εργαστήριο Τηλεπικοινωνιακών Δικτύων χρησιμοποιώντας τον προσομοιωτή OMNET++ ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ Αθήνα 2015
Το Omnet++ με λίγα λόγια.. Το Omnet++ είναι ένα αντικειμενοστραφές framework προσομοίωσης ανοιχτού κώδικα, ελεύθερο για μη κερδοσκοπική χρήση Είναι object-orianted, βασισμένο σε διακριτά γεγονότα Δεν είναι από μόνο του τηλ/νιακό δίκτυο αλλά μας επιτρέπει να δημιουργούμε δικά μας Το OMNeT++ περιλαμβάνει ένα IDE βασισμένο στο περιβάλλον Eclipse Αναπτύχθηκε από το Τεχνικό Πανεπιστήμιο της Βουδαπέστης από τον Andras Varga.
Παραδείγματα χρήσης του Omnet++ Μοντελοποίηση ενσύρματων και ασύρματων δικτύων επικοινωνιών Μοντελοποίηση πρωτοκόλλων Μοντελοποίηση δικτύων ουρών Μοντελοποίηση πολυεπεξεργαστικών και κατανεμημένων hardware συστημάτων Εκτίμηση της απόδοσης πολύπλοκων λογισμικών συστημάτων
Ιεράρχηση Οντοτήτων Το Omnet++ αποτελείται από εμφωλευμένες οντότητες που επικοινωνούν στέλνοντας μηνύματα Ιεραρχικά το κορυφαίο module αποτελεί το σύστημα. Αυτό περιέχει submodules και αυτά με την σειρά τους περιέχουν άλλα submodules Η πιο απλή οντότητα που διαθέτει κάποια λειτουργικότητα και τους αλγορίθμους ονομάζεται simple module και αποτελεί μια C++ κλάση. τα simple modules είναι επαναχρησιμοποιήσιμα και μπορούν να συνδυαστούν μεταξύ τους σχηματίζοντας τα compound modules
Μηνύματα, Πύλες, Σύνδεσμοι Τα μηνύματα μπορούν να περιέχουν αφηρημένα δεδομένα ή σύνθετες δομές δεδομένων. Τα simple modules μπορούν να στείλουν σε άλλα modules ή στον εαυτό τους (self messages) και από τα μικρότερα επίπεδα δικτύου στα μεγαλύτερα (και αντίστροφα) Πύλες (gates) είναι οι είσοδοι και έξοδοι των modules στις οποίες φτάνουν (input gates) ή από τις οποίες στέλνονται (output gates) μηνύματα. Οι σύνδεσμοι (links) ενώνουν μοναδικά δύο modules του ίδιου επιπέδου
Μοντελοποίηση Μετάδοσης Δεδομένων Για την υλοποίηση δικτύων επικοινωνίας, οι σύνδεσμοι μπορούν να χρησιμοποιηθούν ως φυσικοί σύνδεσμοι μεταξύ κόμβων. Σε μια σύνδεση μπορούν να αντιστοιχηθούν παράμετροι για ρεαλιστική μοντελοποίηση ενός δικτύου, όπως data rate, propagation delay, bit error rate and packet error rate Αυτές οι παράμετροι μαζί με τους αλγορίθμους που τους αφορούν αποτελούν την δομή του διαύλου (channel) και μπορούν να παραμετροποιηθούν ανάλογα τις ανάγκες
Παράμετροι Οι μονάδες μπορούν να έχουν χαρακτηριστικά με τη μορφή παραμέτρων τα οποία ορίζονται κατά την δημιουργία ευέλικτων τοπολογιών. Έτσι υπάρχει η δυνατότητα να δημιουργηθούν στιγμιότυπα της ίδιας μονάδας. Οι παράμετροι ρυθμίζουν την συμπεριφορά των μοντέλων και κατ επέκταση των δικτύων Οι παράμετροι μπορεί να είναι : Numeric - Αριθμητικά String - Σειρές χαρακτήρων Bool - Σωστό/Λάθος XML data trees
Τύποι αρχείων στο Omnet++.ned definitions of simulation components and networks.cc,.h C++ source files of simulation components.msg message descriptions (e.g. protocol headers) that are automatically translated to C++ classes _m.cc, _m.h generated files, created from msg files during the build process.ini parameter settings and configuration options for simulations
Αναλύοντας τα αποτελέσματα Τα αρχεία αποτελεσμάτων είναι με κατάληξη.sca (scalar) ή.vec (vector). Τα αρχεία με κατάληξη.vec καταγράφουν χρονοσειρές δεδομένων, δηλαδή ζευγάρια που αποτελούνται από μια τιμή και μια χρονοσφραγίδα. Τα αρχεία με την κατάληξη.sca καταγράφουν μόνο τιμές δεδομένων ανά την προσομοίωση. Το Omnet++ προσφέρει εργαλεία για την ανάλυση των αποτελεσμάτων Τα αρχεία αποτελεσμάτων είναι line-oriented text files και μπορούν να αναλυθούν με μια ποικιλία εργαλείων όπως το Matlab, GNU R, Perl, Python and spreadsheets
Specialized Component Libraries Η ανάπτυξη και η χρησιμότητα του OMNeT++ οδήγησε στην ανάγκη να δημιουργηθούν εργαλεία τα οποία να εξειδικεύουν την προσομοίωση σε συγκεκριμένους τύπους και σχηματισμούς δικτύων. Mobility Framework -- for mobile and wireless simulations INET Framework -- for wired and wireless TCP/IP based simulations Castalia -- for wireless sensor networks MiXiM -- for mobile and wireless simulations OverSim -- for overlay and peer-to-peer networks (INET-based) Consensus Positif and MAC Simulator -- for sensor networks
Getting Started.. Ξεκινήστε τον προσομοιωτή Ανοίξτε το τερματικό και πληκτρολογήστε /local-disk/omnetpp- 4.5/ide/omnetpp
Getting Started cont.. Στην συνέχεια θα σας ζητηθεί να επιλέξετε ένα workspace της επιλογής σας Ως workspace πληκτρολογήστε την θέση : /localdisk/omnetpp-4.5/sample
Getting Started cont.. Πατήστε Χ στο Welcome Page Κάντε uncheck την επιλογή Install INET Framework όπως είναι στην εικόνα και πατήστε «ΟΚ»
Exploring the Models Αριστερά στο πλαίσιο Project Explorer έχουν φορτωθεί κάποια μοντέλα. Ανοίγουμε με δεξί click>open project το φάκελο inet Στο φάκελο src περιέχει τα components του μοντέλου (protocols, apps, etc) ενώ στο φάκελο examples περιέχονται έτοιμα παραδείγματα
Launching Simulations Ανοίγουμε το φάκελο examples>manetrouting>net80211_control Θα ασχοληθούμε με την ασύρματη επικοινωνία μη κεντρικοποιημένων δικτύων όπως είναι τα ΜΑΝΕΤ (Mobile Ad Hoc Network) ο χρήστης μπορεί να τρέξει το παράδειγμα με κάποιο πρωτόκολλο δρομολόγησης όπως το AODV, DSR, DSDV, DYMO,OLSR. Στην INET βιβλιοθήκη το AODV και DSR αναφέρονται ως AODVUU και DSRUU. Το «UU» στο τέλος αναφέρεται στο πανεπιστήμιο της Ουψάλα (Uppsala University)
Net80211_control.ned Πατάμε διπλό click στο αρχείο Net80211_control.ned Το channel control καθορίζει πληροφορίες για τη θέση και την κίνηση των κόμβων ενώ καθορίζει και το μοντέλο απωλειών (default value free space model) To configurator ρυθμίσει τις διευθύνσεις IP και τους πίνακες δρομολόγησης για το δίκτυο με σκοπό την εύρεση του συντομότερου μονοπατιού Στο δίκτυο μας υπάρχουν κινητά που στέλνουν μηνύματα (στο παράδειγμά μας στέλνουν UDP packets)
AdhocHost.ned Bλέπουμε τι βρίσκεται μέσα στους δυο κόμβους αποστολέας και παραλήπτη, χρησιμοποιείται η σύνθετη οντότητα (compound module) AdhocHost
Simulation Setup configuration from omnetpp.ini file) Επιλέγουμε το αρχείο.ini (συνήθως είναι omnetpp.ini) Από το πεδίο Form αλλάζουμε τις παρακάτω μεταβλητές Από το General sim-time-limit 200s Από το Parameters numhosts =10, numfixhosts =0.constraintAreaMaxX / Y = 500m **.udpapp[0].choosedestaddrmode = persend (για να αλλάζουμε προορισμό πακέτων με κάθε νέο πακέτο) **.udpapp[0].sendinterval = 0.01s (400 kbps) κάθε πότε θα δημιουργεί η πηγή νέο πακέτο Από το Result Recording ελέγχουμε αν είναι «τικαρισμένα» τα Enable recording of vectors & scalars
Launching Simulations Για να τρέξουμε την προσομοίωση πατάμε την επιλογή Run
Running Simulations Επιλέγουμε το Config name : DYMOUM -- "Aodv Simple test Επιλέξουμε τον τρόπο με τον οποίο θα τρέξουμε την προσομοίωσή μας Step by step - F4 Run - F5 (με βάση την ταχύτητα που έχουμε επιλέξει βλ. παρακάτω) Fast F6 Express F7 Until (ένα συγκεκριμένο event / μήνυμα που μας ενδιαφέρει) Για να σταματήσουμε την προσομοίωσή μας πατάμε το Stop F8 Για να αποθηκευτούν τα αποτελέσματά μας πρέπει να καλέσουμε την finish () (το σημαιάκι)
Running Simulations Στο κύριο παράθυρό μας τρέχει η προσομοίωση όπου μπορούμε να επιλέξουμε την ταχύτητα με την οποία θέλουμε να τρέξει Από κάτω φαίνονται τα event τα οποία πραγματοποιούνται Μπορούμε να κάνουμε διπλό click για να μπούμε μέσα σε κάποια οντότητα για να δούμε μέσα σε αυτήν τα events χαμηλότερου επιπέδου
Αναλύοντας τα αποτελέσματα Τα αποτελέσματα αποθηκεύονται στο φάκελο result εφόσον έχουμε κλείσει προηγουμένως την προσομοίωση με το finish Διπλό click για να ανοίξει κάποιο από τα αρχεία.vec ή.sca Το εργαλείο ανάλυσης των αποτελεσμάτων μετά την επεξεργασία των αποτελεσμάτων θα φτιάξει ένα αρχείο.anf το οποίο μετά μπορείτε να ξαναπροσπελάσετε για να δείτε τα αποτελέσματα.
Αναλύοντας τα αποτελέσματα Αφού έχουμε κλείσει την προσομοίωσή μας τότε πηγαίνουμε στο φάκελο results που έχει δημιουργηθεί Επιλέγουμε να ανοίξουμε το αρχείο.sca Στο παράθυρο που θα μας ανοίξει επιλέγουμε το πεδίο Browse Data (στο κάτω μέρος της καρτέλας που μας άνοιξε) για να δούμε τις μετρικές που μας ενδιαφέρουν
Μετρικές Κάποιες χαρακτηριστικές μετρικές είναι οι παρακάτω Number of Collisions Όταν δύο οι περισσότερα πακέτα διασταυρωθούν σε κάποιο μονοπάτι την ίδια στιγμή τότε προκαλούνται παρεμβολές, οι οποίες έχουν ως αποτέλεσμα κάποια από αυτά τα πακέτα να τεθούν άχρηστα. Average Throughput Αποτελεί το ποσοστό επιτυχούς παράδοσης πακέτων ανά μονάδα χρόνου πάνω σε ένα κανάλι επικοινωνίας. Μετριέται σε bit/sec. Number of received Packets Είναι ο συνολικός αριθμός των πακέτων που έλαβαν οι κόμβοι. End To End Delay Είναι ο χρόνος που χρειάζεται ένα πακέτο να φτάσει στον τελικό παραλήπτη από την στιγμή που δημιουργήθηκε στον κόμβο αποστολέα. Ο χρόνος αυτός λαμβάνει υπόψη και τους χρόνους που απαιτούνται για την αποστολή του πακέτου στους ενδιάμεσους κόμβους. Packet Loss Rate Είναι το ποσοστό απώλειας πακέτων που στάλθηκαν από τους κόμβους πηγές και δεν έφτασαν στους τελικούς παραλήπτες.
Event Log Μπορούμε να απεικονίσουμε τις αλληλεπιδράσεις σε ένα δυναμικό διάγραμμα ακολουθίας. Το διάγραμμα ακολουθίας λειτουργεί από το αρχείο καταγραφής συμβάντων (.elog) Για να ενεργοποιήσουμε το eventlog στο αρχείο.ini >Form>Event Log > Enable eventlog recording
Event Log
Importing Inet Framework Για να το κατεβάσουμε πηγαίνουμε στην ιστιοσελίδα http://inet.omnetpp.org/index.php?n=main.download Στο IDE του Omnet επιλέγουμε File>Import>General>Existing Projects into Workspace>Next Ύστερα επιλέγουμε Browse βρίσκουμε τον φάκελο που έχουμε αποσυμπιέσει το Inet και το επιλέγουμε. Τσεκάρουμε τις επιλογές Copy project into workspace και Search for nested projects Πατάμε Finish Για να ολοκληρώσουμε την διαδικασία πατάμε Ctrl+B για να κάνει build το Inet και να μπορούμε να το χρησιμοποιήσουμε Μπορείτε να βρείτε περισσότερες λεπτομέρειες στο παρακάτω video
Χρήσιμα link András Varga. OMNΕT++, Discrete Event Simulation System, Version 4.4, http://www.omnetpp.org/ INET Framework, http://inet.omnetpp.org/ Google Group omnetpp, https://groups.google.com/forum/#!forum/omnetpp OMNeT++ API Reference, http://omnetpp.org/doc/omnetpp/api/index.html C++ source documentation (Doxygen), http://inet.omnetpp.org/doc/inet/doxy/index.html OMNeT++ USER MANUAL http://omnetpp.org/doc/omnetpp/manual/usman.html#toc_1 INET Framework API http://inet.omnetpp.org/doc/inet/neddoc/index.html YouTube Video from our friend Rupam (installing Omnet++ and import a library) https://www.youtube.com/watch?v=xhklf78lbbc