tcを使用して、TCPとUDPが同じバッファを使用したいと思います。

tcを使用して、TCPとUDPが同じバッファを使用したいと思います。

2 種類のトラフィックがあります。

  1. 伝送制御プロトコル
  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_rate1Mbpsにアップデート

答え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とバッファ共有を使用してこの関数を書くのはなぜですか?何を見せたいですか?

関連情報