Klasifikace provozu sítě
Obsah
Pojem klasifikace provozu sítě přímo souvisí s mnohem známějším pojmem - kvalita služby (Quality of Service). Každý si asi dovede představit, co se pod tímto pojmem skrývá např. v restauraci, ale zkuste to v prostředí síťových služeb. Proto byly stanoveny určité parametry, podle kterých se tato kvalita dá porovnávat. Následuje jejich přehled spolu s jejich stručým popisem:
- Dostupnost(Availability) - typická hodnota, obzvláště pro ISP. Ukazuje, kolik % z celkové doby byla služba dostupná. Má to ale jeden háček - na toto existují 2 pohledy. I když vám váš ISP bude tvrdit, že dostupnost je 99 %, vám to může být jedno, jestliže je služba nedostupná v polovině případů, kdy něco akutně potřebujete odeslat.
- Šířka pásma(Bandwidth) - tento parametr je jeden z nejproblémovějších. Nedá se totiž přesně změřit - je založená na slibech. Váš ISP vám obvykle garantuje např 512 kbps, ale již vám neřekne, že tuto kapacitu na jeho společném připojení do sítě sdílíte s dalšími 20 lidmi. Můžete hádat, jakou výmluvu dostanete na stížnosti na nízkou propustnost.
- Zpoždění(Latency) - čas od zadání požadavku do jeho splnění. Měřeno obvykle v ms. Velice důležitý parametr zejména pro real-time aplikace (video, zvuk, telefonie).
- Variabilita (rozptyl) zpoždění(Jitter) - udává změny zpoždění v čase. Vysoké hodnoty jsou pro výše uvedené aplikace mnohdy smrtelně nebezpečné...
- Ztrátovost(Losses) - udává množství "ztracených" dat (nejčastěji zahozených přetíženými směrovači po cestě). Pod tímto pojmem se skrývá pojem spolehlivost.
Každý provider a každý uživatel by měl nabízet (požadovat) služby co nejlepší kvality. Naskýtá se tedy otázka, jak toho dosáhnout. O možných přístupech pojednává následující kapitola.
Existují 3 základní přístupy, jak zajisti QoS v sítích nad IP:
Jedná se o směrování podle položky TOS (Type Of Service) v protokolu IP. I když bylo toto pole definováno, prní implementace IP se spíše snažily zajistit prosté doručení paketů a o kvalitu služeb se příliš nestaraly. Používá se prvních 5 bitů tohoto pole. Určuje se priorita a typ služby. Tyto hodnoty by měli nastavovat koncoví uživatelé. Požadavky na uživatele jsou popsány v RFC 1122, 1123 a jejich dodatcích. Používá se v protokolech OSI IS-IS Intra-domain Routing Protocol (RFC 1142) a OSPF (RFC 2328).
Architektura integrovaných služeb (RFC 1633) slouží k zajištění real-time služeb v současném Internetu a kontrolovného sdílení linek. Snaží se změnit současný systém "nejlepší snahy" (Best-effort). Navrhuje 2 typy služeb - zaručené služby (guarantedd sevice) a předpovídající služby (predictive service). Základním předpokladem je, že síťové služby lze přímo ovládat. Předpokládá, že síť podporuje rezervaci prostředků (resource reservation) a vstupní kontrolu (admission control). Referenční síť má obsahovat následující prvky:
- Plánovač paketů (Packet scheduler) - řídí přenos paketů. Může podporovat různé typy front. Funguje na linkové úrovni.
- Vstupní kontrolu (Admission control) - rozhoduje, jestli lze nově vzniklému proudu garantovat patřičnou kvalitu služby bez vlivu na ostatní nebo ne.
- Třídič (Classifier) - třídí pakety do patřičných skupin pro účely plánovače.
- Protokol pro rezervaci prostředků (Resource reSerVation Protocol - RSVP) - stará se o vznik a udržování informací o kvalitě služby daného proudu po celé délce přenosu.
Model integrovaných služeb se stará hlavně o čas doručení jednotlivých paketů. Sdílení prostředků je řešeto zvlášť pro každý datový proud. Model podporuje sdílení linky (rozdělení šířky pásma - buď podle hostlitelů, protokolů nebo služeb). Model obsahuje prvky pro specifikaci důležitosti jednotlivých paketů v rámci proudu (v případě nutnosti se zahazují méně důležité), účtovatelnost a způsob domluvy mezi sítí a uživatelem
Umožňují "diskriminaci" služeb v Internetu bez nutnosti udržovat stavové informace o každém proudu nebo uzlové signalizace (per hop signalling). Používají pole TOS v protokolu IP. Tyto položky nastavují hraniční směrovače a vnitřní routery jej pak podle toho směrují. Existuje několik přístupů k diferenciovaným službám. Mezi nejpoužívanější patří:
- Zajištěné služby (Assured services) - každému uživateli je staticky nastavena (a zajištěna) konkrétní kapacita. Pokud ji uživatel překročí, data navíc už nemají zajištěnu stejnou kvalitu služeb.
- Premium services (tady mě překlad opravdu nenapadl) - pro danou službu je zajištěna špičková kapacita, která je zajištěna, ale nesmí být překročena. Daný proud je "uhlazen" na tuto hranici, aby nedocházelo ke špičkám.
- Víceuživatelské sdílení (User Share differentiation) - uživatel má garantovánu minimální kapacitu. Aktuální volná kapacita je pak sdílena všemi uživateli podle jejich domluvené kapacity.
Síť musí "vědět", co dělat s pakety se stanovenou prioritou. Této schopnosti se říká PHB (Per Hop Behaviour). IETF definuje 2 typy PHB:
- AF (Assured Forwarding) - Pakety jsou rozděleny do tříd a paket v dané třídě má přiřazenu hodnotu přednosti před zahozením
- EF (Expedited Forwarding) - minimalizuje zpoždění a rozptyl až do výše provozního profilu, zbytek je zahozen.
Shrnutí: Hlavní rozdíl mezi výše uvedenými službami: integrované služby zajišťují požadovanou kvalitu služby pro konkrétní uživatelský proud dat. Diferenciované služby naopak globálně znevýhodňují dané třídy proudů dat. Integrované služby se v tomto pohledu chovají jako "dynamické", diferenciované jako "statické" ve smyslu jejich nastavení.
Triviální přístup je, že v momentě zahlcení linky a vstupní fronty (FIFO) jsou další pakety zahazovány. To ale vede k nežádoucím efektům zejmnéna u spojovaných služeb (zdvojování paketů). Řešením jsou sofistikovanější metody. Následuje jejich stručný popis. Podrobnější informace se dají najít na Netu nebo například v materiálech k přednášce P013-Počítačové Sítě.
- RED (Random Early Detection) - když se naplnění fronty dostane na určitou hranici, pravděpodobnost zahazození paketu začne lineárně růst.
- WRED (Weighted Random Early Detection) - Oproti RED podporuje navíc priority.
- TBF (Token Bucket Filter) - idea: máme vědro s dírou, do kterého v pravidelných intervalech přitékajá 1 token. Příchozí paket je propuštěn dále, jestliže je k dispozici potřebný počet tokenů ve vědru (podle jeho délky), jinak je zahozen.
- SFQ (Stochastic Fairness Queuing) - Pakety jsou rozděleny do toků. Ty jsou pak obsluhovány cyklicky (Round Robin).
- WFQ (Weighted Fairness Queuing) - Stejné jako SFQ, ale fronty mají priority.
- CBQ (Class Based Queuing) - Pakety jsou řazeny do tříd, kde jsou dále zpracovány.
- HTB - Obdobné CBQ.
- Prio - Existuje několik prioritních front.
Často používanými pojmy jsou:
- policing - jedná se o mechanismus, který udržuje provoz na vstupu i výstupu tak, aby nepřekročil povolenou šířku pásma pomocí zpožďování nebo zahazování paketů (v Linuxu se pouze zahazuje, neprovádí se zpožďování, neexistovalo tady žádné řízení na vstupu, na rozdíl např. od hardwareových routerů CISCO, i když současné kernely by již toto měly umět díky Ingress Qdisc - CONFIG_NET_SCH_INGRESS, neviděl jsem ale nikde příklady použití)
- shaping - metoda zpožďování paketů tak, aby na výstupu nepřekročily danou povolenou šířku pásma. Takto se také nazývá metoda zahazování paketů za účelem snížení provozu.
- scheduling - rozhodování, které pakety jsou důležitější a půjdou ven přednostně před ostatními.
Průchod paketu síťovým prvkem:
Podpora zatím není úplná, pracuje se na tom. Existuje RSVP démon, který poskytuje 3 rozhraní: pro aplikace, řídící pro kernel a pro směrování.
Podpora je obsažena v kernelu. Podpora je jak pro EF PHB, tak i pro AF PHB. Schéma popisuje následující obrázek:
Kernel musí být skompilován s podporout QoS - nastevení CONFIG_NET_SCHED, CONFIG_NETLINK, (alespoň CONFIG_NET_SCH_CBQ CONFIG_NET_SCH_SFQ CONFIG_NET_SCH_TBF z CONFIG_NET_SCH_*), CONFIG_NET_SCH_DSMARK, CONFIG_NET_QOS, CONFIG_NET_ESTIMATOR (pro měření průtoku přes zařízení), CONFIG_NET_CLS, CONFIG_NET_CSL_U32, CONFIG_NET_CLS_POLICE, CONFIG_NET_SCH_INGRESS. Poslední 2 pro omezení průtoku.
Dále jsou potřeba tyto nástroje: tc (balík iproute2) nebo shapecfg a cbq (oba v balíku shapecfg).
Slouží pouze k omezení šířky pásma. Vytvoří nové síťové rozhraní, které je poté připojeno na některé stávající. Konfigurace vypadá následovně:
# modprobe shaper
# shapecfg attach shaper0 eth0
# shapecfg speed shaper0 64000
# ifconfig shaper0 192.168.1.1 netmask 255.255.255.0 broadcast up
# route add -net (net) netmask (mask) dev shaper0
První řádek nahraje modul shaper, druhý vytvoří nové zařízení a připojí jej na eth0. Třetí řádek omezí propustnost na 64000 bps (hodnota může být od 9600 do 256000). Pak se musí zařízení aktivovat a nastavit směrování. Problém shapecfg je výše uvedené omezení. Je to zde kvůli tomu, že pokud systém není dlouho v režimu jádra, např. při náročných výpočtech, nemá si jak ověřit čas a tímpádem ani rychlost.
shapecfg lze rozšířit (patchem) o specifikaci páru zdrojové/cílové adresy.
Jedná se o sh-skript usnadňující nastavení omezení šířky pásma. Používá nástroje z balíku iproute2. Slouží k omezení šířky pásma a k nastavení priorit. Používá CBQ. Funguje pouze s ethernetem a ARCnetem. Konfigurace je v souboru v adresáři (RedHat) /etc/sysconfig/cbq/cbq-XXXX.jmeno (XXXX = ID shaperu = CBQ třída, jmeno= jméno shaperu) a vypadá následovně:
DEVICE=eth0,10Mbit,1Mbit
RATE=128Kbit
WEIGHT=10Kbit
PRIO=5
RULE=192.168.1.0/24
Význam jednotlivých položek:
eth0 ... zařízení
10Mbit ... skutečná šířka pásma daného zařízení
1Mbit ... váha dané třídy
RATE ... požadovaná rychlost
WEIGHT ... váha tohoto shaperu
PRIO ... priorita tohoto shaperu (1 - nejvyšší)
RULE: [zdrojová adresa][:zdrojový port],[cílová adresa][:cílový port]
příklady:
RULE=10.1.1.0/24:80 - veškerý provoz do dané sítě na port 80 bude omezen
RULE=10.2.2.5 - daná IP adresa bude omezena
RULE=:25,10.2.2.128/25:5000 - veškerý provoz ze všech adres a portu 25 na adresy 10.2.2.128-10.2.2.255 a port 5000 bude omezen
RULE=10.5.5.5:80, - shaper bude aktivní pouze pro provoz z portu 80 z adresy 10.5.5.5
Je možné zadat více RULE.
!!! shaper funguje pouze pro odchozí provoz - pokud chceme obousměrný, musíme ho nastavit pro oba směry zvlášť!!!
Použití:
# cbq start
# cbq stop
Součást balíku iproute2. Umožňuje přiřadit k síťovému rozhraní řazení do front, třídy a filtry. Syntaxe je dobře popsána v souboru README.iproute2+tc, obsaženém v balíku iproute. Takže jenom stručně:
Řazení do front:
# tc qdisc [ add | del | replace | change | get ] dev ZAŘÍZENÍ [ handle ČÍSLO [ root | parent ČÍSLO_RODIČE ] [ estimator INTERVAL KONSTANTA ] [ [ TYP_ŘAZENÍ ] [ help | VOLBY ]
kde TYP_ŘAZENÍ = { [p|b]fifo | cbq | tbf | red | prio | ...}
Každá fronta má ještě svoje další parametry. Např RED:
# tc ... red limit LIMIT min MIN max MAX avpkt PRUM burst BURST probability PROB bandwidth RYCHLOST
Pro omezení přenosové rychlosti pro danou třídu se používá fronta Ingress. Nejprve se pomocí firewallu označí a poté se jim přiřadí požadovaná kapacita (vhodné jako obrana proti SYN floodingu).
Dá se s tím dělat další spousta kouzel, zájemcům doporučuji diplomovou práci Jakuba Máchy.
Tento nástroj ve spojení s programem ip z téhož balíku se dá použít např i pro rozdělení zátěže (load balancing). Toto funguje na principu vytvoření virtuálního zařízení, které spojuje ty fyzické (pomocí paketového plánovače True Link Equalizer - CONFIG_NET_SCH_TEQL v jádře). Ukázka nastavení je např v Advanced Routing & Traffic Control HOWTO.
Pomocí iproute v kombinaci se značkováním ve firewallu (předchozí přednáška) lze také využít (pomocí pravidla fwmark) např. ke kontrole a nastavení QoS směrování pro dané pakety.
Pro měření a testování se dají použít např. tyto programy:
- ttcp - pro testování propustnosti TCP nebo UDP spojení. Na jednom konci se spustí v módu odesilatel (transmit), na druhém v módu příjemce (receive). Je pravděpodobně součástí vaší distribuce.
- iptraf - obecný nástroj pro monitorování síťového provozu.
Kontrola síťového provozu, Diplomová práce, Jakub Mácha, FI MUNI, Brno 2000
cbq init script
CBQ - praktické využití
Link-sharing and Resource Management Models for Packet Networks
Adv-Routing-HOWTO
Klasika...