This shows you the differences between two versions of the page.
saisp:labs:11:contents:02 [2014/05/17 14:06] mihai.carabas [02. Generarea traficului pe baza unor caracteristici și constrângeri din lumea reală] |
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 22: | Line 22: | ||
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. | 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 5 servere ''iperf'' pe stația ''client1'' (urmăriți comentariile):<file bash iperf-client1.sh> | + | 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 | #!/bin/bash | ||
# Asculta trafic UDP, pe port-ul 8000 - fluxul de voce | # Asculta trafic UDP, pe port-ul 8000 - fluxul de voce | ||
- | iperf --server --udp --port 8000 > out1.txt 2> out1.txt & | + | iperf --server --udp --port 8000 &> out1.txt & |
# Asculta trafic UDP, pe port-ul 6000 - fluxul video | # Asculta trafic UDP, pe port-ul 6000 - fluxul video | ||
- | iperf --server --udp --port 6000 > out2.txt 2> out2.txt & | + | iperf --server --udp --port 6000 &> out2.txt & |
# Asculta trafic TCP, pe port-ul 21 - fluxul FTP | # Asculta trafic TCP, pe port-ul 21 - fluxul FTP | ||
# Daca nu se specifica --udp, implicit este TCP | # Daca nu se specifica --udp, implicit este TCP | ||
- | iperf --server --port 21 > out3.txt 2> out3.txt & | + | iperf --server --port 21 &> out3.txt & |
# Asculta trafic TCP, pe port-ul 80 - fluxul HTTP | # Asculta trafic TCP, pe port-ul 80 - fluxul HTTP | ||
# Daca nu se specifica --udp, implicit este TCP. | # Daca nu se specifica --udp, implicit este TCP. | ||
- | iperf --server --port 80 > out4.txt 2> out4.txt & | + | iperf --server --port 80 &> out4.txt & |
- | watch -n 1 cat out*.txt | + | echo "iperf servers started. Now run the script on the gateway." |
</file> | </file> | ||
- | Vom crea pe stația ''gateway'' un script cu numele ''iperf-gateway.sh'' care se va conecta la cele 5 servere pornite pe stația ''client'', generând cele 5 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> | + | 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 | #!/bin/bash | ||
Line 51: | Line 51: | ||
# Fiecare datagrama are dimensiunea de 128 octeti (tipic pentru pachetele de voce) | # 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) | # Se trimite la o rata de 640Kbps (dorim sa simulam 10 conversatii VoIP, a cate 64Kbps) | ||
- | iperf --client $IP_VM --port 8000 --udp --len 128 --bandwidth 640K --time $TIME & | + | 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 | # Initiaza un flux UDP catre server, pe portul 6000 | ||
# Fiecare datagrama are dimensiunea maxima (pentru ca nu o specificam explicit) | # Fiecare datagrama are dimensiunea maxima (pentru ca nu o specificam explicit) | ||
# Se trimite la o rata de 30Mbps | # Se trimite la o rata de 30Mbps | ||
- | iperf --client $IP_VM --port 6000 --udp --bandwidth 30M --time $TIME & | + | 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) | # Initiaza un flux TCP catre server, pe portul 80 (HTTP) | ||
# Limitam dimensiunea unui segment la 512 octeti | # Limitam dimensiunea unui segment la 512 octeti | ||
- | iperf --client $IP_VM --port 80 --mss 512 --time $TIME & | + | 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) | # 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 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) | # Dimensiunea ferestrei TCP va fi de 256K (dorim ca fluxul FTP sa fie mai agresiv) | ||
- | iperf --client $IP_VM --port 21 --mss 1400 --window 256K --time $TIME & | + | 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> | </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. |