두 가지 유형의 트래픽이 있습니다.
- 전송 제어 프로토콜
- UDP 프로토콜
UDP에 1Mbps b/w, TCP에 7Mbps b/w라는 2가지 다른 필터를 적용하고 싶습니다.
하지만 트래픽이 100개 패킷 크기의 공통 버퍼를 사용하기를 원합니다.
나는 다음 스크립트를 작성했습니다
#!/bin/bash
#Size of the queue
qlen=$1
#Delay per link
sdelay=$3
tcp_rate=7Mbit
udp_rate=1Mbit
total_rate=8Mbit
function add_qdisc {
# deleting default qdisc
dev=$1
tc qdisc del dev $dev root
echo qdisc removed
# adding custom qdisc
tc qdisc add dev $dev root handle 1:0 htb default 1
echo qdisc added
# creating classes for tcp and udp traffic
tc class add dev $dev parent 1:0 classid 1:1 htb rate $total_rate ceil $total_rate
tc class add dev $dev parent 1:1 classid 1:11 htb rate $udp_rate ceil $udp_rate
tc class add dev $dev parent 1:1 classid 1:12 htb rate $tcp_rate ceil $tcp_rate
echo classes created
# creating link delays and queues
tc qdisc add dev $dev parent 1:1 handle 10: netem delay $sdelay limit $qlen
echo "delay and queue added"
# matching the tcp/udp traffic to the appropriate class
tc filter add dev $dev parent 1:0 protocol ip u32 match ip protocol 0x11 0xff flowid 1:11
tc filter add dev $dev parent 1:0 protocol ip u32 match ip protocol 0x06 0xff flowid 1:12
tc filter add dev $dev parent 1:0 protocol ip u32 match ip protocol 0x01 0xff flowid 1:12
echo filters added
}
add_qdisc s1-eth1
add_qdisc s1-eth2
add_qdisc s3-eth1
add_qdisc s3-eth2
add_qdisc s6-eth1
add_qdisc s6-eth2
RTNETLINK answers: Invalid argument
하지만 tc 트리 노드에 버퍼 크기를 추가하면 오류가 발생합니다.1:1
1:1
예를 들어 하위 항목에 대한 버퍼를 추가하면 1:11
스크립트가 제대로 실행됩니다.
1:1
두 트래픽 모두 공통 버퍼를 사용하기를 원하므로 버퍼 크기를 추가할 수 있습니까?
추신: 방금 tc 명령을 배우기 시작했습니다.
편집하다udp_rate
1Mbps로 업데이트됨
답변1
tc의 두 qdisc 간에 버퍼를 공유할 수 없습니다.
그러나 대역폭이 고정되어 있으므로 12패킷과 88패킷으로 분할하여 하드코딩하는 것이 좋습니다.
tc qdisc add dev $dev parent 1:11 handle 9: netem delay $sdelay limit $qlen_udp
tc qdisc add dev $dev parent 1:12 handle 10: netem delay $sdelay limit $qlen_tcp
UDP 패킷이 작은 경우 버퍼링 용량을 유지하고 대기 시간을 낮게 유지하려면(netem 작업 전) 이 값을 12에서 20~30으로 조정해야 할 수 있습니다.
netem 및 버퍼 공유를 사용하여 이 함수를 작성하는 이유는 무엇입니까? 무엇을 보여주고 싶나요?