流量限速之GBSC

目录
一. 前言..............................................................................3
二. GBSC基识 .........................................................................4
三. GBSC基本原理 .....................................................................5
四. GBSC应用特点 .....................................................................7
五. GBSC行为管理 .....................................................................8
六. GBSC配置 .........................................................................10

一. 前言
GBSC产生的背景 90年代后期,随着internet和各大门户网站的兴起,上网就成为年轻人的一种新时尚。但由于PC价格和上网资费相对较高,很多人只能望而兴叹。此时第一代网吧应运而生,以提供internet访问为目的;由于此时ICP起步不久,上网也多停留在门户网站news、email、bbs、Mud游戏等几方面。这些应用对于网络的要求普遍很低,很多时候只需要一根56k的电话线拨号即可满足要求。 跨入21世纪后,ADSL宽带接入方式逐渐走入寻常百姓家,并迅速普及,上网费用也随之降低。很多人在家中即可上网冲浪,不需要在进入网吧。但网吧并未因此而失去市场,它们抓住 “星际争霸”“红色警戒”等一系列RTS竞技游戏的兴起的机遇,吸引并获得了一大批年轻人的青睐,这也成就了第二代网吧的兴旺。此时的游戏大多数只需要局域网即可进行游戏,同时刚开始流行的QQ(早称OICQ)虽然需要internet,但对网络的要求还是非常低。 Internet的发展蕴含着巨大的利润,很多企业都投入到这一行业的开发之中,这直接造就了ICP的壮大。大约2001年后,各式各样的网络游戏开始出现在大众面前,并以迅雷不及掩耳之势占据了各型网吧的硬盘,大量的用户开始集中访问internet,原来的网络(主要是带宽)远远不能满足需求,但很多的网吧老板没有看到这一点,他们还是认为网吧内的装修、电脑配置才是关键。这一时期对网络带宽投资较多的网吧多半赢得了更多的用户,他们率先跨入了第三代网吧的门槛。 第三代网吧的好景不长,很多人看到了网络上潜在的利益,都想从中分一杯羹,当然包括***。他们开发出各种各样的病毒、***程序等来盗取上网用户的密码等,并据此非法牟利。由于这些手段大多具有非常强的隐蔽性,一般的非专业人员根本无法防范。在出现问题之后,网吧只能尝试升级带宽、更换路由器、重启设备、重做PC操作系统,但都是徒劳,因为他们没有找到问题的根源--ARP欺骗。之后出现的第四代网吧采用具备ARP欺骗防范的路由器,加强网络管理,情况得意好转。
目前大多数的网吧都处于第四代或者向第四代转变的过程中,但新的问题已经出现,在信息爆炸的时代,普通的单线程数据传输已经跟不上步伐,一种新的传输技术P2P很快出现,并迅速获得了大量的认可,而且大有燎原之势。事物都有双面性,P2P技术在给用户提供便利的同时,对整个网络体系施加了巨大的流量压力考验。可以说,目前的internet还无力为P2P提供流畅的服务。比如:一个局域网中有人开启了迅雷(P2P)下载,其他人上网就很卡„ 这种情况并不是因为网络带宽不够,也不是因为中了病毒、***,而是因为IP地址资源的匮乏,中国的网络大多是基于共享方式建立的,如果少数用户占用了大量的网络带宽资源,其他用户就无法获得流畅的上网体验。显然,我们无法在短时间内的改变网络的硬件环境。可行的方法是:根据总带宽资源和用户数量的配比,合理的管理分配带宽,以避免少数用户抢占过多带宽--简言之,我们又要回到计划经济时代,达到这个目标,网吧就将步入第五代。
二. GBSC基础知识
令牌桶算法 GBSC主要采用令牌桶算法实现,在深入讲解GBSC之前,首先需要了解令牌桶的基本原理。按照前面的介绍,GBSC需要对用户进行“限速”。很多人可能会认为:要限速,首先要采样并确定用户的上下行速率,如果超标了,就对其采取一定的控制措施。其实不然,令牌桶的原理是一种预带宽资源预分配的机制„ 如图下图,假设给某用户限速100KBps


100KBps,即每秒转发800Kbit报文,路由器就需要每秒钟往桶中增加800K个令牌(token)。一个令牌对应一个bit,这里讲的800K就是用户的速率上限(限速值),路由器收到指定(ip)用户的数据包后,如果用户的收发数据包速率小于令牌限定值,则所有数据bit都能领取到令牌正常转发;如果用户的数据包速率大于限定值,则必然有很多数据包领不到令牌而不能转发(丢弃)。根据这个机制,就可以实现限速的功能。 需要注意的是: 用户的数据速率小于限定值时,令牌桶中的令牌会不断的多出来,这些令牌是被浪费的。用户的数据速率超过限定时,丢弃总是处于最后的排在后面的bit;但由于我们的数据通讯是机遇packet的,少量bit丢弃会导致整个packet无效,这可能会导致在上层应用中显示速率不精确。一般说的限速是以秒为单位来计算的,但实现上秒这个单位太大了,很容易引起网络的流量波动;所以通常需要把限定速率对应的令牌分若干次分配给用户,一求流量的平滑。
三. GBSC基本原理
GBSC-Group Based Service Control,基于组的服务控制、管理。GBSC实现的是一种弹性的带宽管理。所谓弹性带宽,是指根据网络的繁忙程度来给予用户制定不同的限速策略,从而获得更高效的带宽利用,GBSC中的Service,除了速率限制以外,还包括上网行为管理 下面我们举例说明问题 假设有一个局域网,申请的是10M专线接入,局域网规模大约为100个PC,即BW=10M,Usr=100此时应该要如何限速呢? 根据经验:20~30%的用户会占用约80%的网络带宽,而网中多数的用户处于空闲状态。所以比较适当的限速值为:RL≈(BW*80%)/(Usr*30%)≈(BW/Usr)*3,我们建议该系数一般为3~4为好,建议值:3,所以本例中,每个用户的平均速率上限为300Kbps。 限速之后,无论使用什么方法,单用户占用的带宽不会是无限制的。从这一点而言,GBSC可以防止因为带宽分配不合理而导致的“卡”“慢”。网络运行过程中,用户本身就是不稳定的。如:某天网络中只有10%的用户在访问internet,且需要较多带宽,其他用户都idle。此时他们理论上应该可以得到10M/(100*10%)=1M,但按照前面的限速机制,它们只能得到300K的带宽。于此同时,大约有10M-(300K*10)=7M的带宽资源被白白浪费了。
解决的方法并不复杂:GBSC检测当前总带宽的占用情况,若空闲,则给用户分配一个更高的带宽上限;若繁忙,则按照原定限速来分配。问题是如何判定网络繁忙?这一点比较简单,但需要注意,总带宽是ISP的租用值,而不是以太网的接口速率;一般认为Rate≥95%就认为网络繁忙。空闲时,分配的新的上限该如何设定?新的速率上限与原值不应差异太大,一般为RL2≤RL*2=(BW/Usr)*6 ,问题来了:存在两个限速阀值,用户将按照哪个来决定速率呢?答案是哪个都不是,且会根据当前网络的繁忙程度来实时调整。其方法是:Usr.RL=RL+(RL2-RL)*[(95%-Rate)/60%] 显然,网络极端繁忙时,Usr.RL将小于RL值,即设定的最小速率上限;极端空闲时,Usr.RL将大于RL2即较大的速率上限 如下图表示带宽实时浮动状态:


1. 突发因子
在网络管理中,有些用户绝大多数时候都idle,但在某个时刻需要较短时间的高速下载按照RL设置的值,即便它要传输的问题建很小,也需要持续较长的时间;另外一方面这个用户其他的大部分时间都没有使用网络资源,被其他用户给瓜分了。这在情感上是一个矛盾为解决这个矛盾,GBSC引入Burst突发因子。突发因子的原理也比较简单,其原理跟银行中的“零存整取”比较类似,鉴于这些用户大部分时间对网络带宽占用非常少,我们可以将其没有用掉的Token给集中存储起来,代需要时集中使用。

如下图所示:

 

需要提起注意的是:所谓突发因子,实际就是一个token缓存;令牌缓冲的容量定义为RL*N,其中RL就是较小的速率上限,N为突发因子,建议N≤ 9(秒);开始时,令牌缓冲为空;当单位时间内,用户的流量较小,用不完的令牌将被缓冲起来;cache满之后溢出。
突发因子在用户下载一些小文件时,效果特别明显,跟没有限速时一样。但前提是总带宽没有耗尽。


2. 大流量抑止
与突发流量相反,有些用户会因为下载、看网络视频等原因占用较多网络带宽,虽然有速率上限保护。但如果持续太长时间,还是会对网络运行产生负面影响,尤其是在多个用户大流量的情况下。此时,GBSC可选择对用户进行一定的宏观调控。显然直接屏蔽是不合适的,我们采取的是带宽抑制策略,将用户的RateLimit值打一个指定的折扣,以示惩罚,并持续一个指定的时间;之后自动恢复。
3. 动态分配
前面讲到,为了应对局域网中用户(数量)的变动,我们设定两个速度上限,以便在空闲时获得更高的利用率。但相对来说两个限速阀值还是死的,不够灵活,不能应对所有的情况。 静态方案中:RL≈(BW/Usr)*3,RL2≈ (BW/Usr)*6 动态方案中,其核心的控制机制还是一样的,只是其值不需要人为计算:RL’≈(BW/Usr’)*3,RL2’≈ (BW/Usr’)*6,其中Usr’是由GBSC从当前的运行状态中检测到,BW是预先确定的常量,只要能够实时确定当前的Usr’数量,RL’和RL2’就可以自行得出„显然,动态分配方案用起来非常方便。
四. GBSC应用特点
虽然GBSC的动态分配方案用起来非常方便。但这并不是说动态分配方案可以完全取代静态方案,这要看应用场合的,下面我们举例说明 小规模网络 如果网络规模非常小,如10人以下;以2M带宽为例,此时,如果检测到有5人在线,那么RL’≈(3M/5)*3=1.2M 如果一分钟后有有两人离线。那么RL’≈(3M/3)*3=3M显然,在网络规模很小的情况下,如果采用动态分配方案,将导致限速的阀值大幅度的上下浮动,这不利于用户的上网体验。这种情况下还是建议使用静态分配方案更加合适。 带宽匮乏的网络 企业网应用中,经常会出现带宽小而用户多的情况,如:6M,250用户,如果采用动态分配方案,RL’≈(6M/250)*3=72kbps=9KB显然,这种此时的方案虽然一如既往的遵循了GBSC的分配原则,但结果却太小,导致谁都无法正常使用网络;此时一般建议使用静态分配方案,确保每个用户有一个最小的速率保证,如:RL=300Kb双线路接入的网络 在GBSC基本原理中我们提到,为了提高利用率,我们设置了RL和RL2两个速率上限,以便分时调控,而判断的依据就是带宽空闲与否(是否超过95%)但很多网络,尤其是网吧都是双线接入,该如何判别网络的忙与闲呢? 同一ISP 如果是两个线路带宽相等,且同属一个ISP,此时网络的流量将按照统计平均原则在两个出口上分配,对于用户而言,流量可走任意出口,通常两个出口的带宽占用率基本持平,此时网络繁忙的判断依据可:Rate=(Σ实际带宽占用)/(Σ租用带宽),该值应与单线路的占用率基本相等 不同ISP 这种情况下,路由器罗列不同ISP的路由数据库,然后根据用户IP包的目的地址进行选路;每个用户的流量通常会占两个出口在南方地区电信的流量会远大于联通(网通),在北方,则反之。或者说,在南方联通线路通常是空闲的;北方,电信线路通常是空闲的。 此时网络繁忙的判断依据可:Rate=当地主ISP接口的带宽占用率 带宽不等 这种情况下,两条线路的有效带宽值没有任何规律可循,它们各自的带宽占用率也没有任何规律;所以很难找出一个指标来衡量整个网络的繁忙程度。如果再加上线路的ISP差异,情况将更加复杂。如果一定要给网络的繁忙程度下个定义,可以在实际运行中观察一下,那个接口的带宽占用更高,可以一次来作为整体网络繁忙的判断依据。 综上所述,不管怎样,在多线路情况下,GBSC都很难精确的定义其带宽占用率。
五. GBSC行为管理
所谓行为管理,实际就是GBSC对网络中常见应用程序的控制,常见的有:QQ、MSN、P2P、DDoS等。
1. 行为管理控制-QQ
众所周知,QQ的通讯端口有多个/多种,且会员和非会员有很大的差异,再加上代理等功能的引入,导致无法通过TCP/UDP端口对其进行管理控制,因此GBSC功能模块中采用两种方式来屏蔽QQ:◎穷举QQ的服务器地址◎识别QQ报文的应用层特征字段,整体效果非常的好。
2. 行为管理控制-MSN
MSN是也是一种即时通信软件,跟QQ很类似,不过其实现就简单的多,所以GBSC只要穷举其服务器IP地址就可以了。 这里需要提醒注意:QQ和MSN的ip地址信息是单独存放在一个数据库文件中的,存放在路由器的Flash,配置GBSC不用手工去罗列了。
3. 行为管理控制-P2P
P2P是一类应用的统称,类似的有BT下载、eMule电驴、迅雷等等,他们都具有多线程连接的特性,以此来实现高速率下载或强行下载一些“死链”的功能。 GBSC可以抑制P2P应用,其原理就是设置一个上限并发IP连接数上限。路由器查询每个ip地址对应的ip cache或ip fastswitch cache,如果超过预定的上限值,则对该IP不再提供ip转发服务。通常gbsc每2秒检查一次,默认的阀值为40条
4. 行为管理控制-DDOS
跟P2P不同,DDoS虽然同为大流量,但其目的是为了***路由器或者网络。且多数情况,其目的地址为广播或者路由器本身。常见的报文有ICMP、TCP、UDP、ARP等等 在抑制DDoS***时,GBSC也是分类统计的,原理很简单,就是判断每个用户发送的ICMP、TCP、UDP报文是否超过预设的阀值(需要自定义),超过的话,就禁止该用户(丢弃其报文) 提醒注意:目前对ARP报文的flood控制还在开发中。 且在使用P2P和DDoS防护功能时,需要特别注意,有些时候,某些用户并不是而已***,只是瞬间流量超标,也可能会被误认为是***事件而被屏蔽。 这就对Anti DDoS的阀值设置提出了一个明确的要求。实际上不同规模的网络、不同性质的网络,由于其流量不同,导致其阀值很难被总结出来。一般的做法是,先设定一个适中的参考值,然后根据用户的反应上下微调。
六. GBSC配置
命令配置
1. 静态分配方案
gbsc enable //使能开关

gbsc set-isp-bw <upload-bw> <download-bw> //指定总的有效带宽

gbsc set-interval <time-interval> //设置令牌的发放速度,默认为200ms,一般不建议修改

gbsc set-burst <secs> //开启流量的突发因子功能,默认9s,一般不建议修改

gbsc group <group-name> //根据需要设定若干GBSC组

range <start-ip> <end-ip> //地址范围

set-band upload <assure-rate> <cerl-rate>

set-band download <assure-rate> <cerl-rate> //assure

即前面所说的RL,cerl即前面所说的RL2。

gbsc group default //默认存在,不可删除,没有被其他组匹配的用户都将按照它的策略来执行

注意:要让GBSC生效,不仅要设置gbsc enable,还隐含要求在ip nat inside端口上生效
2. 动态分配方案
gbsc enable //使能开关

gbsc set-isp-bw <upload-bw> <download-bw> //指定总的有效带宽

gbsc set-interval <time-interval> //设置令牌的发放速度

gbsc set-burst <secs> //开启流量的突发因子功能

gbsc band-dynamic //启用动态带宽分配功能

注意:开启带宽动态分配之后,就无法对用户进行分组控制了,但对于上网行为管理,仍然可以分组控制
3. 上网行为管理
gbsc enable //使能开关
gbsc set-syn-threshold <nums> //配合anti dos功能的,用于判断是否tcp ddos的阀值

gbsc set-udp-threshold <nums> //配合anti dos功能的,用于判断是否udp ddos的阀值

gbsc set-icmp-threshold <nums> //配合anti dos功能的,用于判断是否icmp ddos的阀值

gbsc set-punish-time <time> //配合anti dos功能的,判定ddos***之后,该用户将自动被屏蔽的时间段

gbsc unpunish <host-ip> //配合anti dos功能的,如果某用户被屏蔽,可以使用该指令将其解封

gbsc group <group-name> //设置不同的组,对应不同的上网行为管理管理

range <start-ip> <end-ip> //地址范围 anti {OICQ | MSN | P2P | DoS} //管理控制QQ/MSN/P2P/DDOS

gbsc group default
4. 大流量抑制
gbsc limitenable //开启大流量抑制功能

gbsc limittime <time> //如果判定是大流量,将用户将被抑制的时间长度

gbsc limitpercent <percent> //在被抑制时,其可用带宽是原定值的n%]

注意:在原有速率限制的基础上(无论哪种方式),都可以进行大流量抑制
5. 黑白名单
网络中总是有些主机是非常特殊的,它们可以通过黑白名单来定义:

gbsc add-to-whitelist <host-ip> //添加白名单的IP地址范围

gbsc add-to-blacklist <host-ip> //添加黑名单的IP地址范围
6. GBSC监控
常用的监控指令有如下几个,大家应当通过实验加深了解:

show ip gbsc stat //带宽分配统计信息

show ip gbsc flow //带宽分配的流

show ip gbsc punish //受惩罚主机信息

show ip gbsc group //显示GBSC组配置