Der Linux Packet Scheduler
Der Linux Packet Scheduler ist eine KernelKomponente ähnlich Netfilter, dient im Gegensatz zu dieser aber der Steuerung und Kontrolle des Netzwerkverkehrs durch gezielte Änderung der Reihenfolge bzw. Verzögerung einzelner Pakete. Um also Traffic-Shaping, Traffic-Prioritisation, Traffic-Control, Bandbreitenmanagement, QoS (Quality of Service), TOS (Type of Service), etc. zu betreiben, muss man lediglich den Packet-Scheduler seines LinuxRouters richtig konfigurieren.
Die Filterung von Netzwerkverkehr ist nicht nur der Ports (i.e. Ebene 3) möglich, es gibt z.B. das Netfilter-Modul L7-Filter, das den Traffic auf Anwendungsebene (i.e. Ebene 7) analysiert und klassifiziert.
Grundlagen zum Traffic-Shaping finden sich auch auf der Seite FortgeschrittenesRouting.
Traffic Shaper kann man z.B. für ADSL-Verbindungen einsetzen, um zu verhindern, dass die Leitung z.B. durch einen Upload dicht gemacht wird.
In der c't 24/2002, Seite 224, findet sich eine sehr gute und verständliche Einführung in das Bandbreiten-Management (Traffic Shaping). Das fertige Skript gibt es hier.
fli4l/OptQos setzt sich mit QoS unter Linux allgemein und besonders mit dem QoS-Modul von fli4l auseinander.
Per Hand
Beispiel für tbf:
tc qdisc add dev ppp0 root tbf rate 110kbit latency 50ms burst 1540
kann man den ausgehenden Verkehr an seinem DSL-Router so verändern, dass man mit ssh auch noch arbeiten kann, wenn man eigentlich die ganze (Upload-)Bandbreite für ftp oder scp benutzt.
Seit kurzem gibt es Snitch - ein Tool das die Einrichtung von Regeln zum Traffic-Shaping vereinfachen soll.
Grundlagen
Die einfachste Methode stellt die Beeinflussung des Queueing-Algorithmus qdisc (Queueing Discipline) dar. Dazu gibt es folgende Möglichkeiten:
- pfifo_fast
Das ist der Standard-Queueing-Algorithmus, hierbei werden alle Packete in der Reihefolge in der sie den Kernel erreichen auch versendet. Das TOS Flag eines Paketes wird allerdings beachtet.
- tbf
tbf (Token Bucket Filter) ist ein Queueing-Algorithmus, der Packete mit einer bestimmten Geschwindigkeit durchlässt, mit der Möglichkeit kurzzeitige Spitzen zu erlauben.
- sfq
sfq (Stochastic Fairness Queueing) ist eine einfache Implementierung der "fairen" Queueing-Algorithmen, d.h. alle Packete werden nach einem statistischen Verfahren möglichst gleichberechtigt behandelt.
Einsatzgebiete:
Um die Bandbreite auf einfache Weise zu begrenzen: tbf
Bei stark ausgelasteter Leitung, wenn man nicht will, dass eine Verbindung andere blockiert: sfq
Daneben gibt es noch die Klassenbasierten Algorithmen:
- cbq
Class Based Queueing ist derzeit noch der Standard und für seine Komplexität bekannt.
- htb
htb Hierarchical Token Bucket ist ab v2.4.20 im LinuxKernel enthalten und hat die gleiche Zielsetzung wie cbq, ist aber wesentlicher einfacher in der Anwendung. Für ältere Kernel- und iproute-Versionen gibt es Patches.1
fli4l/OptQos informiert über die Anwendung von htb, insbesondere in Bezug auf fli4l.
Wonder Shaper
Wenn man auf etwas Bandbreite verzichtet, kann man selbst während man schnelle Downloads durchführt noch gut nebenher surfen oder mit ssh arbeiten. Das Wundermittel hierzu nennt sich Wonder Shaper und ist ein Skript, das aus den Grunddaten der Verbindung ein ausgefeiltes Queueing-System einrichtet. Bei T-DSL empfehlen sich folgende Werte (am Anfang von wshaper eintragen):
DOWNLINK=650 UPLINK=110 DEV=ppp0
Und hier gibts den Wonder Shaper: http://lartc.org/wondershaper
Tip: Wenn man sehr kurze Latenzzeiten benötigt, z.B. für Spiele (siehe KategorieSpiele), empfiehlt es sich, DOWNLINK noch etwas niedriger zu machen (probieren geht hier über studieren).
Advanced
Eine nette HowTo, welche sich direkt auf ADSL bezieht: ADSL Bandwidth Management HOWTO (eng.) Diese enthält das Script myshaper, welches auf dem oben vorgestellten Wonder Shaper basiert und versucht, seine Sache noch besser zu machen.
Ein sehr ausführliches HOWTO ist das Linux Advanced Routing And Traffic Control HOWTO. Es ist eine sehr detaillierte Dokumentation. Man sollte aber den Teil mit CBQ überspringen und sich mehr mit HTB und SFQ beschäftigen.
Im Linux Magazin gibt es in der Ausgabe 02/2005 einen Artikel über Traffic Shaping im Userspace mit Trickle. Damit kann man ohne aufwendige Änderungen am System und ohne root-Rechte die Bandbreitennutzung von Programmen einstellen.