公司一台服务器, 网络环境太高, 那台服务器和源服务器连接下载, 就跑到 400M-500M ,为了控制一下,
所以研究了一下 TC 。来做流量控制 .给他控制到小点,不要让这一台占了所有的网络。 TC 很是强大啊 ,很
多所谓的硬件路由器,都是基于这个做的。
TC 介绍
在 linux 中, TC 有二种控制方法 CBQ 和 HTB.HTB 是设计用来替换 CBQ 的。它是一个层次式的过
滤框架 .
TC 包括三个基本的构成块:
队列规定 qdisc (queueing discipline )、类( class )和分类器( Classifiers )
TC 中的队列 (queueing discipline):
用来实现控制网络的收发速度 .通过队列 ,linux 可以将网络数据包缓存起来 ,然后根据用户的设置 , 在尽
量不中断连接 ( 如 TCP) 的前提下来平滑网络流量 .需要注意的是, linux 对接收队列的控制不够好,所以我
们一般只用发送队列,即 “控发不控收 ”.它封装了其他两个主要 TC 组件(类和分类器)。内核如果需要通
过某个网络接口发送数据包,它都需要按照为这个接口配置的 qdisc( 排队规则 )把数据包加入队列。然后,
内核会尽可能多地从 qdisc 里面取出数据包,把它们交给网络适配器驱动模块。
最简单的 QDisc 是 pfifo 它不对进入的数据包做任何的处理, 数据包采用先入先出的方式通过队列。
不过,它会保存网络接口一时无法处理的数据包。
队列规则包括 FIFO(先进先出) ,RED(随机早期探测) ,SFQ(随机公平队列) 和令牌桶( Token Bucket ),
类基队列( CBQ ), CBQ 是一种超级队列,即它能够包含其它队列(甚至其它 CBQ )。
TC 中的 Class 类
class 用来表示控制策略 .很显然 , 很多时候 , 我们很可能要对不同的 IP 实行不同的流量控制策略 ,这时
候我们就得用不同的 class 来表示不同的控制策略了 .
TC 中的 Filter 规则
filter 用来将用户划入到具体的控制策略中 (即不同的 class 中). 比如 , 现在,我们想对 xxa,xxb 两个
IP 实行不同的控制策略 (A,B), 这时 , 我们可用 filter 将 xxa 划入到控制策略 A,将 xxb 划入到控制策
略 B,filter 划分的标志位可用 u32 打标功能或 IPtables 的 set-mark ( 大多使用 iptables 来做标记 )
功能来实现。