Traffic Shaping. Florian Westphal D/F260502D 1C81 1AD5 EA8F E8EE 5E2F DA6C F D

Ähnliche Dokumente
Bandbreitenmanagement mit Freier Software

QoS. Patrick Röder (Mai 2003)

Quality of Service. Traffic Shaping. Dienstgüte mit Linux analysieren und verbessern. Traffi c Open Students Lounge

Trafficshaping Bandbreitenmanagement und Latenzzeiten

Quality of Service (QoS)

Traffic Control & QoS mit Linux 2.4. Heiko Reese

Konfigurationsanleitung Quality of Service (QoS) Funkwerk. Copyright Stefan Dahler Oktober 2008 Version 1.1.

Quality of Service. Howto QOS unter Linux mit Iptables-Netfilter

Simulation einer Netzwerkumgebung für verteilte Paarprogrammierung. von Timo Giesler unter Barry Linnert

Netzwerk Teil 1 Linux-Kurs der Unix-AG

Netzwerk Teil 2 Linux-Kurs der Unix-AG

Grundlagen der Rechnernetze. Internetworking

Token Bucket Algorithmus

1.2 QoS-Verbesserungen

Universität Ulm Fakultät für Informatik Abteilung Verteilte Systeme

Split-Access-Routing und Priorisierung auf Linux-Basis

Collax Bandbreitenmanagement

Internet Protokolle für Multimedia - Anwendungen

1QUALITY OF SERVICE. Copyright 24. Juni 2005 Funkwerk Enterprise Communications GmbH Bintec Workshop Version 0.9

Einfluss der Window Scale Option auf die Fairness in TCP/IP-Netzen

Der Linux Netzwerk-Stack

Lösungen für Bufferbloat

Netzwerk Linux-Kurs der Unix-AG

Rene Mayrhofer Grazer Linuxtage :00 14:00

Handbuch der Routing-Protokolle

Gliederung. Integrated Service Architecture (ISA) RSVP-Überblick Reservation Styles RSVP-Nachrichten. RN II Kap. 5.

UDP User Datagramm Protokoll

VoIP Messung. Voice-Readiness Test. Beschreibung

Systeme II 4. Die Vermittlungsschicht

Internetanwendungstechnik (Übung)


"Quality of Service" BinTec Communications AG

IP routing und traceroute

Das Netzwerk von Docker. Java Stammtisch Goettingen

Vorlesung SS 2001: Sicherheit in offenen Netzen

Quality of Service - QoS

IPv6.... es hätte noch viel schlimmer kommen können

Übungsblatt 4. (Router, Layer-3-Switch, Gateway) Aufgabe 2 (Kollisionsdomäne, Broadcast- Domäne)

ICMP Protokoll & Anwendung Einige Risiken von ICMP erkennen und verstehen! FRITZ Gerald

Freifunk in Chemnitz. Konzepte eines freien Internets. Dipl.-Ing. Amadeus Alfa M.sc. Steffen Förster

Projektierung und Betrieb von Rechnernetzen

TIPC Analyse und Optimierung

IPv6. Präsentation von Mark Eichmann Klasse WI04f 22. November 2005

Übungsblatt 4. (Router, Layer-3-Switch, Gateway) Aufgabe 2 (Kollisionsdomäne, Broadcast- Domäne)

Von: Klick, Johannes. - Home Gateway - Ready for the Internet?

Konfigurationsanleitung Access Control Lists (ACL) Funkwerk. Copyright Stefan Dahler Oktober 2008 Version 1.0.

Adressen im Internet (Wdh.)

Thema: Internet Protokoll Version 6 IPv6 (IPng)

Statisches Routing. Jörn Stuphorn Bielefeld, den Juni Juni Universität Bielefeld Technische Fakultät

Netzwerke 3 Praktikum

Benutzerhandbuch bintec R230a / R230aw / R232b / R232bw QoS. Copyright 20. April 2006 Funkwerk Enterprise Communications GmbH Version 2.

Übersicht. Generierung von IPv6-Paketen mit Scapy. Scapy GUI - Kurzvorstellung. Szameitpreiks - Beuth Hochschule für Technik Berlin

IPv6. Übersicht. Präsentation von Mark Eichmann Klasse WI04f 22. November 2005

Evaluation of QoS- Aspects of mobile IPv6 Clients in an IEEE Network. Folkert Saathoff Oktober 2oo5

Latency Scenarios of Bridged Networks

Stefan Dahler. 1. Konfiguration von Extended Routing. 1.1 Einleitung

NAT und Firewalls. Jörn Stuphorn Universität Bielefeld Technische Fakultät

Firewalls mit Iptables

BGP für IPv6. Wilhelm Boeddinghaus Heise IPv6 Kongress 2014

MultiNET Services GmbH. iptables. Fachhochschule München, Dr. Michael Schwartzkopff, MultiNET Services GmbH

Adressauflösung. IP Adresse Physikalische Adresse :FF:AA:36:AB: :48:A4:28:AA:18

Thema IPv6. Geschichte von IPv6

Telekommunikationsnetze 2

Grundkurs Routing im Internet mit Übungen

Virtual-LAN ZyXEL USG Firewall-Serie ab Firmware Version 4.10 Knowledge Base KB-3528 November 2014 Studerus AG

IsarFlow Überblick. IsarNet AG Q3/2006

Netzwerk-Programmierung. Netzwerke.

Mobilkommunikationsnetze - TCP/IP (und andere)-

Grundlagen Rechnernetze und Verteilte Systeme IN0010, SoSe 2017

Firewall Implementierung unter Mac OS X

Übung 6. Tutorübung zu Grundlagen: Rechnernetze und Verteilte Systeme (Gruppen MI-T7 / DO-T5 SS 2015) Michael Schwarz

IP-Adressen und Ports


NFTables Wieso, Weshalb, Warum

Linux Netfilter/iptables

3.7 Wireless Personal Access Network (WPAN)

Systeme II 9. Woche Vermittlungsschicht. Christian Schindelhauer Technische Fakultät Rechnernetze und Telematik Albert-Ludwigs-Universität Freiburg

Netzwerk-Programmierung. Netzwerke. Alexander Sczyrba Michael Beckstette.

Adressierung eines Kommunikationspartners in der TCP/IP-Familie

5.) Nach erfolgreicher Übertragung entfernt der Sender seinen Daten-Rahmen vom Ring. Wodurch kann ein verwaister Rahmen entstehen?

PROJEKTIEREN DER HW UND DER VERBINDUNGEN...

Chapter 8 ICMP. CCNA 2 version 3.0 Wolfgang Riggert, FH Flensburg auf der Grundlage von

7 Transportprotokolle

Stefan Dahler. 1. Konfiguration der Stateful Inspection Firewall. 1.1 Einleitung

Multiple Path Routing

shri Raw Sockets Prof. Dr. Ch. Reich

Netzwerke. Netzwerk-Programmierung. Sven Hartmeier.

ICMP Internet Control Message Protocol. Michael Ziegler

PROFINET IO und I-Device

ISA Server 2004 IP-Einstellungen definieren - Von Marc Grote

Konfigurationsbeispiel ZyWALL USG

ECN. Explicit Congestion Notification ECN

Congestion Control. Einleitung Open Loop und Closed Loop Congestion Control Verbindungsorientierte und -lose Übertragung

Hauptdiplomklausur Informatik März 2002: Internet Protokolle

Internet Routing. Link State Routing. SS 2012 Grundlagen der Rechnernetze Internetworking 27

Enhancing a VPN Based Network Emulator

Kü /Info Oberstufe Netzwerke SJ. 2014/2015

Trace Control for Netem

Rechnernetze - Versuch 3 Option 1 - Layer 3 Switch

Dynamisches VPN mit FW V3.64

Transkript:

Note: Quantum tunneling is not supported. ( quoting net/sched/sch blackhole.c) Traffic Shaping... mit Linux Florian Westphal 15.1.2010 1024D/F260502D <fw@strlen.de> 1C81 1AD5 EA8F 3047 7555 E8EE 5E2F DA6C F260 502D Traffic Shaping

Zusammenfassung Traffic Shaping erlaubt es, ausgehenden Traffic so zu beeinflussen, dass die Sendegeschwindigkeit bestimmten Vorgaben angeglichen werden kann. Auch kann die Leitungsauslastung verbessert bzw. bestimmte Arten von Netztraffic z.b. bevorzugt versand werden. Unter Linux wird dies über die NET_SCHED (Traffic control/ QoS and/or fair queueing ) Packet-Scheduler umgesetzt. Traffic Shaping 1

Agenda 1. Begriffsdefinitionen 2. Shaping vs. Scheduling vs. Policing 3. Exkurs: Warteschlagentheorie 4. qdiscs Einsortierung im Netzwerkstack qdiscs in TC, beispiele Classless/Classful queues Komplexere Setups 5. Sonstiges Traffic Shaping 2

Begriffe skb (struct sk_buff) Linux-Kernel Datenstruktur: repräsentiert ein Datenpaket skb->priority Member-Variable d. besagten Datenstruktur. TOS/DSCP: Feld im IPv4-Header, kann Flow/Pakettyp-Typ codieren Flow: eine (TCP)-Verbindung Traffic Shaping 3

Traffic Shaping Optimierung / Sicherung bestimmter Eigenschaften, z.b: Bandbreitenbeschränkung Senken der Latenz Glättung der Auslastung (vermeiden von Lastspitzen) erfolgt durch Verzögerung (delay) von bestimmten Paketen für (sinnvolles) Shaping muss der Flaschenhals bekannt sein ( next Hop hat 1-MBit-Uplink ) nur für Egress (=ausgehenden) Traffic Traffic Shaping 4

Scheduling Verbesserung d. Flow-Fairness Verhindern, d. einzelne Flows/Endpunkte den Link monopolisieren Priorisierung v. bestimmtem Traffic bezieht sich auf zu sendende Pakete Egress Traffic Shaping 5

Traffic Policing verwerfen von Paketen bei Überschreiten eines bestimmten Grenzwerts kann daher auch bei Ingress (=eingehender) Traffic verwendet werden (keine ingress qdisc) shaping: Verzögern v. Traffic (zur einhaltung bestimmter Senderate) policing: Verwerfen von Paketen um unter bestimmter Bandbreitengrenze bleiben Traffic Shaping 6

Warteschlangentheorie (Bedientheorie) zentrale Elemente: 1. Bedienstelle (z.b. Ampel, Kasse,... ) 2. Warteraum Grössen: Eingangsstrom, Ausgangsstrom Eingangsstrom: Mittlere Anzahl Anünfte pro Zeiteinheit Warteschlange, wenn Bedienstelle besetzt (Eingangsstrom > Ausgangsstrom) Traffic Shaping 7

Warteschlange... legt fest, welche Pakete bevorzugt, verzögert bzw. verworfen werden beeinflusst daher auch ggf. die Sendereihenfolge (von Paketen) endliche Größe verschiedene Wartedisziplinen (= Queueing Disciplines): FIFO, Round- Robin, Selection-In-Random-Order,... umstellen: tc (aus dem iproute2-paket). Traffic Shaping 8

qdiscs qdisc: Algorithmus, welcher Warteschlange verwaltet Netwerkinterfaces haben (normalerweise) mindestens eine qdisc lo (und Tunnelinterfaces) sind queue-less qdisc: letzte Station eines Paketes vor dem Versand Standard-qdisc: pfifo-fast (packet FIFO) Unterscheidung zwischen classful und classless qdiscs Traffic Shaping 9

qdiscs im Netzwerkstack L3-Protokoll -> net/dev/core.c:dev_queue_xmit(skb) rc = qdisc_enqueue_root(skb, q); qdisc_run(q); return rc; Die qdisc hängt grob vereinfacht an struct net_device. Das Paket wird erst in die Warteschlange eingefügt (qdisc_enqueue) qdisc_run verschickt dann ein Paket in der Queue, oder auch nicht (abh. v. Algorithmus) Traffic Shaping 10

qdisc im Netzwerkstack (cont). qdisc kann Pakete zwischenspeichern, z.b. falls Netzwerkinterface busy qdisc verwirft Paket ggf. (zumindest dann, wenn Queue zu voll) qdisc_run schickt die Pakete zur Hardware net/sched/sch_generic.c:qdisc_run(qdisc q) { skb = dequeue_skb(q); dev = qdisc_dev(q); ret = dev_hard_start_xmit(skb, dev,... ); switch (ret) { case NETDEV_TX_OK: return qdisc_qlen(q); case NETDEV_TX_BUSY: return dev_requeue_skb(skb, q); } } Traffic Shaping 11

qdisc im Netzwerkstack (cont). qdisc_run() läuft solange, bis entweder: 1. dequeue_skb() liefert kein Paket mehr (qdisc leer, throttling,... Algorithmusabh.) 2. rescheduling nötig / Zeitquantum überschritten 3. Hardware busy Bei 2 & 3: tx-softirq schedule Traffic Shaping 12

Terminologie root qdisc - diejenige qdisc, die an ein Netzwerkadapter angeschlossen ist classless qdisc: qdisc ohne (konfigurierbare) interne Unterteilung Traffic Shaping 13

classless qdisc Beispiel: pfifo-fast Jedes interface hat pfifo_fast qdisc, kann nur überlagert werden 3 Bänder: 0 interactive 1 best-effort / interactive bulk 2 bulk Aufteilung erfolgt nach skb->priority (IPv4 setzt das aus TOS/DSCP) pfifo_fast_ops->dequeue() liefert ältesten skb aus niedrigsten Band kein delay nur Scheduling Traffic Shaping 14

classless qdisc Beispiel 2: (G)RED RED: Pakete probalistisch verwerfen, wenn qgröße > Wert gut für Router mit (sehr) viel Traffic (Glättung der Leitungsauslastung) Unterstützt auch ECN-Markierung GRED: Pakete werden anhand TOS/DSMARK in Queues vorsortiert RED-Parameter können dann per-queue getrennt eingestellt werden GRED-alternative: sched_drr mit RED-Childs Traffic Shaping 15

classless qdisc Beispiel 3: SFQ (Stochastic Fairness Queueing) reines Scheduling: faire Behandlung aller Flows verteilt Pakete auf FIFO (1024) Queues enqueue: hash ermittelt Queue dequeue: Round-Robin Abarbeitung der Queues qdisc voll: paket aus der längsten queue wird verworfen nutzlos wenn Link-Flaschenhals woanders liegt (da scheduling only) Traffic Shaping 16

Erste Schritte... $ /sbin/tc -s qdisc show dev eth0 qdisc pfifo_fast 0: root bands 3 priomap 1 [.. ] Sent 4933482 bytes 53025 pkt (dropped 0, overlimits 0 requeues 0) rate 0bit 0pps backlog 0b 0p requeues 0 (pfifo_fast kann nicht entfernt werden). qdisc Ändern: tc qdisc add dev eth0 root bfifo limit 300 Parameter reparieren: $ tc qdisc change dev eth0 root bfifo limit 1500000 $ tc -s qdisc dev eth0 qdisc bfifo 8001: dev eth0 root limit 1514000b Sent 80900 bytes 1044 pkt (dropped 0, overlimits 0 requeues 0) 8001: ist das (hier automatisch vergebene) qdisc-handle. Löschen: tc qdisc del dev eth0 root Traffic Shaping 17

Traffic Control Elemente 1. qdisc 2. Klassifizierung bestimme Paketeigenschaften (Größe, Protokoll, TCP-Flags,... ) Flow-Verhalten, zb. > 1MB übertragen Applikationsprotokoll (Layer 7) Traffic Shaping 18

Classful qdiscs Problem: Bestimmte Pakete/Flows unterschiedlich behandeln Lösung: Classful qdiscs Grob: mehrere qdiscs, welche (baumartig) miteinander Verbunden sind Nach aussen (d.h. aus Netzwerk-API Sicht) gibt es nur eine qdisc Traffic Shaping 19

Classful Qdiscs (cont.) enqueue(): paket muss ggf. an eine der inneren qdiscs weitergereicht werden (Klassifizierung). Entscheidung erfolgt durch filter Filter sind qdisc zugeordnet Filter-Rückgabewert entscheidet über die Klassenzugehögigkeit jede Klasse kann weitere Filter/Unterklassen haben Traffic Shaping 20

Root, handle, sibling, parent... pfifo_fast: Standard root qdisc, pro interface handle: ID identifiziert qdisc major/minor nummern: root qdisc für gewöhnlich 1 : (=1 : 0). die Minor-Nummer einer qdisc ist immer 0. Klassen haben die Major-Nummer ihres parents (= übergeordnete qdisc). en/de-queue erfolgt an der root qdisc Traffic Shaping 21

Beispiel 1:0 root qdisc 1:1 1:2 1:3 Klassen 10: 20: 30: qdiscs Einfache Hierarchie: Aufteilung in 3 Klassen. Einfachste (Classful) Qdisc hierfür: prio Traffic Shaping 22

Umsetzung Zuerst wird die root qdisc (hier prio) angelegt: $ tc qdisc add dev eth0 root handle 1: prio prio erzeugt implizit 3 Bänder (ähnlich pfifo_fast) aber als Klassen Im Gegensatz zu pfifo_fast kann jetzt jedes Band unterschiedlich behandelt werden: $ tc qdisc add dev eth0 parent 1:1 handle 10: tbf rate 25kbit... $ tc qdisc add dev eth0 parent 1:2 handle 20: tbf rate... Traffic Shaping 23

classless qdisc Beispiel 4: Token Bucket Filter reines Shaping, kein Scheduling Token: Währung 1. Rate eingehender Pakete = Rate eingehender Tokens Pakete passieren Queue ohne Verzögerung 2. Rate eingehender Pakete Rate eingehender Tokens Siehe 1; tokens Akummulieren sich (bis zur maximalen Bucket-Grösse). 3. Rate eingehender Pakete Rate eingehender Tokens throttling, ggf. Packetdrops Im Gegensatz zu bisher vorgestellten qdiscs nicht Work-Conserving : ->dequeue() auf nicht-leere tbf-qdisc liefert nicht immer ein Paket classful-version: HTB (Hierarchial Token Bucket) Traffic Shaping 24

Komplexere Setups Man nehme eine classful qdisc: CBQ ( class-based-queueing ) HTB ( CBQ-Nachfolger ) HFSC DSMARK DRR (flexiblerer Ersatz für classless SFQ) Traffic Shaping 25

Klassen hinzufügen tc qdisc add dev eth0 root handle 1: drr tc class add dev eth0 parent 1: classid 1:1 drr Die Standard-qdisc ist in diesem Fall wieder pfifo_fast. Ändern: tc qdisc add dev eth0 parent 1:1 <qdisc-alg>.. Man kann classful qdiscs auch zu anderen classful qdiscs hinzufügen: tc qdisc add dev eth0 parent 1:2 handle 10: drr Bisher werden noch alle Pakete via eth0 weggeworfen. Warum? Traffic Shaping 26

Auflösung drr kann die eingehenden Pakete keiner Klasse zuordnen drop Pakete werden mit filtern klassifiziert. Manche classful qdiscs (z.b. hfsc) kennen eine default Klasse: tc qdisc add dev eth0 root handle 1: $name default 1:100 Traffic Shaping 27

1. Filter filter syntax protocol (für welches Netzwerkprotokoll der Filter greifen soll) priority (= preference legt Evaluierungsreihenfolge fest) parent (Klassen-ID, zu der filter gehoeren soll) tc filter add dev eth0 protocol ip pref 10 parent 1: 2. Selektor u32 ( match u32 00100000 00ff0000 at 0 pattern, mask, offset mächtig aber komplex) fw ( handle 0xa2 fw classid 1:1 ) route, tcindex,... 3. Aktion z.b. port mirroring/redirection (tc.. mirred) Traffic Shaping 28

Shaping mit HFSC erlaubt autfteilung der Bandbreite und Vergabe von Latenzzeiten Modelliert mit sog. Service Kurven : f(t) ist Senderate zum Zeitpunkt t Zwei Kriterien (Kurven): 1. Link-Sharing Kurve: faire Verteilung (rel. zu benachbarten Klassen) 2. Realtime-Kurve: (nur Leaf-klassen einhaltung von Garantien) RT-Kurve hat höhere Gewichtung Klasse kann Paket aufgrund RT- Kriterien auch senden, wenn dadurch Linksharing verletzt wird Traffic Shaping 29

Beispiel Leitungskapazitäten aufteilen 1:0 1000 kbit 500 kbit 1:10 1:20 500 kbit Quelle: [HFSCL] 400 kbit 1:11 1:12 100 kbit Traffic Shaping 30

HFSC jeder Klasse der (HFSC-)Hierarchie ist Virtual-Time zugeordnet Wenn Paket gesendet werden soll: (Leaf-)Klasse mit... geringstem RT-Zeitpunkt... oder (falls abgelaufen bzw. nicht konfiguriert): geringster VT auswählen. Danach wird in dieser (und allen Parentklassen incl. root) die VT erhöht. Traffic Shaping 31

HFSC-Konfiguration 1. hfsc-anlegen: tc qdisc add dev eth0 root handle 1: hfsc 2. Klassen einfügen: tc add class dev eth0 parent 1: classid 1:1 hfsc \ [ [ rt SC ] [ ls SC ] [ sc SC ] ] [ ul SC ] wobei SC (Service-Curve) := [ umax bytes dmax ms ] rate BPS (=Eigenschaften) ls: link-sharing, us: upper limit Leaf-Klassen kann auch eine rt-kurve zugewiesen werden sc: erzeugt zwei identische rt- und ls-kurven Traffic Shaping 32

HFSC-Konfiguration (2) tc qdisc add dev eth0 root handle 1: hfsc tc class add dev eth0 parent 1: classid 1:1 \ hfsc sc rate 1000kbit ul rate 1000kbit tc class add dev eth0 parent 1:1 classid 1:10 \ hfsc sc rate 500kbit ul rate 1000kbit [ 1:20 ] Zusätlich kann die max. Verzögerung (dmax) für bestimmte Grenze (umax) konfiguriert werden: tc class add dev eth0 parent 1:10 classid 1:11 \ hfsc sc umax 1500b dmax 53ms rate 400kbit \ ul rate 1000kbit [1:12 rate 100kbit] Traffic Shaping 33

Weitere Konfiguration... es könnten nun weitere qdiscs angeschlossen werden, z.b. SFQ oder RED Verständnisfrage: Warum ist TBF als HFSC-Leaf keine gute Idee? Traffic Shaping 34

Sonstiges... es könnten nun weitere qdiscs angeschlossen werden, z.b. SFQ oder RED Verständnisfrage: Warum ist TBF als HFSC-Leaf keine gute Idee? Traffic Shaping 35

Sonstiges: mirred mirred: mirror/redirect (kopieren/umleiten auf anderes Interface) tc qdisc add dev eth0 ingress tc filter add dev eth0 parent ffff: protocol \ all u32 match u32 0 0 action mirred egress mirror dev eth1 mirred ingress nicht implementiert aber Umweg über tc qdisc add... ingress möglich Traffic Shaping 36

Sonstiges: ifb (Intermediate Functional Block) pseudo-device, erlaubt shaping auch auf eingehenden Traffic modprobe ifb; ip link set dev ifb0 up tc qdisc add dev eth0 ingress tc filter add dev eth0 parent ffff: \ protocol ip u32 match u32 0 0 flowid 1:1 action \ mirred egress redirect dev ifb0 tc qdisc add dev ifb0 Einfachere Alternative zu inbound-shaping: tc filter... policy tc qdisc add... ingress tc filter add dev eth0 parent ffff: protocol ip u32 match ip \ src 0.0.0.0/0 police rate 8192kbit burst 10k drop Traffic Shaping 37

Sonstiges: netem qdisc zum Testen von Netzwerkprotokollen packet delay, loss, duplizierung, reordering,... jitter, Datenkorruption,... Vorsicht vor loss -Anwendung auf lokalem System: Netzwerstack sieht, wenn das Paket verworfen wurde und reagiert darauf daher besser auf Middlebox einsetzen tc qdisc add dev eth0 root netem delay 100ms loss 0.1% Traffic Shaping 38

Und zum Schluss... EINVAL-Ursachen RTNETLINK answers: Invalid argument We have an error talking to the kernel Beliebte Fehler: in parent-parameter angegebenes qdisc-handle existiert nicht tc class, aber angegebene qdisc ist classless erforderlicher scheduler-parameter Fe lt (parameter help, man page, lartc.org) Traffic Shaping 39

Lektüre LARTC Linux Advanced Routing & Traffic Control,http://www.lartc.org iproute2 Verzeichnis doc/ in den iproute2-sourcen, tc/*.c RED S. Floyd, V. Jacobson. Random Early Detection gateways for Congestion Avoidance., http://www.aciri.org/floyd/papers/red/red.html HFSC Ion Stoica, Hui Zhang, T.S. Eugene Ng. A Hierarchial Fair Service Curve Algorithm for Link Sharing, Real-Time and Priority Services http://www.cs.rice.edu/~eugeneng/papers/sigcomm97.pdf HFSCL Klaus Rechert, Patrick McHardy, HFSC Scheduling mit Linux http://klaus.geekserver.net/hfsc/hfsc.html Traffic Shaping 40