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匹配找了很多资料,最后发现这个资料由浅入深,讲的非常好,推荐一下

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值