TC 能否通过 IP 头的 Qos 字段来限制带宽

TC 能否通过 IP 头的 Qos 字段来限制带宽

我们正在开发客户端/服务器应用程序。我们的服务器应用程序中有三种类型的网络数据:实时数据(例如视频/音频数据)、关键数据(例如数据库数据)和 BestEfforts 数据(例如常见文件传输数据)。

我们计划设置每个IP包的QOS字段,来标明该ip包属于上述三种中的哪一种数据类型,然后使用TC对这三类数据设置不同的Maximum rates。

据我所知设置 qos 字段是可行的,但我想知道我们是否可以通过指定 qos 值(IP 头中 QOS 字段的值)来限制 ip 数据包的速率。

答案1

TOS我猜你指的是IPv4 数据包头中的8 位字段。你读过了吗?LARTC 指南?这是你绝对需要阅读的指南。简而言之,你需要

1)定义QDISCsCLASSes其中流量被分类、优先化和整形(仅可塑造出口流量!)。一般来说,任何需要发送的数据包都会被排入QDISC网络接口的队列。

CEIL=10
tc qdisc add dev eth0 root handle 1: htb default 15
tc class add dev eth0 parent 1: classid 1:1 htb rate ${CEIL}mbit ceil ${CEIL}mbit
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 4mbit ceil ${CEIL}mbit prio 0
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 1mbit ceil ${CEIL}mbit prio 1
tc class add dev eth0 parent 1:1 classid 1:12 htb rate 6mbit ceil ${CEIL}mbit prio 2
tc qdisc add dev eth0 parent 1:11 handle 110: sfq perturb 10
tc qdisc add dev eth0 parent 1:12 handle 120: sfq perturb 10

字段较低的类prio将首先尝试。因此,类 1:10 可能专用于需要最小延迟的数据包。类 1:11 和 1:12 附加了SFQ排队规则,以确保更公平的带宽共享。

2)定义过滤器将数据包放入右侧队列CLASS

tc filter add dev eth0 parent 1:0 protocol ip prio 1 handle 10 fw classid 1:10
tc filter add dev eth0 parent 1:0 protocol ip prio 2 handle 11 fw classid 1:11
tc filter add dev eth0 parent 1:0 protocol ip prio 3 handle 12 fw classid 1:12

这只是表明标记为 10 的数据包将进入类别 10,依此类推。

3)定义iptables规则标记数据包以将其放入右侧队列CLASS

iptables -t mangle -A PREROUTING -m tos --tos Minimize-Delay -j MARK --set-mark 0x10
iptables -t mangle -A PREROUTING -m tos --tos Minimize-Cost -j MARK --set-mark 0x11
iptables -t mangle -A PREROUTING -m tos --tos Maximize-Throughput -j MARK --set-mark 0x12

tos我特意使用 iptables模块来向您展示如何匹配TOS字段的特定值并进行相应的标记。有关此模块的更多信息,请运行

iptables -m tos --help

相关内容