QoS - Klasifikace síťového provozu
Viktor Michálek,xmichal4(závin)fi.muni.cz
Obsah
Úvod
Na počátku vývoje byly internetové protokoly navrženy jako best effort
služby, tzn. že síťové prvky se snaží doručit daný paket nejlépe jak mohou a nikomu neodepřou
přístup do sítě.
QoS
Kvalitu služeb (Quality of Service) můžeme definovat jako souhrn
následujících parametrů:
- Šířka pásma (bandthwidth)
- Ztrátovost paketů (dropped packets)
- Zpoždění (delay)
- Rozptyl zpoždění (jitter)
Strategie řešení QoS
Best effort a TOS routing
Triviální metoda řešení QoS problematiky existovala ve specifikaci IP
protokolu prakticky od počátku. Řešení spočívalo v tom, že odesílatel nastavil v
IP hlavičce datagramu pole TOS (Type of Service), které
obsahvalo údaj o typu a prioritě datagramu, na jehož základě měl směrovač vybrat
nejlepší trasu pro daný datagram.
Toto řešení však bylo nasazováno velmi pomalu a sporadicky a proto se příliš
nerozšířilo.
Integrated services - IntServ
Přístup intengrovaných služeb spočívá v použití RSVP protokolu , kterým daná
aplikace oznamuje počítačové síti své požadavky na přenos dat, které mají být
při přenosu paketu dodrženy. Síť oznámí aplikaci, zda jí může vyhovět. Pokud ne,
aplikace může požádat o nižší přiřazení QoS. Pokud síť aplikaci vyhoví, musí o
tom informovat všechny síťové prvky, po kterých bude daná komunikace probíhat.
Uvedená strategie není vhodná pro velmi rozsáhlé sítě, protože má velkou časovou
režii a vysoké nároky na směrovače.
Differentiated services - DiffServ
DIferencované služby jsou oproti intengrovaným službám mnohem rošířenější,
nabízejí lepší škálovatelnost při nižší zátěži jednotlivých směrovačů, což
umožňuje garanci kvality a velké vzdálenosti. V této strategii rozlišujeme 3
druhy směrovačů:
- Okrajové uzly
- Nacházejí se na začátku DS-domény (na začátku části sítě kde se
provádí QoS politika).
- Uzly klasifikují vstupní proudy do tříd, značkováním jejich paketů
pomocí pole DS v IP hlavičce.
- Pole DS je vlastně přejmenované TOS.
- Vnitřní uzly
- Neprovádějí již žádnou další klasifikaci, s paketem nakládají podle
jeho značky.
- Hraniční uzly
- Odděluje od sebe 2 různé DS-domény, které mohou mít odlišnou
klasifikaci.
- S pakety z jiné domény se nakládá na základě dohody mezi doménami.
- Nejčastěji se provede přepis značky paketu na základě původní
značky.
Policing a shaping
- Policing
Je omezování šířky pásma na vstupu. V praxi se
dá realizovat pouze nad službami, které mají flow-control, to je např. TCP.
Princip spočívá v tom, že pakety buď zahazujeme nebo dostatečně zpožďujeme a
druhá strana na to reaguje snížením rychlosti vysílání.
- Shaping
Je omezování šířky pásma na výstupu. Realizuje se pomocí
front ve kterých dochází k přeskládání pořadí paketů, případně k jejich
zpoždění nebo zahození. Způsob práce s frontou se označuje jako queue
discipline - qdisc. Rozlišujeme 2 základní druhy disciplín:
- classless (beztřídní) - není možné na ni přiřadit
další qdisc
- classful (třídní) - je možné na ni pověsit další
qdisc, přičemž každé sítové rozhraní má minimálne 1.
Shaping a jednotlivé disciplíny
Classless
- pfifo_fast
základní algoritmus vycházející z FIFO. Má tři
fronty lišící se prioritou, pakety jsou do nich rozřazovány podle značky v
hlavičce paketu. Pokud jsou ve frontě s výší prioritou pakety, odcházejí,
pakety ve frontě s nižší prioritou čekají.
- TBF (Token Bucket Filter)
chová se jako vědro s dírou: paket je odeslan v případě že v
bufferu je správný počet paketů, jinak je zahozen.
- SFQ (Stochastic Fairness Queueing)
snaží se rozdělovat dostupné pásmo rovnoměrně mezi všechny
toky. Používá několik front. Datové toky jsou
- do těchto front rozdělovány
pomocí hashovací funkce, která se neustále mění tak, aby jednotlivé datové
toky nezůstávaly příliš dlouho v jedné frontě.
- RED (Random Early Detection)
používá se hlavně na vytížených páteřních spojích. Při
překročení určité meze vypočítané ze statistik, s rostoucí zátěží lineárně
zvyšuje počet zahozených paketů a snaží se tak předejí zahlcení linky.
- WRED (Weighted Random Early Detection)
RED s podporou priorit.
Clasful
- CBQ (Class Based Queueing)
Často používaná s velkým množstvím nastavení. Pakety
rozřazuje do potříd, kde jsou dále zpracovávány. Podporuje priority.
- HTB (Hierarchical Token Bucket)
Modernější a efektivnější obdoba CBQ. Oproti
CBQ má jednoduší nastavení a nepoužívá propočty nečinnosti linky.
- PRIO
Neprovádí shapovaní ale rozděluje provoz do nižších qdisců.
Používá 3 fronty a podobá se tak pfifo_fast.
Konfigurace QoS v Linuxu
Na zprovoznění traffic shapingu v Linuxu je třeba mít správně nainstalované
nástroje iproute
a iptables
.
Příklad rozdělení šířky pásma odchozího provozu do podtříd
CEIL=240
tc qdisc add dev eth0 root handle 1: htb default 15
tc class add dev eth0 parent 1: classid 1:1 htb rate ${CEIL}kbit ceil ${CEIL}kbit
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 80kbit ceil 80kbit prio 0
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 80kbit ceil ${CEIL}kbit prio 1
tc class add dev eth0 parent 1:1 classid 1:12 htb rate 20kbit ceil ${CEIL}kbit prio 2
tc class add dev eth0 parent 1:1 classid 1:13 htb rate 20kbit ceil ${CEIL}kbit prio 2
tc class add dev eth0 parent 1:1 classid 1:14 htb rate 10kbit ceil ${CEIL}kbit prio 3
tc class add dev eth0 parent 1:1 classid 1:15 htb rate 30kbit ceil ${CEIL}kbit prio 3
tc qdisc add dev eth0 parent 1:12 handle 120: sfq perturb 10
tc qdisc add dev eth0 parent 1:13 handle 130: sfq perturb 10
tc qdisc add dev eth0 parent 1:14 handle 140: sfq perturb 10
tc qdisc add dev eth0 parent 1:15 handle 150: sfq perturb 10
Kde:
- rate - udává základní přenosovou rychlost
- ceil - nastavuje strop přenosové rychlosti
- prio - udává prioritu dané podtřídy
- perturb - jak často má být měněna hashovací funkce
Struktura tohoto rozdělení pak vypadá takto:
+---------+
| root 1: |
+---------+
|
+---------------------------------------+
| class 1:1 |
+---------------------------------------+
| | | | | |
+----+ +----+ +----+ +----+ +----+ +----+
|1:10| |1:11| |1:12| |1:13| |1:14| |1:15|
+----+ +----+ +----+ +----+ +----+ +----+
Příklad klasifikace paketů
tc filter add dev eth0 parent 1:0 protocol ip prio 1 handle 1 fw classid 1:10
tc filter add dev eth0 parent 1:0 protocol ip prio 2 handle 2 fw classid 1:11
tc filter add dev eth0 parent 1:0 protocol ip prio 3 handle 3 fw classid 1:12
tc filter add dev eth0 parent 1:0 protocol ip prio 4 handle 4 fw classid 1:13
tc filter add dev eth0 parent 1:0 protocol ip prio 5 handle 5 fw classid 1:14
tc filter add dev eth0 parent 1:0 protocol ip prio 6 handle 6 fw classid 1:15
Literatura