Translation(s): none
Contents
TC Overview
Traffic Control (tc) used to control network traffic.
Installation
TC bundled with iproute2 package in Debian.
# apt-get install iproute2
Queueing Disciplines
We can only shape data that we transmit. Using queueing we control the data flow.
In a router you might want control the traffic distributing inside your network. Several queueing disciplines (qdisc) can be used with tc. Choose a qdisc based on your requirements.
Simple Classless Queueing Disciplines
It has no configurable internal subdivisions. The classless queueing disciplines accept data, then reschedule, delay or drop based on queueing disciplines (qdisc).
- pfifo_fast (First In First Out) - not configurable, hardware default
- Token Bucket Filter (TBF) - slow an interface down
- Stochastic Fairness Queueing (SFQ) - round robin, each session get chance
Token Bucket Filter (TBF)
Simple and easy, for slowing an interface down. TBF for details.
#tc qdisc add dev eth1 root tbf rate 220kbit latency 50ms burst 1540
explanation:
qdisc - queueing discipline latency - number of bytes that can be queued waiting for tokens to become available. burst - Size of the bucket, in bytes. rate - speedknob
Stochastic Fairness Queueing (SFQ)
Round robin type, provide each session the chance to send data in turn. It changes its hashing algorithm within an interval. No single session will able to dominate outgoing bandwidth. SFQ for details.
#tc qdisc add dev eth1 root sfq perturb 10
explanation:
qdisc - queuing discipline perturb - Reconfigure hashing once this many seconds.
Testing Classless Queueing
To check the status run:
#tc -s -d qdisc show dev eth1
To remove it:
#tc qdisc del dev eth1 root
Classful Queueing Disciplines
It helps to set different kinds of traffic priority. Classful Queueing for details.
- Class Based Queueing (CBQ) - a Classful Queueing (old, complex)
- Hierarchical Token Bucket (HTB) - another classful Queueing
Hierarchical Token Bucket (HTB)
Let assume we want to create some rules for a small office using HTB. HTB manual from devik for details.
eth0 - external interface - PUBLIC_IP eth1 - internal interface - LOCAL_IP
Email will get the highest priority General/Other will get the medium priority. Video streaming will get the lowest priority.
Creating root 1: and 1:1 using HTB (default 6 means follow 1:6 if no rule matched)
#tc qdisc add dev eth1 root handle 1: htb default 6 #tc class add dev eth1 parent 1: classid 1:1 htb rate 2mbit ceil 2mbit
Creating leaf class 1:5 (prio represents priority, and 0 means high priority)
#tc class add dev eth1 parent 1:1 classid 1:5 htb rate 1mbit ceil 1.5mbit #tc filter add dev eth1 protocol ip parent 1:0 prio 0 u32 match ip src YOUR_MAIL_SERVER_IP/32 flowid 1:5 #tc filter add dev eth1 protocol ip parent 1:0 prio 0 u32 match ip sport 22 0xffff flowid 1:5
Creating leaf class 1:6 (It is set as default in root qdisc, so we are not setting any rules)
#tc class add dev eth1 parent 1:1 classid 1:6 htb rate 0.5mbit ceil 1.5mbit
Creating leaf class 1:7 (use /32 for specific IP, /24 for that series. Priority low - prio 5. You can get the IP address using "iptraf" tool)
#tc class add dev eth1 parent 1:1 classid 1:7 htb rate 0.2mbit ceil 1mbit #tc filter add dev eth1 protocol ip parent 1:0 prio 5 u32 match ip src VIDEO_STREAM_IP/32 flowid 1:7
Optionally we can also add discipline with leaf (for an example we are adding SFQ with leaf class 1:5)
#tc qdisc add dev eth1 parent 1:5 handle 20: sfq perturb 10
To remove it:
#tc qdisc del dev eth1 root handle 1: htb
See: