这两个QOS脚本语句是什么意思

我正在研究最近Linux-TC的QOS工具,今天我在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”?

使用通用的u32select器,你可以定义一个模式来匹配IP数据包头和一个掩码,以便只在特定的偏移量处匹配特定的位。

 u32 match ip PATTERN MASK at OFFSET 

多个匹配在逻辑上“结合”,所以如果所有匹配成功,filter将成功。 让我们尝试“解码”你的filter和select器:

  • ip tos 0x68 0xff

这可以被看作是检查IP报头的TOS字段是否具有值0x68(掩码是0xff,因此0x68和0xff = 0x68)。 我会说这与DSCP有关( 更多关于值0x68 )。

  • ip protocol 0x11 0xff

这将检查协议字段的值是0x11,它是UDP协议。 您可以在/etc/protocolsfind协议号码(对于UDP,17 = 0x11)

ip tosip protocol是所谓的特定select器,但是你可以用一般forms重写它们

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

select器u8定义要匹配的模式的长度(其他的是u32,u16)。 然后,使用上面的相同的逻辑。 在TOS字段的IP头中匹配字节1的值0x68,在协议字段的字节9处匹配值0x11。

最后,我会再添加一个例子来说明如何将IP数据包与来自特定networking(192.168.123.0/24)的源IP地址进行匹配:

  • u32 u32 0xc0a87b00 0xffffff00 at 12

由于掩码值(0xc0与0xff = 0xc0,…,0xXX与0x00 = 0x00),所以在字节12处仅匹配字段12的前3个字节(0xc0 = 192,0xa8 = 168,0x7b = 123)。 这可以使用特定的select器来编写

  • ip src 192.168.123/24

如果你可以使用特定的select器,因为它们更容易理解。 最后。 如果你必须使用通用的偏移量,这张图片可以帮助你select正确的偏移量。

在这里输入图像说明