Linux 서버에서는 단순히 패킷을 전달하는 것만으로는 충분하지 않습니다. 서비스 품질(QoS)을 유지하고 네트워크 대역폭을 효율적으로 사용하기 위해서는 트래픽 제어(Traffic Control, TC) 기능이 필요합니다.
과거에는 tc 명령어를 이용하여 큐(Queue)와 필터(Filter)를 설정하는 방식이 일반적이었습니다. 하지만 최근에는 eBPF와 결합하여 더욱 유연하고 강력한 패킷 처리와 트래픽 관리가 가능해졌습니다.
이번 글에서는 Linux Traffic Control의 개념과 구조, Queue Discipline(Qdisc), eBPF와의 관계, 주요 명령어, 그리고 실무 활용 사례를 자세히 알아보겠습니다.
Linux Traffic Control(TC)이란?
Traffic Control(TC)은 Linux Kernel에서 네트워크 트래픽의 흐름을 제어하는 기능입니다.
TC를 사용하면 다음과 같은 작업을 수행할 수 있습니다.
- 대역폭 제한
- 패킷 우선순위 지정
- 패킷 지연 추가
- 패킷 손실 시뮬레이션
- 트래픽 분류
- QoS 구현
네트워크 장비 없이도 Linux 서버에서 다양한 트래픽 정책을 적용할 수 있습니다.
Traffic Control이 필요한 이유
예를 들어 하나의 서버에서 다음과 같은 서비스가 동시에 실행된다고 가정해 보겠습니다.
- 웹 서비스
- 데이터베이스
- 백업 프로그램
- 대용량 파일 전송
백업 프로그램이 네트워크를 모두 사용하면 웹 서비스 응답 속도가 크게 느려질 수 있습니다.
TC를 이용하면 웹 서비스 트래픽을 우선 처리하고, 백업 프로그램은 제한된 대역폭만 사용하도록 설정할 수 있습니다.
TC의 동작 구조
기본적인 구조는 다음과 같습니다.
Network Device
↓
Queue Discipline(Qdisc)
↓
Class
↓
Filter
↓
Packet
↓
Transmit
패킷은 여러 단계의 정책을 거쳐 전송됩니다.
Queue Discipline(Qdisc)란?
Qdisc는 패킷을 어떤 방식으로 처리할지 결정하는 큐 관리 알고리즘입니다.
대표적인 종류는 다음과 같습니다.
| Qdisc | 설명 |
|---|---|
| pfifo_fast | 기본 FIFO 큐 |
| fq | Fair Queueing |
| fq_codel | 버퍼블로트(Bufferbloat) 방지 |
| HTB | 계층적 대역폭 제어 |
| TBF | Token Bucket Filter |
| netem | 네트워크 지연 및 손실 시뮬레이션 |
운영 환경에서는 HTB와 fq_codel이 많이 사용됩니다.
Class와 Filter
TC는 Class와 Filter를 이용해 패킷을 분류합니다.
Packet
↓
Filter
↓
Class 선택
↓
Qdisc
↓
전송
예를 들어 HTTP 트래픽과 SSH 트래픽을 서로 다른 정책으로 처리할 수 있습니다.
eBPF와 TC
기존 Filter 대신 eBPF 프로그램을 사용할 수도 있습니다.
구조는 다음과 같습니다.
Packet
↓
TC Hook
↓
eBPF Program
↓
BPF Map
↓
Action 결정
eBPF를 이용하면 복잡한 조건에 따라 패킷을 분석하고 처리할 수 있습니다.
TC Hook
eBPF는 TC의 두 위치에서 실행할 수 있습니다.
Ingress
↓
Packet 수신
↓
eBPF
↓
Kernel
↓
Packet 송신
↓
Egress
↓
eBPF
- Ingress : 수신 패킷 처리
- Egress : 송신 패킷 처리
필요에 따라 각각 다른 정책을 적용할 수 있습니다.
현재 TC 설정 확인
인터페이스의 Qdisc 확인
tc qdisc show
특정 인터페이스 확인
tc qdisc show dev eth0
출력 예시
qdisc fq_codel 0: root
현재 적용된 Queue Discipline을 확인할 수 있습니다.
Qdisc 추가
HTB 적용
sudo tc qdisc add dev eth0 root handle 1: htb
현재 상태 확인
tc qdisc show dev eth0
삭제
sudo tc qdisc del dev eth0 root
eBPF 프로그램 연결
TC Hook에 eBPF 프로그램 연결
tc filter add dev eth0 ingress bpf obj tc_prog.o
현재 Filter 확인
tc filter show dev eth0 ingress
bpftool 확인
현재 eBPF 프로그램 확인
sudo bpftool prog show
네트워크 Hook 확인
sudo bpftool net
TC에 연결된 eBPF 프로그램도 확인할 수 있습니다.
XDP와 TC의 차이
| 항목 | XDP | TC |
|---|---|---|
| 실행 위치 | NIC Driver | Linux Network Stack |
| 처리 속도 | 매우 빠름 | 빠름 |
| 기능 | Drop, Redirect 중심 | QoS, Shaping, Filtering |
| 활용 | DDoS 방어 | 트래픽 제어 |
XDP는 성능 중심이고, TC는 유연한 정책 관리에 강점이 있습니다.
실무에서 자주 사용하는 명령어
Qdisc 확인
tc qdisc show
인터페이스 확인
ip link show
Filter 확인
tc filter show dev eth0
Class 확인
tc class show dev eth0
eBPF Program 확인
sudo bpftool prog show
Hook 확인
sudo bpftool net
실무 사례
예를 들어 사내 서버에서 백업 작업 때문에 업무용 웹 서비스가 느려진다고 가정해 보겠습니다.
다음과 같이 구성할 수 있습니다.
- HTB Qdisc 생성
- 웹 서비스 트래픽에 높은 우선순위 부여
- 백업 프로그램은 100Mbps로 제한
- eBPF Filter로 HTTP 트래픽 식별
- Ingress와 Egress 정책 적용
bpftool net으로 적용 여부 확인
이렇게 하면 웹 서비스 품질을 유지하면서 백업 작업도 안정적으로 수행할 수 있습니다.
자주 묻는 질문
TC와 iptables는 같은 기능인가요?
아닙니다. iptables는 패킷의 허용·차단과 NAT 같은 방화벽 기능을 제공합니다. 반면 TC는 대역폭 제한, QoS, 지연 추가 등 네트워크 트래픽의 흐름을 제어하는 기능입니다.
XDP와 TC 중 어떤 것을 사용해야 하나요?
단순한 패킷 차단이나 초고속 처리가 목적이라면 XDP가 적합합니다. 반면 QoS, 트래픽 분류, 대역폭 제어처럼 복잡한 정책이 필요하다면 TC가 더 적합합니다.
TC에서도 eBPF를 사용할 수 있나요?
네. TC Hook(Ingress, Egress)에 eBPF 프로그램을 연결하여 패킷을 분석하거나 필터링하고, 다양한 정책을 적용할 수 있습니다.
마무리
Linux Traffic Control(TC)은 네트워크 트래픽을 세밀하게 제어하기 위한 핵심 기능입니다. Queue Discipline(Qdisc), Class, Filter를 통해 대역폭 관리와 QoS를 구현할 수 있으며, eBPF와 결합하면 더욱 강력한 패킷 분석과 정책 적용이 가능합니다. XDP와 함께 이해하면 Linux 네트워크 성능 최적화와 클라우드 네이티브 환경을 깊이 있게 이해하는 데 큰 도움이 됩니다.