Linux

這兩個 QOS 腳本語句是什麼意思

  • September 12, 2013

我最近正在研究 Linux 的 QOS 實用程序——TC——,今天我在 Linux 上的頻寬限制腳本中遇到了以下兩條語句:

    tc filter add dev eth0 parent 1: prio 1 protocol ip u32 \
    match ip tos 0x68 0xff match ip protocol 0x11 0xff flowid 1:1

    tc filter add dev eth0 parent 1: prio 1 protocol ip u32 \
    match ip tos 0xb8 0xff match ip protocol 0x11 0xff flowid 1:1

說“匹配 ip tos 0x68 0xff 匹配 ip 協議 0x11 0xff”是什麼意思?

使用通用 u32 選擇器,您可以定義與 IP 數據標頭匹配的模式和僅在特定偏移量處匹配特定位的遮罩。

u32 match ip PATTERN MASK at OFFSET

多個匹配在邏輯上是“與”的,因此如果所有匹配都成功,則過濾器將成功。讓我們嘗試“解碼”您的過濾器及其選擇器:

  • ip tos 0x68 0xff

這可以讀取為檢查 IP 標頭的 TOS 欄位的值是否為 0x68(遮罩為 0xff,因此 0x68 AND 0xff = 0x68)。我會說它與 DSCP 有關(更多關於值 0x68)。

  • ip protocol 0x11 0xff

這將檢查協議欄位的值是否為 0x11,即 UDP 協議。/etc/protocols您可以在(對於 UDP,17 = 0x11)中找到協議號

ip tos並且ip protocol是所謂的特定選擇器,但您可以以通用形式重寫它們

  • u8 0x68 0xff at 1
  • u8 0x11 0xff at 9

選擇器 u8 以位為單位定義要匹配的模式長度(其他的是 u32、u16)。然後,使用與上面相同的邏輯。IP 頭中字節 1 的值 0x68 是 TOS 欄位和字節 9 的值 0x11 是協議欄位。

最後,我將再添加一個範例,如何將 IP 數據包與來自特定網路(192.168.123.0/24)的源 IP 地址進行匹配:

  • u32 u32 0xc0a87b00 0xffffff00 at 12

由於遮罩值(0xc0 AND 0xff = 0xc0, …, 0xXX AND 0x00 = 0x00),這僅匹配字節 12 欄位的前 3 個字節(0xc0 = 192, 0xa8 = 168, 0x7b = 123)。這可以用特定的選擇器編寫為

  • ip src 192.168.123/24

如果您可以使用特定的選擇器,因為它們更容易理解。最後。如果您必須使用通用偏移量,這張圖片可以幫助您選擇正確的偏移量。

在此處輸入圖像描述

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