便于理解和說明本發(fā)明的限速精度問題,下面同樣以接收報文的長度值Current Length為100字節(jié),尾數(shù)掩碼值Tail Mask為Oxf,報文長度移位值Shift Right為4,報文尾數(shù)Update TailVal為4為例來對限速精度的問題進行說明:由于報文尾數(shù)Update TailVal為4,該報文尾數(shù)應該是需要消耗4字節(jié)的令牌,因此當不對該報文尾數(shù)進行處理時,發(fā)送100字節(jié)的報文,其實際消耗了96字節(jié)的令牌,從而出現(xiàn)實際流量大于限速流量的情況;當限速結果不滿足預置限速條件時,將報文進行丟棄處理時,該報文尾數(shù)是不能消耗令牌的,如果繼續(xù)將該報文尾數(shù)保存寫回給下一個報文使用,將會出現(xiàn)實際流量小于限速流量的情況。本發(fā)明能夠有效解決上述兩種情況,從而提高了限速精度。
[0064]本實施例提出的基于令牌桶的流量監(jiān)管方法,首先獲取當前接收報文的長度值和限速參數(shù)索引,并將獲取到的當前接收報文的長度值加上前一個接收報文的長度值的尾數(shù),得到新的報文長度值;然后根據(jù)得到的新的報文長度值,按照預置計算規(guī)則,獲得新的報文尾數(shù)以及當前需要限速的實際報文長度值;接著,根據(jù)當前需要限速的實際報文長度值及之前獲取的限速參數(shù)索引,獲得限速結果;最后,當獲得的限速結果滿足預置限速條件時,將當前接收報文進行轉發(fā)處理,并將新的報文尾數(shù)作為當前接收報文的長度值的尾數(shù);當限速結果不滿足預置限速條件時,將當前接收報文進行丟棄處理,并將前一個接收報文的長度值的尾數(shù)作為當前接收報文的長度值的尾數(shù)。本發(fā)明提高了限速精度。
[0065]圖3是本發(fā)明基于令牌桶的流量監(jiān)管方法另一實施例的流程示意圖。
[0066]參照圖3,本實施例基于令牌桶的流量監(jiān)管方法在圖2的基礎上,在步驟S02之前,還包括:
[0067]步驟SOll:獲取前一個接收報文的長度值的尾數(shù);
[0068]具體地,本實施例是從特定的存儲空間A中讀取前一個接收報文的長度值的尾數(shù)Pr1r TailVal,本實施例中,前一個接收報文的長度值的尾數(shù)的值為O。
[0069]進一步地,本實施例在步驟S03之前還包括:
[0070]步驟S021:獲取令牌桶桶深參數(shù),令牌桶桶深參數(shù)包括尾數(shù)掩碼值和報文長度移位值;
[0071]具體地,本實施例是從特定的存儲空間B中讀取令牌桶桶深參數(shù),其中令牌桶桶深參數(shù)包括尾數(shù)掩碼值Tail Mask和報文長度移位值Shift Right。本實施例中,由于尾數(shù)掩碼值Tail Mask的配置值為Oxf,報文長度移位值Shift Right的配置值為4,因此,本實施例步驟S021所獲取到的尾數(shù)掩碼值TaiI Mask為Oxf,所獲取到的報文長度移位值ShiftRight 為 4。
[0072]本實施例提出的基于令牌桶的流量監(jiān)管方法,首先獲取當前接收報文的長度值、限速參數(shù)索引、前一個接收報文的長度值的尾數(shù)以及令牌桶桶深參數(shù)(包括尾數(shù)掩碼值和報文長度移位值),將獲取到的當前接收報文的長度值加上前一個接收報文的長度值的尾數(shù),得到新的報文長度值;然后將得到的新的報文長度值和尾數(shù)掩碼值做與運算,獲得新的報文尾數(shù),以及按照報文長度移位值,對得到的新的報文長度值做右移運算,獲得當前需要限速的實際報文長度值;接著,根據(jù)當前需要限速的實際報文長度值及之前獲取的限速參數(shù)索引,獲得限速結果;最后,當獲得的限速結果滿足預置限速條件時,將當前接收報文進行轉發(fā)處理,并將新的報文尾數(shù)作為當前接收報文的長度值的尾數(shù);當限速結果不滿足預置限速條件時,將當前接收報文進行丟棄處理,并將前一個接收報文的長度值的尾數(shù)作為當前接收報文的長度值的尾數(shù)。本發(fā)明提高了限速精度。
[0073]本發(fā)明還提出一種基于令牌桶的流量監(jiān)管裝置,圖3是本發(fā)明基于令牌桶的流量監(jiān)管裝置一實施例的模塊結構原理圖。
[0074]參照圖3,本實施例中的基于令牌桶的流量監(jiān)管200包括接收模塊201、采集模塊202、計算模塊203、限速模塊204、決策模塊205及發(fā)送模塊206,其中:
[0075]接收模塊201,用于接收以太網報文;
[0076]具體地,本發(fā)明實施例中,接收模塊201當次所接收到的以太網報文稱為當前接收報文,初始狀態(tài)時,接收模塊201接收到的當前接收報文指的是第I個以太網報文。
[0077]存儲模塊2021,用于存儲前一個接收報文的長度值的尾數(shù)以及令牌桶桶深參數(shù),其中令牌桶桶深參數(shù)包括尾數(shù)掩碼值Tail Mask和報文長度移位值Shift Right。
[0078]采集模塊202,用于獲取當前接收報文的長度值和限速參數(shù)索引;
[0079]具體地,本實施例中,在接收模塊201接收到當前接收報文后,采集模塊202獲取當前接收報文的長度值Current Length和限速參數(shù)索引Policing Index。其中限速參數(shù)索引Policing Index包括承諾信息速率CIR、超額信息速率EIR、承諾突發(fā)長度CBS、超額突發(fā)長度EBS、顏色敏感模式、限速算法等。本實施例中,當前接收報文的長度值Current Length的配置值為100字節(jié),限速參數(shù)索引Policing Index的配置值為0,即本實施例中,采集模塊202所獲取到得當前接收報文的長度值Current Length為100,限速參數(shù)索引為O。
[0080]本實施例中,采集模塊202還用于獲取前一個接收報文的長度值的尾數(shù)Pr1rTailVal,以及獲取令牌桶桶深參數(shù),令牌桶桶深參數(shù)包括尾數(shù)掩碼值Tail Mask和報文長度移位值Shift Right。
[0081 ] 具體地,采集模塊202從存儲模塊2021的特定存儲空間A中讀取前一個接收報文的長度值的尾數(shù)Pr1r TailVal,從存儲模塊2021的特定存儲空間B中讀取令牌桶桶深參數(shù)(尾數(shù)掩碼值Tail Mask和報文長度移位值Shift Right),本實施例中,前一個接收報文的長度值的尾數(shù)Pr1r TailVal為0,尾數(shù)掩碼值Tail Mask為Oxf (十六進制),報文長度移位值Shift Right為4。
[0082]本實施例中,存儲模塊2021設于采集模塊202內。
[0083]計算模塊203,將獲取到的當前接收報文的長度值加上前一個接收報文的長度值的尾數(shù),得到新的報文長度值;以及根據(jù)所述新的報文長度值,按照預置計算規(guī)則,獲得新的報文尾數(shù)以及當前需要限速的實際報文長度值。
[0084]具體地,當采集模塊202獲取到當前接收報文的長度值Current Length (100)后,計算模塊203將獲取到的當前接收報文的長度值Current Length (100)加上前一個接收報文的長度值的尾數(shù)Pr1r TailVal (0),得到一個新的報文長度值Update Length,即本實施例所得到的新的報文長度值Update Length=100+0=100。并且,本實施例中,計算模塊203還將新的報文長度值Update Length (100+0)和采集模塊202所獲取到的尾數(shù)掩碼值Tail Mask (Oxf)做與運算,獲得新的報文尾數(shù)Update TailVal ;同時,計算模塊203按照采集模塊202所獲取到的報文長度移位值Shift Right,對新的報文長度值Update Length做右移運算,獲得當前需要限速的實際報文長度值Policing Length。本實施例中,由于新的報文長度值Update Length為100,尾數(shù)掩碼值Tail Mask為Oxf,因此,本實施例中,新的報文尾數(shù)Update TailVal等于新的報文長度值Update Length (100)和尾數(shù)掩碼值TailMask (Oxf)的與運算結果,得到新的報文尾數(shù)Update TailVal等于4。由于報文長度移位值Shift RightVal為4,新的報文長度值Update Length為100,因此本實施例中,當前需要限速的實際報文長度值Policing Length等于新的報文長度值Update Length (10