linux tc介绍
linux tc原理
linux tc原理Linux tc原理Linux tc(Traffic Control)是Linux内核中的一种网络流量控制机制,用于管理和控制网络流量的传输速率、延迟、丢包等参数。
它可以在网络接口上实现带宽控制、流量限制和优先级管理等功能,为网络应用提供更好的服务质量。
Linux tc的原理是通过在数据包经过网络协议栈之前或之后,对数据包进行处理和调度,从而实现流量控制和管理。
它主要通过三个关键组件来实现:队列、过滤器和调度器。
队列是tc中的基本单位,用于存储和管理待传输的数据包。
在网络接口上,可以设置多个队列,每个队列可以配置不同的参数,如优先级、带宽等。
数据包进入队列后,根据配置的规则进行处理和调度。
过滤器用于根据规则匹配数据包,并对其进行过滤和分类。
过滤器可以根据数据包的源IP地址、目标IP地址、协议类型等条件来进行匹配,从而实现对不同流量的分流和控制。
调度器根据队列中数据包的特性和配置的策略,决定数据包的发送顺序和调度方式。
调度器可以根据带宽、延迟、丢包率等参数,采用不同的算法和策略来调度数据包,以满足不同应用的需求。
通过配置队列、过滤器和调度器,可以实现各种网络流量控制和管理策略。
例如,可以设置带宽限制,限制某个应用程序的网络传输速率,防止其占用过多带宽;还可以设置优先级管理,确保重要的数据包优先传输,提高网络服务质量。
除了基本的流量控制和管理功能,Linux tc还提供了一些高级功能,如拥塞控制、流量整形和流量分析等。
拥塞控制用于监测网络拥塞状态,并采取相应措施来避免拥塞的发生;流量整形可以对网络流量进行平滑处理,避免突发流量对网络性能的影响;流量分析可以对网络流量进行统计和分析,以便更好地了解网络状况和进行故障排除。
总结起来,Linux tc是一种强大而灵活的网络流量控制机制,通过队列、过滤器和调度器的协作,可以实现对网络流量的精细控制和管理。
它为网络应用提供了可靠的服务质量保障,使网络传输更加高效和可靠。
linux tc使用指南以及原理
linux tc使用指南以及原理Linux tc是一个用于配置网络流量控制的工具,它可以帮助我们实现带宽限制、延迟模拟和丢包模拟等功能。
本文将介绍Linux tc的使用指南和原理,帮助读者更好地理解和使用该工具。
一、tc的基本概念和原理1. tc的全名为Traffic Control,它是Linux系统中用于网络流量控制的一个子系统。
2. tc通过配置不同的队列和过滤器来对网络流量进行管理和控制。
3. tc主要通过三种方式来控制网络流量:限制带宽、延迟模拟和丢包模拟。
4. tc的核心概念包括:类别(class)、过滤器(filter)、队列(queue)和规则(rule)。
二、tc的使用指南1. 安装tc工具:在大多数Linux发行版中,tc工具已经默认安装,可以通过`tc qdisc show`命令来检查是否安装。
2. 查看当前网络流量控制配置:使用`tc qdisc show`命令可以查看当前系统的网络流量控制配置。
3. 创建一个队列:使用`tc qdisc add`命令可以创建一个队列,例如`tc qdisc add dev eth0 root handle 1: htb`。
4. 创建一个类别:使用`tc class add`命令可以创建一个类别,例如`tc class add dev eth0 parent 1: classid 1:1 htb rate1mbit ceil 2mbit`。
5. 创建一个过滤器:使用`tc filter add`命令可以创建一个过滤器,例如`tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip dst 192.168.0.2 flowid 1:1`。
6. 设置带宽限制:使用`tc class change`命令可以设置一个类别的带宽限制,例如`tc class change dev eth0 parent 1: classid 1:1 htb rate 512kbit ceil 1mbit`。
linuxtc模拟延时 correlation参数-概述说明以及解释
linuxtc模拟延时correlation参数-概述说明以及解释1.引言1.1 概述在Linux系统中,使用tc命令可以进行网络流量控制和管理,其中包括模拟延时、带宽限制等功能。
而在网络通信中,消息之间的相关性是一个重要的考虑因素,可以通过Correlation参数来描述消息之间的相关性程度。
本文将探讨如何使用Linuxtc命令模拟延时,并介绍Correlation 参数的作用与应用场景。
通过本文的学习,读者将更好地理解和应用Linuxtc命令,提高网络通信的效率和性能。
1.2 文章结构本文主要分为三个部分:引言、正文和结论。
在引言部分,将介绍文章的背景和意义,概述Linuxtc模拟延时以及Correlation参数的作用,并明确本文的目的和重要性。
在正文部分,将详细介绍Linuxtc模拟延时的原理和方法,以及Correlation参数的含义和影响。
还将探讨这两者在实际应用中的作用和优势。
在结论部分,将对文章中涉及到的内容进行总结和归纳,展望Linuxtc模拟延时和Correlation参数未来的发展方向,最后进行一个简短的结束语,强调本文的重要性和实用性。
1.3 目的:本文的主要目的在于探讨和分析在Linux环境下使用tc命令模拟网络延时时的Correlation参数的应用和效果。
通过深入研究和实验,我们将尝试回答以下问题:在网络模拟过程中,Correlation参数是如何影响延时的变化和网络质量的稳定性的;如何根据具体的应用场景和需求来调整Correlation参数;以及如何最大程度地发挥Correlation参数的作用,实现更加准确的网络延时模拟和性能优化。
通过本文的研究,我们希望能够为网络工程师、系统管理员和网络安全人员提供一些有益的参考和建议,帮助他们更好地应对复杂的网络环境和挑战。
同时,本文也旨在引起更多人对于Linux网络延时模拟技术的关注和研究,推动该领域的发展和进步。
2.正文2.1 Linuxtc模拟延时:Linuxtc是Linux系统中一个用于配置网络策略的工具,可以用来模拟网络延迟、丢包等情况。
Linux系统中tc命令的使用详解
Linux系统中tc命令的使用详解Linux系统中tc是一个流量控制工具,全称叫traffic control。
下面由店铺为大家整理了linux系统中tc命令的使用详解,希望对大家有帮助!Linux系统中tc命令的使用详解名称:tc - 显示/维护流量控制设置一、linux tc命令格式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-idtc [-s | -d ] qdisc show [ dev DEV ]tc [-s | -d ] class show dev DEVtc filter show dev DEV二、linux tc命令原理介绍Linux操作系统中的流量控制器TC(Traffic Control)用于linux内核的流量控制,它利用队列规定建立处理数据包的队列,并定义队列中的数据包被发送的方式,从而实现对流量的控制。
TC模块实现流量控制功能使用的队列规定分为两类,一类是无类队列规定,另一类是分类队列规定。
无类队列规定相对简单,而分类队列规定则引出了分类和过滤器等概念,使其流量控制功能增强。
TC_QDisc简介
tc qdisc 控制包队列一、TC简介TC是Linux下的流量控制(traffic control)工具,其基本的功能模块包括队列、分类、过滤器,通过相关参数进行流量控制,通过# tc help可以查看操作如: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-idtc [-s | -d ] qdisc show [ dev DEV ]tc [-s | -d ] class show dev DEV tc filter show dev DEV我们常用的丢包、延时等通过最基本的排队规则(QDisc)即可以实现,故本文仅以qdisc 参数为例,简要说明基本的控制操作。
其他流量、带宽等的控制操作(class、filter参数),请参考/man/8/tc应用。
二、qdisc规则[root@freepp ~]# tc qdisc helpUsage: tc qdisc [ add | del | replace | change | get ] dev STRING[ handle QHANDLE ] [ root | ingress | parent CLASSID ][ estimator INTERV AL TIME_CONSTANT ][ [ QDISC_KIND ] [ help | OPTIONS ] ]tc qdisc show [ dev STRING ] [ingress]Where:QDISC_KIND := { [p|b]fifo | tbf | prio | cbq | red | etc. }OPTIONS := ... try tc qdisc add <desired QDISC_KIND> helpCommand "help" is unknown, try "tc qdisc help".[root@freepp ~]#常用以下:# tc qdisc listOr # tc qdisc show三、常用规则举例说明Define# 由于该NetEm机器采用双网卡模式,是通过eth0接入internet的,故本例的device 是针对eth0设定客户端默认包传送情况1、d elay# tc qdisc add dev eth0 root netem delay 100ms#解释:所有通过eth0接口的数据会有100ms的延时# tc qdisc add dev eth0 root netem delay 50ms 25ms#解释:由于延时往往不是一个固定的值,所以就需要“抖动”,本例中设定的delay范围是50ms±25ms 即25ms~75ms2、Packet loss3、Packet duplication4、Packet corruption5、Packet re-ordering四、注意①、以上的操作(delay、loss……)可以叠加使用,即同一interface可以同改其他规则,可以将add参数改为change使用。
tc qdisc 原理
tc qdisc 原理TC(Traffic Control)是Linux系统中的一个网络流量控制工具,通过对网络流量进行管理和调度,可以实现对网络带宽的合理分配和流量控制。
而Qdisc(Queueing Discipline)是TC中的一种队列规则,用于管理和调度网络数据包的排队和发送。
本文将围绕着TC Qdisc的原理展开,介绍其作用、分类、工作原理以及常见的应用场景。
一、TC Qdisc的作用在计算机网络中,当多个主机同时进行数据传输时,往往会出现网络拥塞的情况,导致网络性能下降、延迟增加等问题。
TC Qdisc的作用就是通过对网络数据包进行管理和调度,实现对网络带宽的合理分配和流量控制,从而提高网络的性能和稳定性。
二、TC Qdisc的分类TC Qdisc根据其实现的功能和特点可以分为多种类型,常见的有以下几种:1. pfifo(Priority First In, First Out):按照数据包的到达顺序进行排队和发送,没有对数据包进行任何处理。
适用于对延迟要求较低的应用场景。
2. bfifo(Byte First In, First Out):按照数据包的大小进行排队和发送,较大的数据包会优先发送。
适用于对带宽要求较高的应用场景。
3. sfq(Stochastic Fairness Queueing):采用随机算法对数据包进行排队和发送,实现公平的带宽分配。
适用于对带宽公平分配要求较高的应用场景。
4. tbf(Token Bucket Filter):通过令牌桶算法对数据包进行排队和发送,实现对网络流量的限制和控制。
适用于对网络流量进行严格控制的应用场景。
三、TC Qdisc的工作原理TC Qdisc的工作原理主要包括以下几个步骤:1. 分类(Classification):根据规则将网络数据包进行分类,可以根据源IP地址、目标IP地址、端口号等进行分类。
2. 排队(Queueing):将分类后的数据包按照一定的规则放入相应的队列中,等待发送。
linux中tc的用法
linux中tc的用法一、简介tc(TrafficControl)是Linux中用于网络流量控制的工具,它可以对网络接口、流量门限、路由、QoS等参数进行配置和管理。
通过使用tc,可以实现对网络流量的灵活控制,提高网络性能和可靠性。
二、基本用法1.查看可用命令:在Linux中,可以使用以下命令查看可用的tc 命令:```shelltcqdiscshow```该命令将显示系统中可用的队列管理规则(QoS)。
2.设置流量门限:可以使用以下命令设置网络接口的流量门限:```shelltcqdiscadd<interface>rootnetemdelay<time>```其中,<interface>是要设置流量的网络接口,<time>是延迟时间(以秒为单位)。
该命令将为指定的网络接口添加一个netem队列管理规则,实现流量延迟的控制。
3.查看流量统计:可以使用以下命令查看网络接口的流量统计信息:```shelltcstatistics<interface>```该命令将显示指定网络接口的流量统计数据,包括输入、输出、错误等。
4.禁用流量控制:可以使用以下命令禁用网络接口的流量控制:```shelltcqdiscdel<interface>root```该命令将删除指定网络接口的rootqueue管理规则,取消流量控制。
三、高级用法1.使用class和filter:tc提供了class和filter机制,可以实现对网络流量的分类和过滤。
通过为每个class或filter分配不同的流量门限和QoS参数,可以实现更加精细的流量控制。
2.使用权重和偏移:可以使用权重和偏移来为不同的class或filter分配不同的带宽。
通过调整权重和偏移值,可以实现更加灵活的流量分配策略。
3.使用iptables结合tc:可以将iptables规则与tc命令结合使用,实现更加复杂的网络流量控制。
Linux下TC(trafficcontrol)以及netem的使用
Linux下TC(trafficcontrol)以及netem的使⽤⼀:综述:linux系统中的流量控制器(TC)主要是在输出端⼝处建⽴⼀个队列进⾏流量控制。
TC是⼀个可以根据数据包的任何⼀个部分的特征对其进⾏分类的⼯具,并且可以为各类数据提供不同带宽,从⽽控制他们的传输速度。
TC是iproute2的⼀部分,集成在2.2.及以上版本的内核中,还可以与linux内核⾥的各种架构(如Netfilter netem)协同⼯作。
⼆:TC的组件TC主要由队列规定(qdisc),类(class)和过滤器(filter)这3个组件组成,绘图中⼀般⽤圆形表⽰队列规定,⽤矩形表⽰类:1:qdisc:TC的核⼼组件,也被称为队列,是管理⽹卡输⼊,输出数据的⼀个算法,⽤于确定数据包的发送⽅式。
队列规定可分为两类:(1)不分类的qdisc:内部不包含可配置的⼦类,对进⼊队列的数据包不进⾏区分对待,⽽只是对数据包进⾏重新编排,延迟发送或者丢弃,主要有:pfifo-fast.TBF.SFQ等(2)分类队列规定:内部可包含⼀个或多个⼦类,使⽤过滤器对数据包进⾏分类,然后交给相应的⼦类处理,分类队列规定有CBQ,HTB等2:类:就是数据的类别,各种数据通过过滤器进⾏分类,最后被放⼊类的队列规定⾥⾯进⾏排队。
如果⼀个类没有⼦类,那么这个类被称为叶⼦类,否则就被成为内部类。
1:1和1:12是内部类,其他均为叶⼦类,叶⼦类有⼀个负责为这个类发送数据的队列规定,⽽且这个qdisc可以是分类的,如1:10有⼀个分类的队列规定。
TC中通常把类的队列规定称为叶⼦qdisc(只有叶⼦类才有队列规定)3:过滤器就是⼀些规则,根据这些规则对数据包进⾏分类,过滤器可以属于队列规定,也可以属于内部类,若需要在叶⼦类上再实现分类,那就必须将过滤器与叶⼦类的分类队列规定关联起来,⽽不能与叶⼦类相关联。
最常⽤的是U32过滤器,由⼀个过滤器和⼀个动作组成,选择器⽤来对数据包进⾏匹配,⼀旦匹配成功就执⾏该动作。
linux tc延迟命令原理
linux tc延迟命令原理Linux tc延迟命令原理一、引言在网络通信中,延迟是指数据包从发送端到达接收端所需的时间。
而Linux操作系统提供了tc(traffic control)命令来控制网络流量,包括延迟的设置。
本文将介绍Linux tc延迟命令的原理。
二、tc命令概述tc命令是Linux系统中的一个工具,用于配置网络流量控制策略。
它是Traffic Control的缩写,可以通过tc命令在Linux系统中创建和管理网络队列、过滤器和调度器等。
其中,延迟就是通过tc命令来实现的。
三、tc命令的基本用法tc命令的基本用法如下:```tc qdisc add dev eth0 root netem delay 100ms```上述命令中,eth0是网络接口名,netem是使用的网络队列调度器,delay 100ms表示设置延迟为100毫秒。
四、tc延迟命令的原理tc延迟命令的原理是通过在网络数据包的发送和接收过程中插入延迟来模拟真实网络环境中的延迟情况。
1. 网络队列调度器tc命令使用的网络队列调度器是netem。
网络队列调度器主要负责对数据包进行排队和调度,根据设定的延迟时间将数据包放入合适的队列中,以模拟真实网络环境中的延迟情况。
2. 数据包处理当数据包到达网络接口时,网络队列调度器会根据设定的延迟时间将数据包放入相应的队列中。
延迟时间可以通过tc命令中的delay 参数来设置,单位为毫秒。
延迟时间越长,数据包在队列中等待的时间就越长,从而增加了延迟。
3. 数据包发送在设定的延迟时间过去之后,数据包才会被发送出去。
延迟时间结束后,网络队列调度器会从队列中取出数据包,并将其发送到接收端。
因此,延迟时间的长短直接影响了数据包发送的延迟。
五、tc延迟命令的实例为了更好地理解tc延迟命令的原理,下面通过实例来说明。
假设有两台主机A和B,它们通过一个交换机连接在一起。
现在我们在主机A上设置延迟为100毫秒,并进行数据包发送测试。
linux tc模拟时延实现原理
linux tc模拟时延实现原理Linux tc是Linux操作系统中的一个网络流量管理工具,通过模拟时延来实现对网络传输的控制。
它的原理是基于Linux内核中的Traffic Control子系统,通过在网络协议栈中的不同层次上引入队列和过滤器来实现对网络流量的控制和调度。
通过使用tc命令来配置Traffic Control子系统,可以实现对网络传输的时延控制。
在Linux系统中,网络流量是通过网络接口进行传输的。
当网络接口接收到数据包时,数据包会被送往协议栈进行处理和转发。
Traffic Control子系统可以在协议栈的不同层次上对数据包进行处理,从而实现对网络流量的控制和调度。
其中,最常用的层次是网络接口层和队列层。
在网络接口层,Traffic Control子系统可以通过配置qdisc(队列调度器)来实现对网络流量的控制。
队列调度器可以将接收到的数据包放入不同的队列中,并按照一定的规则来调度队列中的数据包进行发送。
通过配置不同的队列调度器,可以实现对网络流量的不同调度策略,从而控制网络流量的时延。
在队列层,Traffic Control子系统可以通过配置class(类别)和filter(过滤器)来实现对网络流量的控制。
类别用于对网络流量进行分组,而过滤器用于根据一定的规则对分组进行过滤。
通过配置不同的类别和过滤器,可以实现对网络流量的分类和过滤,从而控制网络流量的时延。
通过使用tc命令来配置Traffic Control子系统,可以实现对网络传输的时延控制。
tc命令提供了一系列的选项和参数,用于配置队列调度器、类别和过滤器,从而实现对网络流量的控制。
例如,可以使用tc命令配置一个队列调度器,将接收到的数据包按照先进先出(FIFO)的顺序进行发送,从而实现对网络流量的时延控制。
除了配置队列调度器、类别和过滤器,tc命令还可以配置其他一些参数,用于进一步控制网络流量的时延。
例如,可以使用tc命令配置一个延迟模拟器,模拟网络传输中的时延。
Linux命令高级技巧使用tc进行网络流量控制和限制
Linux命令高级技巧使用tc进行网络流量控制和限制Linux命令高级技巧:使用tc进行网络流量控制和限制在Linux操作系统中,网络流量控制和限制是一项重要的技巧,特别是在服务器和网络管理员的工作中。
通过使用tc命令,我们可以实现对网络流量进行细致的控制和限制,以确保网络的稳定性和良好的性能。
本文将介绍如何使用tc命令进行网络流量控制和限制的高级技巧。
一、tc命令简介tc命令是Linux操作系统中的一个非常强大的工具,它是Traffic Control的缩写,用于对网络流量进行控制和限制。
通过tc命令可以实现对网络流量的带宽、延迟、丢包率等参数进行调整,以满足不同网络环境和需求的要求。
二、安装tc命令在大多数Linux发行版中,tc命令已经默认安装,但如果你的系统没有安装tc命令,可以通过包管理工具进行安装。
以Ubuntu为例,可以使用以下命令安装tc命令:```sudo apt-get install iproute2```三、使用tc命令进行网络流量控制1. 查看网络接口信息在使用tc命令进行网络流量控制前,我们首先需要查看系统中的网络接口信息,以确定需要控制和限制的网络接口。
可以使用以下命令查看网络接口信息:```ifconfig```2. 创建新的网络类别通过创建新的网络类别,我们可以对不同的网络流量进行不同的控制和限制。
可以使用以下命令创建新的网络类别:```sudo tc qdisc add dev [网络接口] root [网络类别]```其中,[网络接口]是需要进行控制和限制的网络接口名称,[网络类别]是新创建的网络类别。
3. 设置网络类别的属性对于新创建的网络类别,我们需要设置一些属性,以实现对网络流量的具体控制和限制。
可以使用以下命令设置网络类别的属性:```sudo tc qdisc add dev [网络接口] parent [网络类别] handle [网络句柄] [网络属性]```其中,[网络属性]用于设置带宽、延迟、丢包率等参数,可以根据实际需求进行调整。
Linux 限速工具TC 手册简明版
Linux 限速工具TC 手册简明版tc -- 显示/维护流量控制设置摘要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-idtc [-s | -d ] qdisc show [ dev DEV ]tc [-s | -d ] class show dev DEV tc filter show dev DEV简介Tc用于Linux内核的流量控制。
流量控制包括以下几种方式:SHAPING(限制)当流量被限制,它的传输速率就被控制在某个值以下。
限制值可以大大小于有效带宽,这样可以平滑突发数据流量,使网络更为稳定。
shaping(限制)只适用于向外的流量。
SCHEDULING(调度)通过调度数据包的传输,可以在带宽范围内,按照优先级分配带宽。
SCHEDULING(调度)也只适于向外的流量。
POLICING(策略)SHAPING用于处理向外的流量,而POLICIING(策略)用于处理接收到的数据。
DROPPING(丢弃)如果流量超过某个设定的带宽,就丢弃数据包,不管是向内还是向外。
Linux下使用tc(TrafficControl)流量控制命令模拟网络延迟和丢包
Linux下使⽤tc(TrafficControl)流量控制命令模拟⽹络延迟和丢包 Linux下使⽤tc(Traffic Control) 流量控制命令模拟⽹络延迟和丢包qdisc is short for 'queueing discipline'TC案例如何使⽤tc模拟⽹络延迟和丢包修改⽹络延时: sudo tc qdisc add dev eth0 root netem delay 1000ms查看流量管理:tc qdisc show删除策略:sudo tc qdisc del dev eth0 root netem delay 1000ms验证效果:ping 192.168.102.124 -c 20修改丢包率:sudo tc qdisc add dev eth0 root netem loss 10%删除策略:sudo tc qdisc del dev eth0 root netem loss 10%--------------------------------------------------------------------------------------------------------------------------------------------配置⽹络超时123 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24[root@dev-xx-xx ~]# tc qdisc del dev eth0 root netem delay 100msRTNETLINK answers: Invalid argument[root@dev-xx-xx ~]# tc qdisc showqdisc mq 0: dev eth0 rootqdisc pfifo_fast 0: dev eth0 parent :1 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 qdisc pfifo_fast 0: dev eth0 parent :2 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 qdisc pfifo_fast 0: dev eth0 parent :3 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 qdisc pfifo_fast 0: dev eth0 parent :4 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 [root@dev-xx-xx ~]# tc qdisc add dev eth0 root netem delay 100ms[root@dev-xx-xx ~]# ping 192.168.102.124PING 192.168.102.124 (192.168.102.124) 56(84) bytes of data.64 bytes from 192.168.102.124: icmp_seq=1 ttl=64 time=0.074 ms64 bytes from 192.168.102.124: icmp_seq=2 ttl=64 time=0.066 ms64 bytes from 192.168.102.124: icmp_seq=3 ttl=64 time=0.080 ms64 bytes from 192.168.102.124: icmp_seq=4 ttl=64 time=0.043 ms64 bytes from 192.168.102.124: icmp_seq=5 ttl=64 time=0.084 ms64 bytes from 192.168.102.124: icmp_seq=6 ttl=64 time=0.094 ms^C--- 192.168.102.124 ping statistics ---12 packets transmitted, 12 received, 0% packet loss, time11131msrtt min/avg/max/mdev= 0.043/0.081/0.107/0.018 ms[root@dev-xx-xx ~]# tc qdisc del dev eth0 root netem delay 100ms[root@dev-xx-xx ~]# tc qdisc del dev eth0 root netem delay 100msRTNETLINK answers: Invalid argument配置⽹络丢包率123456 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22[root@dev-xx-xx ~]# tc qdisc del dev eth0 root netem loss 10%RTNETLINK answers: Invalid argument[root@dev-xx-xx ~]# tc qdisc add dev eth0 root netem loss 10%[root@dev-xx-xx ~]# tc qdisc showqdisc netem 8005: dev eth0 root refcnt 5 limit 1000 loss 10% [root@dev-xx-xx ~]# ping 192.168.102.124 -n 20PING 20 (0.0.0.20) 56(124) bytes of data.^C--- 20 ping statistics ---21 packets transmitted, 0 received, 100% packet loss, time20650ms[root@dev-xx-xx ~]# ping 192.168.102.124 -c 20 PING 192.168.102.124 (192.168.102.124) 56(84) bytes of data. 64 bytes from 192.168.102.124: icmp_seq=1 ttl=64 time=0.101 ms 64 bytes from 192.168.102.124: icmp_seq=2 ttl=64 time=0.062 ms 64 bytes from 192.168.102.124: icmp_seq=3 ttl=64 time=0.098 ms 64 bytes from 192.168.102.124: icmp_seq=4 ttl=64 time=0.098 ms 64 bytes from 192.168.102.124: icmp_seq=5 ttl=64 time=0.062 ms 64 bytes from 192.168.102.124: icmp_seq=6 ttl=64 time=0.088 ms 64 bytes from 192.168.102.124: icmp_seq=7 ttl=64 time=0.045 ms 64 bytes from 192.168.102.124: icmp_seq=8 ttl=64 time=0.070 ms23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 6564 bytes from 192.168.102.124: icmp_seq=9 ttl=64 time=0.062 ms 64 bytes from 192.168.102.124: icmp_seq=10 ttl=64 time=0.066 ms 64 bytes from 192.168.102.124: icmp_seq=11 ttl=64 time=0.088 ms 64 bytes from 192.168.102.124: icmp_seq=12 ttl=64 time=0.070 ms 64 bytes from 192.168.102.124: icmp_seq=13 ttl=64 time=0.089 ms 64 bytes from 192.168.102.124: icmp_seq=14 ttl=64 time=0.087 ms 64 bytes from 192.168.102.124: icmp_seq=15 ttl=64 time=0.054 ms 64 bytes from 192.168.102.124: icmp_seq=16 ttl=64 time=0.085 ms 64 bytes from 192.168.102.124: icmp_seq=17 ttl=64 time=0.064 ms 64 bytes from 192.168.102.124: icmp_seq=18 ttl=64 time=0.124 ms 64 bytes from 192.168.102.124: icmp_seq=19 ttl=64 time=0.063 ms 64 bytes from 192.168.102.124: icmp_seq=20 ttl=64 time=0.108 ms--- 192.168.102.124 ping statistics ---20 packets transmitted, 20 received, 0% packet loss, time19000msrtt min/avg/max/mdev= 0.045/0.079/0.124/0.020 ms [root@dev-xx-xx ~]# tc qdisc del dev eth0 root netem loss 10% [root@dev-xx-xx ~]# ping 192.168.102.124 -c 20PING 192.168.102.124 (192.168.102.124) 56(84) bytes of data.64 bytes from 192.168.102.124: icmp_seq=1 ttl=64 time=0.041 ms 64 bytes from 192.168.102.124: icmp_seq=2 ttl=64 time=0.132 ms 64 bytes from 192.168.102.124: icmp_seq=3 ttl=64 time=0.344 ms 64 bytes from 192.168.102.124: icmp_seq=4 ttl=64 time=0.404 ms 64 bytes from 192.168.102.124: icmp_seq=5 ttl=64 time=0.086 ms 64 bytes from 192.168.102.124: icmp_seq=6 ttl=64 time=0.088 ms 64 bytes from 192.168.102.124: icmp_seq=7 ttl=64 time=0.063 ms 64 bytes from 192.168.102.124: icmp_seq=8 ttl=64 time=0.109 ms 64 bytes from 192.168.102.124: icmp_seq=9 ttl=64 time=0.064 ms 64 bytes from 192.168.102.124: icmp_seq=10 ttl=64 time=0.092 ms 64 bytes from 192.168.102.124: icmp_seq=11 ttl=64 time=0.044 ms 64 bytes from 192.168.102.124: icmp_seq=12 ttl=64 time=0.066 ms 64 bytes from 192.168.102.124: icmp_seq=13 ttl=64 time=0.094 ms 64 bytes from 192.168.102.124: icmp_seq=14 ttl=64 time=0.097 ms 64 bytes from 192.168.102.124: icmp_seq=15 ttl=64 time=0.108 ms 64 bytes from 192.168.102.124: icmp_seq=16 ttl=64 time=0.043 ms 64 bytes from 192.168.102.124: icmp_seq=17 ttl=64 time=0.093 ms 64 bytes from 192.168.102.124: icmp_seq=18 ttl=64 time=0.056 ms 64 bytes from 192.168.102.124: icmp_seq=19 ttl=64 time=0.093 ms 64 bytes from 192.168.102.124: icmp_seq=20 ttl=64 time=0.039 ms--- 192.168.102.124 ping statistics ---20 packets transmitted, 20 received, 0% packet loss, time18999msrtt min/avg/max/mdev= 0.039/0.107/0.404/0.093 ms[root@dev-xx-xx ~]#TC常⽤命令1)模拟延迟传输:# tc qdisc add dev eth0 root netem delay 100ms该命令将 eth0 ⽹卡的传输设置为延迟 100 毫秒发送,更真实的情况下,延迟值不会这么精确,会有⼀定的波动,后⾯⽤下⾯的情况来模拟出带有波动性的延迟值2)模拟延迟波动:# tc qdisc add dev eth0 root netem delay 100ms 10ms该命令将 eth0 ⽹卡的传输设置为延迟 100ms ± 10ms (90 ~ 110 ms 之间的任意值)发送。
[整理版]linux下tc简介
linux下tc简介Linux从kernel 2.1.105开始支持QOS,不过,需要重新编译内核。
运行 'make config'时将 EXPERIMENTAL _OPTIONS 设置成 'y',并且将 Class Based Queueing (CBQ), Token Bucket Flow, Traffic Shapers 设置为 'y' ,运行 'make dep; make clean; make bzilo',生成新的内核。
在Linux操作系统中流量控制器(TC)主要是在输出端口处建立一个队列进行流量控制,控制的方式是基于路由,亦即基于目的IP 地址或目的子网的网络号的流量控制。
流量控制器TC,其基本的功能模块为队列、分类和过滤器。
Linux内核中支持的队列有,Class Based Queue ,Token Bucket Flow ,CSZ ,First In First Out ,Priority ,TEQL ,SFQ ,ATM ,RED。
这里我们讨论的队列与分类都是基于CBQ(Class Based Queue)的,而过滤器是基于路由(Route)的。
配置和使用流量控制器TC,主要分以下几个方面:分别为建立队列、建立分类、建立过滤器和建立路由,另外还需要对现有的队列、分类、过滤器和路由进行监视。
其基本使用步骤为:1) 针对网络物理设备(如以太网卡eth0)绑定一个CBQ队列;2) 在该队列上建立分类;3) 为每一分类建立一个基于路由的过滤器;4) 最后与过滤器相配合,建立特定的路由表。
先假设一个简单的环境,如下图所示:流量控制器上的以太网卡(eth0) 的IP地址为192.168.1.66,在其上建立一个CBQ队列。
假设包的平均大小为1000字节,包间隔发送单元的大小为8字节,可接收冲突的发送最长包数目为20字节。
tc命令与iptables规则
tc命令与iptables规则tc命令与iptables规则是两个非常重要的Linux命令工具,它们在网络管理和安全方面起到了关键作用。
本文将一步一步回答关于这两个主题的问题,从基础知识到实际应用进行详细介绍。
一、什么是tc命令?tc命令是Linux中的一个网络管理工具,全称为Traffic Control,用于控制和配置网络流量。
通过tc命令,可以实现带宽控制、流量整形和优先级设置等功能,从而确保网络资源的有效分配和优化。
1. tc命令的基本语法tc命令的基本语法如下:tc [options] action command [command-options]其中,options是一些可选的参数,action是指定具体的操作(如add、change、del等),command表示要执行的具体操作(如qdisc、class、filter等),command-options是操作相关的选项参数。
2. tc命令中的关键概念在使用tc命令时,有几个关键概念需要了解:- qdisc(Queueing Discipline):队列调度器,用于控制数据包的排队和调度。
常用的qdisc包括pfifo、sfq、htb等。
- class(分类):用于对数据包进行分类和分组。
每个分类可以应用不同的qdisc和过滤规则。
- filter(过滤器):用于根据特定的条件过滤数据包。
可以根据源IP、目标IP、协议、端口等进行过滤。
二、什么是iptables规则?iptables规则是Linux中的一个防火墙工具,用于配置和管理网络包过滤。
通过iptables规则,可以实现网络流量的过滤、转发和NAT等功能,从而保护网络资源的安全。
1. iptables规则的基本语法iptables规则的基本语法如下:iptables -t table_name command [command-options] [match] [target]其中,table_name表示所使用的表,常用的表包括filter、nat、mangle 等;command表示具体要执行的操作,常用的操作包括-A、-D、-I等;command-options是一些选项参数;match是匹配条件,用于指定要匹配的字段和条件;target是要执行的动作,比如ACCEPT、DROP、REJECT 等。
linux tc 删规则-概述说明以及解释
linux tc 删规则-概述说明以及解释1.引言1.1 概述概述部分的内容:在使用Linux系统进行网络配置时,为了进行流量控制和流量管理,我们通常会使用Linux tc(Traffic Control)工具来配置规则。
通过配置规则,我们可以限制网络中数据包的发送速率、延迟、带宽等参数,从而实现对网络流量的有效控制和管理。
然而,随着网络需求的变化,我们可能需要删除一些已经配置的规则,以便重新设置或调整网络流量的控制方式。
本文将重点介绍如何在Linux系统中使用tc命令删除已配置的规则。
首先,我们将提供一些关于tc命令的基本概念和使用方法的背景知识。
然后,我们将详细解释如何通过使用tc命令的特定选项和参数来删除已经存在的规则。
最后,我们将总结本文的主要内容,并给出一些建议和注意事项,以帮助读者更好地理解和应用本文所介绍的内容。
通过学习本文,读者将能够了解如何正确地使用Linux tc工具来删除网络流量控制规则。
这将有助于他们在实际应用中更灵活地配置和管理网络流量,提高网络的性能和稳定性。
值得注意的是,在进行规则删除操作时,一定要谨慎操作,确保不会对网络的正常运行产生不良影响。
希望本文能够为读者提供有价值的指导和参考,使他们能够更好地理解和应用Linux tc工具。
1.2 文章结构文章结构部分的内容包括了整篇文章的组织和内容安排。
它对读者来说是非常重要的,因为一个清晰的结构可以帮助读者更好地理解所读文章的内容。
下面对文章结构部分进行具体描述:文章结构部分主要包括以下几个方面的内容:1. 文章的总体框架:文章的总体框架包括引言、正文和结论三个部分。
引言部分主要介绍文章的背景、目的及意义,正文部分展开对主题的论述、分析和阐述,结论部分对整篇文章进行总结和提供结论。
2. 各个章节的标题和内容简介:在文章目录中列举了各个章节的标题,这些标题应该能够准确地反映出各个章节的内容。
然后在文章结构部分,需要为每个章节提供简短的内容简介,以便读者能够对各个章节的重点内容有所了解。
linuxtc命令详解
linux tc命令详解tc命令在linux系统中用来为Tektronix 4015 系统解释文本到troff 命令输出。
那么它具体用法是怎样的呢?下面由店铺为大家整理了linux tc命令的相关知识,希望对大家有帮助!linux tc命令使用权限所有用户linux tc命令语法格式tc [ -t ] [ -e ] [ -a Number ] [ -o List | -s Number ] [ — ] [ File | - ]linux tc命令使用说明tc 命令将输入解释为 troff 命令的输出。
tc 命令读取一个或多个英语文件。
如果未指定文件或-(减号)标志被指定为最后一个参数,则缺省读取标准输入。
tc 命令的标准输出将给Tektronix 4015(一个带ASCII 码和 APL 字符集的 Tektronix 4014 终端)使用。
各种排版机的大小都映射到4014 的四个大小。
整个troff 命令字符集可以使用4014 字符生成器来生成,并在必要处使用叠印合并。
在每页的结束,tc 命令都会在继续下页之前等待键盘输入一个换行字符。
在等待时,会识别下列命令: !Command 发送 Command 变量值到 shell。
-e 在每页之前不要擦除。
-Number 往回跳过指定页数。
-aNumber 设置宽高比为 Number 变量值。
? 显示可用的选项列表。
linux tc命令主要参数-a Number 将宽高比设置为指定数字。
缺省值为 1.5。
-e 在每页之前不要擦除。
-o List 只显示在 List 变量中列举的页数。
列表包含显示页面以及页范围(例如,5-17),以逗号隔开。
Number- 的页码范围为从 Number 变量值一直到结束;-Number 的页码范围为从开始一直到 Number变量指定的页并包含该页。
-s Number 跳过第一个指定的页数。
-t 在定向输出到一个文件中时,页之间无需等待。
linux tc延迟命令原理
linux tc延迟命令原理Linux tc命令是Linux系统中一个用于控制网络流量的工具,可以通过限制带宽和延迟来模拟网络环境。
其中延迟命令(tc delay)用于模拟网络的延迟情况,通过控制数据包的发送时间来实现延迟效果。
延迟命令的原理是在网络传输过程中,对数据包进行时间的延迟,使得数据包在发送和接收之间经过一定的等待时间。
这样一来,网络传输就会变得缓慢,仿真出高延迟的网络环境。
延迟命令的使用方式如下:```tc qdisc add dev <interface> root netem delay <delay>```其中,`<interface>`是指网络接口,可以是网卡名称或者虚拟接口名称;`<delay>`是指延迟时间,单位可以是毫秒(ms)、微秒(us)或者纳秒(ns)。
延迟命令还可以设置延迟的分布方式,例如正态分布、均匀分布等。
延迟命令的实现原理如下:1. 首先,延迟命令需要在网络传输的队列上添加一个队列规则。
这个队列规则用于控制数据包的发送顺序和发送时间。
2. 当有数据包要发送时,延迟命令会将数据包放入队列中,并根据延迟时间设置数据包的发送时间。
3. 当数据包的发送时间到达时,延迟命令会将数据包发送出去。
4. 接收方收到数据包后,延迟命令会将数据包放入接收队列中,等待接收方处理。
延迟命令的实现原理可以通过Linux系统的队列规则来实现。
Linux 系统中有一个叫做Netem的队列规则模块,它可以实现对网络流量的延迟、丢包、重排等操作。
延迟命令就是利用了Netem模块的延迟功能来实现的。
Netem模块是Linux内核中的一个模块,它是Traffic Control (TC)子系统的一部分。
Traffic Control是Linux内核中用于控制网络流量的子系统,它可以对网络流量进行限制、过滤、排队等操作。
在Linux系统中,延迟命令可以通过以下方式实现:1. 首先,延迟命令会创建一个队列规则,该规则用于控制数据包的发送时间。
linux tc原理
linux tc原理
Linux中的tc原理是什么?tc是TrafficControl的缩写,它是一个Linux内核中的工具,用于管理和控制网络流量。
它通过配置和控制内核中的各种队列和过滤器,帮助网络管理员实现带宽控制、流量限制、流量分类等网络管理功能。
tc的基本原理是在网络数据包的传输过程中,对数据包进行分类、筛选、标记、限制等操作,从而控制网络流量的流向和速率。
tc 的核心概念包括网络接口、队列、过滤器、类别和qdisc等,这些概念构成了tc的基本框架。
在tc中,可以通过不同的过滤器进行数据包的分类,比如可以根据源地址、目的地址、协议类型、端口号等条件进行分类。
然后可以对不同的数据包进行不同的操作,比如可以标记不同的数据包,或者将它们放入不同的队列中。
队列在tc中扮演着重要的角色,它们用于对数据包进行排队和调度,控制数据包的传输速率和延迟。
tc中有多种不同类型的队列,比如FIFO队列、HTB队列和PRIO队列等,每种队列都有不同的特点和用途。
最后,qdisc是tc中的另一个重要概念,它代表着队列调度器。
qdisc可以根据不同的算法对队列中的数据包进行调度,从而实现不同的网络管理目标。
常见的qdisc算法包括PFIFO、SFQ、HTB和TBF 等。
总的来说,tc完整的网络管理过程包括数据包的分类、标记、
排队和调度等多个步骤,通过这些步骤可以实现对网络流量的全面控制。
掌握tc的原理对于Linux系统管理员来说非常重要,能够帮助他们更好地管理和优化网络资源。
linux tc 查询规则
Linux tc 查询规则tc命令是Linux内核中的一个工具,用于配置和监控流量控制。
它可以用于查询和修改流量控制规则,以及显示流量控制统计信息。
要查询流量控制规则,可以使用tc命令的“show”子命令。
该子命令可以显示所有流量控制规则,或者显示特定接口或队列的流量控制规则。
例如,要显示所有流量控制规则,可以使用以下命令:tc qdisc show要显示特定接口的流量控制规则,可以使用以下命令:tc qdisc show dev eth0要显示特定队列的流量控制规则,可以使用以下命令:tc qdisc show dev eth0 parent 1:1tc命令的“show”子命令可以显示各种流量控制规则的信息,包括规则的类型、规则的优先级、规则的匹配条件和规则的动作。
例如,以下命令显示了一个简单的队列调度规则的信息:tc qdisc show dev eth0 parent 1:1输出结果如下:qdisc pfifo_fast 1:1 rootlimit 10240该规则是一个简单的队列调度规则,它将数据包放入一个FIFO队列中。
队列的长度限制为10240个数据包。
tc命令的“show”子命令还可以显示流量控制统计信息。
例如,以下命令显示了所有流量控制规则的统计信息:tc qdisc stats输出结果如下:qdisc pfifo_fast 1:1 roottclass 1:packets 113234bytes 67706989drops 0qdisc pfifo_fast 1:2 roottclass 2:packets 321123bytes 190830381drops 0该输出结果显示了两个流量控制规则的统计信息。
第一个规则是前面提到的队列调度规则,第二个规则也是一个队列调度规则,它将数据包放入另一个FIFO队列中。
tc命令的“show”子命令是一个非常强大的工具,它可以用于查询和修改流量控制规则,以及显示流量控制统计信息。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
摘要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-idtc [-s | -d ] qdisc show [ dev DEV ]tc [-s | -d ] class show dev DEV tc filter show dev DEV简介Tc用于Linux内核的流量控制。
流量控制包括以下几种方式:SHAPING(限制)当流量被限制,它的传输速率就被控制在某个值以下。
限制值可以大大小于有效带宽,这样可以平滑突发数据流量,使网络更为稳定。
shaping(限制)只适用于向外的流量。
SCHEDULING(调度)通过调度数据包的传输,可以在带宽范围内,按照优先级分配带宽。
SCHEDULING(调度)也只适于向外的流量。
POLICING(策略)SHAPING用于处理向外的流量,而POLICIING(策略)用于处理接收到的数据。
DROPPING(丢弃)如果流量超过某个设定的带宽,就丢弃数据包,不管是向内还是向外。
流量的处理由三种对象控制,它们是:qdisc(排队规则)、class(类别)和filter(过滤器)。
QDISC(排队规则)QDisc(排队规则)是queueing discipline的简写,它是理解流量控制(traffic control)的基础。
无论何时,内核如果需要通过某个网络接口发送数据包,它都需要按照为这个接口配置的qdisc(排队规则)把数据包加入队列。
然后,内核会尽可能多地从qdisc里面取出数据包,把它们交给网络适配器驱动模块。
最简单的QDisc是pfifo它不对进入的数据包做任何的处理,数据包采用先入先出的方式通过队列。
不过,它会保存网络接口一时无法处理的数据包。
CLASS(类)某些QDisc(排队规则)可以包含一些类别,不同的类别中可以包含更深入的QDisc(排队规则),通过这些细分的QDisc还可以为进入的队列的数据包排队。
通过设置各种类别数据包的离队次序,QDisc可以为设置网络数据流量的优先级。
FILTER(过滤器)filter(过滤器)用于为数据包分类,决定它们按照何种QDisc进入队列。
无论何时数据包进入一个划分子类的类别中,都需要进行分类。
分类的方法可以有多种,使用fileter(过滤器)就是其中之一。
使用filter(过滤器)分类时,内核会调用附属于这个类(class)的所有过滤器,直到返回一个判决。
如果没有判决返回,就作进一步的处理,而处理方式和QDISC有关。
需要注意的是,filter(过滤器)是在QDisc内部,它们不能作为主体。
CLASSLESS QDisc(不可分类QDisc)无类别QDISC包括:[p|b]fifo使用最简单的qdisc,纯粹的先进先出。
只有一个参数:limit,用来设置队列的长度,pfifo是以数据包的个数为单位;bfifo是以字节数为单位。
pfifo_fast在编译内核时,如果打开了高级路由器(Advanced Router)编译选项,pfifo_fast就是系统的标准QDISC。
它的队列包括三个波段(band)。
在每个波段里面,使用先进先出规则。
而三个波段(band)的优先级也不相同,band 0的优先级最高,band 2的最低。
如果band里面有数据包,系统就不会处理band 1里面的数据包,band 1和band 2之间也是一样。
数据包是按照服务类型(Type of Service,TOS)被分配多三个波段(band)里面的。
redred是Random Early Detection(随机早期探测)的简写。
如果使用这种QDISC,当带宽的占用接近于规定的带宽时,系统会随机地丢弃一些数据包。
它非常适合高带宽应用。
sfqsfq是Stochastic Fairness Queueing的简写。
它按照会话(session--对应于每个TCP连接或者UDP流)为流量进行排序,然后循环发送每个会话的数据包。
tbftbf是Token Bucket Filter的简写,适合于把流速降低到某个值。
不可分类QDisc的配置如果没有可分类QDisc,不可分类QDisc只能附属于设备的根。
它们的用法如下:tc qdisc add dev DEV root QDISC QDISC-PARAMETERS要删除一个不可分类QDisc,需要使用如下命令:tc qdisc del dev DEV root一个网络接口上如果没有设置QDisc,pfifo_fast就作为缺省的QDisc。
CLASSFUL QDISC(分类QDisc)可分类的QDisc包括:CBQ 是Class Based Queueing(基于类别排队)的缩写。
它实现了一个丰富的连接共享类别结构,既有限制(shaping)带宽的能力,也具有带宽优先级管理的能力。
带宽限制是通过计算连接的空闲时间完成的。
空闲时间的计算标准是数据包离队事件的频率和下层连接(数据链路层)的带宽。
HTBHTB 是Hierarchy Token Bucket的缩写。
通过在实践基础上的改进,它实现了一个丰富的连接共享类别体系。
使用HTB可以很容易地保证每个类别的带宽,虽然它也允许特定的类可以突破带宽上限,占用别的类的带宽。
HTB可以通过TBF(Token Bucket Filter)实现带宽限制,也能够划分类别的优先级。
PRIOPRIO QDisc不能限制带宽,因为属于不同类别的数据包是顺序离队的。
使用PRIO QDisc 可以很容易对流量进行优先级管理,只有属于高优先级类别的数据包全部发送完毕,才会发送属于低优先级类别的数据包。
为了方便管理,需要使用iptables或者ipchains处理数据包的服务类型(Type Of Service,ToS)。
操作原理类(Class)组成一个树,每个类都只有一个父类,而一个类可以有多个子类。
某些QDisc(例如:CBQ和HTB)允许在运行时动态添加类,而其它的QDisc(例如:PRIO)不允许动态建立类。
允许动态添加类的QDisc可以有零个或者多个子类,由它们为数据包排队。
此外,每个类都有一个叶子QDisc,默认情况下,这个叶子QDisc使用pfifo的方式排队,我们也可以使用其它类型的QDisc代替这个默认的QDisc。
而且,这个叶子叶子QDisc有可以分类,不过每个子类只能有一个叶子QDisc。
当一个数据包进入一个分类QDisc,它会被归入某个子类。
我们可以使用以下三种方式为数据包归类,不过不是所有的QDisc都能够使用这三种方式。
tc过滤器(tc filter)如果过滤器附属于一个类,相关的指令就会对它们进行查询。
过滤器能够匹配数据包头所有的域,也可以匹配由ipchains或者iptables做的标记。
服务类型(Type of Service)某些QDisc有基于服务类型(Type of Service,ToS)的内置的规则为数据包分类。
skb->priority序可以使用SO_PRIORITY选项在skb->priority域设置一个类的ID。
树的每个节点都可以有自己的过滤器,但是高层的过滤器也可以直接用于其子类。
如果数据包没有被成功归类,就会被排到这个类的叶子QDisc的队中。
相关细节在各个QDisc 的手册页中。
命名规则所有的QDisc、类和过滤器都有ID。
ID可以手工设置,也可以有内核自动分配。
ID由一个主序列号和一个从序列号组成,两个数字用一个冒号分开。
一个QDisc会被分配一个主序列号,叫做句柄(handle),然后把从序列号作为类的命名空间。
句柄采用象10:一样的表达方式。
习惯上,需要为有子类的QDisc显式地分配一个句柄。
类(CLASS)在同一个QDisc里面的类分享这个QDisc的主序列号,但是每个类都有自己的从序列号,叫做类识别符(classid)。
类识别符只与父QDisc有关,和父类无关。
类的命名习惯和QDisc 的相同。
过滤器(FILTER)过滤器的ID有三部分,只有在对过滤器进行散列组织才会用到。
详情请参考tc-filters手册页。
单位tc命令的所有参数都可以使用浮点数,可能会涉及到以下计数单位。
带宽或者流速单位:kbps千字节/秒mbps兆字节/秒kbitKBits/秒mbitMBits/秒bps或者一个无单位数字字节数/秒数据的数量单位:kb或者k千字节mb或者m兆字节mbit兆bitkbit千bitb或者一个无单位数字字节数时间的计量单位:s、sec或者secs秒ms、msec或者msecs分钟us、usec、usecs或者一个无单位数字TC命令tc可以使用以下命令对QDisc、类和过滤器进行操作:add在一个节点里加入一个QDisc、类或者过滤器。
添加时,需要传递一个祖先作为参数,传递参数时既可以使用ID也可以直接传递设备的根。
如果要建立一个QDisc或者过滤器,可以使用句柄(handle)来命名;如果要建立一个类,可以使用类识别符(classid)来命名。
remove删除有某个句柄(handle)指定的QDisc,根QDisc(root)也可以删除。
被删除QDisc上的所有子类以及附属于各个类的过滤器都会被自动删除。
change以替代的方式修改某些条目。
除了句柄(handle)和祖先不能修改以外,change命令的语法和add命令相同。
换句话说,change命令不能一定节点的位置。
replace对一个现有节点进行近于原子操作的删除/添加。
如果节点不存在,这个命令就会建立节点。
link只适用于DQisc,替代一个现有的节点。
历史tc由Alexey N. Kuznetsov编写,从Linux 2.2版开始并入Linux内核。
SEE ALSOtc-cbq(8)、tc-htb(8)、tc-sfq(8)、tc-red(8)、tc-tbf(8)、tc-pfifo(8)、tc-bfifo(8)、tc-pfifo_fast(8)、tc-filters(8)。