개발공부/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 옵션


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
- 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
조건 생성
- qdisc 생성(큐잉 규칙 만들기)
- Class 생성(qdisc 를 거쳐 가는 모든 트래픽 구분)
- 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초간 트래픽 전송
-
확인중....
- iperf