国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

利用區(qū)間管理算法實現(xiàn)的TCP流重組技術(shù)*

2022-03-01 08:27:46俞祥基蒲俊良張隆春陳巧靈
通信技術(shù) 2022年12期
關(guān)鍵詞:分片報文數(shù)據(jù)包

俞祥基,蒲俊良,周 川,張隆春,唐 林,陳巧靈

(成都深思科技有限公司,四川 成都 610095)

0 引言

近年來,隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,網(wǎng)絡(luò)數(shù)據(jù)安全也愈加被人們所重視,許多行業(yè)領(lǐng)域都需要對網(wǎng)關(guān)出口的流量數(shù)據(jù)進行嗅探捕獲,并針對其進行流量審計,從而確保數(shù)據(jù)安全。在審計過程中,都會采用傳輸控制協(xié)議(Transport Control Protocol,TCP)流重組技術(shù),只有將TCP流數(shù)據(jù)報文重組以后,才能還原完整的TCP會話,從而獲取TCP傳輸?shù)恼鎸崈?nèi)容,用于流量審計。當在網(wǎng)絡(luò)中使用TCP協(xié)議進行數(shù)據(jù)傳輸時,需要將完整的數(shù)據(jù)內(nèi)容拆分成多個數(shù)據(jù)報文進行傳輸。由于網(wǎng)絡(luò)環(huán)境的復(fù)雜性較高,比如網(wǎng)絡(luò)設(shè)備參差不齊、信號傳輸過程存在衰減和干擾等,經(jīng)常會導(dǎo)致TCP數(shù)據(jù)報文亂序或丟包重傳等,因此嗅探重組TCP流就需要考慮TCP數(shù)據(jù)報文的亂序、重疊、丟包、重傳等許多復(fù)雜情況。而現(xiàn)有的TCP流重組技術(shù)大都存在效率低下、重組不完整、程序內(nèi)存占用過高等問題。

本文針對上述情況,研究了TCP流重組技術(shù),旨在提供一種穩(wěn)定且準確、高效且快速的TCP流重組技術(shù),為后續(xù)的網(wǎng)絡(luò)數(shù)據(jù)安全審計提供有力的技術(shù)支撐。該技術(shù)具有一定的工程應(yīng)用價值。

1 分片重組技術(shù)研究現(xiàn)狀

TCP是目前Internet中廣泛采用的一種傳輸協(xié)議,是一種面向連接的、可靠的、基于字節(jié)流的通信協(xié)議,它為各個主機之間提供可靠、按序傳輸、端到端的數(shù)據(jù)包傳輸服務(wù)。TCP協(xié)議發(fā)出的每一個數(shù)據(jù)包都要求確認,其中如果有一個數(shù)據(jù)包丟失就收不到確認,發(fā)送方就必須重發(fā)這個數(shù)據(jù)包。為了保證傳輸?shù)目煽啃?,TCP協(xié)議建立了3次對話的確認機制,即必須先與對方建立可靠連接才能正式發(fā)送數(shù)據(jù)。TCP的數(shù)據(jù)包沒有長度限制,理論上可以無限長,但為了保證網(wǎng)絡(luò)效率,通常都會將TCP數(shù)據(jù)包依照TCP/IP模型中傳輸數(shù)據(jù)時所能使用的最大傳輸單元(Maximum Transmission Unit,MTU)進行分片,以太網(wǎng)的MTU默認是1 500,即一個TCP數(shù)據(jù)報文默認長度均為1 500。由于TCP協(xié)議具有重發(fā)與分片特點,結(jié)合網(wǎng)絡(luò)空間的延時、信號衰減等實際情況,導(dǎo)致現(xiàn)有TCP流分片重組技術(shù)實際的局限性。

早期的分片重組技術(shù)主要通過高性能的硬件堆高計算性能,從而實現(xiàn)高速的TCP流重組,但在目前網(wǎng)絡(luò)流量呈指數(shù)級增長的情況下,再通過獨立的高性能硬件達到TCP重組性能要求,成本實在過于高昂且低效。目前主流的分片重組技術(shù)研究,大多是考慮硬件與軟件相結(jié)合,以及提高軟件算法在TCP流重組技術(shù)中的占比,主要應(yīng)用在為CPU減負、流量重組、提高重組效率等場景。

2012年,王文豪[1]等人提出了一種基于現(xiàn)場可編程邏輯陣列(Field Programmable Gate Array,F(xiàn)PGA)的IP分片重組技術(shù),目標是減輕CPU負擔,提高重組效率。文中采用中央地址存儲器(Central Address Memory,CAM)來設(shè)計和擔當IP分片重組的信息識別核心模塊,并追加片外大容量隨機動態(tài)存儲器來實現(xiàn)IP分片的數(shù)據(jù)緩存,最終實現(xiàn)IP分片報文的快速識別及有效重組。該技術(shù)可以應(yīng)用于亂序、重復(fù)等異常場景,其處理數(shù)據(jù)的效率為1 Gbit/s以上。使用CAM作為運算核心,雖然具有查找速度快的優(yōu)點,但是其硬件資源消耗很高,無法持續(xù)支撐大數(shù)量的IP分片信息存儲、查詢等,在持續(xù)運行大數(shù)量IP分片重組時,會導(dǎo)致系統(tǒng)的資源緊張,進而影響處理能力,造成IP分片重組失敗,甚至系統(tǒng)崩潰。

2014年,竇衍旭[2]提出了一種基于哈希表對高速網(wǎng)絡(luò)中的IP分片進行重組的技術(shù),主要用于高速網(wǎng)絡(luò)中的流量嗅探還原。該文中先將由源IP地址、源端口、目的IP地址、目的端口組成的4元組作為關(guān)鍵字構(gòu)建了具有高速查詢效率的哈希表,并通過TCP超時檢測機制提升了哈希表查詢的穩(wěn)定性及效率性,實現(xiàn)了IP分片的快速查詢管理,再進行具體的流重組操作,最終實現(xiàn)了1 Gbit/s流量下的IP分片重組。然而,由于沒有對網(wǎng)絡(luò)環(huán)境中存在的丟包重發(fā)情況進行深入研究處理,其重組的準確率受到嚴重影響,只有68%。

2016年,劉賢熜[3]采用了一種MapReduce編程模式的并行結(jié)構(gòu)對流量進行分析和統(tǒng)計,對TCP報文按照關(guān)鍵4元組信息完成輔助排序與分類,再基于Hadoop進行數(shù)據(jù)報文的大量并行處理。該文中利用滑動窗口來尋找相鄰兩個數(shù)據(jù)包的時間戳,實現(xiàn)數(shù)據(jù)報文的定位及分割;利用分布式設(shè)備不受單機設(shè)備計算瓶頸影響的特點,實現(xiàn)TCP數(shù)據(jù)包的高效重組。

2016年,許青林[4]通過基于三維立體空間的重組算法優(yōu)化重組流程,引入多級雙循環(huán)緩沖隊列提高重組效率,并利用自適應(yīng)動態(tài)哈希內(nèi)存池進行緩存映射,去除數(shù)據(jù)報文在排序重組過程中的多次拷貝轉(zhuǎn)移過程,最終實現(xiàn)了900 Mbit/s流量的TCP報文重組。

2018年,趙勇[5]提出了結(jié)合Hash表的分段管理與伸展樹算法的TCP流排序重組算法。該文優(yōu)化了分片排序重組過程中5元組的快速查找性能,并結(jié)合TCP狀態(tài)機的約簡策略,迅速地將數(shù)據(jù)報文的重組速率提升到了2 Gbit/s,但其在面對并發(fā)數(shù)量多、分片數(shù)量多的場景時,性能快速下降。利用TCP狀態(tài)機的研究還有2019年由程子帥[6]提出的并行TCP雙向數(shù)據(jù)流重組技術(shù),其通過優(yōu)化TCP狀態(tài)機生成TCP的值,適用于數(shù)據(jù)報文亂序、重發(fā)等異常情況下的TCP報文重組。

2020年,黃銳[7]提出了一種基于FPGA實現(xiàn)的TCP亂序報文重組辦法,利用硬件實現(xiàn)底層TCP/IP協(xié)議棧,解放了CPU的計算性能,可以解決網(wǎng)絡(luò)中網(wǎng)絡(luò)堵塞或傳輸誤碼造成的數(shù)據(jù)報文丟失,多路由轉(zhuǎn)發(fā)導(dǎo)致的數(shù)據(jù)報文亂序等異常情況。文中充分利用硬件特點來記錄數(shù)據(jù)報文的偏移信息,在緩存中比較排序重組。該方法資源占用低且非常有效,但同樣受限于硬件特點,最大只能支持3個分段的數(shù)據(jù)并發(fā)重組,無法用于并發(fā)重組數(shù)量較多的場景。

綜上所述,目前主流的分片重組技術(shù)已經(jīng)較為成熟,但是其技術(shù)特性都不夠全面,無法滿足高速率、復(fù)雜場景下的高并發(fā)需求,因此TCP分片重組技術(shù)仍然具有一定的改進空間。

2 基于平衡樹算法拓展的區(qū)間管理算法

平衡樹(Balance Tree,BT)算法指的是在一棵樹中,其任意節(jié)點的子樹的高度差都小于或等于1。平衡樹由2-3樹改造而來,它的時間復(fù)雜度和空間復(fù)雜度都比2-3樹要低,并在實現(xiàn)對集合的并、交、差等系列操作時可以始終保持平衡,提升存儲空間的利用率。

2.1 現(xiàn)有拓展算法

2.1.1 二叉平衡搜索樹

二叉平衡樹,又稱為AVL樹,是符合平衡樹特征的一種特殊的二叉排序樹。它可以是空樹,當不是空樹時,每一個節(jié)點的左右兩子樹都是平衡二叉樹,且子樹高度之差的絕對值不超過1。

二叉排序樹支持快速地插入、刪除、查找操作,各個操作的完成時間都在O(logn)以內(nèi),O(logn)也稱為時間復(fù)雜度,其中,O是和樹的高度成正比的。但是,在頻繁的插入、查詢過程中,二叉排序樹不斷更新,可能會出現(xiàn)樹的高度遠大于logn的情況,導(dǎo)致樹退化成鏈表,時間復(fù)雜度也變成了O(n)。為了避免這種復(fù)雜度退化的問題,二叉平衡樹被提出。二叉平衡樹讓樹盡量保持左右平衡,提升插入、查找、刪除的效率,并引入節(jié)點平衡因子(Balance Factor,BF),使得左子樹的高度減去右子樹的高度的絕對值小于等于1。圖1給出了一個平衡的二叉平衡樹的示例。

圖1 二叉平衡樹

二叉平衡樹在插入或者刪除節(jié)點時,可能打破樹的平衡,而通過左旋與右旋兩種選擇操作,就可以使樹恢復(fù)平衡。例如插入一個新節(jié)點到根節(jié)點的左子樹的左子樹,導(dǎo)致根節(jié)點的平衡因子變成2,就可以進行右旋操作使樹恢復(fù)平衡,如圖2所示。

圖2 二叉平衡樹右旋

通過左、右兩種基本旋轉(zhuǎn)的互相組合,結(jié)合遞歸算法的思想,不斷重復(fù)進行左旋或右旋,最終即可盡量保持二叉平衡樹的平衡結(jié)構(gòu)[8]。

2.1.2 多路平衡搜索樹

從上文介紹的二叉平衡樹的內(nèi)容可以看出,二叉平衡樹每一個節(jié)點最多只能保存一個關(guān)鍵字和兩個子節(jié)點,在維護過程中還會進行大量的磁盤尋址和讀寫操作。為了在同一個節(jié)點內(nèi)能夠存儲更多的信息,減少磁盤尋址的次數(shù),增強數(shù)據(jù)的查詢性能,多路平衡搜索樹被提出。它突破了二叉平衡樹每個節(jié)點只能保存1個關(guān)鍵字和2個子節(jié)點的限制,并引出了如2-3樹、2-3-4樹、B樹等多種多路平衡搜索樹[9]。

B樹是多路平衡搜索樹中最為典型的一種,它的操作時間復(fù)雜度同為O(logn)。一棵B樹有以下性質(zhì):

(1)根節(jié)點中最多有m棵子樹,有x(0≤x≤m)棵子樹Pi(1≤i≤m)和m-1個關(guān)鍵字Ki(1≤i≤m);

(2)一個節(jié)點中的所有關(guān)鍵字Ki(1≤i≤m),滿足Ki<Ki+1,子樹Pi中的所有關(guān)鍵字都大于Ki-1,小于Ki;

(3)根節(jié)點至少有一個關(guān)鍵字及兩個子節(jié)點,除根結(jié)點外的所有非終端結(jié)點至少有m/2棵子樹;

(4)所有內(nèi)部節(jié)點至少有t個子節(jié)點,最多有2t個子節(jié)點,至少有t-1個關(guān)鍵字,最多有2t-1個關(guān)鍵字;

(5)所有的葉子節(jié)點都在同一層,子葉節(jié)點不包含任何信息。

圖3給出了一棵3階B樹的示例。

圖3 3階B樹

在B樹的實際操作中,對于葉節(jié)點已經(jīng)寫滿的情況,引入了分裂操作,它可以將該葉節(jié)點分裂,把中間的關(guān)鍵字升至父節(jié)點的正確位置,保證B樹的插入操作不會導(dǎo)致B樹不合法,如圖4所示。此外,刪除操作也引入了向上回溯來保證B樹對于結(jié)點的關(guān)鍵字數(shù)量的限制。

圖4 B樹插入分裂

2.2 拓展區(qū)間管理算法

多路平衡搜索樹的一個重要思想是擴展了二叉平衡樹1個節(jié)點只能保存1個關(guān)鍵字和2個子節(jié)點的概念。根據(jù)這個思想,本文嘗試將這個概念再次進行擴展,提出了區(qū)間管理算法。將TCP流報文中元素的動態(tài)集合,即報文分片,作為要保存的關(guān)鍵信息,在平衡樹基礎(chǔ)上進行擴展得到支持以區(qū)間為元素的動態(tài)集合的操作,其中每個節(jié)點的關(guān)鍵值是區(qū)間的左端點。通過建立這種特定的結(jié)構(gòu),使區(qū)間元素的查找和插入都可以在O(logn)的時間內(nèi)完成,該算法的具體流程如圖5所示。

圖5 區(qū)間管理算法

每一個節(jié)點代表一個報文,節(jié)點區(qū)間的左右值分別為報文的序列號(seq)和序列號+當前報文長度(len)-1,比如數(shù)據(jù)報文seq為1,len為100,此數(shù)據(jù)報文對應(yīng)的節(jié)點的區(qū)間為[1,100]。

區(qū)間管理算法和TCP協(xié)議自身的確認應(yīng)答機制(Acknowledge character,ACK)非常搭配。ACK包確認機制是對接收到的數(shù)據(jù)進行確認,在發(fā)送端一次性發(fā)送多個數(shù)據(jù)報文時,如201、301、401的數(shù)據(jù)報文,不必等到接收端的一一確認,只需要知道401的確認報文,即可認為201、301、401報文都接收到了。序列號包確認機制是當發(fā)送端一次性發(fā)生多個數(shù)據(jù)報文時,如201、301的數(shù)據(jù)報文,接收端的ACK暫未到來,若201數(shù)據(jù)報文的序列號加上當前報文長度等于301數(shù)據(jù)報文的序列號,則可以判斷301即為201后面連續(xù)的包。通過將ACK機制確認后的TCP分片報文直接作為區(qū)間管理算法節(jié)點中的保存數(shù)據(jù),可以大幅提升數(shù)據(jù)的查詢效率,尤其針對亂序、丟包等異常的TCP流分片。

3 利用區(qū)間管理算法實現(xiàn)TCP流重組

3.1 TCP流量采集與預(yù)處理

本文主要研究的是TCP流的重組技術(shù),但通過網(wǎng)絡(luò)出口直接嗅探到的流量報文是不能直接投入流重組系統(tǒng)中的。因此,需要從網(wǎng)絡(luò)出口盡量獲取高完整性、高可靠性的流量,快速準確地分離出其中的TCP流報文,并將需要重組的報文進行高效的篩選緩存,排除其中無效和重復(fù)的報文,再投入流重組系統(tǒng)中進行TCP流重組,最終輸出重組后完整的TCP報文。

3.1.1 TCP流采集

在網(wǎng)絡(luò)空間中,如流量分析、網(wǎng)絡(luò)狀態(tài)分析等很多功能都依賴于獲取的網(wǎng)絡(luò)基礎(chǔ)流量,因此網(wǎng)絡(luò)流量采集技術(shù)一直在不斷發(fā)展,從以前的基于偵聽網(wǎng)絡(luò)數(shù)據(jù)包的采集技術(shù)、基于網(wǎng)絡(luò)探針的流量采集技術(shù)、基于PF_ING框架的高性能數(shù)據(jù)包流量監(jiān)測及處理技術(shù),到近些年流行的基于數(shù)據(jù)平面開發(fā)套件(Data Plane Development Kit,DPDK)框架的高速流量采集技術(shù),高效獲取網(wǎng)絡(luò)空間流量不再是難以達到的目標。

基于偵聽網(wǎng)絡(luò)數(shù)據(jù)包的數(shù)據(jù)包采集技術(shù)[10]具體是通過將網(wǎng)卡模式設(shè)置為“混雜”模式,使得處于共享介質(zhì)網(wǎng)絡(luò)上的任何流經(jīng)該網(wǎng)卡的數(shù)據(jù)包都可以被偵聽到,但該模式難以保證偵聽數(shù)據(jù)的完整性。

基于網(wǎng)絡(luò)探針的流量采集技術(shù)利用了Ethernet總線結(jié)構(gòu)的思想,以IP為單位,將網(wǎng)絡(luò)監(jiān)聽程序安裝到待監(jiān)聽設(shè)備上,詳細記錄該設(shè)備的每一次的通信,再根據(jù)IP進行數(shù)據(jù)匯總統(tǒng)計,但此方法對流量統(tǒng)計的核心設(shè)備要求極高,需要有足夠的緩存空間和運算速度,不適用于本文場景。

基于PF_RING框架的高性能數(shù)據(jù)包流量監(jiān)測和處理技術(shù),其核心概念是通過直接內(nèi)存訪問(Direct Memory Access,DMA)將流經(jīng)網(wǎng)卡的網(wǎng)絡(luò)流量作為對象,直接映射進用戶空間,跳過繁瑣的網(wǎng)卡到內(nèi)核、內(nèi)核到用戶空間的方式,節(jié)約CPU處理時間及壓縮數(shù)據(jù)拷貝次數(shù)。PF_RING技術(shù)實現(xiàn)的新式SOCKET連接,可以直接實現(xiàn)應(yīng)用程序與PF_RING內(nèi)核的通信,即可以通過PF_RING句柄完成數(shù)據(jù)包的直接讀取,不存在對每個數(shù)據(jù)包的內(nèi)存分配釋放動作。但要實現(xiàn)最大性能的數(shù)據(jù)包抓取,PF_RING技術(shù)需要對網(wǎng)卡驅(qū)動進行定制化重寫,實現(xiàn)難度較大。

2022年由鄧金祥[11]提出的基于DPDK框架的高速流量采集技術(shù),通過DPDK平臺中的大頁內(nèi)存方式提高內(nèi)存訪問效率,并采用零拷貝技術(shù)降低了數(shù)據(jù)報文在處理過程中的流轉(zhuǎn)消耗,優(yōu)化了數(shù)據(jù)報文從內(nèi)核態(tài)到用戶態(tài)的處理流程帶來的大量性能消耗,實現(xiàn)了大流量場景下的流量還原及采集。本文通過該技術(shù)實現(xiàn)了高完整性、高可靠性的網(wǎng)絡(luò)流量采集,并為后續(xù)的TCP流重組過程預(yù)留足夠的性能資源。

3.1.2 TCP流量預(yù)處理

如圖6所示,對還原TCP流的前期預(yù)處理,本文首先采用了通信數(shù)據(jù)校驗中常用的循環(huán)冗余校驗碼(Cyclic Redundancy Check,CRC)[12]對數(shù)據(jù)報文進行快速校驗,排除其中的錯誤及重復(fù)報文;其次對分片數(shù)據(jù)幀進行內(nèi)容解析,快速排查ACK及序列號(Sequence Number,SEQ)的值,保留需要重組的數(shù)據(jù)幀分片,不需要重組的數(shù)據(jù)報文直接輸出至存儲單元;最后采用Hash索引算法對TCP數(shù)據(jù)報文的分片幀進行快速索引計算,并建立Hash列表,用于后續(xù)重組流程。

圖6 報文處理流程

CRC利用了除法及余數(shù)原理來進行傳輸錯誤偵測,其在數(shù)據(jù)發(fā)送前,對待發(fā)送數(shù)據(jù)n進行計算并得出一個冗余位k(校驗幀);然后將k添加到n后,形成新的待發(fā)送數(shù)據(jù)幀T;發(fā)送后接收方獲得數(shù)據(jù)幀T,采用相同的計算方式,對n進行計算,如果k相同則傳輸正確,反之則傳輸錯誤。CRC的檢錯能力十分出色,目前它發(fā)現(xiàn)錯誤的概率在99.99%以上,且其資源消耗小。常用的CRC計算多項式如表1所示。TCP數(shù)據(jù)報文中的校驗幀為4位,按照TCP/IP協(xié)議標準,本文可以確定使用的是CRC-32。

表1 常見CRC多項表達式

Hash索引算法是基于待查詢數(shù)據(jù)利用Hash函數(shù)計算出一個Hash值,并將其構(gòu)建為一個Hash列表,在需要數(shù)據(jù)查詢時,直接使用列表中的Hash值作為查詢地址進行查詢,實現(xiàn)了數(shù)據(jù)的快速讀寫操作。Hash函數(shù)又被稱為散列函數(shù),它通過某種確定性的算法將輸入按照算法轉(zhuǎn)變?yōu)檩敵觯嗤臄?shù)據(jù)輸入永遠可以得到相同的數(shù)據(jù)輸出,而即使極其細微的偏差也會導(dǎo)致輸出的不同。常見的Hash算法包括直接尋址法、除留余數(shù)法、位運算法、偽隨機數(shù)法等。

在Hash索引實現(xiàn)的過程中,由于輸入數(shù)據(jù)的值域特點不同,出現(xiàn)了Hash運算后Hash值相同的情況,即Hash沖突,這會使得不同的分片幀的存儲地址相同,從而出現(xiàn)存儲信息覆蓋、丟失等問題,最終導(dǎo)致數(shù)據(jù)報文無法按正確順序進行重組。解決Hash沖突的常用辦法有如下4種:

(1)鏈地址法:為每個Hash值建立一個單向鏈表,對于相同的Hash值,將其加入對應(yīng)的鏈表中。

(2)再Hash法:Hash函數(shù)的計算方式多樣,如果第1個計算方式得出的key值沖突,就輪換使用第2個計算方式,直到無Hash沖突產(chǎn)生。

(3)開發(fā)尋址法:當對應(yīng)的Hash值的存儲地址P產(chǎn)生沖突時,以P為基礎(chǔ),向上或者向下,找到一個未存儲數(shù)據(jù)的可用實際地址P1來進行數(shù)據(jù)存儲,若已存儲數(shù)據(jù)則跳過該地址。

(4)建立公共溢出區(qū):將整個Hash列表分為基礎(chǔ)表和溢出表兩部分,凡是和基礎(chǔ)表發(fā)生沖突的元素,都填入溢出表中。

3.2 TCP流重組流程設(shè)計

如圖1所示,TCP流重組設(shè)計實現(xiàn)了將分片數(shù)據(jù)幀重組為完整的原始TCP報文的功能,這是本課題研究的核心重點。該TCP流重組設(shè)計完成了分片數(shù)據(jù)幀的排序、緩存、重組等處理,詳細的重組流程如下文所述。

步驟1:接收TCP報文,按4元組計算session hash值,從緩存中取出session相關(guān)信息,如為空,則新建session相關(guān)結(jié)構(gòu)。

步驟2:判斷確認隊列是否為空,為空則將報文直接放進確認隊列、更新區(qū)間樹、記錄報文傳輸方向和next seq,返回步驟1;不為空,則執(zhí)行步驟3。

步驟3:根據(jù)4元組判斷報文傳輸方向,如與上一條報文方向一致,則執(zhí)行步驟5;不一致,則執(zhí)行步驟4。

步驟4:判斷當前報文ACK是否等于上一報文next seq,等于則表示兩報文為連續(xù)報文,將報文放入確認隊列,更新區(qū)間樹,并記錄報文傳輸方向和next seq,否則執(zhí)行步驟6。

步驟5:判斷當前報文seq是否等于上一報文next seq,等于則表示兩報文為連續(xù)報文,將當前報文放入確認隊列,更新區(qū)間樹,并記錄報文傳輸方向和next seq,否則執(zhí)行步驟6。

步驟6:計算當前報文的區(qū)間值,從區(qū)間樹中查詢此區(qū)間值;如果查到,則表示當前報文為重復(fù)報文,丟棄即可;如未查到,則表示當前報文為亂序報文,放入待確認隊列,執(zhí)行步驟7。

步驟7:當待確認隊列中報文數(shù)量大于n,有n個報文堆積待重組時,如果n大于5,很可能傳輸過程中有丟包行為,從而產(chǎn)生數(shù)據(jù)空洞,導(dǎo)致后續(xù)報文不能確認。這時應(yīng)從待確認報文隊列中取出報文無視空洞,按后續(xù)順序強制加入確認隊列。

步驟8:當前TCP報文重組結(jié)束,繼續(xù)返回執(zhí)行步驟1。

新設(shè)計的TCP流重組流程,通過優(yōu)化程序步驟,引入分片數(shù)據(jù)幀預(yù)處理機制和Hash索引算法,解決了傳統(tǒng)TCP流重組方式因亂序報文查詢效率過低導(dǎo)致重組效率低,不能滿足大流量環(huán)境下的TCP流重組,以及重組完整度不足的問題。

圖7 TCP流報文重組流程

4 測試結(jié)果與分析

本文利用區(qū)間管理算法實現(xiàn)的TCP流重組技術(shù)的核心目的在于支持數(shù)據(jù)完整、有序地完成重組工作,且重組效率得到大幅度提升。為測試報文重組的正確性及重組效率,構(gòu)建了由4臺萬兆級別數(shù)據(jù)包發(fā)送服務(wù)器、1部萬兆路由器、1臺基于本文所提技術(shù)的萬兆數(shù)據(jù)采集及重組服務(wù)器組成的測試環(huán)境。4臺萬兆級數(shù)據(jù)包發(fā)送服務(wù)器將通過控制最大傳輸單元(Maximum Transmission Unit,MTU)來模擬實際真實網(wǎng)絡(luò)的無序狀態(tài)。

4.1 區(qū)間管理算法重組TCP流的正確性測試

本節(jié)對利用區(qū)間管理算法的TCP流重組技術(shù)進行正確性測試,首先選擇1臺數(shù)據(jù)包發(fā)送服務(wù)器,使用文件傳輸協(xié)議(File Transfer Protocol,F(xiàn)TP)向另一臺目標數(shù)據(jù)包發(fā)送服務(wù)器傳輸1個大小為4.82 MB的壓縮文件test.rar,并在目標數(shù)據(jù)包發(fā)送服務(wù)器上使用TcpDump進行抓包;其次使用區(qū)間管理算法的TCP流重組技術(shù)對抓到的數(shù)據(jù)包進行報文重組;最后分別計算發(fā)送前的test.rar文件MD5值和重組得到文件的MD5值。重組結(jié)果及MD5驗證結(jié)果如圖8所示,兩個文件的大小、MD5值均相等,說明重組文件的結(jié)果是正確的。

圖8 文件重組及MD5結(jié)果驗證

4.2 區(qū)間管理算法重組TCP流的性能測試

本節(jié)對利用區(qū)間管理算法的TCP流重組技術(shù)的性能進行測試。該次測試主要關(guān)注在不斷增長的網(wǎng)絡(luò)流量下,TCP流重組技術(shù)是否能正常穩(wěn)定運行。測試其每秒處理數(shù)據(jù)包(Packets Per Second,PPS)、設(shè)備內(nèi)存使用情況和流量重組準確率3個方面的性能。流量發(fā)送方面,由4臺萬兆級別數(shù)據(jù)包發(fā)送服務(wù)器平均分配TCP數(shù)據(jù)流進行發(fā)送,發(fā)送速率依次為250 MB/s、500 MB/s、1.25 GB/s、2 GB/s和2.5 GB/s,構(gòu)造出在路由器網(wǎng)絡(luò)節(jié)點處的網(wǎng)絡(luò)流量總量依次為1 GB/s、2 GB/s、5 GB/s、8 GB/s、10 GB/s的網(wǎng)絡(luò)流量環(huán)境。4臺數(shù)據(jù)包發(fā)送服務(wù)器的MTU值依次設(shè)為256,512,1 024和1 500字節(jié),用于模擬真實網(wǎng)絡(luò)環(huán)境的亂序現(xiàn)象。將路由器的網(wǎng)絡(luò)流量旁路接入利用了本文區(qū)間管理算法重組技術(shù)的萬兆數(shù)據(jù)采集及重組服務(wù)器,對上述3個性能參數(shù)進行監(jiān)測,其結(jié)果如圖9所示。

圖9 不同流量下每秒處理的數(shù)據(jù)包

綜合上述測試數(shù)據(jù),可以看出采用區(qū)間管理算法的TCP流重組技術(shù)在準確性上有著顯著的性能優(yōu)勢。如圖9、圖10和圖11所示,隨著網(wǎng)絡(luò)流量的提高,重組準確性并沒有下降太多,而PPS和內(nèi)存使用情況都隨著網(wǎng)絡(luò)流量的增加呈線性增長,且暫時沒有出現(xiàn)算法程序上的瓶頸。至于在更大網(wǎng)絡(luò)流量下的運行情況,受限于硬件條件,本次沒有進行相應(yīng)測試。此外,每一個層級的網(wǎng)絡(luò)流量重組場景都運行了至少4個小時,也證明了利用區(qū)間管理算法的TCP流重組技術(shù)的穩(wěn)定性。

圖10 不同流量下內(nèi)存使用情況

圖11 不同流量下流量重組準確率

毫無疑問,對比前文所述的各項分片重組技術(shù),本文所研究的利用區(qū)間管理算法的TCP流重組技術(shù)在性能上有著不小的優(yōu)勢。

5 結(jié)語

在現(xiàn)在網(wǎng)絡(luò)加速發(fā)展的時代,對網(wǎng)絡(luò)空間中準確流量的需求越來越明顯。不論是網(wǎng)絡(luò)安全行業(yè)、審計監(jiān)管行業(yè)還是其他互聯(lián)網(wǎng)企業(yè),有效、高速且準確的網(wǎng)絡(luò)流量重組技術(shù)都是后續(xù)各應(yīng)用場景的數(shù)據(jù)來源基礎(chǔ),只有高度準確且高度可靠的數(shù)據(jù)源才能帶給項目最堅實的基礎(chǔ)。

本文通過查閱文獻,對現(xiàn)有的分片重組技術(shù)做了詳盡的分析,在理清了目前技術(shù)的局限性后,根據(jù)平衡樹算法,提出了適用于大流量高并發(fā)的區(qū)間管理算法,并解決了TCP流分片重組流程,解決了因亂序、重發(fā)、查詢效率低導(dǎo)致的重組效率低、重組完整度不足的技術(shù)難題。

猜你喜歡
分片報文數(shù)據(jù)包
基于J1939 協(xié)議多包報文的時序研究及應(yīng)用
汽車電器(2022年9期)2022-11-07 02:16:24
上下分片與詞的時空佈局
詞學(xué)(2022年1期)2022-10-27 08:06:12
分片光滑邊值問題的再生核方法
CDN存量MP4視頻播放優(yōu)化方法
CTCS-2級報文數(shù)據(jù)管理需求分析和實現(xiàn)
淺析反駁類報文要點
中國外匯(2019年11期)2019-08-27 02:06:30
基于模糊二分查找的幀分片算法設(shè)計與實現(xiàn)
SmartSniff
ATS與列車通信報文分析
基于Libpcap的網(wǎng)絡(luò)數(shù)據(jù)包捕獲器的設(shè)計與實現(xiàn)
阿拉善左旗| 得荣县| 普定县| 林周县| 东至县| 涿州市| 花垣县| 邮箱| 郯城县| 英吉沙县| 新野县| 礼泉县| 卓资县| 稷山县| 辽阳市| 永嘉县| 如皋市| 义马市| 寿光市| 德化县| 闵行区| 五台县| 正安县| 象山县| 平凉市| 金堂县| 远安县| 安义县| 尼玛县| 专栏| 山西省| 清远市| 广河县| 林口县| 平南县| 收藏| 德惠市| 响水县| 吉林省| 民乐县| 武穴市|