我是靠谱客的博主 体贴乐曲,最近开发中收集的这篇文章主要介绍Linux TC工具之TBF队列,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在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相关的资料。

    它其实际实现是针对数据字节数进行的,而不是数据包数目。

    下面使用这个方法限制网卡的出队列流量。

  1. 在本机(CentOS8)通过虚拟网卡vnet0使用ping命令访问虚拟机(192.168.122.217),查看返回的时延。

  2. 用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)在队列中等待令牌。

  3. 设置完成后,再次用ping命令访问虚拟机

    对比可以看到返回时间要比设置前高了2-3个数量级。这样,在学习网络协议的过程中可以模拟出某些拥塞的情况。如果想要删掉这个队列,可以执行命令sudo tc qdisc delete dev vnet0 root

注:本文未经许可不得在任何平台转载。如需转载,与作者联系~

关注微信公众号:智识训练营(微信ID:TechBootcamp),获取更多资讯~

最后

以上就是体贴乐曲为你收集整理的Linux TC工具之TBF队列的全部内容,希望文章能够帮你解决Linux TC工具之TBF队列所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部