Traffic Control 기반의 트래픽 제어
TC소개
- TC ≠ Test Case, TC = Traffic Control
- 기본적으로 데이터 전송시, 최대 성능을 위해 커널에서는 대역폭의 제한을 설정하지 않음
- 스위치 장비에서 대역폭 제한을 설정할 경우 10/100M, Half/Full 형식으로만 제한작업이 가능
- 하지만, NIC의 link auto negotiation 기능 때문에 스위치 or 서버장비에서만 설정하면 Link Down 현상 발생
- 운영자가 원하는 세밀한 대역폭 제한 설정 불.가.능.
- tc설정상태는 메모리에 저장되기 때문에, 장비를 재부팅하면 원래상태로 되돌아옴
- 이런문제를 해소하기 위한 방안, TC
- Iproute rpm에 포함된 명령어(iproute는 기본 패키지) Iproute 패키지에는 netstat, ifconfig, arp 의 명령어가 포함
Linux Traffic 처리 방식

- REROUTING : 외부에서 내부로 패킷이 유입될 때 적용받는 라우팅
- POSTROUTING : 내부에서 외부로 나갈 때 적용받는 라우팅
Traffic Shaping 방식 소개
- Shaping?
- Traffic Shaping : 정의한 포트/트래픽을 조절하여, 네트워크 속도를 지연시키는 방법
- 트래픽 방향에 따라서 TBF / HTB 방식을 이용,
- TBF (Token Bucket Filter)
- Packet을 Bucket에 담아 트래픽을 지연시키고, 정의한 양만큼 Traffic Shaping 적용
- Inbound 트래픽에 대해 적용 가능
- TBF Data Flow

- HTB (Hierarchy Token Bucket)
- 기본 방식은 TBF와 동일
- 다중 Class를 생성이 가능하기 때문에 특정 IP 혹은 특정 포트 정책을 2개 이상 생성 가능
- Outbound 트래픽에 대해 적용 가능 HTB Data Flow

-
HTB Queue의 상관관계

- Qdisc를 통해 특정 인터페이스의 Queue를 생성 하고, 하위 Class를 통해 대역폭을 설정
- 하위 Filter를 통해 특정IP, 특정 포트에 대해서 정책 생성
- Class는 Qdisc의 종속되어 있고 Filter는 class의 종속되어 Queue처리함
TBF 방식의 구성 테스트
- TBF 방식의 Traffic Shaping (eth0 인터페이스에 최대 10Mbps, 데이터 전송간 최대 70ms의 지연 발생)
$> tc qdisc add dev eth0 root tbf rate 10mbit latency 70ms burst 1540 - Shaping 적용 확인
$> tc qdisc show dev eth0 qdisc tbf 8012: root refcnt 2 rate 10000Kbit burst 1540b lat 70.0ms - Shaping 변경
$> tc qdisc change dev eth0 root tbf rate 20mbit latency 70ms burst 1540 - 변경 적용 확인
$> tc qdisc show dev eth0 qdisc tbf 8012: root refcnt 2 rate 20000Kbit burst 1540b lat 70.0ms - tc정보 삭제
$> tc qdisc del dev eth0 root
HTB 방식의 구성 테스트
-
eth0 인터페이스에 최대 Limit는 100Mbps으로 설정
$> tc qdisc add dev eth0 root handle 1:0 htb default 10 $> tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit $> tc class add dev eth0 parent 1:0 classid 1:10 htb rate 50mbit ceil 50mbit burst 10k prio 0 $> tc class add dev eth0 parent 1:0 classid 1:11 htb rate 20mbit ceil 20mbit burst 10k prio 0 $> tc filter add dev eth0 protocol ip parent 1:0 prio 0 u32 match ip dport 2049 0xffff flowid 1:10 $> tc filter add dev eth0 protocol ip parent 1:0 prio 0 u32 match ip dport 22 0xffff flowid 1:11- destination port가 tcp/80인 경우 최대 50Mbps으로 제한
- destination port가 tcp/22인 경우 20Mbps으로 제한
- rate : 최대 허용 대역폭
- ceil : 허용가능한 버킷양
- prio : 우선순위 설정 0부터 가능하고 낮은숫자가 우선순위를 갖음
-
적용 확인
- qdisc 적용확인
$> tc qdisc show dev eth0 qdisc htb 1: root refcnt 2 r2q 10 default 10 direct_packets_stat 17 - Class 적용확인
$> tc class show dev eth0 class htb 1:11 root prio 0 rate 20000Kbit ceil 20000Kbit burst 10Kb cburst 1600b class htb 1:10 root prio 0 rate 50000Kbit ceil 50000Kbit burst 10Kb cburst 1600b class htb 1:1 root prio 0 rate 100000Kbit ceil 100000Kbit burst 1600b cburst 1600b -
Filter 적용 확인
$> tc filter show dev eth0 filter parent 1: protocol ip pref 49151 u32 filter parent 1: protocol ip pref 49151 u32 fh 801: ht divisor 1 filter parent 1: protocol ip pref 49151 u32 fh 801::800 order 2048 key ht 801 bkt 0 flowid 1:11 match 00000016/0000ffff at 20 filter parent 1: protocol ip pref 49152 u32 filter parent 1: protocol ip pref 49152 u32 fh 800: ht divisor 1 filter parent 1: protocol ip pref 49152 u32 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:10 match 00000801/0000ffff at 20* Match (Destination 포트 정보)는 16진수로 출력
-
정책 변경(20Mbit -> 200Mbit)
$> tc class change dev eth0 parent 1:0 classid 1:11 htb rate 200mbit ceil 200mbit burst 10k prio 0 - 변경 정책 적용 확인
$> tc class show dev eth0 class htb 1:11 root prio 0 rate 200000Kbit ceil 200000Kbit burst 10200b cburst 1600b class htb 1:10 root prio 0 rate 50000Kbit ceil 50000Kbit burst 10Kb cburst 1600b class htb 1:1 root prio 0 rate 100000Kbit ceil 100000Kbit burst 1600b cburst 1600b
- qdisc 적용확인
NMS 연동한 Traffic Shaping 적용 확인
- Traffic Shaping 적용전 (최대 610Mbps까지 트래픽 발생)

- Taffic Shaping 적용 후 (100Mbps 적용시 최대 77.84Mbps 까지 나옴)

TC의 알려진 문제점
- 실제 트래픽 양을 설정해도, 트래픽이 처리 과정 사이에 Queue처리 하는 절차가 추가되기 때문에 설정한 양보다 전송속도가 떨어짐
- TBF 설정 후 유입되는 Packet양이 Bucket양보다 클 경우 Packet Drop하는 문제가 존재
![]() |
|---|
| perplexity에서 생성한 AI이미지 |
작성일: 2026년 6월 15일
,
마지막 업데이트: 2026년 7월 14일
