Ασύρματες Κινητές Επικοινωνίες Ενότητα 6: Worldwide Interoperability for Microwave Access (WiMAX) Μιχάλας Άγγελος Τμήμα Μηχανικών Πληροφορικής ΤΕ
Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. 2
Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα του ΤΕΙ Δυτικής Μακεδονίας και της Ανώτατης Εκκλησιαστικής Ακαδημίας Θεσσαλονίκης» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 3
WiMAX
Σκοποί ενότητας Σε αυτή την ενότητα εξετάζουμε τη λειτουργικότητα ενός μητροπολιτικού δικτύου IEEE 802.16 (WiMAX). Συγκεκριμένα, θα μελετούμε τις επιπτώσεις που έχουν κάποιες τεχνικές διαμόρφωσης στην απόδοση της τεχνολογίας WiMAX. 5
Περιεχόμενα ενότητας (1/3) Σενάριο προσομοίωσης. Αρχεία κεφαλίδας. Η συνάρτηση main. Δημιουργία των κόμβων του δικτύου. Δημιουργία των συσκευών WiMAX. Προσθήκη επιπλέον χαρακτηριστικών στις συσκευές WiMAX. 6
Περιεχόμενα ενότητας (2/3) Καθορισμός διευθύνσεων Internet Protocol (IP). Ορισμός της θέσης των κόμβων. User Datagram protocol (UDP) server και UDP client. Καθορισμός χαρακτηριστικών ζεύξης καθόδου. Καθορισμός χαρακτηριστικών ζεύξης ανόδου. 7
Περιεχόμενα ενότητας (3/3) Διάρκεια προσομοίωσης. Ασκήσεις. 8
Σενάριο προσομοίωσης Το ασύρματο δίκτυο που εξετάζουμε αποτελείται από 3 κόμβους. 1 σταθμό βάσης (base station - bs) και 2 σταθμούς συνδρομητή (subscriber station - ss). O σταθμός συνδρομητή 0 στέλνει πακέτα στο σταθμό συνδρομητή 1. 9
Αρχεία κεφαλίδας Εισάγουμε τα απαραίτητα αρχεία κεφαλίδας (header files) και καθορίζουμε το namespace που θα χρησιμοποιηθεί. #include "ns3/core-module.h" #include "ns3/network-module.h" #include "ns3/applications-module.h" #include "ns3/mobility-module.h" #include "ns3/config-store-module.h" #include "ns3/wimax-module.h" #include "ns3/internet-module.h" #include "ns3/global-route-manager.h" #include "ns3/ipcs-classifier-record.h" #include "ns3/service-flow.h" #include <iostream> #include "ns3/netanim-module.h" NS_LOG_COMPONENT_DEFINE ("Lab6"); using namespace ns3; 10
Η συνάρτηση main Δηλώνουμε τη συνάρτηση main. Δημιουργούμε ένα αντικείμενο χρονοπρογραμματιστή που θα χρησιμοποιήσουμε στη συνέχεια. Ενεργοποιούμε την τύπωση μηνυμάτων για την κίνηση που θα στέλνουμε. Θα τυπώνονται στο τερματικό μηνύματα που αφορούν την εφαρμογή (UdpClient - UdpServer). int main (int argc, char *argv[]){ WimaxHelper::SchedulerType scheduler = WimaxHelper::SCHED_TYPE_SIMPLE; LogComponentEnable ("UdpClient", LOG_LEVEL_INFO); LogComponentEnable ("UdpServer, LOG_LEVEL_INFO); 11
Δημιουργία των κόμβων του δικτύου Δημιουργούμε τους κόμβους του δικτύου. 1 σταθμός βάσης. 2 σταθμούς συνδρομητή. NodeContainer ssnodes; NodeContainer bsnodes; ssnodes.create (2); bsnodes.create (1); 12
Δημιουργία των συσκευών WiMAX Δημιουργούμε τις συσκευές WiMAX. Καθορίζουμε: Τον τύπο της συσκευής Την πολυπλεξία του Φυσικού επιπέδου Τον χρονοπρογραμματιστή που θα χρησιμοποιείται για τα Subscribe Station (ss) και το Base Station (bs), αντίστοιχα. WimaxHelper wimax; NetDeviceContainer ssdevs, bsdevs; ssdevs = wimax.install (ssnodes, WimaxHelper::DEVICE_TYPE_SUBS RIBER_STATION, WimaxHelper::SIMPLE_PHY_TYPE_OF DM, scheduler); bsdevs = wimax.install (bsnodes, WimaxHelper::DEVICE_TYPE_BASE_ST ATION, WimaxHelper::SIMPLE_PHY_TYPE_ FDM, scheduler); 13
Προσθήκη επιπλέον χαρακτηριστικών στις συσκευές WiMAX (1/2) Προσθέτουμε επιπλέον χαρακτηριστικά στις συσκευές των συνδρομητών χρησιμοποιώντας της κλάση SubscriberStationNetDevice. Ορίζουμε την τεχνική διαμόρφωσης του Φυσικού επιπέδου. Ptr<SubscriberStationNetDevice> ss[2]; for (int i = 0; i < 2; i++) { ss[i] = ssdevs.get (i)-> GetObject<SubscriberStationNetDevice> (); ss[i]->setmodulationtype (WimaxPhy::MODULATION_TYPE_QAM64_34); } 14
Προσθήκη επιπλέον χαρακτηριστικών στις συσκευές WiMAX (2/2) Προσθέτουμε επιπλέον χαρακτηριστικά στη συσκευή του σταθμού βάσης χρησιμοποιώντας τη κλάση BaseStationNetDevice. Ptr<BaseStationNetDevice> bs; bs = bsdevs.get (0)-> GetObject<BaseStationNetDevice> (); 15
Καθορισμός διευθύνσεων IP Εγκαθιστούμε τη στοίβα πρωτοκόλλων Transmission Control Protocol (TCP) κι ορίζουμε τις IP διευθύνσεις των κόμβων. InternetStackHelper stack; stack.install (bsnodes); stack.install (ssnodes); Ipv4AddressHelper address; address.setbase ("10.1.7.0", "255.255.255.0"); Ipv4InterfaceContainer SSinterfaces = address.assign (ssdevs); Ipv4InterfaceContainer BSinterface = address.assign (bsdevs); 16
Ορισμός της θέσης των κόμβων Θέτουμε τις θέσεις των κόμβων στο δίκτυο μας. Ορίζουμε ως μοντέλο κινητικότητας το ConstantPositionMobility Model. Οι κόμβοι μας θα είναι σταθεροί στις θέσεις τους και δεν θα κινούνται στο χώρο. Ptr<ListPositionAllocator> positionalloc = CreateObject <ListPositionAllocator> (); positionalloc->add (Vector(15, 25, 0)); positionalloc->add (Vector(25, 15, 0)); positionalloc->add (Vector(5, 15, 0)); MobilityHelper bs_mobility; bs_mobility.setmobilitymodel("ns3:: ConstantPositionMobilityModel"); bs_mobility.setpositionallocator (positionalloc); bs_mobility.install(bsnodes); bs_mobility.install(ssnodes); 17
UDP server και UDP client (1/2) Θέτουμε το σταθμό συνδρομητή 0 ως server και το σταθμό συνδρομητή 1 ως client. UdpServerHelper udpserver; ApplicationContainer serverapps; UdpClientHelper udpclient; ApplicationContainer clientapps; udpserver = UdpServerHelper (22000); serverapps = udpserver.install (ssnodes.get (0)); serverapps.start (Seconds (4.0)); serverapps.stop (Seconds (10.0)); 18
UDP server και UDP client (2/2) Θέτουμε το σταθμό συνδρομητή 0 ως server και το σταθμό συνδρομητή 1 ως client (συνέχεια). udpclient=udpclienthelper(ssinterfaces.getaddress (0), 22000); udpclient.setattribute ("MaxPackets", UintegerValue (15000)); udpclient.setattribute ("Interval", TimeValue (Seconds (0.1))); udpclient.setattribute ("PacketSize", UintegerValue (512)); clientapps = udpclient.install (ssnodes.get (1)); clientapps.start (Seconds (5.0)); clientapps.stop (Seconds (9.5)); Simulator::Stop (Seconds (15.0)); 19
Καθορισμός χαρακτηριστικών ζεύξης καθόδου Καθορισμός χαρακτηριστικών για τη ζεύξη καθόδου του σταθμού συνδρομητή 0 που θα λαμβάνει δεδομένα. IpcsClassifierRecord DlClassifierUgs (Ipv4Address ("0.0.0.0"), Ipv4Mask ("0.0.0.0"), SSinterfaces.GetAddress (0), Ipv4Mask ("255.255.255.255"), 0, 65000, 22000, 22000, 17, 1); ServiceFlow DlServiceFlowUgs = wimax.createserviceflow (ServiceFlow::SF_DIRECTION_DOWN, ServiceFlow::SF_TYPE_RTPS, DlClassifierUgs); ss[0]->addserviceflow (DlServiceFlowUgs); 20
Καθορισμός χαρακτηριστικών ζεύξης ανόδου Καθορισμός χαρακτηριστικών για τη ζεύξη ανόδου του σταθμού συνδρομητή 1 που θα στέλνει δεδομένα. IpcsClassifierRecord UlClassifierUgs (SSinterfaces.GetAddress (1), Ipv4Mask ("255.255.255.255"), Ipv4Address ("0.0.0.0"), Ipv4Mask ("0.0.0.0"), 0, 65000, 22000, 22000, 17, 1); ServiceFlow UlServiceFlowUgs = wimax.createserviceflow (ServiceFlow::SF_DIRECTION_UP, ServiceFlow::SF_TYPE_RTPS, UlClassifierUgs); ss[1]->addserviceflow (UlServiceFlowUgs); 21
Διάρκεια προσομοίωσης Δηλώνουμε τη διάρκεια της προσομοίωσης και το αρχείο που θα χρησιμοποιήσουμε για το Network Animator. AnimationInterface anim("lab6.xml"); Simulator::Run (); Simulator::Destroy (); return 0; } Αποθηκεύουμε τον κώδικα σε ένα αρχείο με όνομα lab6.cc στην τοποθεσία ns-allinone-3.**/ns- 3.**/scratch κι εκτελούμε την προσομοίωσή μας. 22
Απεικόνιση της προσομοίωσης με το NetAnim Ανοίγουμε το αρχείο lab6.xml με το NetAnim. Εικόνα 1. Απεικόνιση της προσομοίωσης από το NetAnim, εμφάνιση μετά την εγκατάσταση του προγράμματος ns-3, ελεύθερο λογισμικό, με άδεια GNU GPLv2 license, διαθέσιμο στο κοινό για έρευνα, ανάπτυξη και χρήση. 23
Ασκήσεις (1/4) 1. Εκτελέστε την προσομοίωση και υπολογίστε με το χέρι. a. Τη ρυθμαπόδοση (throughput). b. Τη χρονική καθυστέρηση (delay). c. Τη μεταβλητότητα της χρονικής καθυστέρησης (jitter). d. Τις απώλειες πακέτων (packet loss). 24
Ασκήσεις (2/4) Διευκρίνιση: Το jitter υπολογίζεται για κάθε ζεύγος διαδοχικών πακέτων i και j με τον παρακάτω τύπο: D(i,j)=(Rj-Ri)-(Sj-Si)=(Rj-Sj)-(Ri-Si), όπου: Rj,i: Ο χρόνος που παραλήφθηκαν τα πακέτα j και i, αντίστοιχα. Sj,i: Ο χρόνος που εστάλησαν τα πακέτα j και i, αντίστοιχα. 25
Ασκήσεις (3/4) 2. Παραμετροποιείστε τον client ώστε να στέλνει κίνηση 10 Mbps ρυθμίζοντας κατάλληλα το interval. a. Εμφανίστε την τοπολογία στο NetAnim. b. Χρησιμοποιώντας το αρχείο awk, καταγράψτε τα αποτελέσματα. 3. Αλλάξτε την τεχνική διαμόρφωσης σε QAM16_34. a. Χρησιμοποιώντας το αρχείο awk, καταγράψτε πάλι τα αποτελέσματα. Δώστε μία σύντομη εξήγηση. 26
Ασκήσεις (4/4) 4. Επαναφέρετε το interval στην αρχική του τιμή. Προσθέστε άλλους δύο clients ώστε να έχετε συνολικά 3 ss clients, οι οποίοι να στέλνουν δεδομένα στον server. a. Χρησιμοποιώντας το αρχείο awk, καταγράψτε πάλι τα αποτελέσματα. 27
Βιβλιογραφία 1. Βασικές Αρχές Ασύρματης Επικοινωνίας, David Tse, Pramod Viswanath, Εκδόσεις Κλειδάριθμος. 2. ΔΙΚΤΥΑ ΚΙΝΗΤΩΝ & ΠΡΟΣΩΠΙΚΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ, Θεολόγου Μ., Εκδοτικός Οίκος: ΤΖΙΟΛΑ Έτος έκδοσης: 2007 ISBN: 978-960-418-126-1. 3. Εισαγωγή στα ασύρματα συστήματα, Black, Dipiazza, Ferguson. 4. Συστήματα Κινητών Επικοινωνιών, Κανάτας Αθανάσιος, Κωνσταντίνου Φίλιππος, Πάντος Γεώργιος. 28
Τέλος Ενότητας