HTB
HTB (Hierarchical Token Bucket)
개요
HTB(Hierarchical Token Bucket)는 리눅스 커널의 트래픽 제어(Traffic Control, tc) 서브시스템에서 사용되는 고급 대역폭 관리 및 큐잉(Queuing) 알고리즘입니다. HTB는 네트워크 트래픽의 우선순위를 세밀하게 제어하고, 대역폭을 효율적으로 분배하며, 특정 애플리케이션이나 사용자 그룹이 과도한 대역폭을 점유하는 것을 방지하는 데 널리 사용됩니다.
기존의 큐잉 알고리즘인 TBF(Token Bucket Filter)나 SFQ(Stochastic Fairness Queueing)가 단순한 대역폭 제한이나 공정한 분배에 중점을 둔다면, HTB는 계층적 구조를 통해 대역폭을 계층적으로 할당하고 상속받을 수 있다는 점이 가장 큰 특징입니다. 이는 복잡한 네트워크 환경에서 QoS(Quality of Service)를 구현하는 데 필수적인 도구로 평가받습니다.
HTB의 핵심 개념과 동작 원리
HTB는 이름에서 알 수 있듯이 '토큰 버킷' 알고리즘을 기반으로 하지만, 이를 트리(Tree) 구조로 확장하여 계층적 관리를 가능하게 합니다. 주요 구성 요소와 동작 원리는 다음과 같습니다.
1. 계층적 구조 (Hierarchical Structure)
HTB는 부모 노드와 자식 노드로 이루어진 트리 구조를 가집니다. * 루트 노드(Root Class): 전체 인터페이스의 총 대역폭을 나타냅니다. * 클래스(Class): 대역폭 할당의 단위입니다. 각 클래스는 최대 대역폭(Max Rate)과 보장 대역폭(Guaranteed Rate)을 가질 수 있습니다. * 하위 클래스: 부모 클래스의 남은 대역폭을 하위 클래스들이 공유하거나 우선순위에 따라 배분받습니다.
이 구조를 통해 네트워크 관리자는 "전체 대역폭의 80%를 웹 트래픽에 할당하고, 그 중 50%는 HTTP, 50%는 HTTPS에 할당한다"와 같은 세밀한 정책을 수립할 수 있습니다.
2. 토큰 버킷 메커니즘
HTB는 각 클래스에 토큰을 생성하고 소모하는 방식으로 대역폭을 관리합니다. * 토큰 생성: 클래스는 설정된 보장 대역폭(Guaranteed Rate)에 비례하여 토큰을 생성합니다. * 토큰 소모: 패킷이 전송될 때 해당 클래스의 토큰을 소모합니다. 토큰이 부족하면 패킷은 큐에 대기하거나(discard), 다음 토큰 생성 시점을 기다리게 됩니다. * 여유 대역폭 공유: 만약 상위 클래스나 다른 클래스에서 사용하지 않는 대역폭(여유 토큰)이 있다면, HTB는 이를 하위 클래스나 다른 클래스에 유연하게 할당하여 대역폭 낭비를 최소화합니다.
3. 우선순위 (Priority)
각 클래스는 우선순위(1~7)를 가질 수 있습니다. * 낮은 우선순위 번호(예: 1)가 높은 우선순위를 의미합니다. * 대역폭이 부족할 때, 높은 우선순위의 트래픽이 먼저 처리됩니다. * 우선순위가 같은 경우, 보장 대역폭이 더 큰 클래스가 더 많은 대역폭을 우선적으로 확보합니다.
HTB의 주요 장점
- 정확한 대역폭 제어: 보장 대역폭과 최대 대역폭을 명확히 설정할 수 있어, 중요한 트래픽이 항상 일정 수준의 성능을 보장받습니다.
- 유연한 대역폭 공유: 사용하지 않는 대역폭을 다른 트래픽에 자동으로 할당하여 네트워크 자원의 효율성을 극대화합니다.
- 복잡한 정책 구현 가능: 계층적 구조 덕분에 다중 ISP, VPN, 내부 서버 등 복잡한 네트워크拓扑(Topology)에서도 일관된 QoS 정책을 적용할 수 있습니다.
- 리눅스 네이티브 지원: 리눅스 커널에 기본적으로 포함되어 있어 추가 모듈 설치 없이
tc명령어를 통해 즉시 사용 가능합니다.
HTB 구성 예시
리눅스에서 HTB를 설정하기 위한 일반적인 tc 명령어 예시는 다음과 같습니다. 이 예시는 총 100Mbps 링크에서 HTTP(80번 포트) 트래픽에 50Mbps를 보장하고, 나머지 트래픽은 공유하도록 설정합니다.
# 1. 루트 큐잉 디시플린 설정
tc qdisc add dev eth0 root handle 1: htb default 30
# 2. 루트 클래스 설정 (총 대역폭 100Mbps)
tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit
# 3. HTTP 트래픽을 위한 클래스 설정 (보장 50Mbps, 최대 80Mbps)
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 50mbit ceil 80mbit prio 1
# 4. 나머지 트래픽을 위한 클래스 설정 (보장 10Mbps, 최대 50Mbps)
tc class add dev eth0 parent 1:1 classid 1:20 htb rate 10mbit ceil 50mbit prio 2
# 5. 기본 트래픽을 위한 클래스 설정 (잔여 대역폭 공유)
tc class add dev eth0 parent 1:1 classid 1:30 htb rate 10mbit ceil 50mbit prio 3
# 6. 필터링 규칙: HTTP 트래픽을 1:10 클래스로 매핑
tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dport 80 0xffff flowid 1:10
관련 기술 및 비교
| 알고리즘 | 특징 | HTB와의 차이점 |
|---|---|---|
| TBF (Token Bucket Filter) | 단일 대역폭 제한에 특화됨. 계층적 관리 불가. | HTB는 계층적 구조를 지원하여 더 복잡한 정책 구현 가능. |
| SFQ (Stochastic Fairness Queueing) | 플로우 간 공정한 대역폭 분배에 중점. | HTB는 우선순위와 보장 대역폭을 명시적으로 제어할 수 있음. |
| FQ-CoDel | 지연 시간(Latency) 최소화에 특화된 현대적 큐잉 알고리즘. | HTB는 대역폭 할당에 강점이 있으며, FQ-CoDel은 주로 버스트 처리 및 지연 감소에 사용됨. 최근에는 HTB와 결합하여 사용하기도 함. |
결론
HTB는 리눅스 기반 네트워크 장비에서 대역폭 관리와 QoS 구현을 위한 표준적인 솔루션입니다. 특히 다중 서비스 제공자(ISP)나 대규모 기업 네트워크에서 트래픽의 우선순위를 명확히 하고, 대역폭을 효율적으로 분배해야 하는 경우에 필수적으로 고려됩니다. 복잡한 계층적 구조를 이해하고 적절히 구성하는 것이 HTB를 효과적으로 활용하는 핵심입니다.
참고 자료
- Linux Foundation: Traffic Control HOWTO
- Kernel Documentation: net/ipv4/tcp_htb.c
- LARTC (Linux Advanced Routing & Traffic Control) Wiki
이 문서는 AI 모델(qwen/qwen3.6-35b-a3b)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.