Klasifikácia prevádzky siete

Matej Vašek, 356807@mail.muni.cz

Obsah

Úvod

Internet bol navrhnutý pre prácu v režime best effort. Každý paket má rovnakú prioritu a nedochádza k umelému obmedzovaniu prevádzky. V prípade, že máme obmedzenú šírku pásma, je takéto riešenie nevyhovujúce. Z hľadiska užívateľa je rozdiel či meškajú pakety prinášajúce súbor cez FTP, alebo pakety pre VoIP. Iným problémom môže byť férovosť k rôznym uzlom v sieti.

Je teda vhodné rozdeliť dáta podľa nejakých atribútov do tried. Napríklad:

Jednotlivým triedam potom môžeme priradiť rôzne pravidlá. Napríklad:

Prístupy k QoS

ToS routing

IP hlavička paketu obsahuje pole ToS (Type of service) špecifikujúce typ prenášaných dát (nastavuje odosielateľ paketu). Smerovače sa na jeho základe rozhodnú kam paket pošlú. Jeden z najstarších prístupov, moc sa neuchytil.

Integrated services

Klient komunikuje zo sieťou a pokúša sa rezervovať si zdroje pre spojenie. Používa sa RSVP (Resource reSerVation Protocol). Klient najprv požiada o pridelenie zdrojov pre určitý tok pričom špecifikuje aké má tok požiadavky. Ak sieť môže naplniť požiadavok, rezervuje zdroje a klient začne s prenosom. Je nutná komunikácia z mnohými prvkami v sieti. Zabezpečuje QoS pre jednotlivé dátové toky. Malo používane kvôli veľkej réžií.

Differentiated services

Podobne ako u ToS routingu používame pole v hlavičke paketu. Rozdiel je v tom, že priradenie tohoto poľa neprevádza klient, ale smerovače na základe určitej klasifikácie. Narozdiel od Integrated services zabezpečuje QoS pre jednotlivé triedy.

Omedzovanie šírky pásma

Pre zabezpečenie kvality služby a zabráneniu zahltenia linky používame obmedzenie šírky pásma pre určité toky. Takto môžeme napríklad uprednostňovať VoIP pred FTP spojením (pakety s FTP môžu byt úmyselne zahadzované alebo zdržované). Používame fronty a klasifikáciu.

Fronty

Pre obmedzovanie šírky pásma používame fronty. Fronty sú buffery kde sú uložené pakety čakajúce na odbavenie. Vo frontách môže dochádzať k prekladaniu paketov, k ich oneskoreniu či zahodeniu. Spôsob práce s paketmi určuje queue discipline (qdisc). Existujú dva druhy: triedne a beztriedne. Rozdiel je predovšetkým v tom, že triedne môžu mať potomkov, vďaka čomu môžeme vytvoriť hierarchickú štruktúru. Ku Konfigurácií front v linuxe používame utilitu tc obsiahnutú v balíku iproute.

Klasifikácia

Aby pakety spadli do správnej fronty, musia byt najprv správne klasifikované. Ku konfigurácií klasifikácie v linux používame iptables a utilitu tc. Typicky sledujeme ip adresy zdroja a cieľa, porty, typ protokolu a ToS pole v IP hlavičke.

Konfigurácia

Príklady sú prevzaté lartc.org. Nasledujúce príkazy vytvoria hierarchiu tried.
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
Reťazce "sfq" a "htb" určujú queue discipline, "rate" základnú rýchlosť, "ceil" max rýchlosť, "prio" je priorita. Hierarchia tried vyzerá nasledovne:
+---------+
| root 1: |
+---------+
     |
+---------------------------------------+
| class 1:1                             |
+---------------------------------------+
  |      |      |      |      |      |      
+----+ +----+ +----+ +----+ +----+ +----+
|1:10| |1:11| |1:12| |1:13| |1:14| |1:15| 
+----+ +----+ +----+ +----+ +----+ +----+ 
Nasledujúce príkazy zabezpečia, že pakety s daný markerom _n_ (handle _n_ fw) padnú do správnej fronty. Marker je číslo patriace paketu vrámci jadra.
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
Priradenie markeru prevedieme cez iptables.
iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 22 -j MARK --set-mark 0x1
iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 22 -j RETURN
Priradenie paketu fronte môžeme vykonať aj priamo (t.j. bez iptables+marker) pomocou príkazu tc filter.
tc filter add dev eth0 parent 10:0 protocol ip prio 1 u32 match ip src 4.3.2.1/32 \
  match ip sport 80 0xffff flowid 10:1
Do fronty budú zaraďované pakety zo zdrojovej ip 1.2.3.4 port 80.

Literatúra