Linux

降低 Linux 中的網路流量優先級

  • November 23, 2020

我想降低特定網路流量的優先級,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 仍有一些不清楚的地方:

  1. 如何使這條規則正常工作?
  2. 我是否需要一些其他規則來告訴 Linux 諸如*“所有其他流量以 1 優先級”之*類的東西,或者這是預設完成的?
  3. 這種命名背後的基本邏輯是什麼 - 1:2:等等?是什麼0xff意思?我應該明確指定classid欄位嗎?

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

pfifo_fast首先,我們應該將介面(通常)的根規則更改為prio

tc q a dev eno1 root handle 1: prio

此命令預設創建eno1帶有類的 qdisc( - 最高優先級,- 中,- 最低優先級)。通常所有正常流量都去往,具有最高優先級的流量(例如通過ToS/DSCP)去往。 我們可以通過以下方式檢查結果:3``1:1``1:2``1:3``1:2``1:1

tc -d -s class show dev eno1

然後我們可以添加過濾規則以將IP 協議 = 1的所有流量引導到 3rd(較低優先級)類:

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'

引用自:https://serverfault.com/questions/1042419