ECHOKe算法[4]:在M_CHOKe的基礎上加大了對非適應流的懲罰力度,將m個分組中與到達分組的流標識匹配,若匹配,將所有匹配分組及到達分組都丟棄;若匹配不成功,將m個分組中的流標識相同者最大者(大於1)的一個分組丟棄。
S_CHOKe算法[5]:按間隔時間T對到達的分組進行采樣,將采樣分組的流標識放入采樣列表,對每一個到達的分組,先從采樣列表中隨機抽取一個流標識進行比較,若相同,則認為是采樣擊中,然後再與路由器隊列中m個分組相比較,若再次一樣,則稱為隊列擊中,刪除擊中分組。S_CHOKe算法以采樣擊中來代替提高擊中概率。
對上麵的算法進一步分析,發現存在以下的不足。
⑴ B_CHOKe算法采用隻比較一次,當網絡中流較多時,公平性與懲罰力度都會下降。
⑵ M_CHOKe算法與A_CHOKe算法通過增加比較的次數,提高了擊中概率,在擊中精度方麵仍存在問題。同時也隻是丟棄一個分組,懲罰力度也不夠大;另外,m個分組是從整個隊列中隨機抽出,沒能充分體現網絡數據包的突發性,同時也沒有充分地利用抽出的m個分組的統計信息來進一步加大對非適應流的識別精度。
⑶ ECHOKe將m個分組中擊中的所有分組全部丟棄,在增加了非適應流分組丟棄概率的同時,也增加了適應流的丟棄量。而適應流具有源端響應機製,一旦發現丟包,就會降低發送速率,從而更加不利於公平。因此,ECHOKe的懲罰精度不理想[6]。
⑷ S_CHOKe算法單獨設置的采樣隊列中存放的是到來分組的流ID的采樣,反映的不是路由器輸出隊列的統計特性,按照采樣擊中而進行的丟棄,也就不能體現路出器輸出的公平性,同時單獨設置的采樣隊列也占用了路由器的內存。
2 改進的CHOKe算法
針對現有CHOKe的不足,我們提出一種基於抽樣統計的改進方案——N_CHOKe。
N_CHOKe算法的基本思想:路由器FIFO的平均隊列長度計算與RED相同,維持最小門限minth和最大門限maxth兩個閾值。當平均隊列長度小於minth時,新到達分組直接進入到FIFO隊列中;當平均隊列長度大於maxth時,丟棄新到分組;當平均隊列長度在minth與maxth之間時,從現FIFO隊列中的minth處到當前實際隊列結尾處這一段按照一定的間隔抽樣出m個分組,並統計出這個m個分組所屬的流k,以及這k個流包含的分組數。
將新到分組與k個流進行比較,比較結果如下。
⑴如果擊中,且被擊中的流的分組數大於等於[m/k]時,丟棄新到分組,並丟棄被擊中流中的一個分組;其餘分組返回隊列。這樣做的目的是既要提高對高速非適應流的識別精度,也要在一定程度上加大對非適應流的懲罰力度。如果被擊中流的分組沒有超過[m/k],則到達分組按照RED計算丟棄概率,並進行相應的處理。
⑵如果沒有擊中,新到達分組按照RED計算丟棄概率,並進行相應的處理;且查看k個流的分組長度,如果k個流中有分組數量大於或等於2倍[m/k],丟棄此流的最後的一個分組。
與以往的其他CHOKe算法相比,N_CHOKe算法主要引入了以下三點措施。
⑴抽樣分組的區間的改變。抽樣分組將從隊列的minth處到隊列結尾(緩存區滿)之間抽取,將此區間分成K個小區間,當前平均隊列長度位於區間i時,m=2i。m個分組從minth處到當前隊列長度處抽樣得到,這樣可以更好地反映網絡數據的實時特性。
⑵通過統計抽樣出的m個分組所屬流,以及每個流所有的分組個數,充分地利用抽樣分組的統計特性,隻有擊中的流的分組數目大於等於平均數時,才認為本次擊中是有效的,即是擊中了非適應流,這樣加大擊中非適應流的準確性,減少誤擊中適應流的比率。