2013-03-12 16 views
-1

1Gb 네트워크가 있으며 속도를 100MB로 제한하고 1Gb로 제한하여 특정 TCP 성능 테스트를 실행해야합니다. 각각 1기가바이트 및 메가 바이트 대역폭, 1 1:10 : 나의 이해는 두 개의 루트 클래스 1을 만들어야합니다linux tc를 tcp 응용 프로그램과 함께 사용하는 방법

tc qdisc add dev eth0 root handle 1: htb default 12 
tc class add dev eth0 parent 1: classid 1:1 htb rate 1gbps ceil 1gbps 
tc class add dev eth0 parent 1: classid 1:10 htb rate 100mbps ceil 100mbps 

이 아래와 같이 계층 토큰 버킷 (HTB)이이를 달성하기 위해 사용될 수 있다는 것입니다. 제 이해가 잘못되면 저를 시정하십시오.

다음으로, 어떻게 내 tcp 응용 프로그램에서 위의 클래스를 사용합니까? 예를 들어, 100Mb 만 사용해야하는 응용 프로그램을 실행할 때 소켓 옵션에서 무언가를 지정해야합니다. 즉, 응용 프로그램에서 보내는 메시지가 이제 1 : 1 클래스에 속해서 속도가 100Mb로 제한됩니다.

+0

아마도 이것은 serverfault 사이트에 더 적합한 질문 일 것입니다. – Keith

답변

1

트래픽 제어 일치 규칙 및 ip 테이블 규칙을 사용하여 트래픽을 표시합니다.

tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 1 fw flowid 1:10 
iptables -A OUTPUT -i eth0 -p tcp -j MARK --set-mark 1 

모든 TCP 아웃 바운드 패킷을 초당 100 메가 비트 대기열에 넣습니다.

하나의 응용 프로그램과 만 일치 시키려면 응용 프로그램이 모든 연결이 이루어진 포트 7654에서 수신 대기하는 TCP 소켓이있는 것처럼하십시오. iptables의 규칙은 시스템의 정상적인 트래픽이 어떤 방식으로 테스트에 영향을주지 않도록 또한 당신이 당신의 tc qdisc 명령 1 Gbps의 큐의 기본을해야 더이

iptables -A OUTPUT -i eth0 -p tcp -m multiport --sports 7654 -j MARK --set-mark 1 

과 같을 것이다.

+0

--set-mark 1의 기능은 무엇입니까? – Jimm

+0

패킷에 '표시'를 설정합니다. 패킷 표시는 커널 내에 만 존재하며 한 시스템에서 다른 시스템으로 전파되지 않습니다. 'tc filter' 룰은'handle 1'이 지정 될 때 같은 값을 찾습니다. –