Κατέβασμα παρουσίασης
Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε
ΔημοσίευσεΦωτινή Κορομηλάς Τροποποιήθηκε πριν 7 χρόνια
1
Σπύρος Δενάζης sdena@upatras.gr
Εργαστήρια Δικτύων Υπολογιστών Εργαστήριο 3ο : Μοντελοποίηση δικτύου πακέτων Σπύρος Δενάζης
2
Στόχοι Κίνηση πακέτων στο ΟΡΝΕΤ Γνωριμία με 2 επιπλέον εργαλεία
Μοντελοποίηση δικτύου τυχαίας τοπολογίας Δημιουργία δικών μας πακέτων και συνδέσμων. Περαιτέρω Εξοικείωση και κατανόηση της προγραμματιστικής διεπαφής (ΑΡΙ) και του περιβάλλοντος προγραμματισμού του ΟΡΝΕΤ με χρήση/κλήση έτοιμων functions της βιβλιοθήκης.
3
Σύνοψη Βασικές λειτουργίες μετάδοσης πακέτων στο ΟΡΝΕΤ
Ροές πακέτων (Επίπεδο κόμβου) Σύνδεσμοι επικοινωνίας (Επίπεδο Δικτύου) Δημιουργία δικού μας πακέτου & συνδέσμου Packet Editor Link Editor Παράδειγμα δικτύου τυχαίας τοπολογίας Διαδικασίες δρομολόγησης πακέτων και ανάθεσης διευθύνσεων προορισμού Δημιουργία δικτυακών συσκευών Εκτέλεση εξομοίωσης, συλλογή στατιστικών και σύγκριση
4
Ροές Πακέτων & Σύνδεσμοι Επικοινωνίας
Οι επικοινωνίες μεταξύ των διαφόρων αντικειμένων στο ΟΡΝΕΤ θεωρείται ότι γίνεται μέσω συνδέσεων διαφορετικών τύπων – ανάλογα το επίπεδο που βρισκόμαστε κάθε φορά Επίπεδο κόμβου (Node editor) Επίπεδο Δικτύου (Project editor) Σε επίπεδο κόμβου οι συνδέσεις ονομάζονται «Ροές Πακέτων» (Packet Streams) και συνδέουν τα δομοστοιχεία του κόμβου Σε επίπεδο Δικτύου οι συνδέσεις ονομάζονται «Σύνδεσμοι επικοινωνίας» (Links) και συνδέουν τους κόμβους του δικτύου. Ροές Πακέτων/Επίπεδο Κόμβου Σύνδεσμοι/Επίπεδο Δικτύου ΔΙΚΤΥΟ Ν1 Μ1 Ρ1 Ρ2 Μ2 Ν3 Διαδικασία Δομοστοιχείο Ν2 Κόμβος
5
Ροές Πακέτων στο ΟΡΝΕΤ Ροές πακέτων (packet streams) θεωρούνται οι φυσικές συνδέσεις μεταξύ δομοστοιχείων (modules) τα οποία είναι μέρος ενός μοντέλου κόμβου. Ροές πακέτων ορίζονται πάντα μεταξύ δύο δομοστοιχείων τα οποία και συνδέουν. Όταν αναφερόμαστε στο ένα άκρο μιας συγκεκριμένης ροής πακέτων το οποίο αντιστοιχεί στην έξοδο πακέτων από το ένα δομοστοιχείο, χρησιμοποιούμε τον όρο «ροή πακέτων εξόδου» (output streams) Ενώ όταν αναφερόμαστε στην είσοδο πακέτων στο άλλο δομοστοιχείο χρησιμοποιούμε τον όρο «ροή πακέτων εισόδου» (input streams) Άρα οι ροές πακέτων είναι διακριτές οντότητες, σχετίζονται με δομοστοιχεία και κάθε δομοστοιχείο μπορεί να έχει ένα απεριόριστο αριθμό ροών πακέτων εισόδου, όπως και εξόδου. Πηγή πακέτων Προορισμός πακέτων ροή πακέτων 1 ροή πακέτων εξόδου 1 ροή πακέτων εισόδου 1 ροή πακέτων 2
6
Αναμονή πακέτων σε μια ροή
Κάθε ροή πακέτων εμπεριέχει και μια ουρά αναμονής πακέτων η οποία σχετίζεται με την ροή εισόδου (input stream) του δομοστοιχείου προορισμού. Αυτή η ουρά αναμονής επιτρέπει την προσωρινή αποθήκευση των απεσταλμένων πακέτων έως ότου το δομοστοιχείο προορισμού να τα πάρει από την ουρά μέσω της κλήσης συνάρτησης βιβλιοθήκης op_pk_get(instrm_index). Ο πυρήνας δεν θέτει κάποιο όριο ως προς το πλήθος των πακέτων που μπορεί να αποθηκεύει η ροή των πακέτων. Τα πακέτα αποθηκεύονται με τη σειρά που προωθούνται στην κάθε ροή (FIFO – first in first out). Το δομοστοιχείο προορισμού μπορεί να ανακτήσει μόνο το πακέτο που βρίσκετε στην κεφαλή αυτής της ουράς μέσω της συνάρτησης βιβλιοθήκης op_pk_get() Είναι δυνατόν να εισάγει κάποιος και καθυστερήσεις μέσα σε μια ροή Εάν μέσα σε μια ροή πακέτων εισαγάγονται καθυστερήσεις στην μεταφορά των πακέτων τότε το πακέτο θα μεταφερθεί από τη ροή εξόδου στη ροή εισόδου μετά παρέλευση χρόνου π.χ. ΔΤ πηγή προορισμός Κάθε ροή εισόδου τοποθετεί τα πακέτα σε ουρά με τη σειρά άφιξης και τα παραδίδει στο δομοστοιχείο προορισμού μέσω της op_pk_get() η οποία καλείται μέσα από τη διαδικασία που τρέχει σε αυτό.
7
Ροές & μηνύματα διακοπών (interrupts)
ΥΠΕΝΘΥΜΙΖΕΤΑΙ ΟΤΙ: Κάθε γεγονός σε ένα μοντέλο ΣΧΕΤΙΖΕΤΑΙ πάντα με ένα συγκεκριμένο δομοστοιχείο. Κατ’ επέκταση ο πυρήνας γνωρίζει επακριβώς που πρέπει να προωθήσει το αντίστοιχο μήνυμα διακοπής που αντιστοιχεί σε αυτό το γεγονός. Εάν ένα δομοστοιχείο (τύπου processor ή queue) λειτουργεί ως πηγή σε μία ροή πακέτων μπορεί να στείλει μέσω αυτής της ροής πακέτα στο δομοστοιχείο προορισμού που αυτή συνδέει καλώντας 4 παραλλαγές της συνάρτηση βιβλιοθήκης op_pk_send (pkptr, outstrm_index). Κάθε μία από αυτές υλοποιεί την μεταφορά του πακέτου με ελαφρώς διαφοροποιημένο τρόπο, οι βασικές όμως λειτουργίες τους παραμένουν ίδιες. ΔΙΚΤΥΟ ΠΥΡΗΝΑΣ Ν1 Μ1 Ρ1 Ρ2 Μ2 Ν2 Ν3 1 2 3 4 … ν-1 ν Λίστα Γεγονότων Μηνύματα Διακοπών
8
Ροές & μηνύματα διακοπών (interrupts)
op_pk_send (pkptr, outstrm_index) Αυτός είναι ο πιο συνήθης τρόπος αποστολής πακέτων σε μια ροή πακέτων Η κλήση αυτής της συνάρτησης βιβλιοθήκης έχει σαν αποτέλεσμα τον προγραμματισμό από τον πυρήνα ενός γεγονότος τύπου «πακέτων ροής» (stream event) για το δομοστοιχείο προορισμού για να το ειδοποιήσει για την άφιξη ενός πακέτου. Ο χρόνος στον οποίο θα ενεργοποιηθεί το συγκεκριμένο γεγονός από τη λίστα των γεγονότων είναι ο τρέχων χρόνος + το χρόνο καθυστέρησης με τον οποίο επιβαρύνεται η ροή (αν έχουμε εισαγάγει επιπλέον καθυστέρηση στην μεταφορά του πακέτου)
9
Ροές & μηνύματα διακοπών (interrupts)
Λίγο πριν την ενεργοποίηση του γεγονότος το οποίο υλοποιείται με την αποστολή ενός μηνύματος διακοπής στην διαδικασία που τρέχει στο δομοστοιχείο, ο πυρήνας εισάγει το μεταφερόμενο πακέτο στην ροή εισόδου του δομοστοιχείου. Αν δεν υπάρχουν άλλα πακέτα σε αναμονή στην ουρά η διαδικασία του δομοστοιχείου προορισμού μπορεί να ανακτήσει το πακέτο μέσω της op_pk_get() Στην αντίθετη περίπτωση θα πρέπει να γίνουν πολλαπλές κλήσεις για να ανακτηθούν πρώτα τα πακέτα που είναι μπροστά στην ουρά μέχρι να ανακτηθεί και το συγκεκριμένο πακέτο. otherwise, multiple calls to this KP are required to obtain the packet. Επίσης η διαδικασία για την οποία προορίζεται το πακέτο μπορεί να επιλέξει να αγνοήσει το μήνυμα διακοπής για άφιξη πακέτου στη ροή εισόδου της και να αφήσει το πακέτο στην ουρά Σημειώστε ότι αν για κάποιο λόγο το μήνυμα διακοπής δεν μπορεί να παραδοθεί στην διαδικασία πάλι το πακέτο παίρνει τη θέση του στην ουρά εισόδου για να ανακτηθεί αργότερα.
10
Σύνδεσμοι επικοινωνίας
Σε πολλές περιπτώσεις ένα πακέτο πρέπει να μεταφερθεί από ένα δομοστοιχείο σε ένα άλλο δομοστοιχείο τα οποία όμως βρίσκονται σε διαφορετικούς κόμβους. Το OPNET χρησιμοποιεί έναν άλλο τρόπο συνδέσεων τους συνδέσμους επικοινωνίας μεταξύ κόμβων. Διακρίνουμε δύο είδη: Point-to-point (Δισημειακός σύνδεσμος) Simplex (Μονόδρομος σύνδεσμος) Duplex (Αμφίδρομος σύνδεσμος) Bus (Σύνδεσμος αρτηρίας) Για να μπορέσουμε να χρησιμοποιήσουμε/λειτουργήσουμε point-to-point συνδέσμους μεταξύ κόμβων θα πρέπει αυτοί να συνδεθούν και με τα σχετικά δομοστοιχεία μέσα στους κόμβους και συγκεκριμένα με τα δομοστοιχεία πομπός και δέκτης. Πομπός Δέκτης Σύνδεσμος/Επίπεδο Δικτύου
11
Σύνδεσμοι επικοινωνίας
Ο ορισμός των συνδέσμων επικοινωνίας γίνεται μέσω Link Editor και επιλέγεται σε επίπεδο δικτύου (Project Editor). Περίπτωση simplex point-to-point Τα ιδιοχαρακτηριστικά του συνδέσμου που σχεδιάζουμε είναι «transmitter» και «receiver» Περίπτωση duplex point-to-point Τα ιδιοχαρακτηριστικά του συνδέσμου που σχεδιάζουμε είναι «transmitter a» και «receiver a» για τον ένα κόμβο και «transmitter b» και «receiver b» για τον άλλο κόμβο που συνδέει. Link Editor Τύπος Συνδέσμου Duplex
12
Σύνδεσμοι επικοινωνίας
Για να στείλουμε πακέτα από ένα κόμβο Α σε ένα κόμβο Β ο οποίος είναι συνδεδεμένος με point-to-point σύνδεσμο αρκεί να στείλουμε το πακέτο στο σωστό δομοστοιχείο πομπός (transmitter) ο οποίος βρίσκεται στον κόμβο Α. Τότε το δομοστοιχείο πομπός παρέχει τη δυνατότητα στο κόμβο Α να μεταφέρει το πακέτο στον δομοστοιχείο-δέκτη του κόμβου Β μέσω του συνδέσμου που συνδέει τους 2 κόμβους. Ο κάθε point-to-point σύνδεσμος με τη σειρά του θεωρείται ότι αποτελείται από ένα σύνολο καναλιών επικοινωνίας μεταξύ του πομπού και του δέκτη που ενώνει. Ο αριθμός των καναλιών ενός συνδέσμου καθορίζεται από την τιμή του ιδιοχαρακτηριστικού «channel count» του Link Editor Κάθε ένα από αυτά τα κανάλια λειτουργεί ανεξάρτητα σα να είχαμε ορίσει ξεχωριστούς simplex συνδέσμους. Για να μεταδοθεί ένα πακέτο από το n-th κανάλι ενός συνδέσμου θα πρέπει ένα από τα δομοστοχεία (process ή queue) να στείλει το πακέτο στη ροή εισόδου n του δομοστοιχείου πομπός του κόμβου του. Τότε το n-th κανάλι παραδίδει το πακέτο στο δομοστοιχείο δέκτης του κόμβου προορισμού και ο οποίος στη συνέχεια το τοποθετεί στην n-th ροή εξόδου πακέτων. Πομπός Δέκτης
13
Παράδειγμα δημιουργίας τοπολογίας δικτύου
Στο παράδειγμα αυτό θα εξομοιώσουμε τη συμπεριφορά ενός δικτύου δρομολόγησης πακέτων. Ορισμός πακέτου για ανάθεση διεύθυνσης (Packet Editor) Ορισμός συνδέσμου μεταξύ κόμβων του δικτύου (Link Editor) Δημιουργία τερματικών σταθμών και ενός hub με τις αντίστοιχες διαδικασίες Βασικές αρχές λειτουργίας δρομολόγησης Απόδοση του δικτύου βάσει της απ’ άκρου εις άκρου καθυστέρηση κίνησης (end-to-end delay)
14
Παράδειγμα δημιουργίας τοπολογίας δικτύου
ΤερματικόςΣταθμός Κόμβος Hub Διασύνδεση
15
Διάγραμμα ροής εργασιών
ΑΡΧΗ Διαμόρφωση πακέτου Διαμόρφωση Συνδέσμου Δημιουργία μοντέλου κόμβου hub & Διαδικασίας δρομολόγησης Δημιουργία μοντέλου κόμβου τερματικού σταθμού & Διαδικασίας Δημιουργία Δικτύου Εκτέλεση εξομοίωσης Ανάλυση Στατιστικών ΤΕΛΟΣ
16
Δημιουργία νέου πακέτου (Packet Editor)
Τα πακέτα που θα δημιουργήσουμε για τις ανάγκες του μοντέλου μας αποτελούνται μόνο από ένα πεδίο το οποίο θα περιέχει τη διεύθυνση προορισμού. Αφού δημιουργήσουμε το νέο μορφότυπο του πακέτου αυτός ο τύπος του πακέτου θα επιλεγεί από τη γεννήτρια πακέτων που θα δημιουργήσουμε αργότερα. Για να δημιουργήσουμε ένα νέο τύπο πακέτου χρησιμοποιούμε τον Packet Format: 1. Επιλέγουμε File > New… Packet Format OK. 2. Από το παράθυρο του Packet Editor επιλέγουμε το κουμπί Create New Field 3. Με αριστερό κλικ τοποθετούμε το πεδίο στην επιφάνεια εργασίας (δεξί κλικ για απενεργοποίηση). 4. Στη συνέχεια θα πρέπει να ορίσουμε διάφορα χαρακτηριστικά σχετικά με το πεδίο του πακέτου με Δεξί κλικ πάνω στο πεδίο Edit Attributes και δίνουμε τις παρακάτω τιμές 5. File > Save με όνομα <Αρχικά>_pksw_format, Κλείνουμε τον Packet Format Editor.
17
Δημιουργία νέου συνδέσμου (Link Editor)
Στη συνέχεια θα πρέπει να διαμορφώσουμε και το σύνδεσμο(ους) που θα συνδέουν τους τερματικούς σταθμούς με τη δικτυακή συσκευή (hub). Για να δημιουργήσουμε το δικό μας τύπο συνδέσμου χρησιμοποιούμε τον Link Model: 1. Επιλέγουμε File > New… Link Model OK. 2. Επειδή ο σύνδεσμος που δημιουργούμε υποστηρίζει και τον τύπο πακέτο που φτιάξαμε, πρέπει να δώσουμε τιμές σε μια σειρά από ιδιοχαρακτηριστικά 3. File > Save με όνομα <Αρχικά>_pksw_link, Κλείνουμε τον Link Editor. File > Declare External Files …
18
Δημιουργία Μοντέλου Κόμβου (Hub)
Δημιουργείστε μέσω του Node Editor το παρακάτω σχεδιάγραμμα Επιβεβαιώστε ότι έχετε τη σωστή συνδεσιμότητα ως προς τις ροές πακέτων επιλέγοντας με δεξί κλικ πάνω στο hub Show Connectivity Δικτυακή συσκευή ΔΕΚΤΕΣ ΠΟΜΠΟΙ
19
Δημιουργία Μοντέλου Κόμβου (Hub)
Πάνω στο σχεδιάγραμμα του κόμβου χρειαζόμαστε να δώσουμε τιμές σε μία σειρά από χαρακτηριστικά κυρίως στα νέα δομοστοιχεία που χρησιμοποιούμε, δηλαδή στους πομπούς (transmitters) και στους δέκτες (receivers). Ρυθμός μετάδοσης δεδομένων καναλιού, τον τύπο του πακέτου που υποστηρίζεται κα. 1. Κρατώντας πατημένο στο πλήκτρο Shift και κάνοντας αριστερό κλικ στον κάθε πομπό επιλέγουμε όλους τους 4 πομπούς (προσοχή να μην επιλέξετε και ροές πακέτων) 2. Αφού τους έχουμε επιλέξει κάνουμε δεξί κλικ σε ένα από τα επιλεγμένα δομοστοιχεία Edit Attributes και στο παράθυρο που ανοίγει δίνουμε τις παρακάτω τιμές Παρατηρείστε ότι Ρυθμός μετάδοσης δεδομένων καναλιού σχετίζεται με αυτές του συνδέσμου που ορίσαμε προηγουμένως με τον Link Editor. Βήμα 3 Βήμα 6 Βήμα 4 Βήμα 5 ν Βήμα 7
20
Δημιουργία Διαδικασίας Δρομολόγησης κόμβου hub
Επιλέγουμε να ορίσουμε τον τύπο του κόμβου (σταθερό, κινητός κλπ) μέσω Interfaces > Node Interfaces Αυτό πλέον που απομένει είναι να ορίσουμε τη διαδικασία βάσει της οποίας θα συμπεριφέρεται ο κόμβος μας. Σώζουμε το μοντέλο μας ως <Αρχικά>_pksw_hub αλλά ΔΕΝ το κλείνουμε Ανοίγουμε τον Process Editor για να δημιουργήσουμε το διάγραμμα καταστάσεων FSM της διαδικασίας την οποία θα ενσωματώσουμε στο hub. Σύμφωνα με αυτή όταν το hub λαμβάνει ένα πακέτο, αυτό προωθείται στη ροή εξόδου η οποία είναι συνδεδεμένη με το σωστό πομπό ο οποίος με τη σειρά του το στέλνει στο αντίστοιχο κανάλι του συνδέσμου που συνδέει το hub με έναν από τους τερματικούς σταθμούς. Σε αυτή την περίπτωση η διαδικασία του hub σχετίζεται πάντα με ένα μήνυμα διακοπής τύπου ροής πακέτου, το οποίο λαμβάνει κάθε φορά που φθάνει ένα πακέτο στη ροή εισόδου του από κάποιον δέκτη με τον οποίο είναι συνδεδεμένος. Επειδή αυτό είναι το μοναδικό είδος διακοπής που έχει νόημα να λάβει η διαδικασία είναι αρκετή μία κατάσταση – μη εξαναγκασμένη - να περιγράψει το FSM καθώς και εκτελέσιμο κώδικα ο οποίος θα τρέξει κατά τη διάρκεια της μετάβασης.
21
Δημιουργία Διαδικασίας Δρομολόγησης κόμβου hub
Δημιουργούμε την παρακάτω διαδικασία Δεξί κλικ > Edit Attributes
22
Δημιουργία Διαδικασίας Δρομολόγησης κόμβου hub
#define PK_ARRVL (op_intrpt_type () == OPC_INTRPT_STRM) static void route_pk(void) { int dest_address; Packet * pkptr; pkptr = op_pk_get(op_intrpt_strm ()); op_pk_nfd_get_int32 (pkptr, "dest_address",&dest_address); op_pk_send (pkptr, dest_address); } Ανάκτηση πακέτου (pointer) που βρίσκεται στην κεφαλή της ροής πακέτου με δείκτη από τον op_intrpt_strm () Βλ. Ροές & μηνύματα διακοπών (interrupts) Argument Type Description pkptr Packet* packet-of-interest [A pointer to a packet can be obtained from many KPs, including op_pk_create_fmt(), op_pk_copy(), op_pk_get(), op_subq_pk_access(), and op_subq_pk_remove().] fd_name const char* name of the field-of-interest [This name must be a defined field within the packet’s format, or an error will occur.] value_ptr int* variable to be filled with the specified field’s value
23
Δημιουργία Διαδικασίας Δρομολόγησης κόμβου hub
Τέλος επιλέγουμε Interfaces > Process Interfaces begsim intrpt = enabled Σώζουμε το μοντέλο μας ως <Αρχικά>_pksw_hub_proc και κάνουμε τη μεταγλώττιση Επανερχόμαστε στον Node Editor και επιλέγουμε για το δομοστοιχείο hub ως διαδικασία την διαδικασία που μόλις δημιουργήσαμε (<Αρχικά>_pksw_hub_proc).
24
Δημιουργία Μοντέλου Τερματικού Σταθμού
Δημιουργείστε μέσω του Node Editor το παρακάτω σχεδιάγραμμα Τερματικού Σταθμού και σώστε ως <initials>_pksw_node Επιβεβαιώστε ότι έχετε τη σωστή συνδεσιμότητα ως προς τις ροές πακέτων επιλέγοντας με δεξί κλικ πάνω στο proc Show Connectivity ΤΕΡΜΑΤΙΚΟΣ ΣΤΑΘΜΟΣ ΔΕΚΤΗΣ Αποστολέας Πακέτων Γεννήτρια Πακέτων ΠΟΜΠΟΣ
25
Δημιουργία Μοντέλου Τερματικού Σταθμού
Πάνω στο σχεδιάγραμμα του κόμβου χρειαζόμαστε να δώσουμε τιμές σε μία σειρά από χαρακτηριστικά στα δομοστοιχεία που χρησιμοποιούμε, δηλαδή στους πομπούς (transmitters) και στους δέκτες (receivers) καθώς και στη γεννήτρια πακέτων. 1. Δεξί κλικ στο δομοστοιχείο src Edit Attributes και δίνουμε τις τιμές (ΒΗΜΑ 1) 2. Επιλέγουμε και κάνουμε δεξί κλικ στο δομοστοιχείο xmt (πομπός) Edit Attributes και στο παράθυρο που ανοίγει δίνουμε τις παρακάτω τιμές (ΒΗΜΑ 2 & 2.1) Παρατηρείστε ότι Ρυθμός μετάδοσης δεδομένων καναλιού σχετίζεται με αυτές του συνδέσμου που ορίσαμε προηγουμένως με τον Link Editor. 3. Κάνουμε το ίδιο και για το δέκτη (rcv) όπως ακριβώς στο πομπό (ΒΗΜΑ 3) Βήμα 1: src Βήμα 2: xmt Βήμα 2.1 Βήμα 3: rcv
26
Δημιουργία Μοντέλου Τερματικού Σταθμού
Όπως και στην περίπτωση του κόμβου hub επιλέγουμε να ορίσουμε τον τύπο του κόμβου (σταθερό, κινητός κλπ) μέσω Interfaces > Node Interfaces fixed = yes ενώ τα υπόλοιπα no Γενικά τα ονόματα ιδιοχαρακτηριστικών τα οποία έχουν προαχθεί φέρουν και τα ονόματα όλης της ιεραρχίας (βλ. )οπότε είναι βολικό να μπορούμε να τα μετονομάζουμε Πατώντας Rename/Merge από το νέο παράθυρο επιλέγουμε το src.Packet Interarrival Time και μετά >>. Στο πεδίο Promotion Name δίνουμε το όνομα source interarrival time OK Παρατηρήστε ότι την αλλαγή του ονόματος στη στήλη Attributes OK
27
Δημιουργία Μοντέλου Τερματικού Σταθμού
Παρατηρήστε ότι την αλλαγή του ονόματος στη στήλη Attributes Στη συνέχεια αλλάζουμε το είδος των τιμών που μπορεί να πάρει το χαρακτηριστικό αυτό σύμφωνα με το είδος των επιλογών που επιθυμούμε να χρησιμοποιήσουμε στην εξομοίωση και τα σενάρια. Επιλέγουμε source interarrival time > Edit Properties Στο παράθυρο που ανοίγει δημιουργούμε συγκεκριμένους ρυθμούς που θα χρησιμοποιήσουμε αργότερα στις εξομοιώσεις Μετά τις τιμές πατάμε ΟΚ και κλείνουμε τα παράθυρα Status = suppress
28
Δημιουργία Διαδικασίας Τερματικού Σταθμού
Αυτό πλέον που απομένει είναι να ορίσουμε τη διαδικασία βάσει της οποίας θα συμπεριφέρεται ο κόμβος μας ως προς την αποστολή των πακέτων στους άλλους τερματικούς σταθμούς. Αναθέτει στα πακέτα που δημιουργεί διευθύνσεις προορισμού και αποστέλλει τα πακέτα. Υπολογίζει τα στατιστικά που αφορούν στην καθυστέρηση από τερματικό σταθμό σε τερματικό σταθμό (E2E Delay). Ανοίγουμε τον Process Editor και δημιουργούμε το παρακάτω διάγραμμα καταστάσεων FSM της διαδικασίας την οποία θα ενσωματώσουμε στο proc. Σύμφωνα με αυτή κάθε φορά που το proc λαμβάνει ένα πακέτο πρέπει κατ’ αρχήν να αποφασίσει από πού προέρχεται το πακέτο αυτό (γεννήτρια src ή δέκτη rcv) και στη συνέχεια τι θα πρέπει να κάνει με αυτό το πακέτο. Στην περίπτωση που το πακέτο προέρχεται από τη γεννήτρια πακέτων θα πρέπει να προωθηθεί προς τον πομπό Στην περίπτωση που προέρχεται από τον δέκτη (δηλαδή από άλλο τερματικό σταθμό) θα πρέπει να υπολογιστεί η Ε2Ε delay και το αντίστοιχο στατιστικό.
29
Δημιουργία Διαδικασίας Τερματικού Σταθμού
ΠΡΟΣΟΧΗ!!! Η σειρά συνδεσιμότητας πρέπει να αντιστοιχεί στις δηλώσεις σταθερών SRC_IN_STRM 1 XMT_OUT_STRM 0 RCV_IN_STRM 0 Συνθήκη ελέγχου για περίπτωση πακέτου από src Όταν ολοκληρώσουμε τον κώδικα File > Commit & File > Close Συνθήκη ελέγχου για περίπτωση πακέτου από rcv
30
Δημιουργία Διαδικασίας Τερματικού Σταθμού
Ποιες ενέργειες (αποφάσεις) θα πρέπει να κάνει η διαδικασία μας στις δύο περιπτώσεις; 1. Τι δηλαδή γίνεται σε περίπτωση μετάδοσης πακέτου 1.1 Τυχαία επιλογή διεύθυνσης προορισμού 1.2 Εγγραφή της διεύθυνσης πεδίο του πακέτου 1.3 Αποστολή στην κατάλληλη ροή εξόδου συνδεδεμένη με τον πομπό 2. Και τι γίνεται σε περίπτωση παραλαβής πακέτου 2.1 Ανάκτηση πακέτου 2.1 Υπολογισμός χρόνου Ε2Ε 2.2 Καταστροφή πακέτου
31
Δημιουργία Διαδικασίας Τερματικού Σταθμού
Συνθήκη ελέγχου για περίπτωση πακέτου από src Συνθήκη ελέγχου για περίπτωση πακέτου από rcv
32
1.1 Επιλογή διεύθυνσης προορισμού
Επιλογή κατανομής βάσει της οποίας θα επιλέγουμε τυχαία τον κόμβο προορισμού address_dist = op_dist_load ("uniform_int", 0, 3); Ενεργοποίηση επιλεγμένης κατανομής μέσω της συνάρτησης βιβλιοθήκης op_dist_outcome (address_dist) Επιστρέφει double 1.2 Εγγραφή της διεύθυνσης στο σχετικό πεδίο του πακέτου που δημιουργήσαμε Ανάκτηση του πακέτου (pointer) που δημιουργήθηκε από τη γεννήτρια πακέτων και εστάλη στη ροή εισόδου 1 (SRC_IN_STRM) pkptr = op_pk_get (SRC_IN_STRM); Εγγραφή στο πεδίο του πακέτου που ανακτήθηκε, της τιμής διεύθυνσης που μας επέστρεψε η ενεργοποίηση της συνάρτησης κατανομής op_pk_nfd_set_int32 (pkptr, "dest_address", (int) op_dist_outcome (address_dist)); 1.2 Αποστολή πακέτου στην κατάλληλη ροή εξόδου 0 (XMT_OUT_STRM) op_pk_send (pkptr, XMT_OUT_STRM);
33
2.2 Υπολογισμός καθυστέρησης
2.1 Ανάκτηση του πακέτου (pointer) από το δέκτη rcv και εστάλη στη ροή εισόδου 0 (RCV_IN_STRM) pkptr = op_pk_get (RCV_IN_STRM); 2.2 Υπολογισμός καθυστέρησης Για να υπολογίσουμε την καθυστέρηση αρκεί να αφαιρέσουμε από τον τρέχων χρόνο της εξομοίωσης τον χρόνο δημιουργίας του πακέτου αυτού ete_delay = op_sim_time () - op_pk_creation_time_get (pkptr); Καταχώρηση της καθυστέρησης στα στατιστικά op_stat_write (ete_gsh, ete_delay); 2.3 Καταστροφή πακέτου για ελευθέρωση μνήμης op_pk_destroy (pkptr);
34
Κώδικας για τη διαδικασία του τερματικού σταθμού
/* packet stream definitions */ #define RCV_IN_STRM 0 #define SRC_IN_STRM 1 #define XMT_OUT_STRM 0 /* transition macros */ #define SRC_ARRVL (op_intrpt_type () == \ OPC_INTRPT_STRM && op_intrpt_strm () == SRC_IN_STRM) #define RCV_ARRVL (op_intrpt_type () == \ OPC_INTRPT_STRM && op_intrpt_strm () == RCV_IN_STRM) static void xmt(void) { Packet * pkptr; FIN(xmt()); pkptr = op_pk_get (SRC_IN_STRM); op_pk_nfd_set_int32 (pkptr, "dest_address", (int)op_dist_outcome (address_dist)); op_pk_send (pkptr, XMT_OUT_STRM); FOUT; } address_dist = op_dist_load ("uniform_int", 0, 3); ete_gsh = op_stat_reg ("ETE Delay", OPC_STAT_INDEX_NONE, OPC_STAT_GLOBAL); static void rcv(void) { Packet *pkptr; double ete_delay; FIN (rcv()); pkptr = op_pk_get (RCV_IN_STRM); ete_delay = op_sim_time () - op_pk_creation_time_get (pkptr); op_stat_write (ete_gsh, ete_delay); op_pk_destroy (pkptr); FOUT; }
35
Δημιουργία Δικτύου 1. Επιλέγουμε File > New… Project OK.
2. Ονομάζουμε το project <Αρχικά>_pksw_net, & το σενάριο baseline, OK. 3. Πατάμε Quit για το Startup Wizard 4. Δημιουργία Παλέτας με τα δικά μας αντικείμενα 4.1 Ανοίξτε την Object Palette από την μπάρα εργαλείων και μετά πατάμε Configure Palette… 4.2 Στο παράθυρο που ανοίγει πατάμε το Clear και στη συνέχεια πατάμε Node Models. 4.3 Συμπεριλαμβάνουμε τα αντικείμενα <initials>_pksw_hub & <initials>_pksw_node, ΟΚ. 4.4 Πάλι στο παράθυρο Configure Palette πατάμε για να επιλέξουμε Link Models <initials>_pksw_link model, OK. 4.5 Σώζουμε την παλέτα <Αρχικά>_pksw_palette
36
Δημιουργία Δικτύου 5. Στη συνέχεια θα δημιουργήσουμε ένα υποδίκτυο μέσα στο οποίο θα βάλουμε την τοπολογία μας. Επιλέγουμε το εικονίδιο subnet και το τοποθετούμε στην επιφάνεια εργασίας και το ονομάζουμε pksw1 6. Διπλό κλικ στο εικονίδιο του υποδικτύου και στην νεά επιφάνεια εργασίας δημιουργούμε την τοπολογία του σχήματος επιλέγοντας τα κατάλληλα αντικείμενα από την παλέτα μας Δημιουργήστε αυτό τον σύνδεσμο πρώτο Δημιουργήστε αυτό τον κόμβο πρώτο Δημιουργήστε αυτό τον σύνδεσμο τελευταίο Δημιουργήστε αυτό τον κόμβο τελευταίο
37
Δημιουργία Δικτύου 7. Επειδή έχουμε δημιουργήσει διάφορα επίπεδα με ροές και συνδέσμους καλό είναι να κάνουμε ένα έλεγχο ότι οι συνδέσεις έχουν πραγματοποιηθεί σωστά Επιλέγουμε Topology > Verify Links (or press Ctrl+L). Επιλέγουμε Verify links OK. Αν στο παράθυρο εμφανιστεί ένα κόκκινο Χ τότε υπάρχει λάθος στις συνδέσεις Σε αυτή την περίπτωση επιλέγουμε πάλι Topology > Verify Links και στο παράθυρο που ανοίγει διαλέγουμε την άλλη επιλογή Choose transceivers for selected links OK. Για να είναι ένας σύνδεσμος στη σωστή κατάσταση θα πρέπει επίσης να συμφωνεί ως προς τον τύπο πακέτου και τον ρυθμό μετάδοσης που έχουν τεθεί στα αντίστοιχα δομοστοιχείο transmitters και receivers.
38
Εξομοίωση & Ανάλυση Αποτελεσμάτων
Για την περισυλλογή αποτελεσμάτων για διαφορετικές τιμές του ρυθμού γέννησης και αποστολής των πακέτων, θα ακολουθήσουμε μια διαφορετική προσέγγιση σε σχέση με τα διαφορετικά σενάρια που ορίσαμε στα προηγούμενα εργαστήρια. ΒΗΜΑ 1: Επιλογή στατιστικών για περισυλλογή 1.1 Επιλογή καθολικού στατιστικού (Global Stastistics) ΕΤΕ Delay. Αυτό είναι το στατιστικό που ορίσαμε όταν κατασκευάζαμε τη διαδικασία του δομοστοιχείου proc του Τερματικού Σταθμού. Δεξί κλικ στην επιφάνεια εργασίας Choose Individual DES Statistics ETE Delay ΟΚ. 1.2 Δεξί κλικ στο σύνδεσμο που συνδέει τους κόμβους node_0 και το hub Choose Individual DES Statistics Κάτω από την επιλογή point-to-pointεπιλέγουμε και τα 2 στατιστικά utilization OK. 1.3 Σώζουμε το project <Αρχικα>_pksw_net 1.1 1.2
39
Εξομοίωση & Ανάλυση Αποτελεσμάτων
ΒΗΜΑ 2: Διαμόρφωση εξομοίωσης & εκτέλεση 2.1 Επιλογή DES > Configure/Run Discrete Event Simulation αποτέλεσμα του οποίου είναι να ανοίξει το αντίστοιχο παράθυρο. Στο σημείο αυτό θα ορίσουμε 2 διαδοχικές εξομοιώσεις όπου για την κάθε μία θα χρησιμοποιήσουμε 2 διαφορετικές τιμές για την κατανομή γέννησης των πακέτων (4, 8, 40 και 80). Για το παράδειγμά μας θα επιλέξουμε 4 και 40. 2.2 Στο παράθυρο επιλέγουμε τις τιμές που φαίνονται 2.3 Και κάνουμε κλικ στο Object Attributes. Στο νέο παράθυρο επιλέγουμε Add Add? OK
40
Εξομοίωση & Ανάλυση Αποτελεσμάτων
ΒΗΜΑ 2: Διαμόρφωση εξομοίωσης & εκτέλεση (συνέχεια) 2.4 Το παράθυρό μας έχει διαμορφωθεί όπως παρακάτω και επιλέγουμε το subnet_0.*source interarrival time που ενεργοποιεί το Enter Multiple Values και πατώντας αυτό το κουμπί εμφανίζεται το παράθυρο στο οποίο θα δώσουμε τις 2 τιμές 4, 40 ΟΚ 2.5 Επιλέγουμε Preview Simulation Set για να κάνουμε μια ανασκόπηση των 2 εξομοιώσεων που μόλις ορίσαμε Πατάμε Run για να τρέξουν οι 2 εξομοιώσεις σειριακά και να συλλέξουμε τα αποτελέσματα.
41
Εξομοίωση & Ανάλυση Αποτελεσμάτων
ΒΗΜΑ 3: Προβολή στατιστικών και ανάλυση Στο σημείο αυτό είμαστε έτοιμοι να προβάλουμε και να συγκρίνουμε τα στατιστικά ΕΤΕ Delay & unitlization μεταξύ το 2 εξοιμοιώσεων που μόλις τρέξαμε. 3.1 Δεξί κλικ στην επιφάνεια εργασίας View Results Object Statistics > pksw1 > node_0 <-> hub[0] > point-to-point και επιλέγουμε utilization <--. 3.2 Βλέπουμε ότι προβάλλονται 2 γραφικές που αντιστοιχούν στις 2 εξομοιώσεις 3.3 Κάνουμε το ίδιο και για Ε2Ε Delay επιλέγοντας το από τα Global Statistics και για να δούμε τις γραφικές δεξιά επιλέγουμε As Is και μετά Show για κάθε μια από τις 2 εξομοιώσεις
42
Εξομοίωση & Ανάλυση Αποτελεσμάτων
ΒΗΜΑ 3: Προβολή στατιστικών και ανάλυση (συνέχεια) 3.4 Τέλος μπορούμε να αλλάξουμε τη μορφή των γραφικών για να δούμε την καθυστέρηση μεμονωμένων πακέτων επιλέγοντας με δεξί κλικ πάνω στην κάθε μία γραφική Draw style > Discrete. Η γραφική αλλάζει στη διακριτή της μορφή όπως παρακάτω
Παρόμοιες παρουσιάσεις
© 2024 SlidePlayer.gr Inc.
All rights reserved.