This shows you the differences between two versions of the page.
saisp:labs:11:contents:05 [2014/05/18 12:18] mihai.carabas [05. Lorem ipsum] |
saisp:labs:11:contents:05 [2015/05/25 16:04] (current) alexandru.carp [05. [10p] Traffic shaping classful] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== 05. Lorem ipsum ==== | + | ==== 05. [10p] Traffic shaping classful ==== |
''htb'' este un qdisc **classful** (tratează traficul în mod diferențiat, în funcție de clasa din care face parte). Este varianta **classful** a ''tbf'' (împarte traficul pe clase, apoi aplica ''tbf'' pe fiecare în parte). | ''htb'' este un qdisc **classful** (tratează traficul în mod diferențiat, în funcție de clasa din care face parte). Este varianta **classful** a ''tbf'' (împarte traficul pe clase, apoi aplica ''tbf'' pe fiecare în parte). | ||
Line 61: | Line 61: | ||
</code> | </code> | ||
- | Verificăm qdisc-ul asociat interfeței ''eth0'' și ierarhia de clase adăugată | + | Verificăm qdisc-ul asociat interfeței ''eth0'' și ierarhia de clase adăugată:<code bash> |
+ | root@gateway:~# tc qdisc show dev eth0 | ||
+ | qdisc htb 1: root refcnt 2 r2q 10 default 0 direct_packets_stat 82 direct_qlen 1000 | ||
- | <code> | + | root@gateway:~# tc class show dev eth0 |
- | # tc qdisc show dev tap1 | + | class htb 1:1 root prio 0 rate 1000Kbit ceil 1000Kbit burst 128Kb cburst 1600b |
- | qdisc htb 1: root refcnt 2 r2q 10 default 0 direct_packets_stat 940 | + | class htb 1:2 root prio 0 rate 40000Kbit ceil 40000Kbit burst 128Kb cburst 1600b |
- | + | class htb 1:3 root prio 0 rate 5000Kbit ceil 5000Kbit burst 128Kb cburst 1600b | |
- | # tc class show dev tap1 | + | class htb 1:4 root prio 0 rate 3000Kbit ceil 3000Kbit burst 128Kb cburst 1599b |
- | class htb 1:1 root prio 0 rate 1000Kbit ceil 1000Kbit burst 128Kb cburst 1600b | + | |
- | class htb 1:2 root prio 0 rate 40000Kbit ceil 40000Kbit burst 131055b cburst 1575b | + | |
- | class htb 1:3 root prio 0 rate 5000Kbit ceil 5000Kbit burst 128Kb cburst 1600b | + | |
- | class htb 1:4 root prio 0 rate 3000Kbit ceil 3000Kbit burst 128Kb cburst 1593b | + | |
</code> | </code> | ||
- | * Cu toate ca am definit ierarhia de clase, nu am definit cum impartim traficul in aceste clase. Pentru aceasta, avem nevoie de filtre. | + | Cu toate că am definit ierarhia de clase, nu am definit cum selectăm traficul pentru aceste clase. Vom folosi noțiunea de filtre oferită de utilitarul ''tc''. Definim primul filtru, ce selectează trafic cu portul destinație ''8000''. Trebuie să specificam: |
- | + | * protocolul de nivel 3: IP | |
- | * Definim primul filtru, ce selecteaza trafic cu portul destinatie 8000. Trebuie sa specificam: | + | * parintele: ''1:'' - vom atasa toate filtrele în nodul rădăcina |
- | ** protocolul de nivel 3: IP | + | * prioritatea: ''1'' - toate filtrele vor avea aceeași prioritate |
- | ** parintele: "1:" - vom atasa toate filtrele in nodul radacina | + | * tipul de filtru: ''u32'', ce poate face match pe header-ul IP |
- | ** prioritatea: "1" - toate filtrele vor avea aceeasi prioritate | + | * condiția de match: portul destinație (8000), și masca (0xffff - dorim să facem match pe toți cei 16 biți asociați câmpului destinație) |
- | ** tipul de filtru: "u32", ce poate face match pe header-ul IP. Alte filtre sunt "rsvp", "route" etc., dar sunt folosite cu alte scopuri. | + | * clasa în care va fi încadrat traficul (flowid): ''1:1'':<code bash> |
- | ** conditia de match: portul destinatie (8000), si masca (0xffff - dorim sa facem match pe toti cei 16 biti) | + | root@gateway:~# tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip dport 8000 0xffff flowid 1:1 |
- | ** clasa in care va fi incadrat traficul (flowid): "1:1" | + | |
- | + | ||
- | <code> | + | |
- | tc filter add dev tap1 protocol ip parent 1: prio 1 u32 match ip dport 8000 0xffff flowid 1:1 | + | |
</code> | </code> | ||
- | * Procedam analog si cu celelalte filtre: | + | Procedăm analog și cu celelalte filtre:<code bash> |
- | + | root@gateway:~# tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip dport 6000 0xffff flowid 1:2 | |
- | <code> | + | root@gateway:~# tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip dport 21 0xffff flowid 1:3 |
- | tc filter add dev tap1 protocol ip parent 1: prio 1 u32 match ip dport 6000 0xffff flowid 1:2 | + | root@gateway:~# tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip dport 80 0xffff flowid 1:4 |
- | tc filter add dev tap1 protocol ip parent 1: prio 1 u32 match ip dport 21 0xffff flowid 1:3 | + | |
- | tc filter add dev tap1 protocol ip parent 1: prio 1 u32 match ip dport 80 0xffff flowid 1:4 | + | |
</code> | </code> | ||
- | * Verificam filtrele create: | + | Verificăm filtrele create:<code bash> |
- | + | root@gateway:~# tc filter show dev eth0 | |
- | <code> | + | filter parent 1: protocol ip pref 1 u32 |
- | # tc filter show dev tap1 | + | filter parent 1: protocol ip pref 1 u32 fh 800: ht divisor 1 |
- | filter parent 1: protocol ip pref 1 u32 fh 800::801 order 2049 key ht 800 bkt 0 flowid 1:1 | + | filter parent 1: protocol ip pref 1 u32 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:1 |
match 00001f40/0000ffff at 20 | match 00001f40/0000ffff at 20 | ||
- | filter parent 1: protocol ip pref 1 u32 fh 800::802 order 2050 key ht 800 bkt 0 flowid 1:2 | + | filter parent 1: protocol ip pref 1 u32 fh 800::801 order 2049 key ht 800 bkt 0 flowid 1:2 |
match 00001770/0000ffff at 20 | match 00001770/0000ffff at 20 | ||
- | filter parent 1: protocol ip pref 1 u32 fh 800::803 order 2051 key ht 800 bkt 0 flowid 1:3 | + | filter parent 1: protocol ip pref 1 u32 fh 800::802 order 2050 key ht 800 bkt 0 flowid 1:3 |
match 00000015/0000ffff at 20 | match 00000015/0000ffff at 20 | ||
- | filter parent 1: protocol ip pref 1 u32 fh 800::804 order 2052 key ht 800 bkt 0 flowid 1:4 | + | filter parent 1: protocol ip pref 1 u32 fh 800::803 order 2051 key ht 800 bkt 0 flowid 1:4 |
match 00000050/0000ffff at 20 | match 00000050/0000ffff at 20 | ||
</code> | </code> | ||
- | * Pe masina **fizica**, rulati din nou script-ul **iperf-client.sh**. Asteptati 60 de secunde. Inspectati output-ul de pe masina **virtuala**. Ce observati? | + | Pe stația gateway, rulați din nou script-ul ''iperf-gateway.sh''. Asteptați 60 de secunde și inspectați output-ul afișat. Ce observați? |
- | ** Fiecare flux de trafic nu a depasit banda alocata. | + | * Fiecare flux de trafic nu a depasit banda alocata. |
- | ** Packet-loss-ul este foarte mic pentru flow-urile UDP. | + | * Packet-loss-ul este în continuare apropiat de 0% (ca la ''tbf'') pentru flow-urile UDP. |