+---------------+ +---->| TCP, UDP, ... | | +---------------+ | | TRAFFIC CONTROL | v | +---------------------+ +------------+ +----------------+ -->|Input de-multiplexing|-->| Forwarding |-->| Output queuing |--> +---------------------+ +------------+ +----------------+Přeposílání zahrnuje výběr výstupního zařízení, včetně adresy a podobně. Jakmile je toto vyřešeno, pak jsou pakety zařazeny do příslušné fronty výstupního zařízení. A to je místo kde do hry vstupuje řízení provozu. Tím můžeme řešit více věcí. Rozhodovat, jestli pakety budou zařazeny do výstupní fronty nebo jestli budou zahozeny (např. jestli fronta přesáhne nějaký limit, popřípadě provoz na síti přesáhne nějaký průměr), může rozhodovat v jakém pořadí budou pakety odesílány (např. upřednostňováním některého z toků dat), může zpožďovat posílání paketů (např. udržovat průměrný tok odchozích dat pod nějakou mezí), apod. Jakmile je pak jednou tímto řizením uvolněn paket na poslání, je přebrán ovladačem zařízení a vyslán po síti.
+-+ +-----+ +------------------+ +-+ +-+ | | +------+ | |-->|Queuing discipline|-->| | | | | |---->|Filter|--->|Class| +------------------+ | |--+ | | | | | +------+ | +--------------------------+ | | | | | | | +----------------------------------+ | | | | | | +------+ | | | | | +->|Filter|-_ +-----+ +------------------+ +-+ | | | -->| | | +------+ ->| |-->|Queuing discipline|-->| | | | |--> | | | |Class| +------------------+ | |--+-->| | | | | +------+ _->| +--------------------------+ | | | | | +->|Filter|- +----------------------------------+ | | | | +------+ | | | +-----------------------------------------------------------+ | | Queuing discipline | +---------------------------------------------------------------+Na obrázku je také vidět, že více filtrů může mapovat stejné třídy paketů.
+-+ +------+ +---------------+ +-+ +-+ | | +------+ | |-->|TBF, rate=1Mbps|-->| | | | | |--+->|Filter|--->|"high"| +---------------+ | |--+ | | | | | +------+ | +-----------------------+ | | | | | | | +--------------------------------+ | | | | | | | | | | | | +------+ +---------------+ +-+ | | | -->| | | Default | |-->| FIFO |-->| | | | |--> | | +------------->|"low" | +---------------+ | |--+-->| | | | | +-----------------------+ | | | | | +--------------------------------+ | | | | | | | +---------------------------------------------------------+ | | Queuing discipline with two delay priorities | +-------------------------------------------------------------+Další obrázek ukazuje příklad se zásobníky: Nejdříve jsou zde dvě frontové disciplýny s různými prioritami. Pakety, které jsou vybrány filtrem jdou do třídy s velkou prioritou, zatímco ostatní pakety jdou do třídy s nízkou prioritou. Kdykoliv jsou pakety ve frontě s vyšší prioritou, jsou odeslány před pakety z druhé fronty. (Takto například funguje disciplína "prio"). Na vyřešení problému strádání paketů ve frontě s větší prioritou použijeme Token Bucket Filter (TBF), který zajistí rychlost 1Mbps. A konečně pakety v málo-prioritní frontě budou zpracovávány přes FIFO (First In First Out).
Poznamenejme, že v IP hlavičce jsou bity na označení třídy Type Of Service (TOS) jednotlivých paketů.(Některé jsou vyhrazené pouze pro interní použití v síti...)
Priority Queuing (PQ) zaručuje, že důležitější data se vyřizují vždy rychleji. Tento typ fronty je navržen tak, aby dával prioritu důležitým datům. Priorita se může určovat podle typu síťového protokolu (IP, IPX, nebo AppleTalk), podle příchozího zařízení, velikosti paketu, zdrojové/cílové adresy, apod. Každý paket je pak zahrnut do jedné ze čtyř front. S vysokou, střední, normální a nízkou prioritou. Pakety, které po vyhodnocení nepatří do žádné fronty se implicitně zahrnou do fronty s normální prioritou. Při vlastním přenosu pak mají pakety s větší prioritou absolutní přednost před pakety s nižší prioritou
Weighted Fair Queuing (WFQ) je pro situace, ve kterých je vhodné provádět konzistentní odezvu. Je to tokově založený algoritmus, který vytvoří rozumné fronty, aby obsluhovaly podle velikosti. Například bude-li mít jedna fronat 100 bytové pakety a druhá 50 bytové, algoritmus vezme vždy dva pakety ze druhé fronty za každý jeden paket z první fronty. Spravedlivost je tedy v tom, že se z každé fronty se zpracovává 100 bytů...
Random Early Detection (RED) je algoritmus navržený tak, aby zabránil zácpě ve vnitřní síti před tím, než nastane problém. RED sleduje provoz na síti a v případě, že se síť začne zahlcovat, začne náhodně zahazovat pakety. Výsledek zahazování paketů je, že zdroje vysílání paketů zjistí, že se pakety strácí a zpomalí své vysílání. RED je primárně navržen pro používání nad protokolem TCP IP.
Weighted Random Early Detection (WRED) kombinuje schopnosti RED algoritmu s IP přednostmi. WRED preferuje přenos paketů s vysokou prioritou. Umí zahazovat jednotlivé pakety s malou prioritou, když se síťové rozhraní začne zahlcovat, a umí poskytovat různé charakteristiky na vyhodnocování provozu pro různé třídy služeb.
V Linuxovém jádře ve volbě nastavování síťových služeb je nabídka Quality Of Service. V ní pak lze zapnout podpora pro tyto služby a některé typy front paketů...
Policing je podobný jako shaping, ale rozdíl je v jedné velmi důležité věci: Provoz, který překročí nastavenou rychlost není uložen v žádném bufferu, ale je jednoduše zahozen.
Pod Linuxem docílíme omezení propustnosti na síťovém rozhraní pro data, která se posílají směrem pryč použitím modulu jádra shaper. Tj. v .config bude tato volba.
CONFIG_SHAPER=mAby se tento modul nahrával do jádra automaticky pomocí kerneld, přidáme do souboru /etc/conf.modules něco jako
alias shaper0 shaperNebo použitím insmod nejlépe při startu systému tento modul zavedeme do jádra. Příkaz insmod dáme např. do /etc/rc.d/rc.local na Red Hat distribucích.
Dalším krokem je připojení zařízení shaper na fyzické zařízení a nastavení rychlosti. To lze zařídit příkazy, které mají podobný tvar jako
/sbin/shapecfg attach shaper0 eth0 /sbin/shapecfg speed shaper0 64000První příkaz "pověsí" pseudo-zařízení "shaper0" na skutečné rozhraní "eht0", což už je vlastní síťová karta.
Dalším krokem pak nastavíme, aby se data posílala přes zařízení "shaper0" místo "eth0". Tj. pomocí příkazů ifconfig a route v takovémto nějakém tvaru:
ifconfig shaper0 host netmask mask broadcast bcast up route add -net net netmask mask dev shaper0Samozřejmě parametry napsané kuzívou je nutno nahradit skutečnými hodnotami... Tímto jsme tedy zařídili, že se přes rozhraní "shaper0" budou posílat data. Ovšem v tuto chvíli se posílají i přes zařízení "eth0", proto posledním krokem tomu zamezíme.
route delete default eth0 route add default gw gateway shaper0Jestli omezení skutečně funguje lze zjistit, například pomocí programu ftp, který při stahování ukazuje rychlost...