Linux下TC和HTB实现流量控制

合集下载

HTB介绍以及使用

HTB介绍以及使用

HTB相关TC命令以及内核实现介绍文档编号:00-6201-100当前版本:1.0.0.0创建日期:2008-9-1编写作者:wanghuaijiaHTB相关TC命令以及内核实现介绍前言 (3)关于此文档 (3)参考资料 (3)第一章HTB 介绍 (4)1.0 HTB 命令介绍 (5)2.0 Rate ceiling 速率限度 (12)第二章HTB 程序实现 (13)2.0 用户传递消息的格式 (14)2.1 HTB 命令的解析 (16)举例消息解析过程 (17)2.2 HTB 内核程序的实现 (18)2.2.1 数据包进队 (19)2.2.2 数据包的出队 (21)前言关于此文档本文档是本人学习LINUX 流量控制的过程中的学习总结。

主要讲述了HTB的原理以及内核的实现部分,不过重点讲的是原理部分,以及如何根据需要给数据流分类,控制不同数据流的速度。

参考资料网络资源。

HTB相关TC命令以及内核实现介绍在介绍HTB 前我们看看在TC下的速度换算:tc 采用如下规定来描述带宽:mbps = 1024 kbps = 1024 * 1024 bps => byte/smbit = 1024 kbit => kilo bit/s.mb = 1024 kb = 1024 * 1024 b => bytembit = 1024 kbit => kilo bit.内定:数字以bps和b方式储存。

但当tc输出速率时,使用如下表示:1Mbit = 1024 Kbit = 1024 * 1024 bps => byte/s第一章H TB 介绍HTB 意味着是一个更好理解更容易掌握的可以快速替换LINUX CBQ 队列规定的队列, CBQ和HTB都可以帮助你限制你的链路上的出口带宽,但是CBQ配置很复杂而且精度又不够,在HTB问世后,HTB就逐渐的代替CBQ,成为人们进行流量控制的工具。

linux内核qos实现机制

linux内核qos实现机制

linux内核qos实现机制Linux内核中的QoS实现机制在Linux内核中,Quality of Service(QoS)是一种网络管理机制,用于提供不同网络流量的不同服务质量。

QoS机制通过设置优先级和限制带宽来控制网络流量,以确保关键应用程序的性能和稳定性。

本文将介绍Linux内核中的QoS实现机制,以及它是如何工作的。

一、QoS的概念和作用QoS是一种网络管理技术,用于在网络上为不同类型的流量提供不同的服务质量。

它通过优先级和带宽限制来保证关键应用程序的性能和稳定性。

QoS可以确保实时应用程序,如语音和视频通话,在网络拥塞时仍能保持良好的用户体验。

同时,QoS还可以限制带宽消耗较大的应用程序,以保证其他应用程序的正常运行。

二、Linux内核中的QoS实现机制Linux内核中的QoS实现主要基于两个关键组件:Traffic Control (TC)和Class-based Queueing(CBQ)。

1. Traffic Control(TC):TC是Linux内核中用于实现QoS的主要工具。

它提供了一套灵活的机制,用于设置流量的优先级、限制带宽和进行流量分类。

通过使用TC,可以对流量进行过滤、重定向和限制,以实现不同应用程序的不同服务质量。

2. Class-based Queueing(CBQ):CBQ是TC中的一种队列调度算法,用于对流量进行分类和管理。

CBQ将流量分为不同的类别,并为每个类别分配带宽。

通过使用CBQ,可以根据应用程序的需求,为不同类型的流量分配不同的带宽,以实现更精确的QoS控制。

三、QoS实现的具体步骤在Linux内核中,实现QoS的具体步骤如下:1. 配置TC:首先,需要配置TC来启用QoS功能。

可以使用命令行工具tc来配置TC,例如:```tc qdisc add dev eth0 root handle 1: htb default 10```这个命令将在eth0接口上创建一个根队列,并使用Hierarchical Token Bucket(HTB)算法来进行队列调度。

tc方案是什么意思

tc方案是什么意思

TC方案是什么意思引言TC(Traffic Control)指的是流量控制,是一种管理网络流量的技术方案。

在计算机网络中,流量控制是一项重要的任务,用于确保网络资源的合理分配和优化网络性能。

TC方案可以根据不同的需求对流量进行分类、调度和限制,从而实现网络服务质量的管理和优化。

本文将介绍TC方案的基本概念、工作原理以及在实际应用中的意义和使用场景。

TC方案的基本概念流量控制流量控制是指通过对网络流量进行控制,使其不超过网络设备或链路的处理能力。

通过流量控制,可以避免网络拥塞、提高网络的带宽利用率,确保重要的流量得到优先处理,从而提高网络的性能和用户体验。

调度算法调度算法是TC方案中的核心技术之一,用于决定不同流量的优先级和处理策略。

常用的调度算法包括先进先出(FIFO)、最短剩余时间优先(SJF)、最短作业优先(SJS)等。

通过合理选择和配置调度算法,可以实现对不同类型流量的灵活调度和优化。

限制速率限制速率是指通过设置速率上限,限制特定流量的发送速度。

通过限制速率,可以避免某些流量占用过多的带宽资源,确保其他流量能够得到合理的网络资源分配。

限制速率是TC方案中常用的一种流量控制手段。

TC方案的工作原理TC方案主要通过使用Linux内核的Traffic Control (tc)模块来实现。

tc模块是Linux内核自带的一个流量控制工具,提供了一系列的命令和选项,用于配置网络流量的分类、调度和限制。

TC方案的工作原理可以简单描述如下:1.分类流量:根据定义的规则和条件,对网络流量进行分类。

可以根据IP地址、端口号、服务类型等进行分类。

2.调度流量:使用合适的调度算法,对不同类别的流量进行优先级调度,决定其处理顺序和策略。

3.限制速率:根据需要,对特定类别的流量设置速率上限,限制其发送速度。

可以根据需求进行灵活配置。

TC方案的意义和使用场景改善网络性能通过合理使用TC方案,可以改善网络的性能和稳定性。

流量控制(Traffic Control)

流量控制(Traffic Control)

1 TC原理介绍Input Interface: IIOI: Output InterfaceLinux操作系统中的流量控制器TC(Traffic Control)用于Linux内核的流量控制,主要是通过在输出端口处建立一个队列来实现流量控制。

Linux流量控制的基本原理如下图所示。

从Input Interface 收到包后,经过流量限制(Ingress Policing)丢弃不符合规定的数据包,由Input De-Multiplexing 进行判断选择:如果包的目的地址是本主机,那么将该包送给上层处理;否则需要进行转发,将包交到Forwarding Block 处理。

Forwarding Block 也接收本主机上层(TCP、UDP 等)产生的包。

它通过查看路由表,决定所处理包的下一跳。

然后,对包进行排列并交给Output Interface。

一般我们只能限制网卡发送的数据包,不能限制网卡接收的数据包,所以我们可以通过改变发送次序来控制传输速率。

Linux流量控制主要是在输出接口排列时进行处理和实现的。

2 TC规则2.1 流量控制方式流量控制包括以下几种方式:2.1.1SHAPING(限制)当流量被限制,它的传输速率就被控制在某个值以下。

限制值可以大大小于有效带宽,这样可以平滑突发数据流量,使网络更为稳定。

shaping(限制)只适用于向外的流量。

2.1.2SCHEDULING(调度)通过调度数据包的传输,可以在带宽范围内,按照优先级分配带宽。

SCHEDULING(调度)也只适于向外的流量。

2.1.3POLICING(策略)SHAPING用于处理向外的流量,而POLICIING(策略)用于处理接收到的数据。

2.1.4DROPPING(丢弃)如果流量超过某个设定的带宽,就丢弃数据包,不管是向内还是向外。

2.2 流量控制处理对象流量的处理由三种对象控制,它们是:qdisc(排队规则)、class(类别)和filter(过滤器)。

linux tc 查询规则

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”子命令是一个非常强大的工具,它可以用于查询和修改流量控制规则,以及显示流量控制统计信息。

tc处理的过程

tc处理的过程

tc处理的过程以TC处理的过程为标题,写一篇文章:标题:如何进行TC处理概述:TC(Traffic Control)是一种用于网络流量控制和管理的工具,它可以帮助我们实现带宽限制、流量调度和延迟模拟等功能。

本文将介绍如何使用TC进行流量控制的具体步骤和注意事项。

一、安装TC工具我们需要在目标设备上安装TC工具。

TC是Linux内核的一部分,所以在大多数Linux发行版上都已经预装了TC。

如果您的系统没有预装TC,则可以通过包管理器进行安装。

例如,在Debian/Ubuntu系统上,可以使用以下命令进行安装:sudo apt-get install iproute2二、配置网络接口在进行TC处理之前,我们需要先配置网络接口。

您可以使用ifconfig或ip命令查看当前系统上的网络接口。

选择要进行流量控制的网络接口,并确保其状态为UP。

例如,如果要对eth0接口进行流量控制,可以使用以下命令将其设置为UP状态:sudo ifconfig eth0 up三、创建TC策略接下来,我们需要创建TC策略。

TC的配置是通过使用类别(class)、过滤器(filter)和队列(queue)来实现的。

我们可以使用tc命令来创建和管理这些策略。

1. 创建类别:我们需要创建一个类别来定义流量控制规则。

例如,我们可以使用以下命令创建一个名为"myclass"的类别:sudo tc qdisc add dev eth0 root handle 1: htb default 102. 添加过滤器:然后,我们需要添加过滤器来匹配特定的流量。

过滤器可以基于IP 地址、端口号、协议等进行匹配。

例如,我们可以使用以下命令添加一个过滤器:sudo tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip src 192.168.0.2 flowid 1:103. 配置队列:我们需要配置队列来定义流量的处理方式。

tc命令与iptables规则

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 等。

tc qdisc 原理

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的用法

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(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的带宽管理设计与实现

基于L i nux TC 的带宽管理设计与实现余劲松(浙江工业大学)随着I nterne t 应用的迅猛发展,校园网带宽管理日益成为网络管理者不得不面对的问题。

本文以Li nux T r a f fic Contr ol 为工具,使用HTB 作为层次式带宽共享框架,以U32分类器作为包分类的工具,规划和设计校园网带宽管理,以提高网络带宽使用效率。

T r ac f icco n tr ol U32HTB如何将有限的带宽资源做最有效分配是网络管理者必须考虑的问题,由于成熟的商业带宽管理产品动辄几万甚至数十万以上,对于学校单位或小企业来讲是一笔天文数字。

如果能使用开源L i nux 平台与普通计算机设备作为校园带宽管理器,并以透明网桥的方式架设在校园网I NT ERNET 出口做管理,对于学校单位或小企业有着很重要的价值,将大大减轻单位经费开支并有效增强网络带宽管理能力。

一、带宽管理主要功能网络中各种信息流量是以数据包方式进行传输的,它们互相争夺有限的网络带宽,当网络带宽足以满足信息流量时并不会有影响,但是当包总流量超过网络带宽负载时就会发生拥塞,好比在道路上行驶的各种车辆,因互相争夺车道造成整条道路严重塞车;但是如果每一车辆能够按所分配的车道行驶,可能当汽车、货车等车道发生拥塞时而公交车仍然能够顺畅行驶。

网络带宽管理概念与车道划分观念相相似,当网络拥塞时仍可保障重要应用的网络带宽,通常把网络带宽切割成几个不同的通道,把各种类型的流量控制在规定的带宽中传输,这样,就不会出现网络拥塞时,各种流量互不相让的情况。

图1带宽管理器安放位置带宽管理器一般置于L AN 与In ternet 的中间,如图1所示,利用队列算法调整包送出顺序,让优先级高包优先通过,延迟优先级低的包,以保证带宽的服务,主要功能特性如下:1.保证带宽事先设定带宽管理规则,对带宽的使用作适当规划,当网络发生拥塞时可提供基本带宽保证;可依据网络的使用特性预先规划出重要用户、重要部门或实时性应用等等,给予适当保证带宽以确保其传输服务质量。

linux tc延迟命令原理

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命令高级技巧:使用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 [网络句柄] [网络属性]```其中,[网络属性]用于设置带宽、延迟、丢包率等参数,可以根据实际需求进行调整。

htb限速原理

htb限速原理

htb限速原理
HTB(Hierarchical Token Bucket)队列是一种可分类的队列,是流量管制中经常使用的一种方法。

其主要工作原理是将进入的流量按照类别进行归类,然后通过令牌桶机制进行速率限制。

每个类别都有一个令牌桶和一个优先级,速率被设定为令牌桶的填充速率。

当类别需要发送数据时,需要首先获取令牌。

如果令牌桶中有令牌,则该类别可以发送数据,否则必须等待或借用其他类别的带宽。

具体来说,某一时刻,每个类别可以处于以下三种状态之一:CAN_SEND(令牌充足,发送的网络包小于rate)、MAY_BORROW(没有令牌,但可借用,发送的网络包大于rate小于ceil)和CANT_SEND(没有令牌不可借用,发送的网络包大于ceil)。

当HTB算法开始决策哪个类别出包时,它会从类树的底部开始寻找CAN_SEND状态的类别。

如果找到某一层有CAN_SEND状态的类别,则停止搜索。

如果该层中有多个类别都处于CAN_SEND状态,则会选取优先级最高的类别进行发送。

如果最高优先级的类别仍然有多个,那么会在这些类别中轮询处理。

每个类别每发送自己的quantum个字节后,轮到下一个类别发送。

传统的限速方案如HTB、TBF等Qdisc存在一个共同的缺点,即依赖全局的Qdisc spinlock进行同步。

这把锁主要有两个原因
难以优化:数据包的入队、出队都是写操作且都不是原子操作,因此需要使用锁来同步;这些Qdisc实现的都是设备全局的限速,其中一部分(如HTB Qdisc)还允许不同流量类型之间互相借用带宽,因此更需要一把全局锁来进行统一协调。

在发送流量较大的时候,这个全局锁的性能瓶颈就会出现。

Linux 限速工具TC 手册简明版

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(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 之间的任意值)发送。

TC(linux下流量控制工具)详细说明及应用实例

TC(linux下流量控制工具)详细说明及应用实例

linux下流量控制工具TC详细说明及应用实例目录一、TC的安装 (1)二、TC原理介绍 (1)三、TC规则 (2)3.1、流量控制方式 (2)3.2、流量控制处理对象 (2)3.3、操作原理 (3)3.4、命名规则 (4)3.5、单位 (4)四、TC命令 (5)五、具体操作 (5)5.1、基本实现步骤 (6)5.2、环境模拟实例 (6)5.2.1. 建立队列 (6)5.2.2. 建立分类 (6)5.2.3. 建立过滤器 (7)5.2.4.建立路由 (7)5.2.5. 监视 (8)5.2.6. 维护 (10)六、dms小组应用场景一个实例 (11)参考资料 (12)一、TC的安装TC是linux自带的模块,一般情况下不需要另行安装,可以用man tc查看tc相关命令细节,tc 要求内核2.4.18以上。

注意,64位机器上,先执行下面命令:ln -s /usr/lib64/tc/ /usr/lib/tc二、TC原理介绍Linux操作系统中的流量控制器TC(Traffic Control)用于Linux内核的流量控制,它利用队列规定建立处理数据包的队列,并定义队列中的数据包被发送的方式,从而实现对流量的控制。

TC模块实现流量控制功能使用的队列规定分为两类,一类是无类队列规定,另一类是分类队列规定。

无类队列规定相对简单,而分类队列规定则引出了分类和过滤器等概念,使其流量控制功能增强。

无类队列规定是对进入网络设备(网卡) 的数据流不加区分统一对待的队列规定。

使用无类队列规定形成的队列能够接受数据包以及重新编排、延迟或丢弃数据包。

这类队列规定形成的队列可以对整个网络设备( 网卡) 的流量进行整形,但不能细分各种情况…。

常用的无类队列规定主要有pfifo _fast (先进现出) 、TBF ( 令牌桶过滤器) 、SFQ(随机公平队列) 、ID (前向随机丢包)等等。

这类队列规定使用的流量整形手段主要是排序、限速和丢包。

Shell脚本编写如何实现网络流量监测和限制

Shell脚本编写如何实现网络流量监测和限制

Shell脚本编写如何实现网络流量监测和限制一、引言随着互联网的普及和应用范围的不断扩大,网络流量监测和限制成为了管理网络的重要工作之一。

在这个以数据为核心的时代,有效地监控和控制网络流量可以帮助提高网络的运行效率,保障网络的安全稳定运行。

本文将介绍如何使用Shell脚本编写实现网络流量监测和限制的方法。

二、网络流量的监测1. 使用ifconfig命令获取网络接口信息在Shell脚本中,我们可以使用ifconfig命令获取网络接口的信息,包括网络接口名称、IP地址、发送和接收的数据量等。

2. 使用sed命令提取网络流量信息通过ifconfig命令获取的网络接口信息是一大段文本,我们可以使用sed命令提取所需的网络流量信息。

比如,我们可以使用如下命令提取出发送数据量和接收数据量:```ifconfig eth0 | sed -n 's/.*RX bytes:\([0-9]*\).*/\1/p'ifconfig eth0 | sed -n 's/.*TX bytes:\([0-9]*\).*/\1/p'```其中,eth0是网络接口名称,[0-9]*表示任意数字,\(\)表示匹配的模式。

3. 使用Shell脚本周期性执行并记录网络流量为了实时监测网络流量,我们可以编写一个循环的Shell脚本,每隔一段时间执行一次网络流量的监测,并将监测结果记录下来。

以下是一个示例的Shell脚本代码:```#!/bin/bashwhile truedorx_bytes=$(ifconfig eth0 | sed -n 's/.*RX bytes:\([0-9]*\).*/\1/p')tx_bytes=$(ifconfig eth0 | sed -n 's/.*TX bytes:\([0-9]*\).*/\1/p')echo "RX bytes: $rx_bytes"echo "TX bytes: $tx_bytes"sleep 1done```这段代码会每秒钟获取一次网络接口的接收和发送数据量,并将其输出。

Linux流量控制---过滤规则U32-

Linux流量控制---过滤规则U32-

Linux流量控制---过滤规则U32-Linux流量控制---过滤规则/U32--实例解析2008-09-11 14:41Linux流量控制III---过滤规则/U32过滤器是对数据包进⾏分类⼯具,过滤器⽤与把数据包分类并放⼊相应的⼦队列,这些过滤器在分类的队列规定内部被调⽤.为了决定⽤哪个类处理数据包,必须调⽤所谓的"分类器链" 进⾏选择. 这个链中包含了这个分类队列规定所需的所有过滤器.常⽤到的为U32过滤器.., 下图为分类的⼀⽰例图:根1:|1:1 <-----加过滤器位置/ | \10: 11: 12: <-----加过滤器位置/ \ / \10:1 10:2 12:1 12:2当⼀个数据包⼊队的时候,每⼀个分⽀处都会咨询过滤器链如何进⾏下⼀步.典型的配置是在1:1处有⼀个过滤器把数据包交给12:,然后12:处的过滤器在把包交给12:2.你可以把后⼀个过滤器同时放在1:1处,⽽得到效率的提⾼.另外,你不能⽤过滤器把数据包向"上"送.⽽且,使⽤HTB的时候应该把所有的规则放到根上..注:数据包只能向"下"进⾏⼊队操作!只有处队的时候才会上到⽹卡所在的位置来.他们不会落到树的最底层后送到⽹卡...过滤器过滤⽰例:#tc filter add dev eth0 protocol ip parent 10: prio 1 u32 match ip dport 22 0xffff flowid 10:1 在10:节点添加⼀个过滤规则,优先权1:凡是去往22⼝(精确匹配)的IP数据包,发送到频道10:1..#tc filter add dev eth0 protocol ip parent 10: prio 1 u32 match ip sport 80 0xffff flowid 10:1 在10:节点添加⼀个过滤规则,优先权1:凡是来⾃80⼝(精确匹配)的IP数据包,发送到频道10:1..#tc filter add dev eth0 protocol ip parent 10: prio 2 flowid 10:2 在eth0上的10:节点添加⼀个过滤规则,它的优先权是2:凡是上⼆句未匹配的IP数据包,发送到频道10:2..#tc filter add dev eth0 parent 10:0 protocol ip prio 1 u32 match ip dst 4.3.2.1/32 flowid 10:1 去往4.3.2.1的包发送到频道10:1 其它参数同上例#tc filter add dev eth0 parent 10:0 protocol ip prio 1 u32 match ip src 1.2.3.4/32 flowid 10:1 来⾃1.2.3.4的包发到频道10:1#tc filter add dev eth0 protocol ip parent 10: prio 2 flowid 10:2 凡上⼆句未匹配的包送往10:2#tc filter add dev eth0 parent 10:0 protocol ip prio 1 u32 match ip src 4.3.2.1/32 match ip sport 80 0xffff flowid 10:1 可连续使⽤match,匹配来⾃1.2.3.4的80⼝的数据包常⽤到的过滤命令⼀览#tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 -------根据源/⽬的地址源地址段 'match ip src 1.2.3.0/24'⽬的地址段 'match ip dst 4.3.2.0/24'单个IP地址 'match ip 1.2.3.4/32'根据源/⽬的端⼝,所有IP协议源 'match ip sport 80 0xffff' 0xffff表所有数据包⽬的 'match ip dport 80 0xffff'根据IP协议 (tcp, udp, icmp, gre, ipsec)icmp是1:'match ip protocol 1 0xff' 1是根据/etc/protocols协议号来定根据fwmark#iptables -A PREROUTING -t mangle -i eth0 -j MARK --set-mark 6#tc filter add dev eth1 protocol ip parent 1:0 prio 1 handle 6 fw flowid 1:1注:handle根据过滤器的不同,含义也不同按TOS字段#tc filter add dev ppp0 parent 1:0 protocol ip prio 10 u32 match ip tos 0x10 0xff flowid 1:4 选择交互和最⼩延迟的数据流匹配⼤量传输,使⽤"0x08 0xff".#tc filter add dev eth0 protocol ip parent 1:0 pref 10 u32 match u32 0010000000ff0000at 0 flowid 1:10 匹配那些TOS字段带有'最⼩延迟'属性的数据包U32过滤器相对⽐较繁琐,⼀般不常⽤,感兴趣的朋友可以参考HOWTO中⽂档...推荐iptables打标记的⽅式来实现tc过滤器的功能...Linux流量控制IV---实例解析以下⼆例是⼯作中⽤到的,贴出来算对流量控制的⼀种理解吧..呵呵.1.PRIO 分类优先算法(从左⾄右优先发包)eth0 1:/ | \1:1 1:2 1:3/ | \11: 12: 13:#tc ad add dev eth0 root handle 1: prio hands 3 priomap 1---1 16个1(tos⽐特) 表⽰所有数据包注:此命令⾃动在1:下创建三⼦类 1:1 1:2 1:3 此例中只⽤到 1:1#tc qd add dev eth0 parent 1:1 handle 11:sfq#tc qdisc add dev eth0 parent 1:1 handle 12: tbf rate 20kbit buffer 1600 limit 3000#tc qd add dev eth0 parent 1:1 handle 13:sfq#tc filter add dev eth0 parent 1:1 prio 1003 protocol ipu32 match ip src 192.168.1.0/24 flowid 1:13#tc filter add dev eth0 parent 1:1 prio 1001 protocol ipu32 match ip src 10.0.0.0/8 flowid 1:12#tc filter add dev eth0 parent 1:1 protocol ip prio 1001u32 match ip tos 0x10 0xff flowid 1:11 交互和最⼩延迟的数据流2.HTB分层令牌桶eth1 1:|1:1 1:1 2Mbit 1000个包 1:12默认/ | \11: 12: 13: 1:11 512kbit 100 1:12 1Mbit 100 1:13 2Mbit 100#tc qd del dev eth1 root#tc qdisc add dev eth1 root handle 1: htb default 12#tc class add dev eth1 parent 1: classid 1:1 htb rate 2Mbit burst 1500000 在1:下定义⼦类1:1#tc class add dev eth1 parent 1:1 classid 1:11 htb rate 512kbit burst 150000 ceil 1Mbit#tc qd add dev eth1 parent 1:11 handle 111: sfq#tc class add dev eth1 parent 1:1 classid 1:12 htb rate 1Mbit burst 150000 ceil1Mbit#tc qd add dev eth1 parent 1:12 handle 122: sfq 注:亦可不在1:12 class下定义122: qd#tc class add dev eth1 parent 1:1 classid 1:13 htb rate 2Mbit burst 150000 ceil2Mbit#tc qd add dev eth1 parent 1:13 handle 133: sfq#tc filter add dev eth1 parent 1: prio 10001 protocol ipu32 match ip src 192.168.1.0/24 flowid 1:12 其它⼆类亦如此..2.ADSL上⽹流量限控脚本ADSL带宽是下⾏3200Kbit,上⾏只有320Kbiteth 1:/ \1:1 1.2/ \ / | | \1:11 1: 12 1:21 1:22 1:23 1:24优先顺序是1:11 1:12 1:21 1:22 1:23 1:24 脚本⼤致内容下:tc qdisc add dev eth0 root handle 1: htb default 24tc class add dev eth0 parent 1: classid 1:1 htb rate 300kbit ceil 300kbit prio 0tc class add dev eth0 parent 1: classid 1:2 htb rate 150kbit prio 3tc class add dev eth0 parent 1:1 classid 1:11 htb rate 300kbit ceil 300kbit prio 1tc class add dev eth0 parent 1:1 classid 1:12 htb rate 150kbit ceil 250kbit prio 2tc class add dev eth0 parent 1:2 classid 1:21 htb rate 100kbit ceil 150kbit prio 4tc class add dev eth0 parent 1:2 classid 1:22 htb rate 30kbit ceil 140kbit prio 5tc class add dev eth0 parent 1:2 classid 1:23 htb rate 15kbit ceil 130kbit prio 6tc class add dev eth0 parent 1:2 classid 1:24 htb rate 5kbit ceil 50kbit prio 7tc qdisc add dev eth0 parent 1:11 handle 111: sfq perturb 5tc qdisc add dev eth0 parent 1:12 handle 112: sfq perturb 5tc qdisc add dev eth0 parent 1:21 handle 121: sfq perturb 10tc qdisc add dev eth0 parent 1:22 handle 122: sfq perturb 10tc qdisc add dev eth0 parent 1:23 handle 133: sfq perturb 10tc qdisc add dev eth0 parent 1:24 handle 124: sfq perturb 10tc filter add dev eth0 parent 1:0 protocol ip prio 1 handle 1 fw classid 1:11tc filter add dev eth0 parent 1:0 protocol ip prio 2 handle 2 fw classid 1:12tc filter add dev eth0 parent 1:0 protocol ip prio 3 handle 3 fw classid 1:21tc filter add dev eth0 parent 1:0 protocol ip prio 4 handle 4 fw classid 1:22tc filter add dev eth0 parent 1:0 protocol ip prio 5 handle 5 fw classid 1:23tc filter add dev eth0 parent 1:0 protocol ip prio 6 handle 6 fw classid 1:241:11 最⾼优先级的数据包通道优先通过,主要为⼀些ACK SYN确认包..必要时全部占⽤..全速1:12 是很重要的数据道,给多点,最少给⼀半,但需要时可以再多⼀点.rate 规划 1:2 = 1:21 + 1:22 + 1:23 + 1:24 ⼀般总数在50%-80%左右1:21 http,pop最常⽤,⼈数较多,易导致堵塞,不能给得太多,但不益太少.1:22 smtp通道,优先低于1:21 以防发⼤的附件⼤量占⽤带宽1:23 ftp-data数据通道可能⼤量上传⽂件,rate不能给得太多,ceil设置⼤些(其它通道剩余带宽应⽤)1:24 ⽆所谓通道,就是⼀般不是平时⼯作上需要的通道了,给⼩点,防⽌这些⼈在妨碍有正常⼯作需要的⼈其次的⼯作即在iptables端对相应数据包打上标记...3.Linux+NAT+TC脚本是Linux NAT⽹关实例,根据此脚本思路,可进⼀步细致的进⾏针对于数据包的限制..echo 1 > /proc/sys/net/ipv4/ip_forwardiptables -Fiptables -t nat -Fiptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to-source 124.42.97.36iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 124.42.97.36iptables -I PREROUTING -t mangle -p tcp -s 192.168.0.0/24 -j MARK --set-mark 1 iptables -I PREROUTING -t mangle -p tcp -s 192.168.1.0/24 -j MARK --set-mark 2注:可分数据包类型标记tc qdisc del dev eth0 root#加⼀个根队列,速率⽤⽹卡的速率10Mbit,也可⽤上传的速率tc qdisc add dev eth0 root handle 100: cbq bandwidth 10Mbit avpkt 1000#加⼀个根类tc class add dev eth0 parent 100:0 classid 100:1 cbq bandwidth 10Mbitrate 10Mbit allot 1514 weight 1Mbit prio 8 maxburst 8 avpkt 1000 bounded#加⼀个⼦类⽤于内⽹1速率限制为300Kbittc class add dev eth0 parent 100:1 classid 100:2 cbq bandwidth 10Mbitrate 300Kbit allot 1513 weight 30Kbit prio 5 maxburst 8 avpkt 1000 bounded#加⼀个⼦类⽤于内⽹2速率限制为320Kbittc class add dev eth0 parent 100:1 classid 100:3 cbq bandwidth 10Mbitrate 320Kbit allot 1513 weight 32Kbit prio 6 maxburst 8 avpkt 1000 bounded#设置队列规则tc qdisc add dev eth0 parent 100:2 sfq quantum 1514b perturb 15tc qdisc add dev eth0 parent 100:3 sfq quantum 1514b perturb 15#将队列和fw过滤器映射起来其中hand 1的1是开始⽤iptables做的标记hand 2的2也是开始⽤iptables 做的标记tc filter add dev eth0 parent 100:0 protocol ip prio 1 handle 1 fw classid 100:2tc filter add dev eth0 parent 100:0 protocol ip prio 2 handle 2 fw classid 100:3流量监测相关命令:tc -s qdisc/class ls dev eth0tc -s qdisc/class ls dev eth1上述⼏例有在⼯作中⽤到的,也有⽹络整理的.对以后的流量控制可以起个参考作⽤..当然,例⼦不⾜以完全体现tc的强⼤功能,⼀句话iptables+tc的应⽤,只有你想不到的,没有做不到的...。

openwrt tc规则

openwrt tc规则

openwrt tc规则OpenWrt是一款开源的路由器固件,它提供了丰富的网络管理功能,包括Traffic Control(TC)规则。

TC规则用于控制网络流量,可以实现带宽限制、流量分类和优先级控制等功能。

本文将介绍OpenWrt中TC规则的使用方法和一些常见的应用场景。

一、TC规则的基本概念TC规则是通过Linux内核的Traffic Control子系统实现的。

它通过对网络流量进行分类和处理,从而实现对网络带宽的控制。

TC规则由多个过滤器和动作组成,过滤器用于匹配网络流量,动作用于对匹配的流量进行处理。

二、TC规则的配置方法1. 安装TC工具包在OpenWrt中,我们可以使用opkg命令安装tc工具包:opkg updateopkg install tc2. 创建TC规则创建TC规则需要使用tc命令。

以下是一个简单的例子,演示如何创建一个限制带宽为10Mbps的规则:tc qdisc add dev eth0 root handle 1: htb default 1tc class add dev eth0 parent 1: classid 1:1 htb rate 10mbpstc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip dst 192.168.1.0/24 flowid 1:1在这个例子中,eth0是需要限制带宽的网络接口,流量将通过1:1的类别进行处理。

匹配目的IP地址为192.168.1.0/24的流量,限制带宽为10Mbps。

3. 查看TC规则使用tc命令可以查看当前系统中的TC规则。

例如,使用以下命令可以查看eth0接口的规则:tc -s qdisc show dev eth0三、TC规则的应用场景1. 带宽限制通过限制带宽,可以避免某个应用程序或用户占用过多的网络资源,影响其他用户的网络体验。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

linux下TC+HTB流量控制C规则涉及到队列(QUEUE) 分类器(CLASS) 过滤器(FILTER),filter划分的标志位可用U32或iptables的set-mark来实现) 一般是"控发"不控收linux下有两块网卡,一个eth1是外(注意:filter划分标志位可用u32打标功能或iptables 网,另一块eth0是内网.在eth0上做HTB。

的set-mark功能,如果用iptables来打标记的话,下行速LV在eth0处控制,但打标应在进入eth0之前进行,所以,“-i eth1";例子:主要命令就下面三句:创建一个HTB的根1.tc qdisc add dev eth0 root handle 1: htb default 20创建一个HTB的类,流量的限制就是在这里限制的,并设置突发.2.tc class add dev eth0 parent 1: classid 1:1 htb rate 200kbit(速率) ceil 200kbit burst 20k(突发流量)创建一个过滤规则把要限制流量的数据过滤出来,并发给上面的类来限制速度3.tc filter add dev eth0 parent 1: prio 1(优先级) protocol ip u32 match ip sport 80 0xfff flowid 1:1 说明:让交互数据包保持较低的延迟时间,并最先取得空闲带宽,比如:ssh telnet dns quake3 irc ftp控制smtp命令和带有SYN标记的数据包,都应属于这一类。

为了保证上行数据流不会伤害下行流,还要把ACK数据包排在队列前面,因为下行数据的ACK必须同上行流进行竟争。

TC+IPTABLES+HTB+SFQ1 tcp/ip 协议规定,每个封包,都需要有ACKNOWLEDGE讯息的回传,也就是说,传输的资料需要有一个收到资料的讯息回复,才能决定后面的传输速度,并决定是否重新传输遗失的资料,上行的带宽一部分就是用来传输这些ACK资料的.上行带宽点用大的时候,就会影响ACK资料的传送速度,并进而影响到下载速度,2 试验证明,当上传满载时,下载速度变为原来速度的40%,甚至更低,,因为上载文件(包括ftp上传,发邮件SMTP),如果较大,一个的通讯量令带宽超向包和,那么所有的数据包按照先进先出的原则进行排队和等待,这就可以解释为什么网内其中有人用ftp上载文件或发送大邮件的时候,整个网速变得很慢的原因.解决速度之道:1 为了解决这些速度问题,对经过线路的数据进行了有规则的分流.把本来在宽带上的瓶颈转移到我们的LINUX路由器上,可以把带宽控制的比我们购买的带宽小一点. 这样,我们就可以方便的用tc技术对经过的数据进行分流与控制.我们的想像就像马路上的车道一样,有高速道,还有小车道,大车道,需要高速的syn ack icmp ssh等走高速道,需要大量传输的ftp-data,smtp等走大车道,不能让它堵塞整条马路,各行其道.linux下的TC(traffic control)就有这样的作用,只要控制得当,一定会有明显的效果.tc 和iptables结合是最好的简单运用的结合方法.我们设置过滤器以便用iptables对数据包进行分类,因为iptables更灵活,而且还可以为每个规则设置计数器,iptables用mangle链来mark数据包,告诉了内核,数据包会有一个特定的FWMARK标记值(handle x fw) 表明它应该送给那个类(classid x:x),而prio是优先值,表明那些重要数据应该优先通过那个通道,首先选择队列(选择htb),一般系统默认的是fifo的先进先出队列,就是说包是按照先来先处理的原则,如果有一个大的数据包在前面,那么后面的包只能等前面的发完后才能接着发了,这样就算后面既使是一个小小的ack包,也要等待了,这样上传就影响了下载,就算你有很大的下载带宽也无能为力.HTB(Hierarchical token bucket,分层的令牌桶),就像CBQ一样工作,但是并不靠计算闲置时间来整形,它是一个分类的令牌桶过滤器.,它只有很少的参数.结构简图: 1:~~~~~~~~~~~~~~~~`~~~~~~~~~~~~_________1:1~~~~~~~~~1:2________|~~~|~~~~|~~~~|~~~~~|~~~~~~~~|~~~~~~~~|~~~~~~~|1:11~~~1:12~~~~~~~~~~~~1:21~~~1:22~~~1:23~~1:24优先顺序: 1:11 1:12 1:21 1:22 1:23 1:24根据上面的例子,开始脚本:关于参数的说明:rate:是一个类保证得到的带宽值,如果有不只一个类,请保证所有子类总和是小于或等于父类,ceil: ceil是一个类最大能得到带宽值.prio: 是优先权的设置,数值越大,优先权越小,如果是分配剩余带宽,就是数值小的会最优先取得剩余的空闲的带宽权.一般大数据的话,控制在50%-80%左右吧,而ceil最大建议不超过85%,以免某一个会话占用过多的带宽.rate可按各类所需要分配:1:11是很小而且最重要的数据包通道,当然要多分点,甚至必要时先全部占用,不过一般不会的,所以给全速.1:12是很重要的数据道,给多点,最少给一半,但需要时可以再多一点rate规划1:2=1:21 +1:22 +1:23 +1:24 一般总在50%-80%左右.1:21 http,pop是最常用的啦,为了太多人用,而导致堵塞,我们不能给得太多,也不能太少.1:22 我打算给smtp用,优先低于1:21,以防发大的附件大量占用带宽.1:23 我打算给ftp-data,和1:22一样,很可能大量上传文件,所以,rate不能给的太多,而当其他有剩时可以给大些,ceil设置大些.1:24 是无所谓通道,就是一般不是我们平时工作上需要的通道,给小点防止这些人妨碍有正常工作需要的人.上行uplink 320K,设置销低于理论值.DEV="PPP0"UPLINK=300下行downlink 3200K大概一半左右,以便能够得到更多的关发连接.DOWNLINK=15001 曾加一个根队列,没有进行分类的数据包都走这个1:24是缺省类:tc qdisc add dev $DEV parent 1: htb default 241.1 增加一个根队下面主干类1: 速率为$UPLINK ktc cladd add dev $DEV parent 1: classid 1:1 htb rate ${UPLINK}kbit ceil ${UPLINK}kbit prio 01.1.1 在主干类1下建立第一叶子类,这是一个最高优先权的类,需要高优先和高速的包走这条通道,比如SYN ACK ICMP等.tc class add dev $DEV parent 1:1 classid 1:11 htb rate ${$uplink}kbit ceil ${uplink}kbit prio 11.1.2 在主类1下建立第二叶子类,这是一个次高优先权的类,比如我们重要的CRM 数据。

tc class add dev $DEV parent 1:1 classid 1:12 htb rate ${$uplink-150}kbit ceil${uplink-50}kbit prio 21.2 在根类下建立次干类classid 1:2 ,此次干类的下面全部优先权低于主干类,以防重要数据堵塞。

tc class add dev $DEV parent 1: classid 1:2 htb rate ${$UPLINK -150]kbit prio 31.2.1 在次干类下建立第一叶子类,可以跑例如http ,pop等。

tc class add dev $DEV parent 1:2 classid 1:21 htb rate 100kbit ceil ${$uplink -150}kbit prio 41.2.2 在次干类下建立第二叶子类,不要太高的速度,以防发大的附件大量占用带宽,便如smtp等。

tc class add dev $DEV parent 1:2 classid 1:22 htb rate 30kbit ceil ${uplink-160}kbit prio 51.2.3 在次干类下建立第三叶子类,不要太高的带宽,以防大量的数据堵塞网络,例如:ftp-data.tc class add dev $DEV parent 1:2 classid 1:23 htb rate 15kbit ceil ${UPLINK-170}kbit prio 61.2.4 在次干类下建立第四叶子类。

无所谓的数据通道,无需要太多的带宽,以防无所谓的人在阻碍正务。

tc class add dev $DEV parent 1:2 classid 1:24 htb rate 5kbit ceil ${UPLINK -250}kbit prio 7在每个类下面再附加上另一个队列规定,随机公平队列(SFQ),不被某个连接不停占用带宽,以保证带宽的平均公平使用。

#SFQ(stochastic fairness queueing 随机公平队列),SFQ的关键词是“会话”(或称作流),主要针对一个TCP会话或者UDP流,流量被分成相当多数量的FIFO队列中,每个队列对应一个会话。

数据按照简单轮转的方式发送,每个会话都按顺序得到发送机会。

这种方式非常公平,保证了每个会话都不会被其它会话所淹没,SFQ之所以被称为“随机”,是因为它并不是真的为每个会话创建一个队列,而是使用一个散列算法,把所有的会话映射到有限的几个队列中去。

#参数perturb是多少秒后重新配置一次散列算法,默认为10秒.tc qdisc add dev $DEV parent 1:11 handle 111: sfq perturb 5tc qidsc add dev $DEV parent 1:12 handle 112: sfq perturb 5tc qdisc add dev $DEV parent 1:21 handle 121: sfq perturb 10tc qidsc add dev $DEV parent 1:22 handle 122: sfq perturb 10tc qidsc add dev $DEV parent 1:23 handle 123: sfq perturb 10tc qidsc add dev $DEV parent 1:24 handle 124: sfq perturb 10设置过滤器,handle是iptables作mark的值,让被iptables在mangle链做了mark的不同的值选择不同的通道classid,而prio是过滤器的优先级别tc filter add dev $DEV parent 1:0 protocol ip prio 1 handle 1 fw classid 1:11tc filter add dev $DEV parent 1:0 protocol ip prio 2 handle 2 fw classid 1:12tc filter add dev $DEV parent 1:0 protocol ip prio 3 handle 3 fw classid 1:21tc filter add dev $DEV parent 1:0 protocol ip prio 4 handle 4 fw classid 1:22tc filter add dev $DEV parent 1:0 protocol ip prio 5 handle 5 fw classid 1:23tc filter add dev $DEV parent 1:0 protocol ip prio 6 handle 6 fw classid 1:24####################################################################################下行的限制:# 设置入队的规则,是因为把一些经常会造成下载大文件的端口进行控制,不让他们来得太快,导致堵塞,来得太快,就直接drop,就不会浪费和占用机器时间和力量去处理了.1 把下行速率控制在大概1000-1500K(大约为带宽的50%),因为这个速度已经够用了,以便能够得到更多的并发下载连接.tc qdisc add dev $DEV handle ffff: ingresstc filter add dev $DEV parent ffff: protocol ip prio 50 handle 8 fw police rate ${downlink}kbit burst 10k drop flowid :8如果内部网数据流不是很疯狂的话,就不用做下载的限制了,用#符号屏蔽上面两行既可.如果要对任何进来的数据进行限速的话,可以用下面这句.tc filter add dev $DEV parent ffff : protocol ip prio 10 u32 match ip src 0.0.0.0/0 police rate ${downlink}kbit burst 10k drop flowid :1################################开始给数据包打标记把出去的不同类数据包(为dport)给mark上标记1---6,让它走不同的通道.把进来的数据包(为sport)给mark上标记8,让它受到下行的限制,以免速度太快而影响全局.每条规则下跟着return的意思是可以通过RETURN方法避免遍历所有的规则,加快了处理速度.设置TOS的处理:iptables -t mangle -A PREROUTING -m tos --tos Minimize-Delay -j MARK --set-mark 1iptables -t mangle -A PREROUTING -m tos --tos Minimize-Delay -j RETURNiptables -t mangle -A PREROUTING -m tos --tos Minimize-Cost -j MARK --set-mark 4iptables -t mangle -A PREROUTING --m tos --tos Minimize-Cost -j RETURNiptables -t mangle -A PREROUTING -m tos --tos Maximize-Throughput -j MARK--set-mark 5iptables -t mangle -A PREROUTING -m tos --tos Maximize-Througput -j RETURN##提高TCP初始连接(也就是带有SYN的数据包)的优先权是非常明智的.iptables -t mangle -A PREROUTING -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j MARK --set-mark 1iptables -t mangle -A PREROUTING -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j RETURN#想ICMP 想ping有良好的反应,放在第一类。

相关文档
最新文档