本發(fā)明涉及通信,具體涉及一種網絡數據包去重排序系統。
背景技術:
1、廣域網優(yōu)化(wan?optimization)是通過一些優(yōu)化技術來提供高性能的遠程數據訪問,從而提高應用程序在廣域網上的性能的優(yōu)化方案。當今互聯網提供的盡力而為的服務模式,使數據包在有損網絡上傳輸時,會遇到丟包、網絡擁塞等問題,嚴重影響應用程序性能與用戶體驗。對此,許多企業(yè)采用廣域網優(yōu)化的技術,利用冗余傳輸、多路徑傳輸等手段,降低丟包率、提高數據傳輸吞吐。冗余傳輸指發(fā)送端將數據包復制多份后發(fā)送給接收端。多路徑傳輸指數據包從發(fā)送端可經由不同的路徑到達接收端。但冗余傳輸、多路徑傳輸會在接收端造成數據包的重復、亂序,不利于應用程序的處理,所以需要數據包去重排序系統恢復出順序、無重復的原始流量。
2、因高性能、低延時的特點,fpga成為越來越流行的網絡流量處理平臺?,F場可編程邏輯門陣列(fpga,field?programmable?gate?array)是在pal、gal、cpld等可編程邏輯器件為技術基礎發(fā)展而成的一種半定制電路,能夠按照寄存器傳輸級(rtl,register-transfer?level)語言的描述,實現器件的可編程功能?;趂pga器件的智能網卡,往往會將大規(guī)模會話表、緩存區(qū)、緩存的數據包等數據存儲于fpga片外的ddr或片上的bram中。
3、當下在fpga智能網卡上實現的數據流量去重排序功能模塊,現有方法有較大缺陷:
4、方法一、使用鏈表將報文按順序依次插入,進行排序組裝。但該方法在需要自鏈表頭開始依次遍歷緩存的數據包,在去重排序緩存區(qū)增大、亂序程度增加的場景中,計算資源消耗大。且離散的鏈表節(jié)點地址也降低了存儲的訪存效率。
5、方法二、使用數組或內存區(qū)域,將報文存入對應偏移位置,進行排序組裝。但該方法的緩存區(qū)大小固定,緩存區(qū)與會話一一對應,在會話增多、緩存區(qū)深度增大的情形下需要預留較大資源。
6、除此以外,在超時排出時(由數據包丟失造成的緩存區(qū)空洞),現有方法會排空整個緩存區(qū),造成未超時包也被排出。
7、公布號為cn107454276b、名稱為《一種用戶終端設備及其數據轉發(fā)方法、及通信系統》的中國發(fā)明提出了一種數據包排序方法。該方法維護數據包編號預期值;當到來的數據包與預期值匹配時,發(fā)送數據包,并檢查緩存隊列的數據包是否是預期值,如果是則繼續(xù)排出;當到來的數據包與預期值不匹配時,將數據包按順序存入緩存隊列,激活計時器;當計時器到點時,將緩存隊列內的所有數據包發(fā)送出去。該方法當亂序包到來后,需開辟一整個緩存隊列,在會話數增加、排序緩存區(qū)深度需求較高的情形下,對存儲空間的占用較大。且該方法在緩存區(qū)超時時,排空緩存區(qū)內的所有包,會導致緩存區(qū)內未超時的數據包一并排出,沒有給可能到來的亂序包足夠的等待時間,降低了重排數據流的機會。
8、公布號為us7477644b2、名稱為《method?and?system?of?efficient?packetreordering》的美國專利,提出了一種數據包排序方法。該方法將使用多個鏈表頭來管理多個亂序區(qū)間的數據包,當數據包到達后,首先檢測是否可并入任何一個亂序區(qū)間,假如可并入則接入鏈表并排序,假如不能并入則創(chuàng)建一個新的鏈表頭以開啟此排序區(qū)間。該方法的鏈表雖然不用遍歷鏈表內部,但需要遍歷多個鏈表頭的首尾區(qū)間,必要時還需要合并或排序,計算壓力較大。而且每個會話的最大鏈表頭數目決定了該會話的去重排序能力,較適用于區(qū)間連續(xù)型的亂序模式,亂序重排的方法不具備一般性,在分散亂序的情形下性能較差。
9、前述方法在實現的網絡流量亂序重排功能時,存在較大的漏洞和不足,限制了fpga上去重排序模塊的性能與排序能力的進一步提高。
技術實現思路
1、本發(fā)明的目的在于克服現有技術缺陷,提出了一種網絡數據包去重排序系統。
2、為了實現上述目的,本發(fā)明提出了一種網絡數據包去重排序系統,所述系統包括:
3、數據包處理模塊,用于接收數據包,根據數據包編號計算落入的子緩存區(qū)編號,獲得對應會話表項的期待數據包編號,將數據包編號與期待數據包編號進行比較,當比較結果為順序包,則發(fā)送,當比較結果為亂序包,則緩存至對應的子緩存區(qū),并在子緩存區(qū)無效時向子緩存區(qū)資源池管理模塊動態(tài)申請,并創(chuàng)建超時事件;
4、超時處理模塊,用于根據收到的超時事件,讀取對應會話表項,對超時事件進行校驗,校驗通過后,將子緩存區(qū)內滿足條件的數據包排出,根據超時事件的子緩存區(qū)內后續(xù)數據包的到達時間戳,確定超時排出的停止位置并創(chuàng)建新的超時事件;和
5、子緩存區(qū)資源池管理模塊,用于動態(tài)申請和釋放子緩存區(qū)。
6、優(yōu)選的,所述落入的子緩存區(qū)編號pn_subbuffer_id的計算公式為:
7、pn_subbuffer_id=(pkt_pn/subbuffer_pkt_depth)%session_subbuffer_count
8、其中,pkt_pn為數據包編號subbuffer_pkt_depth為子緩存區(qū)的數據包緩存深度,session_subbuffer_count為會話的子緩存區(qū)總數,/表示取整,%表示取模。
9、優(yōu)選的,所述會話表項用于存儲會話標識、期待數據包編號,子緩存區(qū)的地址數組,及各子緩存區(qū)已存儲的數據包描述符個數、超時校驗位和有效位。
10、優(yōu)選的,所述將數據包編號與期待數據包編號進行比較,當比較結果為順序包,則發(fā)送,當比較結果為亂序包,則緩存至對應的子緩存區(qū);包括:
11、當數據包編號等于期待數據包編號,為順序包,發(fā)送該數據包,并將對應子緩存區(qū)中數據包編號開始的連續(xù)有效的數據包輸出;
12、當數據包編號大于期待數據包編號且在系統緩存能力內,為亂序包,根據計算得到的落入子緩存區(qū)編號,如果子緩存區(qū)的對應位置已有包或子緩存區(qū)已滿,則亂序包為重復包,直接丟棄;否則緩存至子緩存區(qū)的特定偏移位置。
13、優(yōu)選的,所述子緩存區(qū)無效為:會話表項中所述子緩存區(qū)的有效位為0。
14、優(yōu)選的,所述超時事件包括:會話表項地址、超時子緩存區(qū)編號、超時子緩存區(qū)數據包偏移和超時校驗位。
15、優(yōu)選的,所述對超時事件進行校驗,包括:
16、如果超時事件的超時校驗位與會話表項中超時子緩存區(qū)的超時校驗位不一致,或會話表項中超時子緩存區(qū)的有效位為0,則超時事件校驗不通過,否則校驗通過。
17、優(yōu)選的,所述校驗通過后,將子緩存區(qū)內滿足條件的數據包排出;包括:
18、將子緩存區(qū)內超時事件的數據包編號前的所有數據包、超時事件的數據包以及超時事件的數據包編號后的連續(xù)有效數據包排出。
19、優(yōu)選的,所述根據超時事件的子緩存區(qū)內后續(xù)數據包的到達時間戳,確定超時排出的停止位置,并創(chuàng)建新的超時事件;包括:
20、根據超時事件的子緩存區(qū)內未超時數據包的到達時間戳,得到距設置的超時時間的剩余時間,作為新的超時事件的超時時間;
21、將未超時數據包在子緩存區(qū)的偏移作為新的超時事件的數據包偏移;
22、將會話表項的期待數據包編號更新為:未超時數據包之前緩存區(qū)空洞的起始位置對應的數據包編號。
23、優(yōu)選的,所述子緩存區(qū)資源池管理模塊的處理過程包括:
24、在數據包處理模塊或超時處理模塊申請子緩存區(qū)時,從子緩存區(qū)地址池中分配一個子緩存區(qū)地址;
25、在數據包處理模塊或超時處理模塊釋放子緩存區(qū)時,清空子緩存區(qū),回收子緩存區(qū)地址至子緩存區(qū)地址池。
26、與現有技術相比,本發(fā)明的優(yōu)勢在于:
27、1、本發(fā)明中的去重排序緩存區(qū)由若干個子緩存區(qū)組成,會話表項存有子緩存區(qū)地址數組,子緩存區(qū)空間資源動態(tài)申請釋放,空間利用效率高,支持大規(guī)模會話的大深度去重排序緩存區(qū)的構建;
28、2、本發(fā)明中根據數據包編號、會話子緩存區(qū)個數與子緩存區(qū)深度,可快速定位該數據包描述符在某個子緩存區(qū)的特定偏移位置,排序性能較高。
29、3、本發(fā)明中緩存區(qū)數據包超時排出時,會根據緩存數據包的到達時間戳來確定排出停止的位置、創(chuàng)建新的超時事件,僅排出超時的數據包,未超時的數據包可繼續(xù)在緩存區(qū)中等待亂序重排,增加了重排數據流的機會。