所选答案不正确/不完整。我遇到了类似的问题,选择的答案提供了一些帮助,但还不够。
首先,实际上并不需要以下命令。
tc qdisc del dev eth0根目录
它会“删除”根qdisc,但会立即被pfifo_fast替换(这样就不会失去连接性)。
第二条命令:
tc qdisc添加dev eth0根句柄1:prio
将priofo_fast qdisc替换为prio之一。默认情况下,PRIO队列具有3个频段(0、1、2),每个频段由一个类别(1:1、1:2和1:3)管理。
数据包将使用IP数据包的TOS字段发送到那些频段之一。执行时显示此配置:
tc qdisc ls
查看“ priomap”值。
然后,添加一个netem qdisc:
tc qdisc添加dev eth0父对象1:1处理2:netem延迟500ms
使用此命令,您可以延迟所有流向1:1频段的流量(直到安装了过滤器)。
但是有两个警告:
- 您的流量可以具有不同的TOS值,然后发送到另一个频段。
- 可以配置prio qdisc,以使流量转到另一个频段。
以下解决了我的问题,即在未应用过滤器的情况下不受netem的影响。代替上述步骤,我做了:
tc qdisc添加dev eth0根句柄1:prio priomap 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
默认情况下,这会将所有流量发送到1:3频段。
然后,我添加了规则以延迟流量:
tc qdisc添加dev eth0父对象1:1句柄10:netem延迟100ms 10ms
这将在波段0中创建qdisc,但是由于所有流量都进入了波段3,因此它对我没有影响。
之后,我添加了过滤器:
tc过滤器添加dev eth0协议ip父1:0 prio 1 u32匹配ip dst 10.0.0.1/32匹配ip dport 80 0xffff flowid 1:1
现在有了过滤器,因为我们将所选的流量重定向到频带0,所以只有所选的IP /端口将受到影响。
所有其他流量继续流向频段3,因此不受影响。