This shows you the differences between two versions of the page.
saisp:labs:11:contents:03 [2014/01/26 13:07] 127.0.0.1 external edit |
saisp:labs:11:contents:03 [2014/05/18 14:29] (current) mihai.carabas |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== 03. Lorem ipsum ==== | + | ==== 03. [10p] Clasificarea folosind ToS ==== |
- | ... | + | În Linux, strategiile de QoS se inspectează și configurează folosind comanda ''tc''. Termenul folosit pentru strategiile de QoS este ''qdisc'' (de la ''queueing discipline''). |
+ | Afisați detalii despre qdisc-ul implicit, asociat interfeței ''eth0'' de pe stația ''gateway'':<code> | ||
+ | # tc qdisc show dev eth0 | ||
+ | qdisc pfifo_fast 0: root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 | ||
+ | </code> | ||
+ | Observați că qdisc-ul implicit este ''pfifo_fast'' (strategia implicită de QoS): | ||
+ | * Numele vine de la ''priority FIFO''. | ||
+ | * Este un qdisc **classless** (nu putem clasifica traficul și limita traficul, îl putem doar prioritiza) | ||
+ | * Nu este o simpla coada FIFO, ci conține 3 (sub)cozi, numite 0, 1 si 2 (fiecare din ele fiind FIFO). Cât timp coada coada ''0'' conține pachete, cozile 1 si 2 NU vor fi servite. | ||
+ | |||
+ | Ce reprezintă ''priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1''? În Linux, kernel-ul asociază fiecărui pachet o prioritate, în functie de campul TOS (Type of Service) din header-ul IP. Prioritatea ne selectează una din cele 3 (sub)cozi din pfifo_fast: coada 0, 1 sau 2. Asocierile se fac după următorul tabel:<code> | ||
+ | TOS Means Linux Priority Band | ||
+ | ------------------------------------------------------- | ||
+ | 0x0 Normal-Service 0 Best Effort 1 | ||
+ | 0x2 Minimize-Monetary Cost 1 Filler 2 | ||
+ | 0x4 Maximize-Reliability 0 Best Effort 1 | ||
+ | 0x6 mmc+mr 0 Best Effort 1 | ||
+ | 0x8 Maximize-Throughput 2 Bulk 2 | ||
+ | 0xa mmc+mt 2 Bulk 2 | ||
+ | 0xc mr+mt 2 Bulk 2 | ||
+ | 0xe mmc+mr+mt 2 Bulk 2 | ||
+ | 0x10 Minimize-Delay 6 Interactive 0 | ||
+ | 0x12 mmc+md 6 Interactive 0 | ||
+ | 0x14 mr+md 6 Interactive 0 | ||
+ | 0x16 mmc+mr+md 6 Interactive 0 | ||
+ | 0x18 mt+md 4 Int. Bulk 1 | ||
+ | 0x1a mmc+mt+md 4 Int. Bulk 1 | ||
+ | 0x1c mr+mt+md 4 Int. Bulk 1 | ||
+ | 0x1e mmc+mr+mt+md 4 Int. Bulk 1 | ||
+ | </code> | ||
+ | |||
+ | Observăm că pachetele normale (cu TOS 0x00) sunt introduse în (sub)coada 1. La punctul anterior, fluxul UDP avea o pierdere semnificativă de pachete. O primă soluție ar fi marcarea pachetelor de voce și video cu un ToS favorabil (de exemplu, ''0x10''), pentru a avea prioritate mai mare față de pachetele. Marcarea se realizează folosind lanțul ''mangle'' al comenzii ''iptables'':<code> | ||
+ | root@gateway:~# iptables -t mangle -A OUTPUT -p udp --dport 6000:8000 -j TOS --set-tos Minimize-Delay | ||
+ | </code> | ||
+ | Comanda anterioară marchează toate pachetele UDP cu porturile în intervalul 6000 și 8000 cu tag-ul ''Minimize-Delay''. Se observă că se poate folosi numele tag-ului în loc de valoare (''0x10''). | ||
+ | |||
+ | Rulați din nou scriptul ''iperf-gateway.sh'' pe stația ''gateway'' și observați că procentele pierdute s-au diminuat foarte puțin. Nu e suficientă doar o prioritizare a pachetelor. |