降低 Linux 中的网络流量优先级

降低 Linux 中的网络流量优先级

我想使用以下方式降低特定网络流量的优先级tc尤其tc-u32在我的 Linux 服务器上。换句话说,所有其他流量必须比具有指定 IP 协议的流量具有更高的优先级。

我正在尝试应用此 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,我仍然不清楚以下几点:

  1. 如何让这个规则正常发挥作用?
  2. 我是否需要另一条规则来告诉 Linux 类似“所有其他流量都享有 1 个优先级”或者这是默认完成的?
  3. 这些命名背后的基本逻辑是什么 - 1:2:等等?是什么0xff意思?我应该明确指定classid字段吗?

答案1

这可以按照我下面描述的方式完成。

首先,我们应该将接口的根规则(通常是pfifo_fast)更改为prio

tc q a dev eno1 root handle 1: prio

此命令默认创建eno1带有类别的 qdisc( - 最高优先级,- 中等,- 最低优先级)。通常,所有常规流量都会流向具有最高优先级的流量(例如通过31:11:21:31:2服务类型/DSCP) 转到1:1
我们可以通过以下方式检查结果:

tc -d -s class show dev eno1

然后我们可以添加过滤规则来引导所有流量IP 协议 = 1至第 3 类(优先级较低):

tc f a dev eno1 parent 1: prio 1 u32 match ip protocol 1 0xff flowid 1:3

parent 1:- 此过滤器已附加到 qdisc。根据过滤器结果,qdisc 决定应将此流量定向到哪个类。-
prio 1此过滤器的优先级(优先使用优先级较低的过滤器 - 具体来说,在这种情况下无关紧要,因为只有一个过滤器)
u32- 流量分类器
match ip protocol 1 0xff- 当 IP-proto 1 的数据包到达时触发过滤器。0xff- 是 IP 协议匹配的位掩码。
flowid 1:3- 要使用的类。

您可以启动一些 ICMP 流量并Sent通过以下方式观察结果:

watch -d -n1 'tc -d -s class show dev eno1'

相关内容