Ez a dokumentum rövid áttekintést ad a tcng (Traffic Control - Next Generation; következő generációs forgalomirányítás ) HTB-vel (Hierarchical Token Bucket) való használatáról, mely eszközök segítségével a Linux rendszeren forgalomszabályozást végezhetünk.
Ez a gyakorlatsor elsősorban olyan rendszergazdáknak készült, akik:
LEGALÁBB alapszintű forgalomirányítási ismeretekkel rendelkeznek,
forrásból tudják FORDÍTANI az iproute2 és a tcng csomagokat, vagy
Ugyanezen csomagokat SRPM-ből telepíteni,
Az általuk használt rendszer moduláris szerkezetű rendszermagja támogatja a HTB és DSMARK modulokat,
VAGY képesek rendszermagot fordítani ezeknek a támogatására.
![]() | Ez a doksi nem átfogó és nem mértékadó. A szerző várja mind a pozitív, mind a negatív véleményeket a <mabrown@securepipe.com> e-mail címen. A helyreigazításokat, kiegészítéseket is szívesen veszi. |
A forgalomirányítás egy hálózaton, vagy hálózati eszközön történő teljes csomag-várakozósor (packet queuing) alrendszer összefoglaló neve. A forgalomirányítás több műveletből tevődik össze. Az osztályozás (classifying) során történik a csomagok azonosítása, majd egyedi várakozósorokba, osztályokba rendezése. Az engedélyezés (policing) az osztályozásnak megfelelő adatfolyamban a csomagok vagy bájtok számának szabályozását jelenti. A besorolás (scheduling) a döntéshozatali elem, ahol is a csomagokat az adattovábbításhoz sorrendbe, majd újra sorrendbe rakjuk. Az alakítás (shaping) az a folyamat, amikor a csomagokat késleltetjük majd továbbküldjük, ezáltal az átviteli sebesség nagyjából egyenlő ütemű, és előre kiszámítható lesz.
A forgalomirányítás sokoldalúságát kihasználva komplex rendszereket lehet kialakítani, annak érdekében, hogy egy bizonyos folyamat (vagy alkalmazás) részére sávszélességet biztosítsunk, vagy a rendelkezésre álló sávszélességet korlátozzuk bizonyos folyamatok, vagy alkalmazás előtt.
A forgalomirányítás egyik kulcs-koncepciója a tokenek (jelek) fogalma. Az engedélyezés vagy alakítás folyamata során ki kell számítani az elküldött bájtok vagy csomagok számát, vagyis melyik, milyen sebességgel kerül majd továbbításra. Minden csomag vagy bájt (az alkalmazástól függ, hogy melyik) egy jelnek felel meg, és az engedélyező- vagy alakító-alkalmazás csak akkor továbbítja a csomagot vagy bájtot, ha az rendelkezik a megfelelő jellel. Egy alkalmazás metaforikus jeltárolója a tároló (bucket). Röviden a tároló jelzi, mind az egyszerre használható jelek számát (ez a tároló mérete), mind pedig a jelek újratöltődésének ütemét (milyen gyorsan töltődik újra a tároló).
Bővebbet a 2.2 példában találsz a tároló használatára a Linux forgalomirányítási rendszerben.
Linux rendszereken a forgalomirányítás mindig is komoly kihívást jelentett. A tc parancssori eszköz kapcsolatot jelent a rendszermag azon részeivel, amelyek az alakítás, besorolás, engedélyezés, és osztályozás folyamatait végzik. A parancs szintaxisa viszont rendkívül bonyolult. A tcng projekt azzal, hogy a tc parancssori eszköz fölé nyelvi réteget fektet, sokkal barátságosabb környezetet biztosít a felhasználónak. A tcng-ben írt forgalomirányítási beállítások ezáltal könnyebben kezelhető, kevésbé bonyolult, és - ami talán a legfontosabb - hordozhatóbb lesz.
A Hierarchichal Token Bucket a CBQ-nál egyszerűbb konfigurációs paraméterekkel rendelkező csoportnyi qdisc, melyet Martin Devera alkotott meg. A HTB-ről és használatáról elég sok dokumentum található a szerző honlapján, valamint Stef Coene weboldalán is. Következzen egy rövid kis ismertető a HTB rendszerről.
Alapvetően a HTB egy tetszőleges számú, hierarchikusan felépített jeltároló (token bucket) (...igen, erre könnyen rájöhettél magadtól is). Tételezzük fel a legegyszerűbb esetet: Bármilyen eszközön az elsődleges kilépési sor a root qdisc.
A root qdisc egyetlen osztályt fog tartalmazni (komplex esetekben több osztály is csatolódik a root qdisc-hez). Az egyszerű HTB osztályt két paraméter jellemzi: a rate (mérték) és a ceil (plafon). A top-level (legfelsőbb szintű) osztálynál ezek az értékek meg kell, hogy egyezzenek és a kapcsolat teljes sávszélességét mutatják.
A HTB-nél, a rate jelenti egy osztály számára a garantált sávszélességet, a ceil pedig a maximális sávszélességet. A rate és a ceil közötti sávszélességet mindig a szülő osztálytól veszi az alkalmazás, vagyis a legfelső szinten lévő osztálynál a rate és a ceil ugyanannyi lesz.
Számos gyerek-osztály létesíthető ez alatt az osztály alatt, kezdetben mindegyikhez némi sávszélességet rendelve a szülő-osztály meglévő készletéből. Ezekben a gyerek-osztályokban már nem kell a rate és a ceil paramétereknek megegyezniük, mint a szülő osztálynál. Ez lehetővé teszi, előre meghatározott sávszélesség tartalékolását bizonyos osztályoknak. Lehetővé válik továbbá a HTB számára, hogy összehasonlítsa a meglévő sávszélesség eloszlását az osztályok sávszélességeivel. A következő példa talán rávilágít a lényegre:
A Hierarchical Token Bucket magában foglal egy osztálynyi besoroló mechanizmust a Linuxon való forgalomirányításhoz, és ott van még a felhasználónak a rate és a ceil paraméter az egyes osztályok abszolút sávszélességének szabályozásához, valamint, hogy jelezze a sávszélesség eloszlását, amikor extra sávszélesség adódik (egészen a ceil-ig).
Jegyezzük meg, hogy a top-level osztály sávszélességének a beállításakor a forgalom alakításnak (shaping) csak akkor lesz értelme, ha a szűk keresztmetszet a hálózat és az Internet között az a gép, amin dolgozunk. Tipikusan ilyen eset az otthoni vagy irodai hálózati környezet, ahol az egész helyi hálózatot DSL vagy T1 kapcsolatok kötik össze.
Gyakorlatilag ez annyit jelent, hogy a top-level osztály sávszélességét úgy kell beállítani, hogy vesszük az egész, rendelkezésre álló sávszélességet és kivonunk belőle egy keveset.
A tcng (Traffic Control - Next Generation, következő generációs forgalomirányítás) Werner Almesberger projektje, erőteljes, egységes és egyértelmű nyelvezet megteremtésére, amellyel a forgalomirányítási szerkezetek pontosan megfogalmazhatók. A tcng csomagban található tcc fordító alakítja át a tcng nyelvet többféle kimeneti formára. Alapesetben a tcc beolvas egy fájlt (amely argumentumként, vagy STDIN-ként adható meg) és a STDOUT kimenetre küld egy sorozat tc parancsot, amelyek az elképzelt forgalomirányítási szerkezetet a rendszermagban létrehozzák. (lásd az iproute2 fejezetet lentebb)
A támogatott rendezési elveket megtalálod a tcng Queuing discipline parameters(Útmutató a tcng paramétereihez) dokumentumban. A tcng projekthez a HTB támogatást Jacob Teplitsky írta, aki aktív tag a LARTC levelezési listán.
A tcc eszköz sokféle kimenetet tud produkálni, ez a dokumentum azonban csak a legáltalánosabb és alapértelmezett kimeneti eredménnyel foglalkozik. A TCNG képzikönyv foglalkozik bővebben a tcng parancs használatával.
A tcsim eszköz képes szimulálni az adott forgalomirányítási szabályokkal beállított rendszermag viselkedését, mégpedig úgy, hogy tcng beállítófájlokat olvas és értelmez. Habár a tcsim elég jelentős részét képezi a tcng projectnek, itt többet nem foglalkozunk vele.
Előző | Tartalomjegyzék | Következő |
Szerzői jog és licenc | Követelmények |