为什么我无法使用ToS字段排列TCP通信的优先级?

我正在尝试优先使用IP头中的ToS字段的TCP通信。 我通过发送1GB数据饱和接口(以太网),通过iperf与ToS字段设置为0x10(最小延迟)。 然后我用默认的ToS(0)启动另一个TCP客户端。

期望:我的TCP客户端不应该发送数据,直到iperf完成发送数据。

结果:我的客户端发送的数据甚至是难以发送的iperf正在发送更高优先级的数据包。

我也尝试通过创build2个独立的客户端并使用iptables为各个客户端分配0x10和0x08 ToS来创build相同的场景。 我用:iptables -A PREROUTING -t mangle -p tcp –sport 5000 -j TOS –set -tos Minimize-Delay

我仍然不能优先考虑一个客户。

我使用iptables版本1.4.21使用Ubuntu(14.04)

有人可以帮我解决这个问题吗?

谢谢Varun

ToS字段是如何确定数据包优先级或路由的指示,您现在必须指定一个策略来解释您想要对这些数据包执行什么操作。 请注意,ToS字段只会在您的LAN上有用,ISP通常会忽略或重置ToS。

既然你正在运行linux,你应该看看tc(stream量控制)。 (这是一个很好的开始)

如果你想要一个严格的基于ToS的优先级,你必须设置pfifo_fast调度器(你可能有默认的fq_codel)。

tc qdisc add dev eth0 root pfifo_fast 

虽然,如果你想要更多的灵活性,你可能想要尝试hfsc或htb作为有类的algorithm,然后fq_codel / pfifo / sfq作为叶无类algorithm。 你仍然可以将ToS与iptables或者tc匹配。