分享

TC HTB流量控制

 惠所勇 2010-06-13
TC HTB流量控制               
.背景简介
最近几个月在参与一个软路由器的开发.该路由器的流量控制功能由TCHTB实现。下面写点总结性的文字,因水平有限,不对之处敬请各位及时指出。
   TCTrafficControl的缩写,HTB顾名思义是一个层次式的过滤框架,我们可以通过配置TC HTB规则来实现流量控制.
.基本概念
   TC规则涉及到队列(queue),分类器(class)和过滤器(filter)三个概念.
   队列用来实现控制网络的收发速度.通过队列,linux可以将网络数据包缓存起来,然后根据用户的设置,在尽量不中断连接(TCP)的前提下来平滑网络流量.需要注意的是,linux对接收队列的控制不够好,所以我们一般只用发送队列,即控发不控收”,
  class用来表示控制策略.很显然,很多时候,我们很可能要对不同的IP实行不同的流量控制策略,这时候我们就得用不同的class来表示不同的控制策略了.
  filter用来将用户划入到具体的控制策略中(即不同的class).正如前述,我们要对A,B两个IP实行不同的控制策略(C,D),这时,我们可 filterA划入到控制策略C,将B划入到控制策略Dfilter划分的标志位可用u32打标功能或IPtablesset-mark功能来实 现。
三、应用过程
我们要实现这样的功能。局域网中的用户分为两类:特权用户和普通用户,对特权用户和普通用户的各应用的上行/下载实现独立的控制。设eth0为内网网络接口,eth1位外网网络接口。
   i)首先在eth0eth1分别建立qdiscA qdiscBqdiscA控制外网数据注入内网的速度,因此是用来控制下行速度的;qdiscB控制内网数据灌入外网的速度,因此是用来控制上行速度的。示例指令如下。
   tc qdisc add dev eth0 root handle 1:htb default 91
   解释如下:无论是队列,还是classfilter都有ID之类的标志符,一般都有parent,注意ID具有接口本地性,不同的网络接口可以有相同的ID。对于这里因为qdisc在顶部,所以parent无,用'root'字样来标识,ID1:来标志,'default 91'表示当某个ip流不满足任何已设定的filter规则时,将自动归入class 91.更详细的指令规则说明请参考手册.
  ii)然后在qdisc下建立两个root class,分别用来控制普通用户和特权用户的带宽(对于eth0是用来控制下行带宽,对于eth1是用来控制上行带宽的).示例指令如下.
  tc class add dev eth0 parent 1:0 classid1:30 htb rate 2mbit ceil 4mbit prio 2
   解释如下:rate是指在带宽紧张的情况下的最大网络速度,当带宽空闲时,class可通过向其兄弟借用带宽而达到ceil大的网络速度,注意,借用表兄弟之间也可借用带框.prio用来指示借用带宽时的竞争力,prio越小,优先级越高,竞争力越强.
iii)接着针对不同的应用在各rootclass下设置不同的类,.示例如下.
tc class add dev eth0 parent 1:30 classid 1:31 htbrate 0.5mbit ceil 2mbit prio 3
指令意义同ii).
同时为了不使一个会话永占带宽,在叶子结点(即本文的各应用结点)添加随即公平队列sfq.
tc qdisc add dev eth0 parent 1:31 handle 31:sfq perturb  10
iv)接着添加过滤器.
tc filter add dev eth0 parent 1: protocol ipprio 31 handle 31 fw flowid 1:31
v)iptable打标
   iptables -t mangle -I FORWARD -i eth1-p tcp --sport %80 -d $IPaddr--j MARK --set-mark 31
   iptables -t mangle -I FORWARD 2 -i eth1 -d $IPaddr--j RETURN

注意下行速率在eth0处控制,但打标应在进入eth0前进行,所以规则中出现了'-i eth1'字样.下行达标规则可类推之.
.遗留问题.
有很多细节需要考虑,如上行控制与下行控制应比较独立,即上行控制时,对下行中局域网内用户上行的ack之类的包应不予限制,这个显然应在iptable之类的打标上做文章,但我实在没想出什么具体的打标策略.有哪位比较清楚,烦请告诉我.
.附图.
整个应用中的规则示意图如下.

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多