This is an old revision of the document!
Î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:
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 și constrângeri. Pentru o funcționare optimă, trebuie să ținem seama de acestea:
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):
#!/bin/bash # Asculta trafic UDP, pe port-ul 8000 - fluxul de voce iperf --server --udp --port 8000 > out1.txt 2> out1.txt & # Asculta trafic UDP, pe port-ul 6000 - fluxul video iperf --server --udp --port 6000 > out2.txt 2> 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 2> 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 2> out4.txt & watch -n 1 cat out*.txt
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:
#!/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 --client $IP_VM --port 8000 --udp --len 128 --bandwidth 640K --time $TIME & # 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 --client $IP_VM --port 6000 --udp --bandwidth 30M --time $TIME & # Initiaza un flux TCP catre server, pe portul 80 (HTTP) # Limitam dimensiunea unui segment la 512 octeti iperf --client $IP_VM --port 80 --mss 512 --time $TIME & # 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 --client $IP_VM --port 21 --mss 1400 --window 256K --time $TIME &
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?
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.