流量限速之GBSC

流量限速之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組配置

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章