免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 12341 | 回复: 13
打印 上一主题 下一主题

TC HTB流量控制(CU第一主帖) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-22 21:12 |只看该作者 |倒序浏览
第一次在CU上发帖,不知道怎么引用blog文章,就直接贴过来了,欢迎大家批评指正~~
原文在my blog:http://blog.chinaunix.net/u3/94771/showart_1906064.html

                                      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之类的打标上做文章,但我实在没想出什么具体的打标策略.有哪位比较清楚,烦请告诉我.
.附图.
整个应用中的规则示意图如下.


[ 本帖最后由 bripengandre 于 2009-4-22 21:16 编辑 ]

论坛徽章:
5
IT运维版块每日发帖之星
日期:2015-08-06 06:20:00IT运维版块每日发帖之星
日期:2015-08-10 06:20:00IT运维版块每日发帖之星
日期:2015-08-23 06:20:00IT运维版块每日发帖之星
日期:2015-08-24 06:20:00IT运维版块每日发帖之星
日期:2015-11-12 06:20:00
2 [报告]
发表于 2009-04-22 21:29 |只看该作者
OK不错。

LINUX这方面比较考前了。现在的路由交换还最多只是CBQ队列。

论坛徽章:
0
3 [报告]
发表于 2009-04-23 08:04 |只看该作者
用linux来做防火墙是不是有瓶颈啊?

论坛徽章:
5
IT运维版块每日发帖之星
日期:2015-08-06 06:20:00IT运维版块每日发帖之星
日期:2015-08-10 06:20:00IT运维版块每日发帖之星
日期:2015-08-23 06:20:00IT运维版块每日发帖之星
日期:2015-08-24 06:20:00IT运维版块每日发帖之星
日期:2015-11-12 06:20:00
4 [报告]
发表于 2009-04-23 09:00 |只看该作者
CU第一主帖
刚刚看到????????

论坛徽章:
0
5 [报告]
发表于 2009-05-06 14:44 |只看该作者
不错,学习。。

论坛徽章:
0
6 [报告]
发表于 2009-05-08 15:15 |只看该作者
不错不错,挺有参考意义的。

楼主的遗留问题是否可以用iptables的 “!” 来解决呢?

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
7 [报告]
发表于 2009-05-08 16:52 |只看该作者
这个不错,学习了

论坛徽章:
0
8 [报告]
发表于 2009-05-10 23:33 |只看该作者
支持。。。

论坛徽章:
0
9 [报告]
发表于 2009-05-11 14:06 |只看该作者
学习,学习
四.遗留问题.
有很多细节需要考虑,如上行控制与下行控制应比较独立,即上行控制时,对下行中局域网内用户上行的ack之类的包应不予限制,这个显然应在iptable之类的打标上做文章,但我实在没想出什么具体的打标策略.有哪位比较清楚,烦请告诉我.


对于ack包可用
-p tcp --tcp-flags ack

来匹配呀

[ 本帖最后由 kevin.tan 于 2009-5-11 14:18 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2009-06-14 00:16 |只看该作者
有没有哪位手头有对ftp服务进行带宽限制的脚本,要同时对port模式和pasv模式限制总带宽,方便的话提供一下,多谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP