這兩個 QOS 腳本語句是什麼意思
我最近正在研究 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
如果您可以使用特定的選擇器,因為它們更容易理解。最後。如果您必須使用通用偏移量,這張圖片可以幫助您選擇正確的偏移量。