Klient-Server komunikácia

Kľúčové úlohy:

  • Aplikačná vrstva
  • TCP/IP protokol (ISO-OSI)
  • Komunikačné kanály a NIC (P2P, CSMA, Wifi)
  • Spúšťanie s parameterami simulácie cez príkazový riadok.
  • Vizualizácia

Čerpanie informácii zo zdrojových kódov: examples/tutorial/first.cc second.cc third.cc

Vytvorte komunikáciu medzi 2 uzlami.

Komunikácia v simulácii začína na Aplikačnej vrstve (viď obr.App2App) prechádza cez jednotlivé nižšie vrstvy ISO OSI až na Fyzickú úroveň. Prenos je následne simulovaný fyzikálnymi modelmi s parametrami ako vzdialenosť, výška, frekvencia … pre výpočet ďalších parametrov ako útlm, oneskorenie, …
V simulácii sa z toho vypočíta či je prenos úspešný alebo nie. Ak áno nastáva rozbaľovanie/dekódovanie správ v opačnom smere ISO OSI, a teda L1 až L7.
App2App

Treba si uvedomiť aj fyzickú skutočnosť – koncept NS3. Základný stavebný prvok je Uzol – Entita/nositeľ vlastností, čo je napr. PC, mobil…
Na uzol sa inštalujú sieťové zariadenia tzv. NIC (môže ich byť viac). NIC medzi sebou komunikujú na L1 vrstve v kanály (channel). Sú 3 základné typy kanálov, ktoré sa navzájom neovplyvňujú CSMA, P2P a Wifi.
Na jednotlivé NIC sa inštalujú jednotlivé vrstvy ISO OSI. Inštalácia prebieha vo forme konfigurácii parametrov.
Tieto konfigurácie môžeme rôzne pozmeniť a následne inštalovať na iné uzly/zariadenia/protokoly…
Nastavovanie (napr. mobility r.44) má vo všeobecnosti tvar („nazov ns3 triedy/podtriedy“, „nazov atributu“, hodnota, „nazov atributu“, hodnota …). Niektoré sa nastavújú priamo r.145. Alebo sa používajú statické volania konfigurácie Config::Set…(„cesta/názov triedy/podtriedy/atributu“,hodnota), ale to neskôr.

Aplikácie a použitie:

BulkSendApplication — vytváranie a posielanie dát hneď tak rýchlo, ako sa uvoľní zasobník; hlavne pre TCP socket-y.
OnOffApplication — všeobecné posielanie; CBR – Constant Bit Rate, VBR – Variable Bit Rate
PacketSink — complement pre OnOffAplication; vhodné aj pre detekciu príchodu správ napr. ICMP.
UdpClientServer, UdpEcho — generátor UDP spáv s odozvou-ozvenou.
ThreeGppHttpClientServer — generuje http správy, vhodne pre modelovanie internetu.
Internetové aplikácie:
DHCPv4Client / Server
Ping6
V4Ping — generuje ICMP správu a následne čaká na odpoveď, pričom počíta RTT.
Radvd
ďalšie 3rd: DNS …
Všetky vyššie uvedené majú pomocníkov v NS3 pre ľahšiu prácu (napr. UdpEchoClientHelper, UdpEchoServerHelper, OnOffHelper, V4pingHelper, PacketSinkHelper, PacketSocketHelper …), ikeď by sa dali použiť priamo vytváranie objektov cez tzv. „smart pointer“ <PTR> Socket a Packet.

Sieťová vrstva a transportná vrstva

V NS3 je možné niektoré časti simulácie vypustiť z dôvodu zjednodušenia, nakoľko tieto vrstvy budú komentované podrobnejšie neskôr. Použijú sa pomocníci pre inštaláciu konfigurácie InternetStackHelper (agregátor IP/TCP/UDP funkcionality – konfigurácia sa inštaluje na uzly a nie zariadenia!), Ipv4AddressHelper pre automatické nastavenie siete jednotlivým zariadeniam v NIC kontajnery a Ipv4InterfaceContainer pre pridelenie IP adries. Rozdistibuovanie informácii o sieťach

Komunikačné kanály

NS3 rozlišuje hlavne 3 druhy komunikačných kanálov:

  1. PointToPoint (P2P, al. PPP), reprezentujúce rozhrania RS-232, RS-422, ADSL s full-duplex komunikáciou bez handshaking-u. Špecialitou protokolu je nesegmetácia údajov a možnosť prepojenia iba dvoch zariadení na linke, médium zdieľajú iba tieto zariadenia.
  2. CSMA, reprezentuje zbernicové rozhrania typicky ethernet-ové 802.3. Tento model zjednodušuje skutočné ethernet-ové siete. Detekcia kolízii nie je implementovaná, a teda ani „zápcha balíkov“ v médiu, ktoré má 3 stavy IDLE, TRANSMITTING, PROPAGATING. V príklade second.cc je vidieť odchyt balíkov z uzla, ktorému nie je určená komunikácia. Médium je zdieľané tými zariadeniami na ktoré sú pripojené naň.
  3. Wifi, reprezentuje pripojenie špecifické pre zdieľané médium vzduch, a teda všetci zdieľajú médium pokiaľ sú v dosahu a majú rovnakú frekvenciu, 802.11. Existujú aj ďalšie špecifické triedy ako Wave a LrWpan(802.15.4), WiMax, Lte … s použitím špeciálnej triedy/framework-u SpectrumWifiPhy je možné simulovať aj koexistenciu, a teda ovplyvňovanie kanálu.

Kód cv24.02.21-15,13,10

Na prezretie komunikácie použite aplikácie:

    • wireshark a vytvorený súbor *.pcap
      netanim a vytvorený súbor *.xml
  • .

    Komentár ku C++ kódu uvedeného dolu:

    r.1-9 sú knižnice nutné k spusteniu. Vo väčšine majú tvar „ns3/nazov-modulu.h“, všetky predzostavené moduly sa vypisujú za každým úspešným zostavením projektu. Tie ostatné knižnice sú čiastkové a určite sa nachádzajú v niektorom module, ale IDE si ich tam vie doplniť samo.
    Napr. yans-wifi-helper a ssid budu spoločne aj s ostatnými v wifi-module
    r.12 je špeciálny deklaratívny riadok pre použitie záznamových makier NS_LOG… Tie sa prednostne používajú namiesto std::cout a cerr.

    r.15-17 definujú premenné pre vstupné parametre príkazové riadka, ktorý sa získava pomocou objektu cmd na nasledovných r.19-23

    Vytvoríme si n-uzlov pre serverovú časť LAN, m-uzlov pre WIFI časť a 2 uzly pre sieť prepájajúcu serverovú a wifi časť. t.j. n a m sú parametre pre príkazový riadok. Potrebujeme ešte kontajnery pre medzi siete a p2p linku.
    r.26-41. Na týchto riadkoch si definujeme kontajnery ako logické celky. Uzly ktorým budeme prideľovať podobné vlastnosti. Napríklad inštalácia wifi, byť spoločne v podsieti (teraz tým nemyslíme VLAN) … Tiež im môžeme prideliť identifikátory – mená, pre skrátené a jasnejšie písanie kódu neskôr. Vrámci L1 vrstvy definujeme aj pohyb a umiestnenie (r.43-61), kde na r.56 môžete vidieť prvé (ne)použitie identifikátora/pomenovania.

    od r. 63 nastavujeme L2 vrstvy ISO OSI (NIC, kanál) t.j. CSMA, P2P linky. Na r.86 je definovanie L2 pre wifi, je to jedna z tried definujúca správanie. Tu môžeme nastaviť aj parametre alebo ich opomenúť, necháme to na prednastavenej inicializácii.

    Nastavíme si sieťovú vrstvu.
    Ipv4GlobalRoutingHelper::PopulateRoutingTables (); Ipv4InterfaceContainer má funkciu SetMetric(), ktorá NIC uzla nastaví metriku – prioritu.

    Nastavíme aplikačnú vrstvu. Do kontajnerov (ApplicationContainer) si uložíme jednotlivé aplikácie (ikeď ich máme iba 2 – klientskú časť a serverovú časť).
    Trieda UdpEchoServerHelper má parameter konštruktora číslo portu na ktorom bude počúvať. Následne sa zavolá inštalácia konfigurácie pre aplikáciu.
    Trieda UdpEchoClientHelper má parametre konštruktora adresu (IP) a číslo portu servera, nakoľko sa konfigurácia to inštaluje klienta.
    obe aplikácie majú množstvo atribútov (viď v dokumentáciu a obr. udpAttributes).
    udpAttributes
    Niektoré atribúty teda majú nazov (MaxPackets, RemoteAddress …), prednastavenú hodnotu (100, 00-00-00 …), a dátový typ (UintegerValue, AddressValue …). Niektoré dátové typy majú automatickú konverziu ako pre prípad Interval je ekvivalentné : 10 ; StringValue(„10ns“); TimeValue(NanoSeconds(10));
    V uvedenom prípade nastavíme počet balíkov na odoslanie = 3, interval medzi jednotlivými balíkmi 500 milisekúnd,