This shows you the differences between two versions of the page.
saisp:labs:11:contents:02 [2014/05/17 14:10] 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. Inspectați output-ul de pe stația ''client1''. Ce observați? | + | 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, un 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. | + | 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. |