This shows you the differences between two versions of the page.
saisp:labs:11:contents:07 [2014/05/18 12:35] mihai.carabas created |
saisp:labs:11:contents:07 [2014/05/18 14:28] (current) mihai.carabas |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== 07. Colectare statistici folosind ''tc'' ==== | + | ==== 07. [10p] HTB - observarea consumului de resurse ==== |
- | Pe lângă controlul traficului, utilitarul ''tc'' ne furnizează și statistici despre traficul transferat de fiecare clasă:<code bash> | + | Ștergeți qdisc-ul root adăugat anterior. |
- | root@gateway:~# tc -s class show dev eth0 | + | |
- | </code> | + | |
- | Scrieți un script care extrage numărul de octeți trimiși pentru una din clase. Utilizați acest script să generați un grafic folosind informațiile prezentate în [[saisp:labs:03:contents:05|]]. | + | Creați un script ce adaugă o limită de 1mbps pentru toate adresele IP din clasa 10.0.0.0/21 (trebuie să creați câte o clasă și câte un filtru pentru fiecare adresă IP). La finalul scriptului adăugați limita de 1mbps și pentru adresele IP asociate stațiilor ''client1'' și ''client2''. |
+ | Realizați un transfer între stația ''client2'' și stația ''gateway'' folosind ''iperf''. Utilizați 5 thread-uri pe partea de client a ''iperf'' (Hint: ''-P''). În timpul transferului observați încărcarea stației ''gateway'' (în mod special thread-urile kernel ''ksoftirq''). Acest lucru se datorează faptului că fiecare pachet trebuie să parcurgă toate filtrele adăugate secvențial. Clasificatoul ''u32'' a venit cu o soluție pentru acest lucru: folosirea unor tabele de hash, stocând filtrele sub forma unui arbore. Cheia hash-ului este dată de un octet al adresei IP destinație (mai multe detalii în curs și la exercițiul de la BONUS). | ||
+ | |||
<solution -hidden> | <solution -hidden> | ||
- | <code bash> | + | <file bash htb.sh> |
- | root@gateway:~# tc -s class show dev eth0 | grep -A 4 "class htb 1:1"|grep Sent|cut -d " " -f3 | + | #!/bin/bash |
- | 6375340 | + | |
- | Se adaugă comanda de mai sus în scriptul din [[saisp:labs:03:contents:05|]], la variabila ''outOctets'' | + | tc qdisc del dev eth0 root |
- | </code> | + | tc qdisc add dev eth0 root handle 1: htb |
- | </solution> | + | tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit burst 128k |
+ | classid=2 | ||
+ | for j in $(seq 0 15); | ||
+ | do | ||
+ | for i in $(seq 1 254); | ||
+ | do | ||
+ | classid=$(($classid + 1)) | ||
+ | tc class add dev eth0 parent 1:1 classid 1:$classid htb rate 100mbit burst 128k | ||
+ | tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip dst 10.0.$j.$i flowid 1:$classid | ||
+ | done | ||
+ | done | ||
+ | |||
+ | classid=$(($classid + 1)) | ||
+ | tc class add dev eth0 parent 1:1 classid 1:$classid htb rate 100mbit burst 128k | ||
+ | tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip dst 192.168.1.1 flowid 1:$classid | ||
+ | echo $classid | ||
+ | |||
+ | classid=$(($classid + 1)) | ||
+ | tc class add dev eth0 parent 1:1 classid 1:$classid htb rate 100mbit burst 128k | ||
+ | tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip dst 192.168.1.2 flowid 1:$classid | ||
+ | </file> | ||
+ | </solution> |