我有一个带有 Linux 路由器的小型工程网络,路由器一侧的 LAN 节点和连接到路由器的 WAN 链接。WAN 链接是一个 16mbit/s 的无线信道,而 LAN 节点有 100mbit/s 的快速以太网连接。LAN 节点生成流量,包括命令和数据。命令是具有实时需要的 10-15 pps 速率的小数据包(数百字节)。数据是具有几 Mbps 速率的另一种类型。
我想要做的是以最佳方式共享 WAN 链接:高优先级数据包(命令)应首先占用 WAN,然后是其他数据的所有其他内容。
因此,在我阅读了 Internet 上的大量文档后,我意识到要组织 Linux 路由器上的流量管理,特别是使用tc和HFSC Scheduling。
现在我考虑下一个简单的配置:
# eth0 is the WAN link
tc qdisc add dev eth0 root handle 1:0 hfsc default 20
# Define overall bandwidth
tc class add dev eth0 parent 1:0 classid 1:1 hfsc sc rate 16mbit ul rate 16mbit
# This class is for commands
tc class add dev eth0 parent 1:1 classid 1:10 hfsc rt m2 16mbit
# And this one is for everything else
tc class add dev eth0 parent 1:1 classid 1:20 hfsc ls m2 16mbit ul m2 16mbit
还有一个过滤部分:
# This is for commands
tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip dst 224.0.0.0/4 flowid 1:20
# This is for everything else
tc filter add dev eth0 parent 1: protocol ip prio 2 u32 match ip dst 0.0.0.0/0 flowid 1:10
并SFQ在每个类中使用as queue 进行一些调整:
# tc qdisc add dev eth0 parent 1:10 handle 10: sfq perturb 10
# tc qdisc add dev eth0 parent 1:20 handle 20: sfq perturb 10
因此,使用此配置,我希望应以最小延迟尽快处理带有命令的数据包。这个配置是完整的还是完全错误的?
不幸的是,在我确定它可以工作之前,我无法在生产网络上测试这个配置。