TC(Traffic Control)

TC(Traffic Control)

TC(Traffic Control)用于Linux内核的流量控制,它利用队列规定建立处理数据包的队列,并定义队列中的数据包被发送的方式,从而实现对流量的控制。该工具让用户可以设定并配置几乎所有的流量控制框架要素,比如排队规则(qdisc)、类(class)及过滤器(filter),他们之间的关系如下:
 排队规则:每个网络设备配有一个排队规则。通常,要发送的报文被送到一个排队规则中并且按照特定规则在此队列中排序。
 类:排队规则可以有多个接口,这些接口用于向队列管理插入报文。在单个排队规则中,可以把报文分配到不同的类。
 过滤器:通常用来将外发报文分片到排队规则的类中。

假设 eth0 位是服务器的外网网络接口.开始之前,先要清除eth0所有队列规则
tc qdisc del dev eth0 root 2> /dev/null > /dev/null

  1. 定义最顶层(根)队列规则,并指定 default 类别编号
    tc qdisc add dev eth0 root handle 1: htb default 2
  2. 定义第一层的 1:1 类别 (速度)
    本来是要多定义第二层叶类别,但目前来看,这个应用中就可以了.
    tc class add dev eth0 parent 1:1 classid 1:2 htb rate 98mbit ceil 100mbit prio 2
    tc class add dev eth0 parent 1:1 classid 1:3 htb rate 1mbit ceil 2mbit prio 2
    注:以上就是我们控制输出服务器的速度,一个为98M,一个为 2M.
    rate: 是一个类,保证得到的带宽值.如果有不只一个类,请保证所有子类总和是小于或等于父类.
    prio:用来指示借用带宽时的竞争力,prio越小,优先级越高,竞争力越强.
    ceil: ceil是一个类,最大能得到的带宽值.
    同时为了不使一个会话永占带宽,添加随即公平队列sfq.
    tc qdisc add dev eth0 parent 1:2 handle 2: sfq perturb 10
    tc qdisc add dev eth0 parent 1:3 handle 3: sfq perturb 10
  3. 设定过滤器
    过滤器可以使用本身的 u32 也可以使用iptables来打上标记
    指定在root 类 1:0中,对 192…168.0.2 的过滤,使用 1:2 的规则,来给他 98M 的速度,写法就如下
    tc filter add dev eth0 protocol ip parent 1:0 u32 match ip src 192.168.0.2 flowid 1:2
    tc filter add dev eth0 protocol ip parent 1:0 u32 match ip src 192.168.0.1 flowid 1:3
    如果是所有 ip 写法就如:
    tc filter add dev eth0 protocol ip parent 1: prio 50 u32 match ip dst 0.0.0.0/0 flowid 1:10

tc规则
 Class类
– 分类定义
– 每一层class id的定义规则
– 第0层, 顶层 class: x:1000 (均为16进制)
– 第1层, 小包类x:2000,客户端顶层类x:3000,no-mark类x:4000,
– 第2层, 分客户端顶层类 x:10, x:20, x:30 … x:ff0
– 第3层, 分客户端的下层流分类 分别为 x:11 x:12 … x:1f, x:21 x:22…x:2f, …x:ff1 x:ff2 …x:fff
– 其他层, 自动分类

以出口eth0.2(带宽值为4000kbit)为例进行说明,
tc qdisc add dev eth0.2 root handle 1:0 htb default 4000
——tc规则的根类,默认使用x:4000
tc class add dev eth0.2 parent 1:0 classid 1:1000 htb rate 4000kbit quantum 20000
——1:1000为1:0的子类,速率值为4000kbit
tc class add dev eth0.2 parent 1:1000 classid 1:2000 htb rate 200kbit ceil 3800kbit prio 0 quantum 1600
——1:2000为1:1000的子类,速率值为200kbit,当内核有空闲时速率可以申请使用到3800kbit,且优先级为0最高的(优先级数值越小,优先级越高)
tc class add dev eth0.2 parent 1:1000 classid 1:3000 htb rate 2400kbit ceil 4000kbit prio 1 quantum 5000
——1:3000也是1:1000的子类,速率值为2400kbit,当内核带宽值有空闲时,可以申请到4000kbit,优先级为1
tc class add dev eth0.2 parent 1:1000 classid 1:4000 htb rate 200kbit ceil 3800kbit prio 7 quantum 1600
——1:4000也是1:1000的子类,速率值为200kbit,当内核带宽有空闲时,可以申请得到3800kbit,优先级为7,最低优先级

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mikejson

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值