shape it! bandbreitenmanagement mit freier software linux ... · 20051029 seite: 13 shape it!...
TRANSCRIPT
Shape it! Bandbreitenmanagement mit Freier Software Linux-Info-Tag 2005
Shape it Baby! Bandbreitenmanagement mit Freier Software
Frank Becker <[email protected]>
Linux-Info-Tag Dresden 2005
2005-10-29
20051029 Seite: 2
Shape it! Bandbreitenmanagement mit Freier Software Linux-Info-Tag 2005
Agenda
● Ressourcen● Begriffe● Netzwerkverkehrspriorisierung● Klassenlose Bandbreitenlimitierung● Klassenbasierte Bandbreitenlimitierung● Servicekurven
20051029 Seite: 3
Shape it! Bandbreitenmanagement mit Freier Software Linux-Info-Tag 2005
Ressourcen
● Zeit● Autos auf Straßen● Prozessor● Bandbreite
Ressourcen sind immer begrenzt!
http://wwwdb.stanford.edu/pub/voy/museum/pictures/display/32Modem.jpg
20051029 Seite: 4
Shape it! Bandbreitenmanagement mit Freier Software Linux-Info-Tag 2005
Beispiel: DSL mit und ohne Traffic Shapingvorher
nachher
http://www.benzedrine.cx/ackpri.html
Min 10 to 8 kein Netzwerkverkehr8 to 6 nur Download6 to 4 Download und upload4 to 2 nur Upload2 to 0 kein Netzwerkverkehr
20051029 Seite: 5
Shape it! Bandbreitenmanagement mit Freier Software Linux-Info-Tag 2005
Begriffe
● Netzwerkbandbreite / Durchsatz / Leitungskapazität● Paketlaufzeit (Latenz, Latency)● Priorisierung / IP Pakete
– Type of Service (Dienstemarkierung im IP Header)
● Warteschlange (Puffer, Queue)
20051029 Seite: 6
Shape it! Bandbreitenmanagement mit Freier Software Linux-Info-Tag 2005
Netzwerkbandbreite aka Leitungskapazität
1500 Byte/Paket114 ∙ 1024 Byte/s
=0,0128 sPaket
20051029 Seite: 7
Shape it! Bandbreitenmanagement mit Freier Software Linux-Info-Tag 2005
Paketlaufzeit / Latenz
20051029 Seite: 8
Shape it! Bandbreitenmanagement mit Freier Software Linux-Info-Tag 2005
IP Pakete● früher Type of Service (TOS)
● jetzt: Differentiated Services Code Point– Expedited Forwarding (EF) unmittelbares Weiterleiten vor allen anderen
Paketen
– Assured Forwarding (AF) garantiertes Weiterleiten (ohne Verwerfen)
– Default Forwarding (DF) Weiterleiten ohne besondere Bedingungenhttp://de.wikipedia.org/wiki/DiffServ
20051029 Seite: 9
Shape it! Bandbreitenmanagement mit Freier Software Linux-Info-Tag 2005
Puffer / Warteschlange / Queue
© http://scitec.uwichill.edu.bb/cmp/online/cs31k/CONGESTION%20CONTROL.ppt
Leaky Bucket Algorithmus
20051029 Seite: 10
Shape it! Bandbreitenmanagement mit Freier Software Linux-Info-Tag 2005
Ingress / Egress
● QDisc (Queueing Discipline) WarteschlangenRichtlinie● Ingress: eingehende QDisc● Egress: ausgehende QDisc
QDiscIngress
ForwardingQueue
QDiscEgress
Programme
20051029 Seite: 11
Shape it! Bandbreitenmanagement mit Freier Software Linux-Info-Tag 2005
Token Bucket Algorithmus
Token fallen mit konstanter Rate in den Eimer
Token
Netzwerkpaket
/dev/null
Für jedes gesendete Netzwerkpaket wird ein Token aus dem Eimer genommen.Ist der Eimer alle, wird nicht mehr gesendet.> Vorteil: Bursts (kurzzeitiges Überziehen des Bandbreitenlimits)
Netzwerk
20051029 Seite: 12
Shape it! Bandbreitenmanagement mit Freier Software Linux-Info-Tag 2005
Servicekurve S(t)Da
tenm
enge
Zeit
Service (Arbeit): gesendete Daten zu einem Zeitpunkt tAnstieg: Senderate
verschiedeneDatenströme
20051029 Seite: 13
Shape it! Bandbreitenmanagement mit Freier Software Linux-Info-Tag 2005
stückweise lineare Servicekurve
t
Date
nmen
ge
tDa
tenm
enge
umax
dmax
Datenstrom stückweise lineare Servicekurve
t
Date
nmen
ge
dmax
gesendete Pakete
t
Date
nmen
ge
lineare Servicekurve
-[~:] tc qdisc add dev eth1 root handle 1: hfsc default 10tc class add dev eth1 parent 1: classid 1:1 hfsc sc rate 1000kbit ul rate 1000kbittc class add dev eth1 parent 1: classid 1:10 hfsc sc umax 1500b dmax 53ms \ rate 400kbit ul rate 1000kbit
20051029 Seite: 14
Shape it! Bandbreitenmanagement mit Freier Software Linux-Info-Tag 2005
KlassenloseWarteschlangen
20051029 Seite: 15
Shape it! Bandbreitenmanagement mit Freier Software Linux-Info-Tag 2005
First In First Out (Fifo)● wie Straße mit Busspur und Motorrädern● Linux:
– Queueing Discipline (QDisc): pfio_fast– 3 priorisierte Bänder
● zuerst Band 0, dann Band 1, zuletzt Band 2● Priorität kann missbraucht werden (alle sind VIPs)● ... wird im Internet kaum beachtet-[~:] tc -s qdisc show dev eth1qdisc pfifo_fast 0: bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 Sent 14176377 bytes 63549 pkts (dropped 0, overlimits 0)
20051029 Seite: 16
Shape it! Bandbreitenmanagement mit Freier Software Linux-Info-Tag 2005
Token Bucket Filter
● Bsp: DSL Modem mit großer Warteschlange– Warteschlange voll > interaktive Anwendungen “hängen”
z. B. große EMail abschicken und parallel chatten, ssh ...– besser: selbst Bandbreite steuern
tc qdisc add dev ppp0 root tbf rate 128kbit latency 50ms burst 1540
20051029 Seite: 17
Shape it! Bandbreitenmanagement mit Freier Software Linux-Info-Tag 2005
Stochastic Fairness Queueing (SFQ)
● ausgewogene/faire Verteilung der Bandbreite bei vielen parallelen Verbindungen
● 127 fifo Warteschlangen, in Zeitscheibenverfahren abgearbeitet● Zuteilung durch Hashfunktion, wird oft wiederholt
-[~:] sudo tc qdisc add dev eth1 root sfq perturb 128 quantum 1514 limit 128-[~:] tc -s qdisc show dev eth1qdisc sfq 8003: limit 128p quantum 1514b perturb 128sec Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
Warteschlangenzuweisungaller X Sekunden
Bytes pro queue die amStück gesendet werden
QueueGröße in Bytes
20051029 Seite: 18
Shape it! Bandbreitenmanagement mit Freier Software Linux-Info-Tag 2005
Random Early [Detection|Drop] (RED)
● „TailDrop“ bei Backbone Routern– Pakete in Warteschlange anstauen, wenn voll Pakete
verwerfen– führt zu Bursts von Retransmits bei Erreichung des Limits
● RED verwirft einige Pakete bevor das Bandbreitenlimit erreicht ist. Pakete werden statistisch ausgewählt
● kein Session Tracking● 3 Parameter: Min, Max und Burst
http://www.icir.org/floyd/papers/red/red.html
20051029 Seite: 19
Shape it! Bandbreitenmanagement mit Freier Software Linux-Info-Tag 2005
Beispiel in Linux: Ingress
● Ingress– Begrenzung auf 64 KBps, 512 kbps
-[~:] sudo tc qdisc add dev eth1 handle ffff: ingress-[~:] sudo tc filter add dev eth1 parent ffff: protocol ip prio 50 \ u32 match ip src 0.0.0.0/0 police rate 512kbit burst 10k drop flowid :1
-[~:] tc -s qdisc shqdisc ingress ffff: dev eth1 ---------------- Sent 5579272 bytes 4656 pkts (dropped 352, overlimits 0)
-[~:] tc -s filter sh dev eth1 root... zum selbst ausprobieren ;-)
Filter: alle IP Pakete, Prio 50, max. Rate 512 kbps gemessen in 10 kByte, Rest verwerfen
20051029 Seite: 20
Shape it! Bandbreitenmanagement mit Freier Software Linux-Info-Tag 2005
klassenbasierteWarteschlangen
20051029 Seite: 21
Shape it! Bandbreitenmanagement mit Freier Software Linux-Info-Tag 2005
Klassen
● Aufgabe:– VoIP, ssh, Jabber und Silc:
● wenig Latenz, hohe Priorität● angemessene Bandbreite
– Web, ftp● viel Bandbreite, Latenz unwichtig● ACKs nicht stauen (geringe Latenz)● viele parallele Verbindungen
20051029 Seite: 22
Shape it! Bandbreitenmanagement mit Freier Software Linux-Info-Tag 2005
Klassen (2)
QDiscIngress
ForwardingQueue
QDiscEgress
Filter QDisc 2
QDisc 1
QDisc 3(Default)Programme
20051029 Seite: 23
Shape it! Bandbreitenmanagement mit Freier Software Linux-Info-Tag 2005
Klassen (3)root QDisc
1:
Wurzelklasse1:1, default 1:32
Admin1:10
geringe Latenz1:20
hohe Bandbreite1:30
1:21 ssh, Chat
1:22 ACKs
1:23 ICMP
1:31 Web, ftp
1:32 Rest
5 Mbps
0,5 Mbps1 Mbps 3,5 Mbps
256 kbps
128 kbps
128kbs
3,5 Mbps
3 Mbps
0,5 Mbps
pfifo sfq
pfifo
sfq
pfifo
20051029 Seite: 24
Shape it! Bandbreitenmanagement mit Freier Software Linux-Info-Tag 2005
Beispiel: Linux Ingressroot QDisc
1:
Wurzelklasse1:1, default 1:32
Admin1:10
geringe Latenz1:20
hohe Bandbreite1:30
1:21 ssh, Chat
1:22 ACKs
1:23 ICMP
1:31 Web, ftp
1:32 Rest
5 Mbps
0,5 Mbps1 Mbps 3,5 Mbps
256 kbps
128 kbps
128kbs
3,5 Mbps
3 Mbps
0,5 Mbps
pfifo sfq
pfifo
sfq
pfifo
pfifo
20051029 Seite: 25
Shape it! Bandbreitenmanagement mit Freier Software Linux-Info-Tag 2005
Beispiel Linux: Egress-[~:] tc qdisc add dev eth1 root handle 1: htb default 32
-[~:] tc class add dev eth1 parent 1: classid 1:1 htb rate 5120kbit burst 6k
-[~:] tc class add dev eth1 parent 1:1 classid 1:20 htb rate 512kbit \ ceil 1024kbit burst 6k prio 3
-[~:] tc qdisc add dev eth1 parent 1:20 handle 22: pfifo
-[~:] tc -s qdisc sh dev eth1qdisc ingress ffff: ---------------- Sent 5587972 bytes 4698 pkts (dropped 352, overlimits 0)qdisc htb 1: r2q 10 default 32 direct_packets_stat 29 Sent 9946 bytes 29 pkts (dropped 0, overlimits 0)qdisc pfifo 21: parent 1:20 limit 1000p Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
-[~:] tc -s qdisc sh dev eth1qdisc ingress ffff: ---------------- Sent 5587972 bytes 4698 pkts (dropped 352, overlimits 0)qdisc htb 1: r2q 10 default 32 direct_packets_stat 29 Sent 9946 bytes 29 pkts (dropped 0, overlimits 0)qdisc pfifo 21: parent 1:20 limit 1000p Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
20051029 Seite: 26
Shape it! Bandbreitenmanagement mit Freier Software Linux-Info-Tag 2005
Filtertc filter add dev eth0 protocol ip parent 1:0 prio 1 u32\match ip protocol 6 0xff \match u8 0x05 0x0f at 0 \match u16 0x0000 0xffc0 at 2 \match u8 0x10 0xff at 33 \flowid 1:10
http://www.knowplace.org/shaper/examples.html
iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL ACK -m state \ --state ESTABLISHED -m length --length 40:100 -j MARK --set-mark 20
tc filter add dev eth0 parent 1:0 prio 0 protocol ip handle 20 \ fw flowid 1:22
tc Filter
besser in iptables
20051029 Seite: 27
Shape it! Bandbreitenmanagement mit Freier Software Linux-Info-Tag 2005
htb.initeth1 das Interface eth1eth12.root die RootKlasse auf eth1, mit Namen "root"eth12:10.www Die Unterklasse 10 in der Rootklasse 2 auf dem
Interface eth1, mit der (optionalen) Bezeichnung "www"
-[~:] cat eth1DEFAULT=30
-[~:] cat eth1-2.rootRATE = 4Mbit#BURST = 15k
-[~:] cat eth1-2\:10.wwwRATE=1MbitCEIL=4Mbit# comming _from_ port 80 is matched.RULE=*:80,
• Einfache Konfigurationsdateien werden in tcKommandos übersetzt.
20051029 Seite: 28
Shape it! Bandbreitenmanagement mit Freier Software Linux-Info-Tag 2005
tcng● einfache KonfigDateien werden übersetzt in
– tc/Netlink– C/Kernelmodule– Code für Hardware Beschleuniger
● tcsim (Simulator)● Makros
20051029 Seite: 29
Shape it! Bandbreitenmanagement mit Freier Software Linux-Info-Tag 2005
Beispiel: TwoRate 3 Colour in tcng● http://tcng.sourceforge.net/tcc.png
● http://www.linux.com/howtos/TrafficControltcngHTBHOWTO/examples.shtml
● http://www.linuxmagazin.de/Artikel/ausgabe/2005/02/tcng/tcng.html
Demohttp://linuxip.net/gl/tcng/node57.html
20051029 Seite: 30
Shape it! Bandbreitenmanagement mit Freier Software Linux-Info-Tag 2005
Priorisierung und Limitierung mit OpenBSD● auf IT Sicherheit optimiertes
*BSD (Berkley SoftwareDistribution)
● excellent für Netzwerkaufgaben– Firewalls
● Packet scrubbing● StateSynchronisation
– VPN● IPSecFailover
● pf auch in NetBSD und FreeBSD
● BLLUE● CBQ (ClassBased Queueing)● FIFOQ (FirstIn FirstOut Queue)● HFSC (Hierarchical Fair Service Curve)● PRIQ (Priority Queueing)● RED (Random Early Detection)● RIO (RED with IN/OUT)● WFQ (Weighted Fair Queueing)● CDNR (Diffserv Traffic Conditioner)
20051029 Seite: 31
Shape it! Bandbreitenmanagement mit Freier Software Linux-Info-Tag 2005
Priorisierung und Limitierung mit OpenBSD● Klassenbasierte Queue
● Bandbreitenlimitierung / Priorisierung
● Filter
#rate limitingaltq on ne3 cbq bandwidth 1Mb queue { bulk, www, ssh }
queue bulk bandwidth 10% cbq(default)queue www bandwidth 60% priority 2 cbq(borrow red)queue ssh bandwidth 20% cbq(borrow) { ssh_interactive, ssh_bulk }queue ssh_interactive bandwidth 100% priority 7queue ssh_bulk bandwidth 100% priority 0
pass out quick on ne3 proto tcp from any to any port 22 tos 0x10 keep state queue ssh_interactive # high priority for interactivitypass out quick on ne3 proto tcp from any to any port 22 tos 0x08 keep state queue ssh_bulk #less priority for scp/sftp/...pass out quick on ne3 proto tcp from any to any port 80 queue wwwpass out on ne3 from any to any queue bulk
http://kerneltrap.org/comment/reply/505
20051029 Seite: 32
Shape it! Bandbreitenmanagement mit Freier Software Linux-Info-Tag 2005
Priorisierung und Limitierung mit OpenBSD
-[~:] pfctl -sqqueue root_ne3 bandwidth 1Mb priority 0 cbq( wrr root ) {bulk, www, ssh}queue bulk bandwidth 100Kb cbq( default )queue www bandwidth 600Kb priority 2 cbq( red borrow )queue ssh bandwidth 200Kb cbq( borrow ) {ssh_interactive, ssh_bulk}queue ssh_interactive bandwidth 200Kb priority 7queue ssh_bulk bandwidth 200Kb priority 0
http://www.benzedrine.cx/ackpri.html
http://www.bastard.net/~kos/pfvoip.html
20051029 Seite: 33
Shape it! Bandbreitenmanagement mit Freier Software Linux-Info-Tag 2005
Testaufbau
Quelle(Datenquelle)
RouterTraffic Shaper
Ziel(Datensenke)
192.168.5.0/24 192.168.23.0/24
192.168.5.1 192.168.5.254 192.168.23.254 192.168.23.1
20051029 Seite: 34
Shape it! Bandbreitenmanagement mit Freier Software Linux-Info-Tag 2005
Demo
20051029 Seite: 35
Shape it! Bandbreitenmanagement mit Freier Software Linux-Info-Tag 2005
zum Weiterlesen● http://voipinfo.org/tikiindex.php?page=QoS+Linux+with+HFSC
● LinuxMagazin 02/05
● freeX 4'2005
● www.openbsd.org
● http://lartc.org/howto/
● pf HowTo: http://www.bgnett.no/~peter/pf/
● http://mailindex.netbsd.org/netbsdusers/2005/02/05/0008.html
● altq http://kerneltrap.org/comment/reply/505
20051029 Seite: 36
Shape it! Bandbreitenmanagement mit Freier Software Linux-Info-Tag 2005
Bandbreitenmanagement Bandbreitenmanagement mit freier Software:mit freier Software:
konfigurieren, einschalten und loslegen!konfigurieren, einschalten und loslegen!