对 于 linux tc 命令_Linux系统中tc命令的使用详解的知识大家了解吗?以下就是小编整理的关于linux tc 命令_Linux系统中tc命令的使用详解的介绍,希望对大家有帮助!
Linux系统中tc命令的使用详解
(资料图)
名称:TC-显示/维护流量控制设置
I. linux tc命令格式
TC q disc[add | change | replace | link]DEV DEV[parent q disc-id | root][handle q disc-id]q disc[q disc特定参数]
TC class[add | change | replace]DEV DEV parent qdisc-id[classid class-id]qdisc[qdisc特定参数]
TC filter[add | change | replace]DEV DEV[parent qdisc-id | root]protocol protocol prio prior filter type[filter type specific parameters]flowid flow-id
tc [-s | -d ] qdisc show [ dev DEV ]
tc [-s | -d ]类显示开发开发
tc过滤器显示开发开发
二。linux tc命令原理介绍
linux操作系统中的流量控制器TC(Traffic Control)用于控制Linux内核的流量。它使用队列规则来建立处理数据包的队列,并定义队列中的数据包如何发送,从而控制流量。TC模块用来实现流量控制功能的队列规则分为两类,一类是无类队列规则,一类是分类队列规则。无类队列调控相对简单,而分类队列调控则引出了分类、过滤等概念,增强了其流量控制功能。
无类队列规则是对进入网络设备(网卡)的数据流一视同仁的队列规则。使用无类队列规则形成的队列可以接受数据包并重新排列、延迟或丢弃数据包。这种队列规则形成的队列可以塑造整个网络设备(网卡)的流量,但无法细分各种情况。常用的无类队列规则主要有pfifo _fast(先进先出)、TBF(令牌桶过滤器)、SFQ(随机公平队列)、ID(前向随机丢包)等。这类队列使用的流量整形手段主要是排序、限速和丢包。
分类规则是一种队列规则,根据不同的需求对进入网络设备的数据包进行不同的处理。数据包进入分类队列后,需要发送到某一类,也就是说需要分类。对数据包进行分类的工具是过滤器,它会返回一个决定,队列规则会根据这个决定将数据包发送到相应的类进行排队。每个子类可以通过再次使用它们的过滤器来进一步分类。在不需要进一步分类之前,数据分组在包括在该类中的队列中排队。除了其他队列规则之外,大多数分类队列规则都可以控制流量。当同时需要调度(例如使用S F Q)和流量控制时,这非常有用。
接收到的数据包从输入接口进来后,不符合要求的数据包会通过入口策略丢弃,输入解复用会做出判断和选择:如果接收到的数据包的目的地是主机,则将数据包送到上层进行处理;否则,需要转发,并且将接收到的分组移交给转发块进行处理。转发块还接收上层(TCP、UDP等)生成的数据包。)的主持人。转发块通过查看路由表来确定已处理数据包的下一跳。然后,对数据包进行排列,以便它们可以传送到输出接口。一般我们只能限制网卡发送的数据包,而不能限制网卡接收的数据包,所以可以通过改变发送顺序来控制传输速率。Linux流量控制主要是在安排输出接口时处理和实现的。
三。linux tc命令使用规则
3.1.流量控制模式
流量控制包括以下方式:
成形(限制)
当流量受限时,其传输速率被控制在某个值以下。极限值可以比有效带宽小很多,可以平滑突发数据流量,使网络更加稳定。整形仅适用于出站流量。
日程安排(SCHEDULING)
通过调度数据分组的传输,可以根据带宽范围内的优先级来分配带宽。调度也仅适用于出站流量。
警务(战略)
整形用于处理传出流量,而策略用于处理收到的数据。
下降(下降)
如果流量超过某个设定的带宽,数据包将被丢弃,无论是向内还是向外。
3.2、流程控制处理对象
流量处理由三个对象控制:qdisc(排队规则)、class(类别)和filter(过滤器)。
QDisc(排队规则)是排队规则的缩写,是理解交通控制的基础。每当内核需要通过网络接口发送数据包时,它需要根据为该接口配置的qdisc(排队规则)对数据包进行排队。然后,内核会从qdisc中取出尽可能多的数据包,交给网卡驱动模块。最简单的QDisc是pfifo,它对传入的数据包不做任何处理,数据包以先入先出的方式通过队列。但是,它会保存网络接口暂时无法处理的数据包。
QDISC分为无类QDisc和有类QDISC,如下所示:
(1)无类别的光盘(未分类的光盘)
1个无类别光盘包括:
fifo,用最简单的qdisc,纯粹是FIFO。只有一个参数:limit,用于设置队列的长度。pfifo基于包的数量;Bfifo以字节为单位。
Pfifo_fast,编译内核时,如果打开高级路由器编译选项,pfifo_fast就是系统的标准QDISC。它的队列由三个带组成。在每个波段中,使用先进先出规则。三个频段的优先级也不同,频段0优先级最高,频段2优先级最低。如果带内有数据包,系统不会处理带1内的数据包,带1和带2之间也是如此。根据服务类型,数据分组被分配到另外三个频带。
红色,红色是随机早期检测的缩写。如果使用这个QDISC,当占用的带宽接近指定带宽时,系统会随机丢弃一些数据包。它非常适合高带宽应用。
Sfq,sfq是历史公平排队的缩写。它根据会话(对应每个TCP连接或UDP流)对流量进行排序,然后循环发送每个会话的数据包。
Tbf,tbf是Token Bucket Filter的缩写,适用于将流量降低到一定值。
2无类别光盘的配置
如果没有可分类的QDisc,未分类的QDisc只能附加到设备的根目录。它们的用法如下:
tc qdisc添加开发根QDISC QDISC参数
要删除未分类的QDisc,您需要使用以下命令:
tc qdisc del dev DEV根
如果网络接口上未设置QDisc,pfifo_fast将是默认的QDisc。
(2)有类QDISC(分类QDisc)
分类光盘包括:
CBQ CBQ是基于类的排队的缩写。它实现了丰富的连接共享类别结构,具有带宽整形和带宽优先级管理的能力。带宽限制是通过计算连接的空闲时间来实现的。空闲时间的计算标准是数据包离开事件的频率和底层连接(数据链路层)的带宽。
HTB HTB是等级令牌桶的缩写。通过在实践基础上的改进,实现了一个丰富的连接共享类别系统。使用HTB可以很容易地保证每个类的带宽,虽然它也允许某些类突破带宽上限,占用其他类的带宽。HTB可以通过TBF(Token Bucket Filter)实现带宽限制,还可以划分类别的优先级。
PRIO,PRIO QDisc不能限制带宽,因为属于不同类别的数据包是按顺序出列的。PRIO QDisc可以轻松管理流量的优先级。只有当属于高优先级类别的所有分组都被发送时,属于低优先级类别的分组才会被发送。为了便于管理,需要iptables或ipchains来处理数据包的服务类型(TOS)。
3.3.操作原理
类形成一棵树,每个类只有一个父类,一个类可以有多个子类。一些QDisc(如CBQ和HTB)允许在运行时动态添加类,而另一些(如PRIO)不允许动态构建类。允许动态添加类的QDisc可以有零个或多个子类,用于对数据包进行排队。另外,每个类都有一个leaf QDisc。默认情况下,这个叶QDisc由pfifo排队。我们也可以使用其他类型的QDisc来代替这个默认的QDisc。而且这个leaf leaf QDisc是可以分类的,但是每个子类只能有一个leaf QDisc。当一个包进入一个分类的QDisc时,它将被分类到一个子类中。我们可以通过以下三种方式对数据包进行分类,但并不是所有的QDisc都可以使用这三种方式。
如果过滤器被附加到一个类,相关的指令将查询它们。过滤器可以匹配数据包报头中的所有字段,也可以匹配由ipchains或iptables制作的标签。
树的每个节点可以有自己的过滤器,但是高级过滤器也可以直接用于它的子类。如果数据包没有成功分类,它将在该类别的叶QDisc中排队。相关详细信息在每个QDisc的手册页中。
3.4.命名规则
的所有QDisc、类和过滤器都有一个ID。ID可以手动设置,也可以由内核自动分配。ID由一个主序列号和一个从序列号组成,两个数字之间用冒号分隔。
一个QDisc将被分配一个主序列号,称为句柄,然后从序列号将被用作类的命名空间。句柄表示为10:传统上,需要显式地为带有子类的QDisc分配一个句柄。
类,同一个QDisc中的类共享这个QDisc的主序列号,但是每个类都有自己的从序列号,称为类标识符(classid)。类标识符只与父QDisc相关,与父类无关。该类的命名约定与QDisc的相同。
过滤器,一个过滤器的ID有三个部分,只有当过滤器被散列时才能使用。有关详细信息,请参考tc-filters手册页。
3.5.单位
tc命令的所有参数都可以使用浮点数,可能涉及到以下计数单位。
1)、带宽或流量单位:
2)数据的数量单位:
3)、时间的计量单位:
四。linux tc的常用命令参数
Tc可以使用以下命令对QDisc、类和过滤器进行操作:
添加,添加一个QDisc,类或过滤器到一个节点。添加时,需要传递一个祖先作为参数。传递参数时,可以使用ID,也可以直接传递设备的根目录。如果要建立一个QDisc或者滤镜,可以用句柄来命名;如果您想要创建一个类,您可以使用类标识符(classid)来命名它。
Remove,删除一个句柄指定的QDisc,根QDisc(root)也可以删除。被删除的QDisc上的所有子类和附加到每个类的过滤器将被自动删除。
改变,用另一种方式修改一些条目。change命令的语法与add命令的语法相同,只是不能修改句柄和祖先。换句话说,更改命令不能确定节点的位置。
通过接近原子的操作替换、删除/添加现有节点。如果节点不存在,此命令将创建节点。
Link,仅适用于DQisc,替换现有节点。
补充:5。跑偏控制的具体操作
Linux流量控制主要分为三个方面:建立队列,建立分类,建立过滤器。
5.1.基本实施步骤
(1)为网络物理设备(如以太网卡eth0)绑定一个队列QDisc
(2)在队列上建立分类类别;
(3)为每个分类建立基于路由的过滤器;
(4)最后,配合过滤器建立具体的路由表。
5.2.环境模拟示例
流量控制器上以太网卡(eth0)的IP地址是192.168.1.66,并在其上建立了一个CBQ队列。假设平均分组大小为1000字节,分组间隔发送单元大小为8字节,可接收冲突的最长分组数为20字节。
假设有三种类型的流量需要控制:
1)它的地址是主机1,IP地址是192.168.1.24。其流量带宽控制在8Mbit,优先级为2;
2)它的地址是主机2,IP地址是192.168.1.30。其流量带宽控制在1mb,优先级为1;
3)它的地址是子网1,子网号为192.168.1.0,子网掩码为255.255.255.0。带宽控制在1mb,优先级6。
5.2.1.建立队列
一般来说,一个网卡只需要一个队列。
将一个cbq队列绑定到网络物理设备eth0,其编号为1:0;网络物理设备eth0的实际带宽为10 Mbit,平均数据包大小为1000字节。间隔发送单元的大小是8字节,并且最小传输分组大小是64字节。
5.2.2.建立分类
分类基于队列。
一般来说,应该为队列建立一个根类别,然后在其上建立子类别。对于分类,按照其分类的编号顺序工作,较小的编号优先;一旦满足某个分类匹配规则,通过该分类发送一个数据包,后续的分类就不再起作用。
1)1:1创建根分类;分配的带宽为10Mbit,优先级为8。
该队列的最大可用带宽为10Mbit,实际分配的带宽为10Mbit,可接收冲突的最大数据包数为20字节。最大传输单元加MAC头大小为1514字节,优先级为8,平均包大小为1000字节,包间隔传输单元大小为8字节,实际带宽对应的加权速率为1Mbit。
2)创建分类1:2,其父分类1:1,分配的带宽为8兆比特,优先级为2。
该队列的最大可用带宽为10Mbit,实际分配的带宽为8Mbit,可接收冲突的最大数据包数为20字节。最大传输单元加MAC头大小为1514字节,优先级为1,平均包大小为1000字节,包间隔传输单元大小为8字节,实际带宽对应的加权速率为800Kbit,分类的分离点为1:0,未使用的带宽不能借用。
3)创建1:3分类,父分类为1:1,分配的带宽为1mb,优先级为1。
该队列的最大可用带宽为10Mbit,实际分配的带宽为1Mbit,可接收冲突的最大数据包数为20字节。最大传输单元加MAC头大小为1514字节,优先级为2,平均包大小为1000字节,包间隔传输单元大小为8字节,对应实际带宽的加权速率为100Kbit,分类的分离点为1:0。
4)创建分类1:4,其父分类为1:1,分配的带宽为1mb,优先级为6。
该队列的最大可用带宽为10Mbit,实际分配的带宽为1Mbit,可接收冲突的最大数据包数为20字节。最大传输单元加MAC头大小为1514字节,优先级为6,平均包大小为1000字节,包间隔传输单元大小为8字节,对应实际带宽的加权速率为100Kbit,分类的分离点为1:0。
5.2.3.建立过滤器
过滤器主要服务于分类。
通常,只为根类别提供一个过滤器,然后为每个子类别提供路由映射。
1)对cbq队列的根应用路由分类器,父分类号为1:0;过滤协议为ip,优先级为100,过滤器基于路由表。
2)建立路由映射类别1: 2、1: 3和1: 4。
5.2.4.建立一条路线
该路线与之前建立的路线图一一对应。
1)发往主机192.168.1.24的数据包由类别2转发(类别2的速率为8Mbit)。
2)发往主机192.168.1.30的数据包由类别3转发(类别3的速率为1mb)
3)目的地为子网192.168.1.0/24的数据包由类别4转发(类别4的速率为1mb)
注意:一般情况下,对于流量控制器直接连接的网段,建议使用IP主机地址流量控制限制,而不是子网流量控制限制。如果需要对直连子网使用子网流量控制限制,那么在建立该子网的路由映射之前,必须删除系统原来建立的路由,才能完成相应的步骤。
监测
它
主要显示通过该队列发送了13232个数据包,数据流为7646731字节。丢弃的数据包数量为0,超过速率限制的数据包数量为0。
2)显示分类状态。
只需显示指定设备的分类状态(此处为eth0)
tc级ls开发eth0
详细显示指定设备(此处为eth0)的分类状态。
tc -s级ls开发eth0
主要显示不同分类发送的数据包,数据流量,丢包数,超过速率限制的包数等等。根分类(类cbq 1:0)的状态应该类似于队列的状态。
比如cbq 1:4类发送8076个包,数据流5552879字节,丢包数为0,超过速率限制的包数为0。
显示过滤器的状态。
tc -s滤波器ls dev eth0
这里,flowid 1:2代表类cbq 1:2,to 2代表通过路由2发送。
显示现有路线的状态。
ip路由
如上所示,末尾带有realm的显示行是有效的路由过滤器。
5.2.6.保持
包括添加、修改和删除队列、分类、过滤器和路由。
添加动作一般按照‘队列-排序-过滤-路由’的顺序进行;没有修改的要求;删除按照“路由-过滤-分类-队列”的顺序进行。
本文到此结束,希望对大家有所帮助。