2 種類のトラフィックがあります。
- 伝送制御プロトコル
- 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
どちらのトラフィックも共通バッファを使用したいので、バッファサイズを追加できますか?
PS:ちょうどtcコマンドを学び始めました。
編集するudp_rate
1Mbpsにアップデート
答え1
tcの2つの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とバッファ共有を使用してこの関数を書くのはなぜですか?何を見せたいですか?