小型网络中的 QoS

网络工程 服务质量 带宽 linux
2021-07-08 00:22:03

我有一个带有 Linux 路由器的小型工程网络,路由器一侧的 LAN 节点和连接到路由器的 WAN 链接。WAN 链接是一个 16mbit/s 的无线信道,而 LAN 节点有 100mbit/s 的快速以太网连接。LAN 节点生成流量,包括命令和数据。命令是具有实时需要的 10-15 pps 速率的小数据包(数百字节)。数据是具有几 Mbps 速率的另一种类型。

我想要做的是以最佳方式共享 WAN 链接:高优先级数据包(命令)应首先占用 WAN,然后是其他数据的所有其他内容。

因此,在我阅读了 Internet 上的大量文档后,我意识到要组织 Linux 路由器上的流量管理,特别是使用tcHFSC 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

因此,使用此配置,我希望应以最小延迟尽快处理带有命令的数据包。这个配置是完整的还是完全错误的?

不幸的是,在我确定它可以工作之前,我无法在生产网络上测试这个配置。

1个回答

我不知道您的路由器或交换机的 QoS 配置的细节,但这就是 QoS 应该如何满足您所描述的要求。您可以使用它来提出满足您需求的配置。

QoS 实际上是几个单独的东西一起工作,您的需求是相当普遍的。

首先,如果端口的本地线路速率高于您的 CIR,您应该在 WAN 端口上使用整形。例如,如果您的 WAN 端口是连接到提供 16 Mb 路径的设备的 1 Gb 以太网端口,则需要进行整形。另一方面,如果端口的本地线路速率确实是 16 Mb,则不需要整形。塑造可能比最初看起来要复杂一些。您的 CIR 为 16 Mb。您应该考虑一些协议开销,如果有很多小数据包,您将需要考虑更多的协议开销,因为与大数据包相比,小数据包的有效负载与开销之比更小。您应该将整形率设置为 CIR 的某个百分比。您可以通过交通观察缩小范围,稍后再进行微调。这个百分比可能低至80%左右,也可能接近97%或98%。

接下来,您应该尽可能靠近流量来源识别和标记各种流量类别。例如,当流量进入路由器时,或者更好的是在交换机上,如果它支持 QoS 标记。将流量像具有更高优先级的命令和普通流量标记为尽力而为或适合您需要的各种标记。您可以有多个流量类别,每个类别的标记都不同。

最后,你要排队。您应该为优先流量创建一个优先队列。该队列可以有保证的最小带宽或带宽百分比,并且可以在任何其他队列之前提供服务。您将标记为优先级的流量分配给此队列。为您已识别并标记并分配给相应队列的其他流量类别创建队列。另外,多个队列可以分配不同的带宽或带宽百分比,但它们不一定是具有保证的优先级队列。