Linux
降低 Linux 中的網路流量優先級
我想降低特定網路流量的優先級,
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
: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'