tc/netem 过滤器解释

tc/netem 过滤器解释

我是 tc 的新手,我发现它非常令人困惑,我能够找到并理解一些命令流,在特定 IP 上发出延迟,但我认为它不能正常工作 - 延迟此 IP 的所有可能的流量。我想我误解/不理解一些参数。

有时它确实有效,但我对此表示怀疑,因为它并不一致,好像流量有时会采用不同的优先级,但可能不会延迟?不确定

(我怎么知道的 - 有时我能够破坏向服务器发送查询的应用程序,从而延迟流量,有时它只是工作,好像没有任何延迟,即使使用 50000 毫秒)

这就是我正在使用的:

tc qdisc add dev eth1 root handle 1: prio
tc filter add dev eth1 parent 1:0 protocol ip prio 1 u32 match ip src 1.1.1.1 flowid 1:3
tc qdisc add dev eth1 parent 1:1 handle 2: netem delay 20000ms 

答案1

您只能将过滤器定向到类或根 qdisc。因此,如果您想根据 IP 源应用不同的 qdisc,则需要多个类。然后您将拥有:

根 qdisc <--> 多个类 <--> 每个类中的 qdisc

然后,您的过滤器会将流量引导至某个类,该类的叶 qdisc 将使用 netem。例如(这是我的一个脚本的一部分,它不完全一样,此代码用于解释根和叶):

# root qdisc
# Interface eth1, qdisc: htb, default leaf: 1000
tc qdisc add dev $LAN_IFACE root handle 1:0 htb default 1000 r2q 200

# root class
# Interface eth1, parent: 2:0, id: 2:11
tc class add dev $LAN_IFACE parent 1:0 classid 1:10 htb rate ${LOCAL_DL_USED}kbit ceil ${LOCAL_DL_USED}kbit quantum 100

# CLASS 1
tc class add dev $LAN_IFACE parent 1:10 classid 1:100 htb rate ${LOCAL_DL_INTERACTIVE}kbit ceil ${LOCAL_DL_INTERACTIVE}kbit burst 5k prio 0 linklayer ethernet quantum 1000
# QDISC of class 1
tc qdisc add dev $LAN_IFACE parent 1:100 handle 110: pfifo limit 1000
# FILTER to class 1
tc filter add dev $LAN_IFACE parent 1:0 protocol ip prio 0 handle 100 fw flowid 1:100

# CLASS 2
tc class add dev $LAN_IFACE parent 1:10 classid 1:200 htb rate ${LOCAL_DL_SSH}kbit ceil ${LOCAL_DL_SSH}kbit prio 1 linklayer ethernet quantum 1000
# QDISC of class 2
tc qdisc add dev $LAN_IFACE parent 1:200 handle 210: sfq perturb 10
# FILTER to class 2
tc filter add dev $LAN_IFACE parent 1:0 protocol ip prio 1 handle 200 fw flowid 1:200

你可以看看走进 Linux 内核以获得详细解释。

相关内容