This is an old revision of the document!


Laborator 04 - Capacitatea ideală a mediului (continuare)

Concepte noi

TODO: despre RTS/CTS

[00] Pregătire laborator

Intrați în directorul /home/student/Desktop/ISRM/ns-3-dev. Rulați comenzile:

git remote add isrm https://gitlab.com/b12mihai1/ns-3-dev.git 
git remote update
git checkout -b isrm_2020 remotes/isrm/isrm_2020
git submodule init
git submodule update --remote --merge
git submodule foreach git pull origin master   # in caz ca cea anterioara nu ne muta pe ultimul commit din master

Dacă directorul nu există rulați comenzile de mai jos și țineți minte unde aveți ns-3-dev folder cu toate lucrurile compilate:

git clone https://gitlab.com/b12mihai1/ns-3-dev.git ~/ns-3-dev
cd ~/ns-3-dev
git checkout -b isrm_2020 remotes/origin/isrm_2020
git submodule init
git submodule update --remote --merge
git submodule foreach git pull origin master
./waf configure --build-profile=debug --enable-examples --enable-tests && ./waf build -j4

Pentru a realiza grafice, trebuie sa instalam si pachetele de Python:

student@isrm-vm-2020:~$ sudo apt-get update
student@isrm-vm-2020:~$ sudo apt-get install python3-pip
student@isrm-vm-2020:~$ pip3 install matplotlib jupyter
student@isrm-vm-2020:~$ sudo ln -s ~/.local/bin/jupyter-notebook /usr/bin/jupyter-notebook

Pentru a lansa aplicatia de Jupyter Notebook, rulati urmatoarea comanda:

student@isrm-vm-2020:~$ jupyter-notebook

Pe parcursul laboratorului, vom avea nevoie de utilitarul tshark:

student@isrm-vm-2020:~$ sudo apt-get install tshark

[01] Capacitatea ideală simulare TCP

Repetați experimentele de la traficul UDP din laborator 3, exercițiul 3 folosind trafic de tip TCP.

./waf --run "lab3 --numberOfNodes=2 --payloadSize=1400 \
   --offeredRate=11Mbps --phyRate=DsssRate11Mbps --simulationTime=2 --runTcp=true"

Parametrul phyRate (reprezinta MCS) va lua urmatoarele valori:

  • Pentru 802.11b:
  DsssRate1Mbps
  DsssRate2Mbps
  DsssRate5_5Mbps
  DsssRate11Mbps
  • Pentru 802.11g:
  ErpOfdmRate6Mbps
  ErpOfdmRate9Mbps
  ErpOfdmRate12Mbps
  ErpOfdmRate18Mbps
  ErpOfdmRate24Mbps
  ErpOfdmRate36Mbps
  ErpOfdmRate48Mbps
  ErpOfdmRate54Mbps

Parametrul offeredRate corespunde traficului trimis de aplicație în socketul UDP. Pe linia de comandă trebuie dați parametrii relevanți pentru dimensiunea pachetului și rata dorită de UDP.

Scopul acestui task este să repetați graficele precedente/teoretice folosind simularea în ns-3. Puncte de evaluare pentru payloadSize: 20, 50, 100, 500, 1000, 1500.

Pe Oy pentru throughput extrageti valoarea obtinuta la Average throughput: 7.7728 Mbit/s

Puteți reduce timpii simulării folosind parametrul --simulationTime=1

Puteti folosi acest template pentru construirea graficelor (va trebui sa implementati TODO-urile):

import copy
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
 
# Calea absoluta catre fisierul de date din care citim
# TODO - trebuie inlocuita cu calea corecta
DATA_FILE_802_11_B = '/home/student/ns-3-dev/output_802_11_b.txt'
DATA_FILE_802_11_G = '/home/student/ns-3-dev/output_802_11_g.txt'
columns = ['mcs', 'payload_size', 'throughput']
 
# Citim datele din fisier
# Argumentul delimiter precizeaza care este delimitatorul dintre coloane
# Argumentul skip_header precizeaza cate linii nu vor fi citite pornind cu inceputul fisierului
# Argumentul names este unul foarte util deoarece permite asocierea de nume pentru coloanele din fisier si
# de asemenea duce la un acces foarte usor al datelor in script. In acest exemplu, names va fi egal cu ['x', 'y']
# ceea ce inseamna ca putem accesa valorile din prima coloana prin sim_data['x'].
# Argumentul dtype setat specifica modul in care vor fi interpretate coloanele (string-urile ca string-uri, float-urile ca float-uri).
# In absenta acestui argument, valorile din coloane vor fi interpretate ca float.
sim_data_802_11_b = np.genfromtxt(DATA_FILE_802_11_B, delimiter=' ', names=columns, dtype=None)
#TODO - decomentati linia dupa ce ati obtinut fisierul de output pentru 802.11g
# sim_data_802_11_g = np.genfromtxt(DATA_FILE_802_11_G, delimiter=' ', names=columns, dtype=None)
 
def plot_802_11_b_throughput(sim_data):
    data = copy.deepcopy(sim_data)
 
    # Apelul subplots poate fi folosit pentru a crea mai multe subgrafice in cadrul aceluiasi grafic sau in cadrul unor grafice diferite
    # Prin figsize se specifica dimensiunea graficului
    fig, ax = plt.subplots(figsize=(12,12))
    # Valori stilistice pentru grafic
    ax.grid(color='b', alpha=0.5, linestyle='dashed', linewidth=0.5)
    # Denumirile axelor Ox si Oy, precum si titlul graficului
    plt.xlabel('Payload size [bytes]')
    plt.ylabel('Throughput [Mbps]')
    plt.title('802.11b throughput')
 
    # Aici este construit efectiv graficul. Campul label va fi folosit in cadrul legendei graficului
    #TODO
    # Daca in fisierul de output aveti toate valorile de MCS, este posibil sa aveti nevoie de Python slicing pentru 
    # a construi graficele usor. Exemplu: data['mcs'][0:6] sau data['throughput'][0:6] pentru a extrage primele 6 elemente din 
    # coloana.
    ax.legend()
 
    plt.show()
 
 
def plot_802_11_g_throughput(sim_data):
    data = copy.deepcopy(sim_data)
 
    # Apelul subplots poate fi folosit pentru a crea mai multe subgrafice in cadrul aceluiasi grafic sau in cadrul unor grafice diferite
    # Prin figsize se specifica dimensiunea graficului
    fig, ax = plt.subplots(figsize=(12,12))
    # Valori stilistice pentru grafic
    ax.grid(color='b', alpha=0.5, linestyle='dashed', linewidth=0.5)
    # Denumirile axelor Ox si Oy, precum si titlul graficului
    plt.xlabel('Payload size [bytes]')
    plt.ylabel('Throughput [Mbps]')
    plt.title('802.11g throughput')
 
    # Aici este construit efectiv graficul. Campul label va fi folosit in cadrul legendei graficului
    #TODO
 
    ax.legend()
 
    plt.show()
 
 
if __name__ == '__main__':
    plot_802_11_b_throughput(sim_data_802_11_b)
    #TODO - decomentati linia dupa ce ati obtinut fisierul de output pentru 802.11g
#     plot_802_11_g_throughput(sim_data_802_11_g)

Pentru mai multe informatii legate de list slicing in Python, puteti consulta aceasta pagina.

De ce iterăm peste aceste packet size-uri? Iată câteva valori din trafic real: VoIP ~ 20-300; DNS, TCP~ 500; Ethernet MTU=1500; 802.11 Beacon=380

[02] Capacitatea ideală simulare TCP cu RTS/CTS

Repetați experimentele de mai sus folosind RTS/CTS pentru traficul de tip TCP.

./waf --run "lab3 --numberOfNodes=2 --payloadSize=1400 \
   --offeredRate=11Mbps --phyRate=DsssRate11Mbps --simulationTime=2 --runTcp=true --enableRtsCts=true --tracing=true"

Înainte de a vă apuca de grafice: inspectați PCAP-ul și localizați pachetele de tip RTS/CTS. Ce MCS au acestea?

Îmbunătățește RTS/CTS situația TCP-ului?

[03] Capacitatea ideală simulare UDP/TCP multiple downlink

Vom evalua capacitatea în condiții noi: client unic vs. multipli, uplink vs downlink. Topologia este una specifică modului infrastructură, cu un AP și mai mulți clienți asociați, dar cadrele de beacon, autentificare, și asociere sunt omise pentru simplitate. Realizați graficul doar pentru 802.11b, payloadSize=1460, phyRate=11Mbps

Scenariul este: downlink - sursa: AP, destinații: 1..30 clienți (scriptul original) trafic întai UDP apoi TCP.

Se variază doar numărul de clienți, și se plotează debitul cumulativ pentru toate fluxurile.

isrm/laboratoare/new/04.1584125239.txt.gz · Last modified: 2020/03/13 20:47 by mbarbulescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0