Základní režim provozu počítačové sítě se nazývá best effort, tzn. všechen síťový provoz je vůči sobě navzájem rovnoprávný a síť se jej snaží doručit podle svého nejlepšího vědomí a svědomí.
Když však nastanou problémy s kapacitou, ne vždy je možné tyto problémy vyřešit jejím prostým navýšením (zejména v případě bezdrátových sítí) - v tomto případě je nutné opustit přístup best effort a obrátit se na technologie pro klasifikaci síťového provozu do kategorií a správu těchto kategorií.
Pod pojmem klasifikace síťového provozu rozumíme rozčlenění síťového provozu do kategorií podle předem daných kritérií. Jako kritéria může sloužit např:
Jednotlivá kritéria je samozřejmě možné mezi sebou kombinovat.
Po ustanovení kategorií provozu je pro každou kategorii možné stanovit samostatná pravidla, např:
Takováto práce se síťovým provozem (klasifikace a aplikovaní pravidel podle kategorií) bývá označováno anglickým termínem QoS (Quality of Service - kvalita služby). Jak již název napovídá, cílem tohoto snažení je v zásadě snaha zachování určité kvality poskytované služby nebo služeb, často na úkor kvality jiné. Může se jednat např. o upřednostnění multimediálního provozu na úkor přenosů prostřednictvím protokolů FTP a HTTP, protože obě tyto služby jsou schopny tolerovat výrazně větší latenci.
Jedním z raných pokusů o implementaci QoS pochází od pracovní skupiny IETF pro diferencované služby (DiffServ)[1]. Síťový provoz byl rozdělen do několika málo tříd, které pak byly označeny nastavením TOS oktetu v hlavičce IPv4 paketu. Značkování provádí uzly na hranici DS domény, vnitřní uzly pak této informace využívají pro zacházení s takto označeným provozem.
Určitým protipólem diferencovaných služeb jsou Integrované služby[3] - zde si jednotlivé služby využívající síť v zásadě samy vybírají, do které kategorie chtějí patřit. Síť může, ale také nemusí službě vyhovět.
Omezením šířky pásma lze sledovat několik cílů. Pokud plné využití kapacity dané linky způsobuje výrazné zvýšení latence, je možné nastavením maximální přenosové rychlosti s určitou rezervou tomuto nepříjemnému zahlcení zabránit. Dalším možností je například přidělení maximální přenosové rychlosti jednotlivým uživatelům, například podle toho kolik který z nich zaplatil.
Policing[1] se podobně se také zabývá omezením šířky pásma, liší se však od klasického přístupu, který pracuje na principu zdržování paketů a zařazování paketů do front s nižší prioritou. Při použití policingu jsou však pakety, které se "nevejdou" do dané maximální přenosové rychlosti buďto zahozeny nebo přeznačeny do třídy provozu s nižší prioritou.
Ne vždy je možné provádět QoS pouze na jednom místě, v tomto případě je vhodné použít marking. Provoz je označen podle kategorie do které byl zařazen, takovým způsoben, že další zařízení v síti jej již nemusí znovu třídit a mohou pouze uplatnit pravidla pro QoS.
Pro značkování IPv4 paketů jsou často používány hlavičkové TOS, tento přístup však výrazně omezuje množství použitelných kategorií vzhledem k využitelnému rozsahu TOS bitů.
Fronta označuje vyrovnávací paměť pro přicházející pakety[4], které je použita, když pakety přicházejí rychleji, než je zařízení je schopno odesílat. Bez této vyrovnávací paměti by všechny pakety "nad limit" musely být zahozeny.
Pakety ve frontě jsou zpracovávány podle pravidel použitého frontového algoritmu.
Existuje mnoho algoritmů pro správu paketových front, například:
Příklad QoS konfigurace, podle článku na Howtoforge[5]. "eth1" značí externí síťové rozhraní, Asterisk běží na portu 4569. Cílem je upřednostnit VoIP provoz před ostatními typy provozu.
V defaultním nastavení je pro přenos paketů použit mechanismus FIFO, toto změníme vytvořením 3 front s různou prioritou pomocí nástroje tc:
tc qdisc add dev eth1 root handle 1: prio priomap 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 0
Popis hodnot pro prioritní mapu:
1: 0x00: no QoS is set -> to 3rd queue (2) 2: 0x02: Mimimize Monetary Cost (MMC) (2) 3: 0x04: Maximize Reliability (MR) (2) 4: 0x06: MMC + MR (2) 5: 0x08: Maximize Throughput (MT) (2) 6: 0x0a: MT + MMC (2) 7: 0x0c: MT + MR (2) 8: 0x0e: MT + MR + MMC (2) 9: 0x10: Minimize Delay (MD) (1) 10: 0x12: MD + MMC (1) 11: 0x14: MD + MR (1) 12: 0x16: MD + MMC + MR (1) 13: 0x18: MD + MT (1) 14: 0x1a: MD + MT + MMC (1) 15: 0x1c: MD + MT + MR (1) 16: 0x1e: MD + MT + MR + MMC (0)
Toto nastavení říká, že většina paketů skončí ve frontě číslo 3, až na pakety s QoS Minimize-Delay, které skončí ve frontě číslo 2, pakety které mají zapnuty všechny QoS bity skončí ve frontě 1.
Nyní nastavíme parametry jednotlivých front:
tc qdisc add dev eth1 parent 1:1 handle 10: sfq limit 3000 tc qdisc add dev eth1 parent 1:2 handle 20: sfq tc qdisc add dev eth1 parent 1:3 handle 30: sfq
Přesměrujeme všechny pakety z portu 4569 (Asterisk) do fronty č. 1, která má největší prioritu:
tc filter add dev eth1 protocol ip parent 1: prio 1 u32 match ip dport 4569 0xffff flowid 1:1 tc filter add dev eth1 protocol ip parent 1: prio 1 u32 match ip sport 4569 0xffff flowid 1:1 tc filter add dev eth1 protocol ip parent 1: prio 1 u32 match ip tos 0x10 0xff flowid 1:2
Hotovo.
Pro kontrolu funkčnosti nastavení QoS je možné zobrazit statistiky tímto příkazem:
tc -s qdisc ls dev eth1
K odstranění nově vytvořených front a návratu do původního stavu slouží tento příkaz:
tc -s qdisc ls dev eth1
Mimo prostého monitorování aktuální přenosové rychlosti či množství paketů je možné získat mnoho dalších zajímavých statistik, jako je například průtok v jednotlivých třídách provozu (za předpokladu, že na síti funguje klasifikace provozu), průtok ve vnitřní síti versus průtok ven, zatížení síťových prvků, průměrná přenosová rychlost versus špičky, atd.
Naměřená data ve formě dlouhých seznamů numerických hodnot nemají příliš velkou vypovídací hodnotu, proto je vhodné tato data graficky znázornit. K tomu může posloužit například široce používaná volně šiřitelný systém RRDtool[5], který zpracovává data o síťovém provozu, včetně údajů o přenosové rychlosti a vytváří z nich různorodé grafy.