리눅스에서 트래픽 컨트롤 기능을 제공하는 도구
사용자로 하여금 네트워크의 Queue와 Queuing 매커니즘을 제어 할 수 있도록 하는 도구
Traffic Control는 일반적으로 FIFO 를 사용
TC는 인터페이스의 패킷 Input과 Output에서 패킷의 송수신 속도와 순서를 결정 가능
qdisc는 단순한 FIFO 큐로 인위적인 패킷 유실, 패킷 지연, 전송 속도 제한 등 조절 가능
총 대역폭 제한 : TBF, HTB with child class
특정 사용자, 서비스 또는 client의 대역폭 제한 : HTB classes / classifying with filter
비대칭 링크에서 TCP 처리량 극대화, ACK 패킷의 전송 우선순위 지정
네트워크 리소스를 보다 균등하게 분배 가능
Queue는 스케줄링 핵심 개념으로 처리되기를 기다리는 작업 혹은 서비스 포함
Tocken Bucket
shaping(응용 레벨에서의 data rate 설정)
scheduling(패킷 전송 순서 조절)
policing(arriving traffic 제어)
qdisc
dropping(들어오고 나가는 패킷에 대한 drop) 지원
$sudo tc -s qdisc ls dev eth0
$ping -c 3 8.8.8.8
$sudo tc qdisc add dev wlan0 root netem delay 200ms
$ping -c 3 8.8.8.8
$sudo tc qdisc del dev wlan0 root
$sudo tc -s qdisc ls dev wlan0
$sudo tc qdisc add dev eth0 root netem loss __%
$sudo vi /etc/init.d/shaping
#!/bin/bash
# tc uses the following units when passed as a parameter.
# kbps: Kilobytes per second
# mbps: Megabytes per second
# kbit: Kilobits per second
# mbit: Megabits per second
# bps: Bytes per second
# Amounts of data can be specified in:
# kb or k: Kilobytes
# mb or m: Megabytes
# mbit: Megabits
# kbit: Kilobits
# To get the byte figure from bits, divide the number by 8 bit
#
# tc명령어의 위치를 입력합니다.
TC=/sbin/tc
# 대역폭을 제한하기 위한 이더넷 인터페이스를 지정합니다.
IF=eth0
# 다운로드 속도 제한
DNLD=15mbit
# 업로드 속도 제한
UPLD=15mbit
# 속도 제한을 적용할 호스트의 IP 주소
IP=220.69.209.200
# Filter options for limiting the intended interface.
U32="$TC filter add dev $IF protocol ip parent 1:0 prio 1 u32"
start() {
# We'll use Hierarchical Token Bucket (HTB) to shape bandwidth.
# For detailed configuration options, please consult Linux man
# page.
$TC qdisc add dev $IF root handle 1: htb default 30
$TC class add dev $IF parent 1: classid 1:1 htb rate $DNLD
$TC class add dev $IF parent 1: classid 1:2 htb rate $UPLD
$U32 match ip dst $IP/32 flowid 1:1
$U32 match ip src $IP/32 flowid 1:2
# The first line creates the root qdisc, and the next two lines
# create two child qdisc that are to be used to shape download
# and upload bandwidth.
#
# The 4th and 5th line creates the filter to match the interface.
# The 'dst' IP address is used to limit download speed, and the
# 'src' IP address is used to limit upload speed.
}
stop() {
# Stop the bandwidth shaping.
$TC qdisc del dev $IF root
}
restart() {
# Self-explanatory.
stop
sleep 1
start
}
show() {
# Display status of traffic control status.
$TC -s qdisc ls dev $IF
}
case "$1" in
start)
echo -n "Starting bandwidth shaping: "
start
echo "done"
;;
stop)
echo -n "Stopping bandwidth shaping: "
stop
echo "done"
;;
restart)
echo -n "Restarting bandwidth shaping: "
restart
echo "done"
;;
show)
echo "Bandwidth shaping status for $IF:"
show
echo ""
;;
*)
pwd=$(pwd)
echo "Usage: tc.bash {start|stop|restart|show}"
;;
esac
exit 0
$sudo chmod 755 /etc/init.d/shaping
$sudo /etc/init.d/shaping start
- 기본 대역폭 11MBytes/sec 에서 평균 1.7 정도로 대역폭이 감소
$sudo /etc/init.d/shaping stop