概述
在Linux中,流量控制都是通过TC(traffic control)这个工具来完成的。TC通过三种对象控制流量的处理,它们是:qdisc(排队规则)、class(类别)和filter(过滤器)。通常,要对网卡进行流量控制的配置,需要进行如下的步骤:
*◆ 为网卡配置一个队列;*
*◆ 在该队列上建立分类;*
*◆ 根据需要建立子队列和子分类;*
*◆ 为每个分类建立过滤器。*
步骤理解图:
QDISC(排队规则) QDisc(排队规则)是queueing discipline的简写,它是理解流量控制(traffic control)的基础。无论何时,内核如果需要通过某个网络接口发送数据包,它都需要按照为这个接口配置的qdisc(排队规则)把数据包加入队列。然后,内核会尽可能多地从qdisc里面取出数据包,把它们交给网络适配器驱动模块。
tc配置结构图解:
可分类队列可以在队列的class中嵌套队列或者过滤器,而不可分配队列没有class,仅仅只有一个队列属性。
tc可以使用以下命令对QDisc、类和过滤器进行操作:
add
在一个节点里加入一个QDisc、类或者过滤器。添加时,需要传递一个祖先作为参数,传递参数时既可以使用ID也可以直接传递设备的根。如果要建立一个QDisc或者过滤器,可以使用句柄(handle)来命名;如果要建立一个类,可以使用类识别符(classid)来命名。
remove
删除有某个句柄(handle)指定的QDisc,根QDisc(root)也可以删除。被删除QDisc上的所有子类以及附属于各个类的过滤器都会被自动删除。
change
以替代的方式修改某些条目。除了句柄(handle)和祖先不能修改以外,change命令的语法和add命令相同。换句话说,change命令不能一定节点的位置。
replace
对一个现有节点进行近于原子操作的删除/添加。如果节点不存在,这个命令就会建立节点。
link
只适用于DQisc,替代一个现有的节点。
例:
tc qdisc [ add | change | replace | link ] dev DEV [ parent qdisc-id | root ] [ handle qdisc-id ] qdisc [ qdisc specific parameters ]
tc class [ add | change | replace ] dev DEV parent qdisc-id [ classid class-id ] qdisc [ qdisc specific parameters ]
tc filter [ add | change | replace ] dev DEV [ parent qdisc-id | root ] protocol protocol prio priority filtertype [ filtertype specific parameters ] flowid flow-id
tc [-s | -d ] qdisc show [ dev DEV ]
tc [-s | -d ] class show dev DEV tc filter show dev DEV
本次介绍的就是无类别队列中的tbf,tbf是Token Bucket Filter(令牌桶过滤器)的简写,适合于把流速降低到某个值。令牌桶过滤器(TBF)是一个简单的队列规定:只允许以不超过事先设定的速率到来的数据包通过,但可能允许短暂突发流量超过设定值。感兴趣的朋友可以自行查找tbf相关的资料。
它其实际实现是针对数据字节数进行的,而不是数据包数目。
下面使用这个方法限制网卡的出队列流量。
-
在本机(CentOS8)通过虚拟网卡vnet0使用ping命令访问虚拟机(192.168.122.217),查看返回的时延。
-
用tc工具在vnet网卡上设置tbf队列
sudo tc qdisc add dev vnet0 root tbf rate 100bps burst 100b limit 100b
。root表示根节点,rate表示tbf的传输速率(b/s),burst表示桶的大小(bit),这个参数指定了最多可以有多少个令牌能够即刻被使用。limit确定最多有多少数据(byte)在队列中等待令牌。 -
设置完成后,再次用ping命令访问虚拟机
对比可以看到返回时间要比设置前高了2-3个数量级。这样,在学习网络协议的过程中可以模拟出某些拥塞的情况。如果想要删掉这个队列,可以执行命令sudo tc qdisc delete dev vnet0 root
。
注:本文未经许可不得在任何平台转载。如需转载,与作者联系~
关注微信公众号:智识训练营(微信ID:TechBootcamp),获取更多资讯~
最后
以上就是体贴乐曲为你收集整理的Linux TC工具之TBF队列的全部内容,希望文章能够帮你解决Linux TC工具之TBF队列所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复