Klasifikace síťového provozu

Pavel Koudela, 98541 (at) mail.muni.cz


Obsah


Co je klasifikace provozu sítě

Problém:
Aplikace kladou na síť protichůdné požadavky. Datový přenos je charakteristický proměnnými nároky na šířku pásma a na spolehlivost spojení. Real-time aplikace ( Ip-telefonie, TV, Video- on demand) naproti tomu požadují relativně konstantní pásmo a rychlou odezvu. Částečná ztráta informace do určité míry není důležitá a lze ji kompenzovat různými opravnými metodami.
Aby síť efektivně využívala síťové prostředky z hledika real-timeových aplikací musí datům z těchto alikací poskytovat určitou kavalitu služeb. Podpora Quality of Services - QoS nam ukazuje na to že síť má podporu pro řízení síťového provozu , a díky tomu plnit požadavky jednotlivých služeb na šířku pásma nebo potřebnou odezvu, ztrátovost a jitter (kolísání zpoždění paketů v závislosti na frontách směrovačů). V současné době je termín kvalita služeb predevším sklonován v souvislosti s dnešním Internetem. Internet jako celosvětová síť je založena na protokolové TCP/IP a ta sama o sobě není schopna poskytovat kvalitu služeb.

Parametry QoS

Parametry QoS jsou veličiny, které ovlivňují výslednou kvalitu služby. Jsou závislé na cestě packetu.

zpoždení z hlediska velikosti zpoždění jsou výhodné malé velikosti fragmentů. To ale způsobuje větší zatížení sítě, protože se zmenší rozdíl mezi velikostí hlavičky a datami, které paket obsahuje.

ztrátovost paketu Datagramy, které jsou ztraceny a nemohou být obnoveny, vytvářejí v konverzaci mezery. Pokud je ztráta datagramů rozložena náhodně nevede to k tak významnému zhoršení hlasové kvality.

Jitter Jitter zachycuje v jak proměnných časech pakety přicházejí. Na eliminaci pozdě příchozích packetů se používá jitter buffer mezi síťovou vrstvou a VoIP aplikacema jež jsou na toto náročné. Buffer ovšem zvýší celkové spoždění

Dva základní modely QoS

IntServ - integrované služby - Na kvalitu služby mají vliv všechny uzly sítě mezi komunikujícími stanicemi. Předpokládá záruky pro QoS po celé trase mezi zdrojovou a cílovou stanicí. Pro tento účel musí všechny uzly na trase získat informace o parametrech požadovaných pro daný datový tok a vyhradit pro něj odpovídající zdroje. To je spojeno s režií na každém takovém aktivním prvku mezi stanicemi (napříč celým Internetem).
DiffServ - diferencované služby - Pracovní skupina IETF proto vytvořila podstatně jednodušší model QoS, který je založen na agregaci datových toků do malého počtu tříd (Class of Service - CoS) a jim odpovídajících kvalitativních typů služeb. Režie, spojená s rozdělováním kapacity sítě, je přesunuta na hraniční routery (např. router mezi klienty ISP a samotnou sítí ISP), které jednotlivým datovým tokům přidělují šířku pásma na základě tříd (klasifikace paketů). Routery v jádru sítě komunikují bez záruk - best effort.

Omezování šířky pásma

Ovlivňování příchozího síťového provozu se označuje jako 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, kernel by ale podporu měl mít již také vestavěnou Ingress Qdisc - CONFIG_NET_SCH_INGRESS

Modelování odchozího provozu se nazývá shaping. Jo to metoda zpožďování, zahazování a přeuspořádávání paketů tak, aby na výstupu nepřekročily danou povolenou šířku pásma.

Scheduling se nazývá rozhodování, které pakety jsou důležitější a půjdou ven přednostně před ostatními.


Fronty packetů

Fronty určují v jakém pořadí se packety odesílají ze síťivého rozhraní. Řazení je ovlivňováno algoritmy pro zajištění již zmiňovaného QoS. Způsob řazení paketu do fronty je označován queue discipline (qdisc).

Metody pro omezení problémů které nastanou zahlcením linky nebo vstupní fronty FIFO. Při zahlcení by docházelo k zahazování paketů. Problém by byl tím ještě horší u spojovaných služeb, kde by docházelo ke zdvojování paketů. Nyní tedy bude následovat stručný popis jednotlivých metod:

RED (Random Early Detection) - při překročení určité hranice roste zahazování paketů lineárně
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éká 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.
Prio - PRIO vytvoří přednastavený počet tříd, které mají které mají očíslované priority a zpracovávají se postupně (od nejnižší, teprve až je prázdná, může se zpracovat další třída). Jednotlivé třídy zprácovávají pakety úplně obyčejnou frontou, ale lze na ně pověsit libovolnou jinou disciplýnu.


Monitorovací programy

Monitorovací programy se hodí k informování o trafficu jednotlivých služeb, ale i pro podrobnější analýzu síťe.

Iptraf

Program pro sledování, zaznamenávání a analýzu síťového provozu. Vyznačuje se přehledným textovým uživatelským rozhraním a snadným ovládáním. Jde se o konzolový program se schopností vytvářet statistické přehledy, které umí i logovat, a který podporuje všechny důležité protokoly (IP, TCP, UDP, ICMP, ARP, RARP OSPF ..)

Filtry a jejich nastaveni

Filtry jsou nespornou předností programu IPTraf a poskytují nám mnoho možností navíc. Filtry se aplikují na bloky dat dle jejich protokolu (TCP, UDP, ARP a RARP)

Pro každý protokolární filtr nám IPTraf zobrazuje jeho stav a dovoluje nám pro některé protokoly (TCP, IP, UDP) definovat vlastní filtry, které se pak účastní výpisů v jednotlivých režimech programu IPTraf. Lze definovat více filtrů se stejným jménem.

V žádném případě s nimi však nevystačíme v případě, že potřebujeme nějakou hlubší či komplexní analýzu sítě. Spíše než cokoli jiného poslouží docela dobře k orientačnímu a zběžnému náhledu určité situace, která nás zajímá.

Alternativa Iftop

jednoduchy program zobrazující seřazené jednotlive spojení podle průtoku dat.


Podpora QoS v jádře Linuxu

Pro podporu QoS v Linuxu je nutné do konfigurace jádra přidat volby pro QoS.

CONFIG_NET_SCHED=y
CONFIG_NET_SCH_CLK_JIFFIES=y
  
Jednotlivé disciplíny (qdisc) 
    CONFIG_NET_SCH_CBQ=m
    CONFIG_NET_SCH_HTB=m
    CONFIG_NET_SCH_PRIO=m
    CONFIG_NET_SCH_RED=m
    CONFIG_NET_SCH_SFQ=m
    CONFIG_NET_SCH_TBF=m
    CONFIG_NET_SCH_TEQL=m
    CONFIG_NET_SCH_DSMARK=m
  
Způsob klasifikace, značení paketů 
    CONFIG_NET_CLS=y
    CONFIG_NET_CLS_FW=m
    CONFIG_NET_CLS_U32=m
    CONFIG_CLS_U32_MARK=y

Pokud je potřeba i virtuální rozhraní IMQ, je nutné jádro opatchovat pomocí patche http://www.linuximq.net/patches.html


Rozdeleni zateze na vice rozhrani

Při rozdělování zátěže je potřeba napřed spojit zařízení jež chceme používat k provozu a později na toto virtualní rozhraní nasměrovat všechen provoz. K tomu poslouží Qdisc TEQL který potom rozděluje provoz mezi spojená zařízení metodou round robin.

Pro spojení poslouží tc.
tc qdisc [ add | change | replace | link ] dev DEV [ parent qdisc-id | root ] [ handle qdisc-id ] qdisc [ qdisc specific parameters ]

# Přidáme zařízení qdisc a připojíme k němu i druhé fyzické zařízení
tc qdisc add dev eth0 root qdisc0
tc qdisc add dev eth1 root qdisc0

# nastartování zařízení
ip link set dev teql0 up

Zařízení qdisc0 je potřeba nastavit IP adresy (rozdílné od ip co mají naše spojená zařízení), a nastavit routování - bránou bude ip adresa qdisc0 toho druhého PC.

Nakonec je třeba vypnout na spojených rozhraních return path filtering, aby se nezahazovaly pakety určeny pro jiné IP než má dané rozhraní.
echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter


Shaping


příklad: Omezení provozu linky a udělat dvě podtřídy s dalším omezením provozu:


Vytvoříme rozhraní se strukturou HTB tříd, kde kořenová bude obsahovat povolenou kapacitu linky, a dvě podtřídy.
tc qdisc add dev eth0 root handle 1:0 htb default 11
tc class add dev eth0 parent 1:0 classid 1:1 rate 128kbit

Součet hodnot rate (garantovaná kapacita) potomků by neměl přesáhnout hodnotu rate rodiče a žádná z hodnot ceil (maximální propustnost) potomka by neměla přesáhnout ceil rodiče. Dale bysme mohli naprihklad pomoci prio 1, prio 2 .. nastavit prioritu linky.
tc class add dev eth0 parent 1:1 classid 1:11 rate 64kbit ceil 128kbit
tc class add dev eth0 parent 1:1 classid 1:12 rate 32kbit


Jako konečnou metodu qdisc použijeme SFQ, což zajistí férové využití mezi všemi datovými proudy.
tc qdisc add dev eth0 parent 1:11 handle 11:0 sfq perturb 10
tc qdisc add dev eth0 parent 1:12 handle 12:0 sfq perturb 10

Pro rozdělení paketů do tříd použijeme markování paketů pomocí iptables. Jako výchozí třídu nastavíme přímo v kořenové qdisc 1:11.
iptables -t mangle -A POSTROUTING -p tcp --source erigona.lab.fi.muni.cz -j MARK --set-mark 11
iptables -t mangle -A POSTROUTING -p tcp --source www.seznam.cz -j MARK --set-mark 12
a rozdelime do listu htb stromu
tc filter add dev eth0 parent 1:0 protocol ip handle 11 fw flowid 1:11
tc filter add dev eth0 parent 1:0 protocol ip handle 12 fw flowid 1:12

Zdroje


www.cesnet.cz
http://www.root.cz/clanky/htb-jemny-uvod/
Archiv 2005