我是靠谱客的博主 开放台灯,最近开发中收集的这篇文章主要介绍Linux TC-prio 流量分类实例理论验证,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

参考资料(建议阅读前详细看看):
[1] tc-prio官方文档
[2] Linux 高级流控—Linux 流控原理,实现,及实例
[3] IP协议之TOS字段说明

理论

我的TC树形结构:
在这里插入图片描述
构建该结构所需代码:

tc qdisc del dev eth0 root
tc qdisc add dev eth0 root handle 5: tbf rate 1024Mbit burst 2500Kb limit 1Kb
qdisc netem 10: parent 5:1 limit 50 delay 74us 49us
tc qdisc add dev eth0 parent 10:1 handle 20: prio
tc qdisc add dev eth0 parent 20:2 handle 30: fq_codel
tc qdisc add dev eth0 parent 20:3 handle 30: fq_codel
tc qdisc add dev eth0 parent 20:4 handle 30: fq_codel
tc filter add dev eth0 protocol ip parent 20: prio 1 u32 match ip tos 0x10 0xff flowid 20:1
tc filter add dev eth0 protocol ip parent 20: prio 1 u32 match ip tos 0x20 0xff flowid 20:2
tc filter add dev eth0 protocol ip parent 20: prio 1 u32 match ip tos 0x30 0xff flowid 20:3

注意其中的filter并没有起作用,一开始想的是要用filter来根据TOS分类,后来仿真发现似乎prio队列的priomap优先级更高,流量分到哪个队列取决于priomap。如果这里的filter的过滤条件改为其他的非ToS条件的话,应该可以正确分类,还未验证。

在参考文献[1] tc-prio官方文档中讲到,prio队列可根据priomap进行分类。
TOS的结构如下:
在这里插入图片描述
在[3] IP协议之TOS字段说明中有详细的解释。第0至2bit为PRECEDENCE字段,默认值为000;第3至6bit为服务类别字段;第7bit未被使用,强制为0。下面是参考文献中[3]中wireshark的抓包结果,也详细的说明了各比特的作用:
在这里插入图片描述
当prio使用默认参数时,会创建三个子队列,分别视作band0,band1,band2;也可以手动添加,在这里三个子队列20:1,20:2,20:3就分别对应band0,band1,band2。
当三个队列中都有包时,其优先级顺序为band0>band1>band2,只有优先级大的发完了优先级小的才能发。
当prio使用默认参数时,它有一个默认的priomap,解释如下:
在这里插入图片描述

验证

为称呼简便,命名子队列20:1,20:2,20:3为Q1,Q2,Q3
我使用linux中的iperf工具进行验证,同时发送ToS字段为0x10,0x4,0x8的TCP流,分别持续20s,40s,60s,查上述表发现这三条流分别对应band0,band1,band2。

iperf -c {服务器ip} -t {每个任务的持续时间} -i 1 -Z dctcp -S {每个任务的ToS字段}

这样的话,若符合上述理论,20s之前,三种流同时存在,只有Q1中有数据可以发送;20s至40s,只有对应band1和band2的流存在,但由于优先级的缘故只有对应band1的流可以发;40s至60s,只剩对应band2的流,这时它可以发送。
使用tc show -s所得的数据,仿真结果如下:
在这里插入图片描述
可以看到结果符合上述分析,20s前,三个队列中都有数据,但只有Q1中的数据发送;待Q1中的数据清空后,Q2中的数据才开始发送;Q2中的数据发送完后,Q3中的数据才可以发送。
(画图使用的是tc show -s中的统计结果,使用python的正则表达式提取出想要的数据,再写入excel表格,最后使用matlab绘图得到图像)

另外,学习tc filter的u32匹配找了很多资料,最后发现这个资料由浅入深,讲的非常好,推荐一下

最后

以上就是开放台灯为你收集整理的Linux TC-prio 流量分类实例理论验证的全部内容,希望文章能够帮你解决Linux TC-prio 流量分类实例理论验证所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部