trafik šejpingTakéShaping, Packet shaping, Bandwidth shapingPokročilý
Definice
Traffic shaping je technika řízení síťového provozu, která zdržuje odesílání paketů ve frontě tak, aby výsledný tok nepřekročil zvolenou rychlost a tvar. Na rozdíl od policingu, který nadbytečné pakety zahazuje, shaping je vyrovnává v čase pomocí bufferu, čímž snižuje ztrátovost za cenu vyšší latence.
Než se na to spolehnete: Wikidata ID Q1543615 pro Traffic shaping jsem neověřil s jistotou, prosím o kontrolu nebo odstranění. Konkrétní syntaxe příkazů tc odpovídá běžné praxi iproute2, ale parametry je vhodné ověřit proti aktuální man stránce.
Proč se provoz vůbec tvaruje
Sítě jsou sdílený prostředek s pevnou kapacitou, ale aplikace odesílají data v nárazech. Jeden nesynchronizovaný burst zaplní frontu na výstupním rozhraní, vytlačí z ní citlivější provoz (hlas, videohovor, ACK pakety) a způsobí zahazování i tam, kde by průměrná zátěž kapacitu vůbec nevyčerpala. Traffic shaping tenhle náraz rozprostře do delšího intervalu: pakety čekají v samostatné frontě a odcházejí tempem, které si správce určil.
Co se děje uvnitř shaperu
Většina implementací stojí na algoritmu token bucket. Do pomyslného kbelíku přitékají tokeny konstantní rychlostí (CIR, committed information rate) a kbelík má omezenou hloubku, která určuje povolený burst. Paket smí odejít, jen když je pro něj dost tokenů; jinak čeká. Protože se nevyužité tokeny hromadí, shaper připouští krátké špičky nad nominální rychlost, ale dlouhodobý průměr drží na zadané hodnotě.
Přísnější variantou je leaky bucket, který odesílá naprosto rovnoměrně a burst nepovoluje vůbec. V praxi se oba přístupy kombinují s hierarchií front (například HTB v Linuxu), kde jednotlivé třídy provozu mají vlastní strop i garantované minimum a mohou si mezi sebou půjčovat nevyužitou kapacitu.
Shaping versus policing
Policing měří stejnou veličinu, ale s nadlimitním paketem naloží okamžitě: zahodí ho, nebo mu sníží prioritu přeznačením DSCP. Nepotřebuje buffer, nezvyšuje latenci a hodí se na vstupní rozhraní, kde stejně nemáte kontrolu nad odesílatelem. Shaping naopak potřebuje paměť a zpoždění vytváří záměrně, zato se k TCP chová mnohem přívětivěji: místo ztráty, na kterou TCP reaguje razantním snížením okna, dostane odesílatel jen pomalejší zpětnou vazbu.
Kde je hranice použitelnosti
Buffer shaperu se dá předimenzovat a vznikne bufferbloat: fronta narostou na stovky milisekund, throughput je formálně v pořádku, ale interaktivní provoz je nepoužitelný. Proto se moderní shapery párují s AQM disciplínami typu CoDel nebo FQ-CoDel, které frontu aktivně krátí.
Typická nasazení
- Poskytovatel připojení prodává tarif 100/20 Mbit/s a shaperem drží zákazníka na smluvní rychlosti.
- Firemní WAN linka, kde zálohy nesmí ukrást pásmo VoIP telefonům.
- Cloudové a API služby, kde se stejný princip token bucketu používá pro rate limiting požadavků.
- Testovací prostředí, kde se pomalá síť simuluje záměrně, aby se odhalily chyby v aplikaci.
Jak se shaping konfiguruje v Linuxu
Linuxové jádro řeší tvarování subsystémem tc nad queueing disciplínami. Nejjednodušší shaper je tbf (token bucket filter), pro víc tříd se používá htb. Zásadní je správně zvolit trojici rychlost, velikost bursta a maximální latenci fronty: příliš malý burst sráží propustnost na rychlých linkách, příliš velký ruší smysl celého opatření.
Příklady z praxe
Omezení uploadu na 20 Mbit/s pomocí tc
Na výstupním rozhraní domácího routeru se nastaví token bucket filter, který drží upload na sjednané rychlosti a nechá projít krátký burst 32 kB. Bez tohoto omezení by fronta vznikala až v modemu poskytovatele, kde ji nelze řídit a kde by rostla latence pro všechny relace. Se shaperem na vlastní straně zůstává fronta pod kontrolou.
tc qdisc add dev eth0 root tbf rate 20mbit burst 32kb latency 50ms tc -s qdisc show dev eth0Zálohy nesmí zabít VoIP na firemní lince
Firma má 50Mbit WAN linku, po které v noci běží replikace do datového centra, ale hovory se vedou i po pracovní době. Hierarchický shaper rozdělí linku na třídu pro hlas s garancí 10 Mbit/s a třídu pro zálohy se stropem 45 Mbit/s. Zálohy tak využijí volné pásmo, ale při zahájení hovoru se automaticky stlačí a jitter zůstane v jednotkách milisekund.
Časté omyly
- MýtusTraffic shaping zrychlí síť.
- Ve skutečnostiTraffic shaping nepřidá ani bit kapacity, naopak celkovou propustnost obvykle mírně sníží. Jeho přínosem je předvídatelné rozdělení existujícího pásma, takže citlivé aplikace přestanou trpět nárazy ostatních.
- MýtusShaping a policing jsou dvě jména pro totéž.
- Ve skutečnostiShaping nadlimitní pakety pozdrží ve frontě, policing je rovnou zahodí nebo přeznačí. Shaping tedy zvyšuje latenci a spotřebovává paměť, policing zvyšuje ztrátovost a je bezstavově levnější.
- MýtusČím větší buffer, tím lepší tvarování.
- Ve skutečnostiVelký buffer vede k bufferbloatu: pakety sice neztrácíte, ale čekají stovky milisekund a interaktivní provoz je nepoužitelný. Fronta se proto omezuje časem a doplňuje aktivní správou fronty, například CoDel.
Časté dotazy
- Kdy je lepší traffic shaping než policing?
- Traffic shaping se volí tam, kde odchozí provoz sami generujete nebo přeposíláte a záleží vám na tom, aby TCP relace nezažívaly zbytečné ztráty. Typicky jde o výstupní rozhraní směrem k pomalejší lince: shaper nadbytek pozdrží, odesílatel zpomalí přirozeně a propustnost zůstane hladká. Policing má naopak smysl na vstupu, kde už je pozdě cokoli zdržovat a kde je cílem jen vynutit limit vůči cizímu odesílateli, případně tam, kde nechcete platit pamětí a latencí za buffer.
- Zvyšuje traffic shaping latenci?
- Traffic shaping latenci zvyšuje záměrně, protože nadlimitní pakety místo zahození čekají ve frontě. Velikost zpoždění určuje nastavená hloubka fronty: při limitu 50 ms nikdy paket nečeká déle, při neomezené frontě může čekání narůst na stovky milisekund. Právě proto se u shaperu vždy nastavuje maximální latence nebo se kombinuje s aktivní správou fronty typu CoDel či FQ-CoDel, která dlouhé fronty proaktivně krátí a udrží interaktivní provoz svižný i při plném vytížení linky.
- Jak souvisí traffic shaping s rate limitingem u API?
- Traffic shaping i rate limiting u API stojí často na stejném algoritmu, token bucketu. Rozdíl je ve vrstvě a v reakci na překročení: síťový shaper pracuje s pakety a nadbytek zdržuje, API limiter pracuje s HTTP požadavky a nadbytek obvykle odmítne stavovým kódem 429. Některé brány ale nabízejí i variantu, která požadavek zařadí do fronty a odbaví ho později, což je funkčně přesně shaping přenesený na aplikační vrstvu.
- Čím se traffic shaping nastavuje v Linuxu?
- Traffic shaping v Linuxu obstarává subsystém traffic control ovládaný nástrojem tc z balíku iproute2. Základní jednoduchý shaper představuje disciplína tbf, tedy token bucket filter s parametry rate, burst a latency. Pro rozdělení linky mezi více tříd provozu s garancemi a stropy se používá htb, hierarchical token bucket, doplněný filtry, které pakety do tříd zařazují. Moderní domácí i firemní nasazení kombinuje shaper s fq_codel nebo cake, aby fronta nenarostla do bufferbloatu.
Zdroje
- Traffic shaping(otevře se v novém okně)
- RFC 2475: An Architecture for Differentiated Services(otevře se v novém okně)
- RFC 8289: Controlled Delay Active Queue Management(otevře se v novém okně)
- Linux kernel documentation(otevře se v novém okně)