This shows you the differences between two versions of the page.
saisp:labs:11:contents:02 [2014/05/17 13:46] mihai.carabas [02. Lorem ipsum] |
saisp:labs:11:contents:02 [2014/05/19 13:01] (current) alexandru.carp [02. [10p] Generarea traficului pe baza unor caracteristici și constrângeri din lumea reală] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== 02. Generarea traficului pe baza unor caracteristici și constrângeri din lumea reală ==== | + | ==== 02. [10p] Generarea traficului pe baza unor caracteristici și constrângeri din lumea reală ==== |
În cadrul laboratorului, vom explora principalele strategii de QoS din Linux. Pentru a observa comportamentul strategiilor implementate, vom folosi un model de trafic, compus din: | În cadrul laboratorului, vom explora principalele strategii de QoS din Linux. Pentru a observa comportamentul strategiilor implementate, vom folosi un model de trafic, compus din: | ||
Line 7: | Line 7: | ||
* trafic **HTTP** (TCP, port 80) | * trafic **HTTP** (TCP, port 80) | ||
- | Traficul **nu** va fi real ci il vom **simula** cu ajutorul lui ''iperf'' prezentat anterior. | + | Traficul **nu** va fi real ci îl vom **simula** cu ajutorul lui ''iperf'' prezentat anterior. |
- | Fiecare tip de trafic din cele considerate mai sus are anumite caracteristici si constrângeri. Pentru o funcționare optimă, trebuie să ținem seama de acestea: | + | Fiecare tip de trafic din cele considerate mai sus are anumite caracteristici și constrângeri. Pentru o funcționare optimă, trebuie să ținem seama de acestea: |
* trafic de **voce** | * trafic de **voce** | ||
* sensibil la: delay, jitter, packet loss | * sensibil la: delay, jitter, packet loss | ||
Line 19: | Line 19: | ||
* sensibil la: nimic | * sensibil la: nimic | ||
* consum de banda: mare, variabil, greedy (tinde sa "umple" intreaga latime de banda a legaturii) | * consum de banda: mare, variabil, greedy (tinde sa "umple" intreaga latime de banda a legaturii) | ||
+ | |||
+ | Dupa cum ați observat la exercițiul anterior, o conexiune ''iperf'' client-server generează un singur tip de trafic (implicit, trafic TCP pe portul 5001). Noi dorim să generăm mai multe tipuri de trafic, concomitent, pentru a vedea cum se afectează între ele. Deci va trebui să instanțiem mai multe astfel de perechi, în background. | ||
+ | |||
+ | Vom crea un script cu numele ''iperf-client1.sh'' care va porni 4 servere ''iperf'' pe stația ''client1'' (urmăriți comentariile):<file bash iperf-client1.sh> | ||
+ | #!/bin/bash | ||
+ | |||
+ | # Asculta trafic UDP, pe port-ul 8000 - fluxul de voce | ||
+ | iperf --server --udp --port 8000 &> out1.txt & | ||
+ | |||
+ | # Asculta trafic UDP, pe port-ul 6000 - fluxul video | ||
+ | iperf --server --udp --port 6000 &> out2.txt & | ||
+ | |||
+ | # Asculta trafic TCP, pe port-ul 21 - fluxul FTP | ||
+ | # Daca nu se specifica --udp, implicit este TCP | ||
+ | iperf --server --port 21 &> out3.txt & | ||
+ | |||
+ | # Asculta trafic TCP, pe port-ul 80 - fluxul HTTP | ||
+ | # Daca nu se specifica --udp, implicit este TCP. | ||
+ | iperf --server --port 80 &> out4.txt & | ||
+ | |||
+ | echo "iperf servers started. Now run the script on the gateway." | ||
+ | </file> | ||
+ | |||
+ | Vom crea pe stația ''gateway'' un script cu numele ''iperf-gateway.sh'' care se va conecta la cele 4 servere pornite pe stația ''client1'', generând cele 4 tipuri de trafic prezentate anterior. Simulăm tipurile de trafic prin generare de pachete ce au caracteristici asemănătoare cu cele din cazurile reale. Urmăriți comentariile din fișier:<file bash iperf-gateway.sh> | ||
+ | #!/bin/bash | ||
+ | |||
+ | IP_VM="192.168.1.1" | ||
+ | TIME=60 # Durata unui test | ||
+ | |||
+ | # Initiaza un flux UDP catre server, pe portul 8000 | ||
+ | # Fiecare datagrama are dimensiunea de 128 octeti (tipic pentru pachetele de voce) | ||
+ | # Se trimite la o rata de 640Kbps (dorim sa simulam 10 conversatii VoIP, a cate 64Kbps) | ||
+ | iperf -x SC --client $IP_VM --port 8000 --udp --len 128 --bandwidth 640K --time $TIME > out3.txt 2> /dev/null & | ||
+ | |||
+ | # Initiaza un flux UDP catre server, pe portul 6000 | ||
+ | # Fiecare datagrama are dimensiunea maxima (pentru ca nu o specificam explicit) | ||
+ | # Se trimite la o rata de 30Mbps | ||
+ | iperf -x SC --client $IP_VM --port 6000 --udp --bandwidth 30M --time $TIME > out4.txt 2> /dev/null & | ||
+ | |||
+ | # Initiaza un flux TCP catre server, pe portul 80 (HTTP) | ||
+ | # Limitam dimensiunea unui segment la 512 octeti | ||
+ | iperf -x SC --client $IP_VM --port 80 --mss 512 --time $TIME > out1.txt 2> /dev/null & | ||
+ | |||
+ | # Initiaza un flux TCP catre server, pe portul 21 (FTP) | ||
+ | # Dimensiunea unui segment va fi de 1400 octeti (dorim ca fluxul FTP sa fie mai agresiv) | ||
+ | # Dimensiunea ferestrei TCP va fi de 256K (dorim ca fluxul FTP sa fie mai agresiv) | ||
+ | iperf -x SC --client $IP_VM --port 21 --window 256K --mss 1400 --time $TIME > out2.txt 2> /dev/null & | ||
+ | |||
+ | wait | ||
+ | for i in out*; do echo; cat $i; done | ||
+ | rm out*.txt | ||
+ | </file> | ||
+ | |||
+ | Rulați script-urile create anterior (''iperf-client1.sh'' pe stația ''client1'' și ''iperf-gateway.sh'' pe stația ''gateway''). Așteptați 60 de secunde și inspectați output-ul de pe stația ''gateway''. Ce observați? | ||
+ | |||
+ | Observăm că fluxurile UDP au suferit **packet loss**, ele neavând nici un mecanism pentru retransmitere sau reglare a vitezei în funcție e starea legăturii. Pentru fluxul video, o pierdere de pachete de câteva procente este inacceptabilă. În continuare vom studia mecanismele implicite de QoS din Linux și cum putem preveni aceste pierderi de pachete. |