A Discrete-Event Network Simulator
Tutorial

Πόροι

Στο Διαδίκτυο

Υπάρχουν διάφοροι σημαντικοί πόροι τους οποίους πρέπει να γνωρίζει κάθε χρήστης του ns-3. Ο κύριος ιστότοπος βρίσκεται στη διεύθυνση http://www.nsnam.org και παρέχει πρόσβαση σε βασικές πληροφορίες σχετικά με το σύστημα του ns-3. Λεπτομερής τεκμηρίωση είναι διαθέσιμη μέσω του κύριου ιστότοπου στη διεύθυνση http://www.nsnam.org/documentation/. Από εκεί μπορείτε επίσης να βρείτε έγγραφα που σχετίζονται με την αρχιτεκτονική του συστήματος.

Υπάρχει και ένα Wiki που λειτουργεί συμπληρωματικά ως προς τον κύριο ιστότοπο του ns-3, το οποίο θα βρείτε στη διεύθυνση http://www.nsnam.org/wiki/. Εκεί θα βρείτε και FAQ (Frequently Asked Questions, δηλαδή μια λίστα με συχνές ερωτήσεις) για χρήστες και προγραμματιστές, καθώς επίσης και οδηγούς αντιμετώπισης προβλημάτων, κώδικα που έχουν συνεισφέρει άλλοι, papers, κτλ.

Ο πηγαίος κώδικας βρίσκεται και μπορείτε να τον δείτε μέσω της διεύθυνσης http://code.nsnam.org/. Εκεί θα βρείτε και το τρέχον δέντρο ανάπτυξης στο αποθετήριο με όνομα ns-3-dev. Εκεί θα βρείτε επίσης παλιές εκδόσεις και πειραματικά αποθετήρια των βασικών προγραμματιστών του ns-3.

Mercurial

Τα πολύπλοκα συστήματα λογισμικού απαιτούν κάποιο τρόπο διαχείρισης της οργάνωσης και των αλλαγών στον βασικό τους κώδικα και στην τεκμηριώση. Υπάρχουν πολλοί τρόποι για να πραγματοποιηθεί αυτό το δύσκολο έργο, και μπορεί να έχετε ακούσει μερικά από τα συστήματα που χρησιμοποιούνται αυτή τη στιγμή για να γίνει αυτό. Το Concurrent Version System (CVS) είναι μάλλον το πιο γνωστό.

Το project του ns-3 χρησιμοποιεί το Mercurial ως σύστημα διαχείρισης του πηγαίου κώδικά του. Παρόλο που δε χρειάζεται να γνωρίζετε πολλά σχετικά με το Mercurial ώστε να ολοκληρώσετε τον παρόντα οδηγό, εμείς θα σας προτείναμε να εξοικειωθείτε με το Mercurial και να το χρησιμοποιείτε ώστε να προσπελαύνετε τον πηγαίο κώδικα. Ο ιστότοπος του Mercurial βρίσκεται στη διεύθυνση http://www.selenic.com/mercurial/, απ’ όπου μπορείτε να κατεβάσετε διάφορες εκδόσεις αυτού του Software Configuration Management (SCM) συστήματος, είτε σε εκτελέσιμη (δυαδική ή αγγλιστί binary) μορφή είτε ως πηγαίο κώδικα. Ο Selenic (ο προγραμματιστής του Mercurial) παρέχει επίσης έναν οδηγό στη διεύθυνση http://www.selenic.com/mercurial/wiki/index.cgi/Tutorial/, και έναν πιο σύντομο οδηγό στη διεύθυνση http://www.selenic.com/mercurial/wiki/index.cgi/QuickStart/.

Μπορείτε να βρείτε επίσης σημαντικές πληροφορίες σχετικά με τη χρήση του Mercurial και του ns-3 στον κύριο ιστότοπο του ns-3.

Waf

Μόλις κατεβάσετε τον πηγαίο κώδικα στο σύστημά σας, θα χρειαστεί να μεταγλωττίσετε αυτόν τον πηγαίο κώδικα για να παράξετε χρήσιμα προγράμματα. Όπως και στην περίπτωση της διαχείρισης του πηγαίου κώδικα, υπάρχουν πολλά διαθέσιμα εργαλεία για να εκτελεστεί αυτή η λειτουργία. Πιθανώς το πιο γνωστό από αυτά τα εργαλεία να είναι το make. Εκτός του ότι είναι το πιο γνωστό, το make είναι μάλλον και το πιο δύσχρηστο για ένα μεγάλο και πολύ παραμετροποιήσιμο σύστημα. Λόγω αυτού, έχουν αναπτυχθεί πολλά εναλλακτικά εργαλεία/συστήματα. Πρόσφατα, μάλιστα, τέτοια συστήματα αναπτύχθηκαν με χρήση της γλώσσας Python.

Το σύστημα build (κατασκευής) Waf χρησιμοποιείται για το project του ns-3. Είναι ένα σύστημα από τη νέα γενιά συστημάτων build που βασίζονται στην Python. Δε θα χρειαστεί να γνωρίζετε κάτι από Python για να κάνετε build το υπάρχον ns-3 σύστημα.

Για όσους ενδιαφέρονται για τις βαθύτερες λεπτομέρειες του Waf, ο κύριος ιστότοπός του μπορεί να βρεθεί στη διεύθυνση http://code.google.com/p/waf/.

Περιβάλλον Ανάπτυξης

Όπως αναφέρθηκε και παραπάνω, η συγγραφή στον ns-3 γίνεται σε C++ ή Python. Το μεγαλύτερο μέρος του API του ns-3 είναι διαθέσιμο σε Python, αλλά σε κάθε περίπτωση τα μοντέλα είναι γραμμένα σε C++. Η έμπρακτη γνώση της C++ και εννοιών αντικειμενοστραφούς προγραμματισμού θεωρείται δεδομένη για το παρόν έγγραφο. Θα αφιερώνουμε λίγο χρόνο για κάνουμε μια ανασκόπηση κάποιων από τις πιο προχωρημένες έννοιες ή πιθανότατα κάποιων άγνωστων χαρακτηριστικών της γλώσσας, ιδιωμάτων και σχεδιαστικών προτύπων όταν αυτά θα προκύπτουν. Παρόλ’ αυτά, δε θέλουμε αυτός ο οδηγός να καταλήξει να είναι οδηγός της C++, οπότε περιμένουμε από εσάς να είστε σε θέση να χρησιμοποιείτε τη γλώσσα σε ένα βασικό επίπεδο. Υπάρχει ένας απίστευτος αριθμός από πηγές πληροφοριών σχετικά με τη C++ που είναι διαθέσιμες στο διαδίκτυο ή σε έντυπη μορφή.

Αν ξεκινάτε τώρα με τη C++, ίσως θελήσετε να βρείτε έναν οδηγό ή ένα βιβλίο με «γρήγορες συμβουλές» ή έναν ιστότοπο, και να εξασκηθείτε τουλάχιστον στα βασικά χαρακτηριστικά της γλώσσας, πριν να προχωρήσετε. Για παράδειγμα, μπορείτε να δείτε αυτόν τον οδηγό.

Το σύστημα του ns-3 χρησιμοποιεί διάφορα μέρη από την «εργαλειοθήκη» του GNU για προγραμματισμό. Μια εργαλειοθήκη λογισμικού είναι ένα σύνολο από προγραμματιστικά εργαλεία που είναι διαθέσιμα σε ένα δεδομένο περιβάλλον. Για μια γρήγορη επισκόπηση του τι περιλαμβάνει η εργαλειοθήκη του GNU δείτε στη διεύθυνση http://en.wikipedia.org/wiki/GNU_toolchain. Ο ns-3 χρησιμοποιεί τα gcc, GNU binutils, και gdb. Ωστόσο, δε χρησιμοποιούμε τα εργαλεία κατασκευής συστήματος του GNU, ούτε το make ούτε το autotools. Εμείς χρησιμοποιούμε το Waf για αυτές τις λειτουργίες.

Τυπικά, ένας προγραμματιστής του ns-3 θα εργαστεί σε κάποιο περιβάλλον Linux ή παρόμοιο με Linux. Για εκείνους που εργάζονται σε Windows, υπάρχουν περιβάλλοντα που προσομοιώνουν το περιβάλλον του Linux σε διάφορες βαθμίδες. Το project του ns-3 έχει υποστηρίξει στο παρελθόν (αλλά δεν υποστηρίζει πλέον) τον προγραμματισμό στο περιβάλλον του Cygwin για αυτούς τους χρήστες. Δείτε στη διεύθυνση http://www.cygwin.com/ για λεπτομέρειες σχετικά με τη λήψη του, και επισκεφθείτε το wiki του ns-3 για περισσότερες πληροφορίες πάνω στο Cygwin και στον ns-3. Το MinGW δεν υποστηρίζεται επίσημα αυτή τη στιγμή. Μια άλλη εναλλακτική για το Cygwin είναι η εγκατάσταση ενός περιβάλλοντος εικονικών μηχανών, όπως είναι ο εξυπηρετητής VMware και η εγκατάσταση μια εικονικής μηχανής Linux.

Προγραμματισμός Sockets

Στα παραδείγματα που παρουσιάζονται σε αυτόν τον οδηγό θα θεωρήσουμε ότι έχετε κάποια βασική ευχέρεια με το Berkeley Sockets API. Αν δε γνωρίζετε κάτι σχετικά με τα sockets, θα συνιστούσαμε να ανατρέξετε στο API και σε κάποια τυπικά παραδείγματα χρήσης. Για μια καλή επισκόπηση του προγραμματισμού για TCP/IP sockets συνιστούμε το TCP/IP Sockets in C, Donahoo and Calvert.

Υπάρχει ένας αντίστοιχος ιστότοπος που περιλαμβάνει τον πηγαίο κώδικα από τα παραδείγματα στο βιβλίο, τον οποίο μπορείτε να βρείτε εδώ: http://cs.baylor.edu/~donahoo/practical/CSockets/.

Εάν καταλάβετε τα πρώτα τέσσερα κεφάλαια αυτού του βιβλίου (ή για όσους δεν έχουν πρόσβαση σε κάποιο αντίτυπο του βιβλίο, εάν κατανοήσετε τους πελάτες και εξυπηρετητές echo που αναφέρονται στον παραπάνω ιστότοπο), τότε θα είστε σε καλή θέση ώστε να καταλάβετε και τον οδηγό. Υπάρχει ένα παρόμοιο βιβλίο πάνω στα Multicast Sockets, το Multicast Sockets των Makofske και Almeroth, το οποίο καλύπτει υλικό που ίσως πρέπει να κατανοήσετε, εάν θέλετε να δείτε και τα παραδείγματα αναφορικά με τα multicast μέσα στη διανομή.

Table Of Contents

Previous topic

Εισαγωγή

Next topic

Ξεκινώντας

This Page