Aus Linux-Magazin 09/2009

Neues beim Traffic Shaping

© haitaucher39, Fotolia.com

Die gebuchte Bandbreite nach draußen mag noch so groß sein: Wenn große Downloads laufen und mehrere Leute Videos schauen, bleiben interaktive Sessions und VoIP-Telefonate auf der Strecke. Ein Freund und Helfer muss den Datenverkehr regeln: Traffic Shaping.

Traffic Shaping als Teil des QoS (Quality of Service, auf deutsch: Dienstgüte) eilt nicht der beste Ruf voraus: Als vor Jahren Peer-to-Peer-Tauschbörsen ihren ersten Boom erlebten, stießen die Internetprovider schnell an die Grenzen der Leitungskapazitäten. Also drosselten sie mit Traffic Shaping die Übertragungsrate für einzelne Dienste künstlich, sodass für Dateitauscher auch der schnellste DSL-Anschluss unnütz wurde. Die Provider waren einstweilen glücklich, ihre Kunden aber hatten sich natürlich unter “Dienstgüte” etwas anderes vorgestellt.

Dabei ist Traffic Shaping eine gute Sache (wenn man es selbst betreibt). Andernfalls blockieren Downloads fast die ganze Bandbreite, während in der Shell die Buchstaben einzeln durchs Kabel tropfen. Traffic Shaping bremst die Bandbreiten-Brummis dezent aus und überlässt interaktiven Verbindungen die Überholspur. Mit gleicher Technik begrenzen Unternehmen die Kosten ihrer Online-Anbindung, verbannen Filesharer auf den Verzögerungsstreifen und lassen VoIP-Telefone nicht verstummen.

Traffic Shaping mit Linux verwaltet den zu steuernden Datenstrom per QDisc (Queuing Discipline). Dabei handelt es um mehr oder weniger komplex aufgebaute Fifo-Pipes für den Empfang und Versand der Datenpakete (siehe Abbildung 1). Linux\’ Standard-Qdisc heißt »pfifo_fast« und besteht aus einer Pipe, die sich aus drei verschiedenen “Bands” zusammensetzt. Der Kernel verleiht Band 0 die höchste Priorität und arbeitete ihre Pakete zuerst ab. Band 2 besitzt die niedrigste Priorität.

Abbildung 1: Eine QDisc besteht im Wesentlichen aus den »enqueue()«- und »de-queue()«-Funktionen. Trifft ein Layer-3-Paket ein, hängt »dev_queue_xmit()« es in eine Warteschlange und startet mit »qdisc_run()« die Übertragung.

Abbildung 1: Eine QDisc besteht im Wesentlichen aus den »enqueue()«- und »de-queue()«-Funktionen. Trifft ein Layer-3-Paket ein, hängt »dev_queue_xmit()« es in eine Warteschlange und startet mit »qdisc_run()« die Übertragung.

Ein Algorithmus betrachtet nun jedes einlaufende Datenpaket einzeln, klassifiziert es nach Herkunft und Aufgabe und steckt es dann in eine zu ihm passende Warteschlange.

Die Zuweisung erfolgt dabei über das Type of Service Flag (TOS) der Datenpakete. Das Gesamtsetup verteilt so die Bandbreite gerecht und verhindert, dass Vielkommunizierer die Netzwerkübergänge blockieren.

In die Röhren schauen

Bei den QDiscs, die der Admin konfiguriert, hat er die Wahl zwischen Classless und Classful QDiscs. Letztere werden manchmal auch als Inner QDisc oder als Sub-qdisc bezeichnet. Die Manipulationsvarianten bei den klassenlosen sind beschränkt: Das Token Bucket Filter (TBF) beispielweise kann Übertragungsraten zuweisen, scheitert es bei der Prioritätenvergabe. Dagegen glänzt das Stochastic Fair Queuing (SFQ) zwar mit Prioritäten, kennt aber keine Transferraten. Die Vorteile beider liegen in der einfachen Konfiguration.

Mit den Classful QDiscs dagegen lassen sich über eine Wurzel-QDisc Hierarchien aufbauen und durch so genannte Classes für jeden Dienst innerhalb der Hierarchie eine Übertragungsrate und/oder eine Priorität zuweisen (siehe Abbildung 2). Die beiden wichtigsten Classful-Vertreter sind Prio und Htb. Schon die Bordmittel (IPtables und TC, siehe unten) erlauben hier eine große Flexibilität.

Abbildung 2: Mit den Classful QDiscs lassen sich über eine Wurzel-QDisc Hierarchien aufbauen. Die Klassenhierarchie endet in jedem Zweig bei einer QDisc. Klassen können selbst keine Pakete verarbeiten, daher brauchen sie die QDisc.

Abbildung 2: Mit den Classful QDiscs lassen sich über eine Wurzel-QDisc Hierarchien aufbauen. Die Klassenhierarchie endet in jedem Zweig bei einer QDisc. Klassen können selbst keine Pakete verarbeiten, daher brauchen sie die QDisc.

Eine Handvoll Implementationen

Das klassische Werkzeug, um QDiscs aller Art zu erzeugen, ist TC (Traffic Control) aus dem IProute2-Paket [1], das fast alle Distributionen mitbringen (siehe ausführlichen Arikel [2]). Da die »tc«-Kommandos reichlich kompliziert zu handhaben sind, übersetzen Tools wie TCng diese in eine verständliche Konfigurationssprache [3],[4]. Noch cleverer stellt sich Trickle [5] an: Statt sich mit den Schwierigkeiten des Netzwerkbetriebs im Kernel aufzuhalten, schiebt es sich zwischen Applikation und Glibc. Dank Preloading klappt das sehr einfach und kommt ohne Root-Rechte aus [6].

Im Gegensatz zu TC bieten neuere Lösungen wesentlich mehr als das passive Zuteilen von Ressourcen. Das ist schon daran erkennbar, dass es für manche mehrere Frontends gibt, um die gesammelten Daten als textbasierte Tabelle oder als Grafik auszugeben.

Hippie-Kultur

Die “Hi-Performance Protocol Identification Engine” waltet nach einem Kernelpatch ihrer Bestimmung [7]. Zu den Schmankerlen des Hippies zählt der Session Prediction Support, ein Algorithmus, um für einen bestimmten Dienst eine optimale Umgebung zu schaffen. Spannend ist das Tunneled Protocol Tracking, das beispielsweise feststellt, welche Protokolle sich in einem Tunnel verbergen.

Hippie kennt zwei Varianten Datenströme zu steuern: Entweder bindet es sich an die Netzwerkschnittstelle oder arbeitet mit Netfilter Hand in Hand. Letztere bezeichnet der Entwickler zwar als veraltet, sie bietet aber über die Konfiguration von IPtables viel mehr Filtermöglichkeiten als die Schnittstellen-Variante.

Hippies Protokollunterstützung kann sich sehen lassen: Neben den Standards TCP, UDP, FTP und so weiter erkennt es zahlreiche Multimedia-Protokolle, den AOL Instant Messenger, Ares P2P und weitere Peer-to-Peer-Programme. Im Gegensatz zu den anderen Traffice-Shaping-Projekten identifiziert Hippie Protokolle nicht mit regulären Ausdrücken oder ausgewerteten Paketinformationen, sondern mit so genannte Protokoll-Signaturen.

Auch wenn sich Hippie teoretisch an jedes einzelne Netzwerkdevice heften lässt, die aktuelle Version 0.9.1 eignet sich eher für kleine Netze. Negativ fällt die mehr als dürftige Dokumentation auf. Laut dem Hippie-Entwickler Josh Ballard will er das bis zur Version 1.0 ändern. Auch die Weiterentwicklung der Software – und noch wichtiger: der Fehlerbehebung – verlaufen nicht richtig kontinuierlich. Trotz dieser Macken überzeugt das Konzept der Software.

L7 weiß Bescheid

Vor allem das L7-Patch für IPtables [8] sorgte bei Erscheinen im Jahr 2003 für Aufsehen. Wie der Name andeutet, bezieht es seine Informationen aus der siebten Ebene des Schichtenmodells [9]. Im Gegensatz zu vergleichbaren Werkzeugen, die Byte-Werte prüfen, arbeitet L7 mit regulären Ausdrücken. Diese kann der Administrator selber schreiben oder aus einer vorhandenen, sehr umfangreichen Sammlung entnehmen.

Neben alten Bekannten wie DNS, DHCP, FTP, SMB, Gopher oder dem Druckdienst LPD zählen dazu ziemliche Exoten – zum Beispiel 100bao oder Kugoo – sowie die Kommunikation von Spielen wie Counterstrike, mehrere Battlefields, Guild Wars oder World of Warcraft. L7 erkennt auch Tunnel-Arbeiter, und falls der Systemverwalter den Verdacht hegt, eine aufgeheizte Festplatte behindere den Datenstrom, so kann er deren die Temperatur gleich mit überprüfen. Zu den “Protokollen” gesellen sich auch Subversion oder das Internetradio Live365.

Ein zu erkennendes Protokoll richtet der Admin als »/etc/l7-protocols/Protokoll.pat« ein – für SMTP lautet also der Dateiname »smtp.pat«. In der ersten Zeile der Datei muss der Name stehen, in der darauf folgenden der reguläre Ausdruck. Für die Kernel-Version (siehe unten) lautet die Anweisung:

smtp
^220[x09-x0d -~]* (e?smtp|simple mail)

Der Ausdruck »[x09-x0d -~]« im “Perl-style Hex Matching”-Format [10] erfasst alle Buchstaben mit Leerzeichen (»x09« ist der Tabulatorschritt). Wahlweise lassen sich in den nächsten Zeilen noch Informationen für den Userspace angeben, zum Beispiel Protokollgruppen (»p2p«, »voip«, »mail«) oder Wikizeilen. Mit zusätzlichem Konfigurationsaufwand ließe sich noch mehr anstellen, beispielsweise den Typ durchlaufender Dateien zu erkennen. L7 identifiziert PDF, RAR, RTF, ZIP, um nur einige zu nennen. Das ist für den QoS aber eher zweitrangig.

Zwei Varianten

Anwender des Werkzeugs stehen zurzeit an einem Scheideweg, denn es gibt zwei aktuelle Versionen. Die ausgereifte und stabile Kernel-Version, die allerdings nicht einfach zu konfigurieren ist. Und eine für den Userspace, die sich zwar noch in der Entwicklung befindet, aber schon relativ stabil läuft und in der Zukunft die Kernel-Variante ablösen soll. Während die Kernel-Version nur mit einfachen regulären Ausdrücken zurechtkommt, darf sich der Admin bei der Userspace-Version richtig austoben, falls er in der mitgelieferten umfangreichen Datenbank wider Erwarten nicht fündig wird. Allerdings machen die Entwickler kein Hehl daraus, dass die Userspace-Variante in komplex aufgebauten Systemumgebungen nicht immer korrekt arbeitet.

Für L7 existieren zehn Frontends, die Homepage des Projekts [8] führt sie auf. Das Leistungsspektrum reicht von einfachen Traffic Shaping bis hin zur Zensur, die vordefinierte Texte oder Wörter etwa in Chatprogrammen ausfiltert. L7, das in der Userspace-Variante Netfilter als Basis benötigt, ist für auch große Netzwerke geeignet. Seine Dokumentation lässt nichts zu wünschen übrig.

Fazit

Keine TC-Technik vermag natürlich das Wunder zu vollbringen, die Bandbreite einer Netzanbindung zu erhöhen. Durch das gerechtere Verteilen der Ressourcen arbeiten die wichtigen Applikationen dennoch schneller, ohne unwichtige Programme ungebührlich auszubremsen. Angesichts der Einfachheit der Shaping-Algorithmen ist es erstaunlich, was aktuelle Tools damit alles vollbringen.

Für Admins, die lediglich die Leistungsfähigkeit ihrer Netzanbindung steigern wollen und mit den gängigeren Tools nicht weiterkommen, ist das vorgestellte Hippie sicher eine gute Wahl – auch wenn die aktuelle Version mit Vorsicht zu installieren ist.

In einer anderen Liga spielt L7: Dessen Stärke liegt im genauen Erkennen und Manipulieren von Protokollinhalten. Damit eignet sich das Tool naturgemäß auch zum Ausfiltern von durchlaufenden Inhalten. Den Machern der Software ist diese Dual-Use-Problematik ganz offensichtlich bewusst, wenn sie explizit kundtun: “If you are interested in implementing censorship, please do not ask us for help.” (jk)

Praxistipp

Werkzeuge für das Traffic Shaping enthält jede aktuelle Distribution. Treten bei der Konfiguration Probleme auf, schadet es nicht, in das »boot«-Verzeichnis zu wechseln und mit

grep HTB config*
grep DSMARK config*

zu überprüfen, ob die Module im Kernel integriert sind. Wichtig ist, dass mindestens eine der resultierenden Ausgabezeilen »HTB=m« beinhaltet.

Bei »HTB=n« wartet Arbeit auf den Admin: Entweder muss er die Kernelmodule seiner Distribution neu übersetzen oder gleich einen neuen Kernel backen.

Queueing, Shaping und
QoS

Custom Queueing (CQ) beeinflusst das Handling von Paketen in einer Warteschlange (Queue). Wer seine ADSL-Verbindung oft auslastet, erzielt zum Beispiel mit SFQ (Stochastical Fairness Queueing) gute Ergebnisse. Die Qualität von Sprache über IP lässt sich mit Priority Queueing verbessern. PQ stellt kleine Pakete der VoIP-Anwendung in eine gesonderte Warteschlange mit hoher Priorität. Traffic Shaping ist dagegen unabhängig von der Auslastung des eigenen Links. Es beeinflusst jeden Netzwerkverkehr, der ein konfiguriertes Limit überschreitet.

Große Netze brauchen solche Limits, um das Zusammenspiel von WAN-Verbindungen und Internetzugängen verschiedener Bandbreite und Auslastung zu optimieren. An einem schnellen WAN-Link leitet der Router per Default alle Pakete ungebremst weiter und überflutet damit unter Umständen den Zugang am anderen Ende. Weil sich eventuell die Queues im Backbone des Providers füllen, ist es schwer, TCP-Parameter zu ermitteln, die beiden Seiten Vorteile bringen. Bandbreitenmanagement sorgt hier für einen sanfteren Verlauf ohne auf- und abschwellenden Netzwerkverkehr, ohne Paketwiederholungen (Retransmits) und ohne hohe Latenzzeiten.

Der Traffic Shaper verarbeitet ein ankommendes Paket und sendet es nach Möglichkeit sofort weiter. Andernfalls reiht er das Paket in die Queue ein. CQ greift daher nur bei ausgelasteten Links. Der Packet Shaper kommt dagegen immer zum Zug. Er kontrolliert, dass der Datenverkehr die für das Ziel konfigurierten Limits einhält. Sind diese überschritten, bildet sich eine Warteschlange. Für sie ist wieder die entsprechende QDisc zuständig.

Quality of Service

QoS ist keine eigene Technologie, sondern nutzt Bandbreitenmanagement, um einer Verbindung die für einen Service (zum Beispiel Citrix Metaframe oder VoIP) benötigten Eigenschaften zu geben. Manche Applikationen können beispielsweise gut mit geringen Paketverlusten leben, kommen aber nur schwer mit hohen Laufzeiten oder Laufzeitschwankungen zurecht.

Qualität ohne eigene Norm

QoS ist in keiner Norm spezifiziert. Häufig steht es für Differentiated Services (RFC 2474), also das Bemühen, einzelne Dienste innerhalb des nach Best Effort arbeitenden IPv4-Netzwerks zu priorisieren. Streng genommen gehören aber auch Guaranteed Services dazu, die Ressourcen mittels bestimmter Protokolle zuteilen (RSVP, IP Reservation Protocol). Ein Netzwerk, das Signalling und Resource Reservation vollständig realisiert, ist zum Beispiel das öffentliche Telefonnetz (PSTN, Public Switched Telephone Network). Jeder ISDN-Kanal erhält 64 KBit/s. Wenn das Netz ausgelastet und alle Reserven eingesetzt sind, kommen keine neuen Verbindungen zustande. (Jörg Fritsch)

Infos:

[1] IProute2: [http://www.linuxfoundation.org/en/Net:Iproute2]

[2] Klaus Rechert, Patrick McHardy, “Queueing Disciplines: Traffic Control mit Linux”, Linux-Magazin 02/05, S. 28

[3] TCng: [http://tcng.sourceforge.net]

[4] Ralf Spenneberg, “Bandbreitenkontrolle und -Simulation mit TCng, Linux-Magazin 02/05, S. 38

[5] Trickle: [http://monkey.org/~marius/pages/?page=trickle]

[6] Oliver Frommel, “Traffic Shaping im Userspace mit Trickle”, Linux-Magazin 02/05, S. 42

[7] Hippie: [http://hippie.oofle.com]

[8] L7: [http://l7-filter.sourceforge.net]

[9] Jörg Harmuth, “Firewalling und Traffic Shaping mit Analyse der Schicht-7-Protokolle”, Linux-Magazin 02/06, S. 66

[10] Dokumentation zu Perl 5 Version 10.0: [http://perldoc.perl.org/perlre.html]

Der Autor

Johann Glas arbeitet hauptsächlich als technischer Autor mit dem Schwerpunkt Handbücher und Manuals. Als Gelegenheits-Softwareentwickler ist er sehr erfolgreich darin, bei C++ und Java jeder objektorientierten Programmierweise aus dem Weg zu gehen. Er ist von Linux begeistert, aber in Minix verliebt.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 3 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Nach oben