Počítačové siete boli od začiatku navrhnuté ako spravodlivé ku všetkým pripojeným počítačom. Všetky sieťové toky v TCP/IP sieťach sú obsluhované s rovnakou prioritou. Avšak ľubovoľný z nich môže byť ovplyvnený negatívnym vlastnostiam sietí ako sú napr. straty paketov, oneskorenie, duplikácia, zmena poradia paketov, atď. Toto je podstata best-effort služby, ktorú poskytujú spravodlivé počítačové siete.
Existujú ale aplikácie, ktoré vyžadujú určitú kvalitu služby (Quality of Service, skr. QoS), teda je nutné ich toky určitým spôsobom prioritizovať:
Obsluha I/O front na hostoch a sieťových prvkoch. Všetky 3 mechanizmy: plánovanie, formovanie tokov a prevencia zahltenia je nutné kombinovať.
Mechanizmus riadenia množstva a rýchlosti odosielania paketov.
Zariadenie má buffer pevnej veľkosti, ktorý prijíma pakety na odoslanie. Buffer ale odosiela množstvo dát, ktoré je zhora ohraničené. Ak sa dosiahne limit bufferu, tak nové pakety sa začnú zahadzovať.
Rieši nespravodlivosť Leaky bucketu k menej aktívnym zariadeniam. Ak je zariadenie aktívne, tak zbiera tokeny. Ak zariadenie odosiela dáta, tak za ne platí nahromadenými tokenmi. Ak sa buffer (vedro) naplní tokenmi, tak začne zahadzovať pakety. Veľkosť bufferu (vedra) určuje maximálnu možnú veľkosť špičky v sieti.
Mechanizmus zahadzovania paketov vzhľadom k zaplneniu fronty/bufferu.
Nezahadzuje pakety až keď je buffer plný ale začne zahadzovať pakety náhodne zvoleného toku s rastúcim zaplnením bufferu.
To isté ako RED, ale pravdepodobnosť zahodenia paketu závisí aj na priorite toku.
Starší prístup, ktorý zavádza do siete naspäť stav. Zariadenie sa snaží na ceste k cieľu rezervovať potrebné zdroje a kvalitu služby. Absolútne nepoužiteľné pre počítačové siete. Spôsobuje vysokú réžiu a neškáluje.
Značkuje pakety, čím ich priraďuje do určitých tried priority. Zdroj paketu si nediktuje podmienky kvality prenosu, ale pri vstupe paketu do siete (router) je paket označený kvalitatívnou triedou prenosu.
Paket je označený v poli Type of Service (ToS field), ktoré reprezentuje druhý bajt v pakete. Hodnoty pola radia paket do určitej triedy dôležitosti. Tento koncept je ďalej rozvíjaný v IPv6.
Paket je označený v poli Traffic Class, ktoré je tiež 1 bajt dlhé a začína už na štvrtom bite paketu. IPv6 nie je zatiaľ schopné garantovať v praxi určitú kvalitu služby ako je šírka pásma, oneskorenie alebo jeho rozptyl. Dokáže iba zabezpečiť konkrétnu prioritu s akou je paket spracovaný a umožňuje definovať určité triedy komunikácie.
Je dôsledok moderných sieťových prvkov s veľkými buffermi a rýchlymi sieťovými rozhraniami. Tento jav sa deje keď niekoľko sieťových prvkov naraz vypustí do jedného úzkeho miesta siete (router alebo switch) veľké množstvo dát zo svojich bufferov. Toto úzke hrdlo siete má v dôsledku toho zaplnený vlastný buffer/frontu a začne zahadzovať pakety aby predišlo zahlteniu. Zahodené pakety musia ich zdroje často znova preposielať čo môže spôsobiť opakované zahltenie siete.
Otestujte si odolnosť siete na bufferbloat tu.
Na zlomok časového kvanta je zahltené prenosové médium na maximum a ak sa stretne naraz viac takýchto špičkových tokov v sieti, tak zahltia prvé úzke miesto siete, kde sa stretnú.
bandwidth[%] V 100 -+ +--------+ <----- many streams like this, in the same moment causes bufferbloat in the first network bottleneck | |********| | |********| | |********| | |********| 50 -+ |********| | |********| | |********| | |********| | |********| 0 -+ -+********+---------------------------------------- | -+--+--------+----------+----------+----------+-------> t[s] 0 0.25 0.5 0.75 1
Existujú 2 základné skupiny riešení, ktoré sa často dopĺňajú:
Je to plánovací algoritmus pre network scheduler vytvorený tak aby prekonal Bufferbloat problém na sieťovom hardvéri (smerovače, prepínače) tým, že nastavuje limity na oneskorenie paketov počas priechodu buffermi [19].
Je jedným z prvých fundamentálnych pokrokov v oblasti active queue management. Nevyžaduje žiadne parametre narozdiel od algoritmov ako RED. Umožňuje prenášať dáta sieťou s nízkou latenciou ale aj špičkové prenosy (bursts of traffic). Dynamicky sa prispôsobuje zmenám množstva prenášaných dát.
Podstatou algoritmu je, že rozlišuje 2 typy front. Dobré fronty (good queue) su fronty, ktoré obsluhujú komunikáciu, ktorá nespôsobuje Bufferbloat. Zlé fronty (bad queues) sú fronty, ktoré často spôsobujú Bufferbloat, tým že produkujú nárazové prúdy dát, ktoré maximálne naplnia buffer a po nejaký čas si udržujú intenzitu.
Dnes už existuje aj upravená verzia fq_CoDel a tieto algoritmy často využíva len OpenWRT a prípade komerčných vendorov to ešte nie je vždy podporovaný štandard.
Vyžaduje inštaláciu na obidvoch koncoch testovaného spojenia. Zaujímavý návod na inštaláciu a základné použitie nájdete tu [11] alebo na homepage projektu [14]. Inštalácia je jednoduchá, stačí použiť balíčkovacie služby ako apt alebo yum.
------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 85.3 KByte (default) ------------------------------------------------------------ ------------------------------------------------------------ Client connecting to 198.51.100.5, TCP port 5001 TCP window size: 351 KByte (default) ------------------------------------------------------------ [ 3] local 198.51.100.6 port 50618 connected with 198.51.100.5 port 5001 [ 5] local 198.51.100.6 port 5001 connected with 198.51.100.5 port 58650 [ ID] Interval Transfer Bandwidth [ 5] 0.0-10.1 sec 1.27 GBytes 1.08 Gbits/sec [ 3] 0.0-10.2 sec 1.28 GBytes 1.08 Gbits/sec
shell$ iperf -c 198.51.100.5 -d ------------------------------------------------------------ Client connecting to 198.51.100.6, TCP port 5001 TCP window size: 153 KByte (default) ------------------------------------------------------------ [ 6] local 198.51.100.5 port 58650 connected with 198.51.100.6 port 5001 [ 6] 0.0-10.1 sec 1.27 GBytes 1.08 Gbits/sec [ 5] 0.0-10.2 sec 1.28 GBytes 1.08 Gbits/sec
Inštalácia podobná ako iperf cez balíčkovacie služby. Vyžaduje rootovské opravnenia. Je to nástroj, ktorý v tabuľke zobrazí aktuálne využívanú šírku pásma medzi dvoma koncovými stanicami (napr. medzi hostom a google.com). Pekná ukážka je napr. [15]
wondershaper interface download_rate upload_rateeth0 obmedzí download na 10000 kbps a upload na 1000 kbps.
wondershaper eth0 10000 1000Zrušenie limitov pre eth0
wondershaper remove eth0Automatické zapnutie limitov v /etc/network/interfaces
iface eth0 inet dhcp up /sbin/wondershaper eth0 00 100 # je vhodné limit vypnúť pred vypnutím rozhrania down /sbin/wondershaper remove eth0
Zaujímavý návod je v refereráte Martina Kolmana [13] (kódovanie stredoeurópske jazyky ISO)
Príďte sa pozrieť na prednášku Miloša Lišku venovanú UltraGridu rámci predmetu PV188. Prednáška bude 17.12. o 18:00 v laboratóriu Sitola (A502).
UltraGdrid síce používa QoS keď je to možné, avšak QoS je dnes na dnešných sieťach tak málo podporovaný koncept, že len s jeho využitím by nedokázal dosiahnuť technické parametre, ktoré garantuje.
UltraGrid podporuje prenos komprimovaného a nekomprimovaného audia a videa vo vysokom rozlíšení až do kvality 4K(4096@60p) s latenciou do 80ms.