我想降低特定网络流量的优先级,tc
特别是tc-u32
在我的 Linux 服务器中使用。换句话说,所有其他流量必须比具有指定 IP-proto 的流量具有更高的优先级。
我正在尝试应用此 tc 过滤器规则来降低传出 ICMP 流量的优先级:
tc f a dev eno1 parent 1: prio 2 u32 match ip protocol 1 0xff
但它返回此错误:
RTNETLINK answers: Invalid argument
We have an error talking to the kernel
在这种情况下,我对 tc 仍有一些不清楚的地方:
- 如何使这条规则正常工作?
- 我是否需要一些其他规则来告诉 Linux 诸如“所有其他流量以 1 优先级”之类的东西,或者这是默认完成的?
- 这种命名背后的基本逻辑是什么 -
1:
,2:
等等?是什么0xff
意思?我应该明确指定classid
字段吗?
这可以按照我在下面描述的方式完成。
pfifo_fast
首先,我们应该将接口(通常)的根规则更改为prio
:此命令默认创建
eno1
带有类的 qdisc( - 最高优先级,- 中,- 最低优先级)。通常所有常规流量都去往,具有最高优先级的流量(例如通过ToS/DSCP)去往。 我们可以通过以下方式检查结果:3
1:1
1:2
1:3
1:2
1:1
然后我们可以添加过滤规则以将IP 协议 = 1的所有流量引导到 3rd(较低优先级)类:
parent 1:
- 此过滤器附加到 qdisc。根据过滤器结果 qdisc 决定此流量应定向到哪个类。prio 1
- 此过滤器的优先级(优先使用较低优先级的过滤器 - 特别是在这种情况下并不重要,因为只有一个过滤器)u32
- 流量分类器match ip protocol 1 0xff
- 当 IP-proto 1 的数据包到达时触发过滤器。0xff
- 是 IP 协议匹配的位掩码。flowid 1:3
- 要使用的类。您可以启动一些 ICMP 流量并
Sent
通过以下方式查看结果: