개발공부/tool

tc (traffic control)

tae_98 2024. 12. 29. 21:49

tc?

  • 저수준 도구 (개발자 친화적)
  • tc 는 linux 커널의 네트워크 트래픽 제어를 위한 명령
  • 큐잉, 쉐이핑, 스케줄링, 필터링, 대역폭 제한 … 다양한 기능
  • 2계층에서 동작

명령어

  • tc [qdisc/class/filter] [add/change/del/show] dev eth0 옵션
tc qdisc show
tc qdisc show dev eno1

 

 

qdisc ==> class ==> filter 생성 순

qdisc (queueing discipline)

  • 트래픽 송출하기 전 처리하는 방식(큐잉 알고리즘)
  • 나중에 전송하기 위해 패킷을 대기열에 추가 (enqueue)
  • 대기열에서 패킷을 꺼내서 송출 (대기열에서 제거) (dequeue)
  • 대기열에 쌓여있는 패킷중 하나 dequeue 하는 방식임
  • 종류(dequeue 역할)
    • fifo
    • tbf (token bucket filter) : 패킷 송출 속도 제한
    • htb (hierarchical token bucket) : 여러 트래픽에 클래스 부여(우선순위 부여)
    • cbq (class-based queing) : 특정 트래픽에 클래스 부여
    • fq_codel : 공정 큐잉, 레이턴시 모니터링
    • red : 큐가 가득 차기전에 삭제
  • ex)
    • sudo tc qdisc add dev eth0 root handle 1: htb default 12
    • 1은 qdisc의 핸들번호(id)
    • 해당 클래스에 속하지 않는 것들은 12번 아이디로 모두 보내겠다.
      • 없으면 보통의 트래픽 처리와 동일

class

  • bandwidth 제한 설정
  • ex)
    • sudo tc class add dev eth0 parent 1: classid 1:5 htb rate 200kbps
    • eth0 으로 나가는 트래픽 중에 최대 대역폭 200kbps 인 클래스를 5번으로 생성
    • classid 1:5 에서 1은 qdisc 의 아이디, 5는 본인이 생성할 id
    • parent 1 도 qdisc를 지정하는것

filter

  • 특정 클래스로 패킷을 분류 시켜서 traffic shaping 효과
  • ex)
    • sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.4.8 match ip dport 22 0xffff flowid 1:5
      • parent 1:0 = qdisc id
      • prio 1 = 필터의 우선순위
      • u32 = 32비트
      • match ip dst 192.168.4.8 = 해당 ip 주소로 가는 ip 패킷
      • match ip dport 22 0xffff = 해당 포트로 가는 패킷, 0xffff 는 비트마스크
      • flowid 1:5 = 일치하는 트래픽을 보낼 id

조건 생성

  1. qdisc 생성(큐잉 규칙 만들기)
  2. Class 생성(qdisc 를 거쳐 가는 모든 트래픽 구분)
  3. filter 생성 (특정 클래스로 패킷을 분류시키기 위해)

조건 확인

  • sudo tc qdisc show dev ifname
  • tc가 잘 설정되었는지 확인 = iperf 이용
    • iperf
      • iperf -s 로 iperf 서버(패킷을 받는 입장) 시작
      • iperf -c 서버ip 옵션 으로 서버에 연결, 테스트 진행
         
      • ex)
        • iperf -c 192.168.1.100 -t 30
        • 해당 ip 서버에 30초간 트래픽 전송
      • 확인중....