이 문서에서 이야기하는 TC는 Test Case가 아니라 Traffic Control의 약자다.
Linux 커널은 기본적으로 성능을 우선하므로, 별도 설정이 없으면 대역폭 제한을 적용하지 않는다.
네트워크 장비나 스위치에서 대역폭 제한을 하더라도, 세밀한 정책을 서버 단에서 직접 제어하기는 어렵다.
tc는 커널의 traffic control subsystem을 이용해 인터페이스별로 대역폭, 지연, 우선순위, 패킷 분배를 제어한다.
tc는 iproute2 패키지에 포함되어 있으며, netstat, ifconfig, arp는 iproute2가 아니라 각각 net-tools 또는 별도 패키지 계열에 속한다.
Linux Traffic 처리 방식
PREROUTING은 패킷이 시스템에 들어온 직후, 라우팅 결정 전에 처리된다.
POSTROUTING은 라우팅이 끝난 뒤, 인터페이스로 나가기 직전에 처리된다.
TC는 주로 네트워크 인터페이스의 egress/ingress 지점에서 shaping, policing, classifying에 사용된다.
Traffic Shaping 방식
Shaping
– Traffic Shaping은 트래픽의 흐름을 의도적으로 지연시켜 목표 속도에 맞추는 방식이다.
– 일반적으로 egress shaping은 구현이 쉽고, ingress 제한은 보통 ifb 같은 가상 인터페이스를 함께 사용한다.
TBF
– TBF 통신방식
– TBF(Token Bucket Filter)는 토큰 버킷 기반으로 트래픽을 제한하는 가장 단순한 shaping 방식이다.
– 지정한 속도와 지연(latency), 버스트(burst)를 기준으로 전송량을 제어한다.
– 일반적으로 egress 트래픽 shaping에 사용한다.
HTB
– HTB 통신방식
– HTB(Hierarchy Token Bucket)는 TBF를 계층 구조로 확장한 방식이다.
– 여러 class를 만들 수 있어서 특정 IP, 포트, 서비스별로 서로 다른 대역폭 정책을 적용하기 좋다.
– 일반적으로 egress 트래픽 분류 및 제한에 사용한다.
HTB Queue 구조
qdisc는 인터페이스에 연결되는 큐다.
class는 qdisc 아래에서 대역폭을 계층적으로 나누는 단위다.
filter는 특정 트래픽을 특정 class로 분류하는 역할을 한다.
즉, qdisc → class → filter 순서로 정책이 구성된다.
TBF 구성 예시
eth0 인터페이스에 최대 10Mbps, 지연 70ms 기준으로 TBF를 적용한다.
shell $> tc qdisc add dev eth0 root tbf rate 10mbit latency 70ms burst 1540