千家信息网

TC模块限速实例

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,一、网络拓扑二、环境介绍服务器系统是centos6.5,内核:2.6.32-431.el6.x86_64Server:两张网卡eth0:10.0.0.100eth2:192.168.0.1PC:一张网
千家信息网最后更新 2026年10月31日TC模块限速实例

一、网络拓扑

二、环境介绍

服务器系统是centos6.5,内核:2.6.32-431.el6.x86_64

Server:两张网卡eth0:10.0.0.100

eth2:192.168.0.1

PC:一张网卡eth0:192.168.0.10,gw:192.168.0.1

三、tc介绍

在linux中,tc有二种控制方法CBQ和HTB。HTB是设计用来替换CBQ的,HTB比CBQ更加灵活,但是CPU 开销也更大,通常高速的链路会使用CBQ,一般而言HTB使用的更加广泛我们对tc中的 HTB的规则本质上是一个树形结构,包括三个基本的构成块:队列规定qdisc(queueing discipline) ,类(class)和分类器(Classifiers).

qdisc 队列规则(queueing discipline):

用来实现控制网络的收发速度.通过队列,linux可以将网络数据包缓存起来,然后根据用户的设置,在尽量不中断连接(如 tcp)的前提下来平滑网络流量.需要注意的是,linux 对接收队列的控制不够好,所以我们一般只用发送队列,即"控发不控收".它封装了其他两个主要 tc 组件(类和分类器).内核如果需要通过某个网络接口发送数据包,它都需要按照为这个接口配置的 qdisc 队列规则把数据包加入队列.然后,内核会尽可能多地从 qdisc里面取出数据包,把它们交给网络适配器驱动模块.

最简单的QDisc是pfifo它不对进入的数据包做任何的处理,数据包采用先入先出的方式通过队列.不过,它会保存网络接口一时无法处理的数据包.常有的队列规则包括 FIFO 先进先出,RED 随机早期探测,SFQ随机公平队列和令牌桶 Token Bucket,类基队列 CBQ,CBQ 是一种超级队列,即它能够包含其它队列,甚至其它CBQ.

Class类

class 用来表示控制策略.很显然,很多时候,我们很可能要对不同的IP实行不同的流量控制策略,这时候我们就得用不同的class来表示不同的控制策略了.

Filter规则

filter 用来将用户划入到具体的控制策略中(即不同的 class 中).比如,现在,我们想对xxa,xxb两个IP实行不同的控制策略(A,B),这时,我们可用 filter 将 xxa 划入到控制策略 A,将 xxb 划入到控制策略 B,filter 划分的标志位可用 u32 打标功能或 IPtables 的 set-mark (大多使用iptables 来做标记)功能来实现.目前,tc可以使用的过滤器有:fwmark分类器,u32 分类器,基于路由的分类器和 RSVP 分类器(分别用于IPV6、IPV4)等;其中,fwmark 分类器允许我们使用 Linux netfilter 代码选择流量,而 u32 分类器允许我们选择基于 ANY 头的流量 .需要注意的是,filter (过滤器)是在QDisc 内部,它们不能作为主体.

实施步骤

主要是建立队列、分类、过滤器三步。

1 给物理设备建立一个队列qdisc

2 在相关队列上建立分类,一般是在该qdisc上建立一个根分类,然后在此根分类上建立子类。

3 为每一个分类建立基于路由的过滤器,并把过滤规则与特定的路由结合。一般只需要针对根分类提供一个过滤器,然后为每个子类提供路由映射。

四、实施

Server端

sed -i 's#net.ipv4.ip_forward = 0#net.ipv4.ip_forward = 1#g' /etc/sysctl.conf

sysctl -p

做nat命令如下:

iptables -F

iptables -t nat -F

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to 10.0.0.100

为流量控制做基于fw过滤器的标记

iptables -t mangle -I PREROUTING -o eth0 -s 192.168.0.0/24 -j MARK --set-mark 0x11

上传速率做流量控制

tc 只能控制网卡发送包的速率,所以上传速率的限制要在eth0上做

删除旧有队列

tc qdisc del dev eth0 root 2>/dev/null

加一个根队列

tc qdisc add dev eth0 root handle 1:0 htb default 60

加一个根类

tc class add dev eth0 parent 1:0 classid 1:1 htb rate 100Mbit ceil 100Mbit prio 0

加一个子类用于内网速率限制为10Mbit

tc class add dev eth0 parent 1:1 classid 1:11 htb rate 10Mbit ceil 10Mbit prio 1 burst 96kbit

设置队列规则

tc qdisc add dev eth0 parent 1:11 handle 111:0 sfq perturb 10

将队列和fw过滤器映射起来 其中hand 0x11 的0x11是开始用iptables 做的标记

tc filter add dev eth0 parent 1:0 protocol ip prio 1 handle 0x11 fw classid 1:11

做下载限制,过滤器是用u32

tc qdisc del dev eth2 root 2>/dev/null
根队列

tc qdisc add dev eth1 root handle 2:0 htb default 30
根类

tc class add dev eth1 parent 2:0 classid 2:1 htb rate 10Mbit ceil 10Mbit prio 0
子类
tc class add dev eth1 parent 2:1 classid 2:11 htb rate 1Mbit ceil 1Mbit prio 1

设置队列规则

tc qdisc add dev eth1 parent 2:11 sfq perturb 10

tc filter add dev eth2 parent 2:0 protocol ip prio 2 u32 match ip dst 192.168.0.0/24 flowid 2:11

用以下命令监视流量

tc -s qdisc ls dev eth0
tc -s qdisc ls dev eth2
tc -s class ls dev eth0
tc -s class ls dev eth2

参考:

http://lartc.org/howto/lartc.qdisc.classful.html

https://blog.csdn.net/eydwyz/article/details/53320612


队列 分类 控制 规则 过滤器 数据 流量 策略 网络 不同 子类 路由 内核 接口 标记 网卡 速率 限制 两个 功能 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技海报 湖北九亚互联网络科技有限公司 中关村互联网 科技集团 互联网科技工作委员会副主任毛军 科技互联网企业 贷财互联网科技 四川狮子座互联网科技 哈尔滨秒房互联网科技有限公司 玖二柒互联网科技公司待遇 中盈科技互联网信息有限公司 承德科技产业互联网发展 武汉健翔互联网络科技有限公司 呼和浩特新华互联网科技学院 为客找房互联网科技公司怎么样 上海京穆互联网科技有限公司 元气玛特互联网科技公司是外包吗 城市宝互联网科技有限公司 互联网领先科技活动 恒生科技指数 中概互联网 互联网科技大佬云集 手冲咖啡和咖啡机区别 北京互联网科技有限公司 西安互联网科技 上海喔噻互联网科技 中国最先进互联网科技公司 恒银科技与互联网金融 成都互联网科技公司工作好不好 科技互联网海报 山东子淼互联网科技有限公司 亚光科技低轨卫星互联网
0