Linux Bandbreitenmanagement


Stefan Bauer info at edv-fix dot de



Der Upload bzw. Downoad bricht ein, sobald in eine Richtung die volle Leitung beansprucht wird.

Problem hierbei: Die kleinen Antwort-Pakete die das erfolgreiche Erhalten der Pakete bestätigen (ACK) gehen in der Flut der Up/Down Pakete unter bzw. werden nur verzögert verschickt.

Die Pakete die unseren Rechner verlassen sowie jene die ankommen, werden nach Wichtigkeit geordnet.

Dies kann man sich vorstellen wie die Abfertigung an einer Zoll-Station (Landes-Grenze). Lastkraftwagen (LKW's) brauchen länger für den Vorgang. Personenkraftwagen (PKW's) können meist durchgewunken werden.


<-------------------------------------------------------------------------------------->

[LKW] [LKW] [LKW] [LKW] [LKW] [LKW]

<-------------------------------------------------------------------------------------->

(PKW) (PKW (PKW (PKW) (PKW) (PKW (PKW (PKW) (PKW)

<-------------------------------------------------------------------------------------->

Wie in der äußerst professionellen Skizze hoffentlich erkennbar wird der Verkehr nach Fahrzeugklasse geordnet (PKW oder LKW).

Durch eine geregelte Abfertigung sowie eine vorab bestimmte Regel welche Fahrzeuge schnell durchgelassen werden und welche "nicht so wichtig" sind kann der Verkehr um einiges schneller erledigt werden.



Benötigt wird:


Der Kernel muss wie folgt angepasst werden:

[*] QoS and/or fair queueing

<M>   Class Based Queueing (CBQ)
<M>   Hierarchical Token Bucket (HTB)
<M>   Hierarchical Fair Service Curve (HFSC)
<M>   Multi Band Priority Queueing (PRIO)
<M>   Random Early Detection (RED)
<M>   Stochastic Fairness Queueing (SFQ)

<M>   True Link Equalizer (TEQL)
<M>   Token Bucket Filter (TBF)
<M>   Generic Random Early Detection (GRED)
<M>   Differentiated Services marker (DSMARK)
< >   Network emulator (NETEM)
<M>   Ingress Qdisc
 ---   Classification

<M>   Elementary classification (BASIC)
<M>   Traffic-Control Index (TCINDEX)
<M>   Routing decision (ROUTE)
<M>   Netfilter mark (FW)
<M>   Universal 32bit comparisons w/ hashing (U32)
[*]     Performance counters support
[*]     Netfilter marks support
<M>   IPv4 Resource Reservation Protocol (RSVP)

< >   IPv6 Resource Reservation Protocol (RSVP6)
[ ]   Extended Matches
[*]   Actions
<M>     Traffic Policing
<M>     Generic actions
[ ]       Probability support
< >     Redirecting and Mirroring
<M>     IPtables targets
<M>     Packet Editing

< >     Simple Example (Debug)
[*]   Incoming device classification         

Nach erfolgreicher Anpassung des Kernel beginnen wir mit der Übersetzung:

make bzImage # erstellt das eigentliche Kernel-Image
make modules # erstellt die benötigten Module
make modules_install # verschiebt die Module nach /lib/modules/kernel-2.6.16.... 
cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.16...


Im Anschluss muss noch der Bootloader (Grub oder lilo) an den neuen Kernel angepasst werden und wir können neustarten.


Sollte der Reboot erfolgreich verlaufen sein, befassen wir uns mit dem nötigen Script, welches uns viel Arbeit abnimmt:


Folgendes Script reguliert die Bandbreite für einen DSL-1000 Anschluss mit normalem Up-Speed von 128kbit und 1024 im Down-Bereich.


Das Script muss 1:1 übernommen werden, lediglich einige Anpassungen nehmen wir vor, welche auch dokumentiert sind.


Script zur fairen Verteilen der Bandbreite

das Script kann beim Systemstart gestartet werden und wir binden es folgendermaßen ein: (Debian-Art)

wget http://www.plzk.de/archiv/files/docs/QOS/shaper -O /etc/init.d/shaper && chmod +x /etc/init.d/shaper
update-rc.d shaper defaults

Für bequemes Start/Stop muss ein minimales Startscript unter Vorgabe von /etc/init.d/skeleton angepasst werden.


an einem TDSL-1000 Anschluss mit folgenden Leistungsdaten laut Anbieter:

T-DSL 1000 Download mit 1024 Kbit Upload mit 128 Kbit

Ohne Bandbreitenaufteilung:

Download: 40kb/sec
Upload 15kb/sec
Ping 300ms

Mit Bandbreitenaufteilung:

Download 100kb/sec
Upload 15kb/sec
Ping 90-120ms


http://lartc.org/

http://www.heinlein-support.de/web/wissen/shaping/