我正在尝试优先使用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匹配。