콘텐츠로 이동


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 처리 방식

다운로드.png

  • REROUTING : 외부에서 내부로 패킷이 유입될 때 적용받는 라우팅
  • POSTROUTING : 내부에서 외부로 나갈 때 적용받는 라우팅

Traffic Shaping 방식 소개

  1. Shaping?
    • Traffic Shaping : 정의한 포트/트래픽을 조절하여, 네트워크 속도를 지연시키는 방법
    • 트래픽 방향에 따라서 TBF / HTB 방식을 이용,
  2. TBF (Token Bucket Filter)
    • Packet을 Bucket에 담아 트래픽을 지연시키고, 정의한 양만큼 Traffic Shaping 적용
    • Inbound 트래픽에 대해 적용 가능
    • TBF Data Flow
      다운로드 (1).png
  3. HTB (Hierarchy Token Bucket)
    • 기본 방식은 TBF와 동일
    • 다중 Class를 생성이 가능하기 때문에 특정 IP 혹은 특정 포트 정책을 2개 이상 생성 가능
    • Outbound 트래픽에 대해 적용 가능 HTB Data Flow
      다운로드 (2).png
  4. HTB Queue의 상관관계
    다운로드 (3).png

    • Qdisc를 통해 특정 인터페이스의 Queue를 생성 하고, 하위 Class를 통해 대역폭을 설정
    • 하위 Filter를 통해 특정IP, 특정 포트에 대해서 정책 생성
    • Class는 Qdisc의 종속되어 있고 Filter는 class의 종속되어 Queue처리함

TBF 방식의 구성 테스트

  1. TBF 방식의 Traffic Shaping (eth0 인터페이스에 최대 10Mbps, 데이터 전송간 최대 70ms의 지연 발생)
    $> tc qdisc add dev eth0 root tbf rate 10mbit latency 70ms burst 1540
    
  2. Shaping 적용 확인
    $> tc qdisc show  dev eth0
    qdisc tbf 8012: root refcnt 2 rate 10000Kbit burst 1540b lat 70.0ms
    
  3. Shaping 변경
    $> tc qdisc change dev eth0 root tbf rate 20mbit latency 70ms burst 1540
    
  4. 변경 적용 확인
    $> tc qdisc show  dev eth0
    qdisc tbf 8012: root refcnt 2 rate 20000Kbit burst 1540b lat 70.0ms
    
  5. tc정보 삭제
    $> tc qdisc del dev eth0 root
    

HTB 방식의 구성 테스트

  1. 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부터 가능하고 낮은숫자가 우선순위를 갖음
  2. 적용 확인

    1. qdisc 적용확인
      $> tc qdisc show dev eth0
      qdisc htb 1: root refcnt 2 r2q 10 default 10 direct_packets_stat 17
      
    2. 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
      
    3. 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진수로 출력

    4. 정책 변경(20Mbit -> 200Mbit)

      $> tc class change dev eth0 parent 1:0 classid 1:11 htb rate 200mbit ceil 200mbit burst 10k prio 0
      

    5. 변경 정책 적용 확인
      $> 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
      

NMS 연동한 Traffic Shaping 적용 확인

  1. Traffic Shaping 적용전 (최대 610Mbps까지 트래픽 발생)
    다운로드 (4).png
  2. Taffic Shaping 적용 후 (100Mbps 적용시 최대 77.84Mbps 까지 나옴)
    다운로드 (5).png

TC의 알려진 문제점

  • 실제 트래픽 양을 설정해도, 트래픽이 처리 과정 사이에 Queue처리 하는 절차가 추가되기 때문에 설정한 양보다 전송속도가 떨어짐
  • TBF 설정 후 유입되는 Packet양이 Bucket양보다 클 경우 Packet Drop하는 문제가 존재

back
perplexity에서 생성한 AI이미지






작성일: 2026년 6월 15일 ,  마지막 업데이트: 2026년 7월 14일