z0lupka Asked: 2019-01-10 05:14:14 +0800 CST2019-01-10 05:14:14 +0800 CST 2019-01-10 05:14:14 +0800 CST ip-rule 不适用于大于 0x10 的 ToS 772 ip-rule使用特定 IP ToS值会出现一些奇怪的行为。它仅适用于高达 0x10 的值,但不接受 DSCP 部分。 我试过了: ip ru a tos 0x20 table 1234 并得到: RTNETLINK answers: Invalid argument linux networking 1 个回答 Voted Best Answer A.B 2019-01-10T07:19:47+08:002019-01-10T07:19:47+08:00 TOS在 RFC 791和 RFC 1349 中进一步定义,只有 4 个可能的位,如RFC 1349 的第 3 章所示: 0 1 2 3 4 5 6 7 +-----+-----+-----+-----+-----+-----+-----+-----+ | | | | | PRECEDENCE | TOS | MBZ | | | | | +-----+-----+-----+-----+-----+-----+-----+-----+ 和 4: 1000 -- minimize delay 0100 -- maximize throughput 0010 -- maximize reliability 0001 -- minimize monetary cost 0000 -- normal service 由于 MBZ(必须为零)位被保留并且优先级(据称?)从未真正使用过,因此只有 0x00 和 0x1E 之间的偶数值可能。Linux在 ip.h 中定义了这一点: #define IPTOS_TOS_MASK 0x1E #define IPTOS_TOS(tos) ((tos)&IPTOS_TOS_MASK) #define IPTOS_LOWDELAY 0x10 #define IPTOS_THROUGHPUT 0x08 #define IPTOS_RELIABILITY 0x04 #define IPTOS_MINCOST 0x02 和ip rule(的内核部分)只是遵循这些定义来说明允许的内容。 现在,如果您想使用DSCPRFC 2474中定义的替代机制来替换TOS相同字节的视图(以及ECNRFC 3168中),似乎不存在直接等效的 using ip rule. 您仍然可以做的是使用iptables或nftables来匹配dscp字段值,然后标记数据包并使用 in 重用它fwmark。ip rule
TOS
在 RFC 791和 RFC 1349 中进一步定义,只有 4 个可能的位,如RFC 1349 的第 3 章所示:和 4:
由于 MBZ(必须为零)位被保留并且优先级(据称?)从未真正使用过,因此只有 0x00 和 0x1E 之间的偶数值可能。Linux在 ip.h 中定义了这一点:
和
ip rule
(的内核部分)只是遵循这些定义来说明允许的内容。现在,如果您想使用
DSCP
RFC 2474中定义的替代机制来替换TOS
相同字节的视图(以及ECN
RFC 3168中),似乎不存在直接等效的 usingip rule
.您仍然可以做的是使用iptables或nftables来匹配
dscp
字段值,然后标记数据包并使用 in 重用它fwmark
。ip rule