專利名稱:Tcp承載的上層協(xié)議數(shù)據(jù)單元的自動(dòng)定界方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于網(wǎng)絡(luò)技術(shù)領(lǐng)域,尤其涉及一種通用TCP承載的上層協(xié)議數(shù)據(jù)單元的自 動(dòng)定界方法和系統(tǒng)。
背景技術(shù):
TCP是一個(gè)面向連接的傳輸協(xié)議,也是一個(gè)面向字節(jié)流的協(xié)議,在TCP數(shù)據(jù)包中, 數(shù)據(jù)是作為字節(jié)流提交給接收方的,并沒(méi)有內(nèi)在的消息和消息邊界。接收方在接收到TCP 數(shù)據(jù)時(shí)也不知一個(gè)給定的讀調(diào)用將會(huì)返回多少字節(jié)的數(shù)據(jù)量。要分析基于TCP承載的上層協(xié)議數(shù)據(jù),首要的問(wèn)題就是要將收到的上層協(xié)議數(shù)據(jù) 進(jìn)行定界,以界定出一個(gè)完整的上層PDU(Pr0t0C0l Data Unit,協(xié)議數(shù)據(jù)單元),否則無(wú)法 對(duì)上層協(xié)議數(shù)據(jù)進(jìn)行解碼分析等操作?,F(xiàn)有技術(shù)中存在一種對(duì)TCP承載的上層PDU進(jìn)行定界的方法,將分片合包的過(guò)程 以及解碼過(guò)程都放在一個(gè)為特定上層協(xié)議專門設(shè)置的分析模塊中,TCP承載的協(xié)議數(shù)據(jù)都 被送往該分析模塊中,該分析模塊進(jìn)行TCP流分析,跟蹤TCP流的建立及銷毀過(guò)程,只要分 析模塊跟蹤到TCP流的建立過(guò)程,就能知道被傳送的數(shù)據(jù)流的開始點(diǎn),然后將數(shù)據(jù)流緩存 起來(lái),并根據(jù)上層協(xié)議的規(guī)范,找出一個(gè)該上層協(xié)議的PDU的結(jié)束位置,再以當(dāng)前PDU的結(jié) 束位置作為下一個(gè)PDU的開始點(diǎn),再根據(jù)上層協(xié)議的規(guī)范,找出該下一個(gè)PDU的結(jié)束點(diǎn),當(dāng) 緩存的數(shù)據(jù)不夠長(zhǎng)(即緩存的數(shù)據(jù)還不能合成一個(gè)完整的PDU)時(shí),則繼續(xù)接收下一個(gè)TCP 段承載的數(shù)據(jù),如此下去就能夠逐個(gè)定界出各個(gè)PDU。這種方案中的分析模塊既要處理分片 合包定界,還要處理解碼,使得模塊實(shí)現(xiàn)的代碼不夠清晰,復(fù)雜度增加,不容易維護(hù)。另外, 由于分析模塊只跟蹤TCP流的創(chuàng)建,因此如果錯(cuò)過(guò)了 TCP流的創(chuàng)建過(guò)程,則該TCP流的內(nèi)的 所有PDU都無(wú)法進(jìn)行分界,對(duì)于TCP短連接的情況,這種問(wèn)題還不嚴(yán)重,但對(duì)于TCP長(zhǎng)連接 的情況則會(huì)比較嚴(yán)重。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明的目的在于提供一種TCP承載的上層協(xié)議數(shù)據(jù)單元的自動(dòng)定界 方法和系統(tǒng),能夠充分利用TCP流,減少丟包率。為實(shí)現(xiàn)上述目的,本發(fā)明提供一種TCP承載的上層協(xié)議數(shù)據(jù)單元(PDU)的自動(dòng)定 界方法,包括A調(diào)整模塊接收由TCP協(xié)議分析模塊上傳的TCP段,根據(jù)該TCP段的方向性信息確 定該TCP段所屬的TCP流,以及該TCP流承載的上層PDU所屬的上層協(xié)議;B調(diào)整模塊從公共模塊中獲取該上層協(xié)議在公共模塊中注冊(cè)的PDU定界策略;C所述調(diào)整模塊根據(jù)獲取的PDU定界策略,對(duì)接收到的TCP段進(jìn)行如下處理對(duì)于 當(dāng)前接收到的TCP段所屬的TCP流處于“未定位”狀態(tài)的情況,調(diào)整模塊檢測(cè)當(dāng)前接收到的 TCP段是否是PDU的開始,如果是,則將當(dāng)前接收到的TCP段所屬的TCP流修改為“已定位” 狀態(tài),并創(chuàng)建PDU,將當(dāng)前接收到的TCP段以及后續(xù)接收到的屬于同一 TCP流、并且TCP段序號(hào)符合預(yù)期條件的TCP段中的數(shù)據(jù)順序加入到所述創(chuàng)建的PDU中,直至該P(yáng)DU完備,合成該 PDU結(jié)束。優(yōu)選地,該方法還包括對(duì)于當(dāng)前接收到的TCP段所屬的TCP流處于“未定位”狀態(tài)的情況,當(dāng)檢測(cè)到當(dāng)前 接收到的TCP段不是PDU的開始時(shí),丟棄本TCP段,等待下一個(gè)TCP段,并返回繼續(xù)執(zhí)行A。優(yōu)選地,在步驟C中,如果后續(xù)接收到的TCP段的序號(hào)不符合預(yù)期條件,則調(diào)整模 塊清空PDU中的內(nèi)容,并丟棄本次接收到TCP段,將當(dāng)前接收到的TCP段所屬的TCP流修改 為“未定位”狀態(tài);等待下一個(gè)TCP段,返回執(zhí)行步驟A。優(yōu)選地,在步驟C將TCP段加入到PDU之后,如果PDU仍不完備,則記下該P(yáng)DU還 需要填入的數(shù)據(jù)量,并計(jì)算下一個(gè)期望的TCP段的序號(hào);所述TCP段序號(hào)符合的預(yù)期條件為 該TCP段的序號(hào)等于所述計(jì)算的下一個(gè)期望的TCP段的序號(hào)。優(yōu)選地,在步驟C中將TCP段加入到PDU之后,如果PDU完備并且加入到PDU中的 TCP段中的數(shù)據(jù)還有剩余,則建立下一個(gè)PDU,并將上述TCP段中尚未填入到上一個(gè)PDU中 的數(shù)據(jù)填入到所述下一個(gè)PDU中。優(yōu)選地,還包括TCP協(xié)議分析模塊在收到TCP段后,判斷該TCP段在確定了 TCP流承載的上層PDU 所屬的上層協(xié)議后,如果從公共模塊中沒(méi)有獲取到該上層協(xié)議注冊(cè)的PDU定界策略,則將 該TCP流中的TCP段直接發(fā)送至上層協(xié)議分析模塊。優(yōu)選地,還包括調(diào)整模塊將合成成功的PDU發(fā)送至上層協(xié)議分析模塊中。本發(fā)明提供的TCP承載的上層PDU的自動(dòng)定界方法對(duì)于未定位的TCP流,則檢測(cè) 作為PDU開始的TCP段,一旦找到該TCP段,則可以將將TCP段按順序加入到一個(gè)PDU中, 即使沒(méi)有跟蹤到TCP流的建立,也可以根據(jù)后續(xù)的作為某個(gè)PDU開始的TCP段對(duì)PDU進(jìn)行 定界,從而相對(duì)于現(xiàn)有技術(shù)盡可能地在TCP流中解出上層PDU,減少被丟棄的TCP段,尤其是 在TCP長(zhǎng)連接的情形。
為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明 的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù) 這些附圖獲得其他的附圖。圖1是實(shí)現(xiàn)本發(fā)明中的TCP承載的上層PDU的自動(dòng)定界方法的系統(tǒng)框架的數(shù)據(jù)流 示意圖;圖2是本發(fā)明提供的TCP承載的上層PDU的自動(dòng)定界方法的流程圖;圖3是本發(fā)明中的TCP承載的上層PDU的自動(dòng)定界方法的一個(gè)具體實(shí)現(xiàn)中的調(diào)整 模塊的主控函數(shù)的執(zhí)行流程圖;圖4是本發(fā)明中的TCP承載的上層PDU的自動(dòng)定界方法的一個(gè)具體實(shí)現(xiàn)中的調(diào)整 模塊的TCP流處理對(duì)象的執(zhí)行流程圖;圖5是本發(fā)明中的每個(gè)上層協(xié)議在公共模塊中注冊(cè)的上層PDU定界方法的數(shù)據(jù)結(jié)構(gòu)示意圖。
具體實(shí)施例方式為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例 中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是 本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員 在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。本發(fā)明提供了一種TCP承載的上層PDU的自動(dòng)定界方法,圖1示出了該方法的數(shù) 據(jù)流示意圖。本發(fā)明中的上層PDU的自動(dòng)定界方法涉及四個(gè)模塊,分別為上層協(xié)議分析模 塊(記為APPProto)、TCP協(xié)議分析模塊(記為TCPProto)、調(diào)整模塊(記為TCPFixProto) 和公共模塊(記為NGNComm)。其中,調(diào)整模塊也是一種協(xié)議分析模塊,該調(diào)整模塊負(fù)責(zé)TCP承載的所有上行PDU 定界的過(guò)程,不再需要針對(duì)每種上層協(xié)議均設(shè)置專門的處理模塊。圖2是本發(fā)明提供的TCP承載的上層PDU的自動(dòng)定界方法流程圖。請(qǐng)同時(shí)參見圖 1和圖2,該方法包括步驟SlOl 調(diào)整模塊接收由TCP段分析模塊上傳的TCP段,根據(jù)該TCP段的方向 性信息確定該TCP段所屬的TCP流、以及該TCP流承載的上層PDU所屬的上層協(xié)議。這里TCP段的方向性信息包括源IP地址和源端口號(hào),以及目的IP地址和目的端 口號(hào)。由于TCP流承載的上層PDU所屬的上層協(xié)議一般時(shí)域源端口號(hào)和目的端口號(hào)一一對(duì) 應(yīng)的,因此在得到TCP段的方向性信息后,即可確定該TCP段所屬的TCP流的承載的上層 PDU的上層協(xié)議。這里,TCP協(xié)議分析模塊將無(wú)序及有重復(fù)的TCP段(或者稱為TCP包)變成有序 的TCP流。TCP協(xié)議分析模塊可以直接將有序的TCP流直接發(fā)送至調(diào)整模塊,但是考慮到有 些上層協(xié)議的PDU分界已經(jīng)在上層協(xié)議分析模塊中實(shí)現(xiàn),為了減少對(duì)現(xiàn)有系統(tǒng)的修改量, 本實(shí)施例中優(yōu)選地,TCP協(xié)議分析模塊在接收到TCP段時(shí),根據(jù)該TCP段的方向性信息可以 確定該TCP段所屬的TCP流承載的上層PDU所屬的上層協(xié)議,并判斷在公共模塊中是否已 經(jīng)注冊(cè)該上層協(xié)議的PDU分界方法。如果已經(jīng)注冊(cè),表明該上行協(xié)議的PDU定界需要借助 調(diào)整模塊完成,則TCP協(xié)議分析模塊將該TCP段上傳至調(diào)整模塊。如果沒(méi)有注冊(cè),表明該上 行協(xié)議的PDU定界不需要調(diào)整模塊完成,則TCP協(xié)議分析模塊將該TCP段直接發(fā)送至上層 協(xié)議分析模塊,由上層協(xié)議分析模塊自己對(duì)TCP流承載的PDU進(jìn)行定界。步驟S102 調(diào)整模塊從公共模塊中獲得步驟SlOl中已經(jīng)確定的上層協(xié)議在公共 模塊中注冊(cè)的PDU定界策略。在公共模塊中為一些上層協(xié)議注冊(cè)了相應(yīng)的PDU定界策略,這里的PDU定界策略 可以包括該定界策略對(duì)應(yīng)的上層協(xié)議的PDU的長(zhǎng)度、頭字節(jié)信息等。步驟S103 調(diào)整模塊根據(jù)獲取的PDU定界策略,對(duì)接收到的承載該上層PDU的TCP 段進(jìn)行如下處理對(duì)于當(dāng)前接收到的TCP段所述的TCP流處于“未定位”狀態(tài)的情況,調(diào)整模塊檢測(cè) 當(dāng)前接收到的TCP段是否是PDU的開始,檢測(cè)是否是PDU段的開始是根據(jù)該P(yáng)DU的定界策 略中設(shè)定的檢測(cè)PDU開始的方法,例如檢測(cè)TCP段的開始幾個(gè)字節(jié)的內(nèi)容是否與上層協(xié)議定義的PDU的開頭幾個(gè)字節(jié)是相同的。如果檢測(cè)到當(dāng)前接收到的TCP段是PDU的開始,則 將當(dāng)前的TCP段所屬的TCP流修改為“已定位”狀態(tài),并為該TCP流創(chuàng)建一個(gè)PDU,將當(dāng)前接 收到的TCP段、以及后續(xù)接收到的屬于同一 TCP流并且TCP段序號(hào)符合預(yù)期條件的TCP段 中的數(shù)據(jù)順序加入到之前創(chuàng)建的PDU中,直至該P(yáng)DU中的字節(jié)完備,合成該P(yáng)DU結(jié)束。當(dāng)合 成一個(gè)PDU成功后,則調(diào)整模塊將該P(yáng)DU發(fā)送至上層協(xié)議分析模塊中。如果對(duì)于當(dāng)前接收到的TCP段所屬的TCP流處于“未定位”狀態(tài),當(dāng)檢測(cè)到當(dāng)前 接收到的TCP段不是PDU的開始時(shí),丟棄本TCP段,等待下一個(gè)TCP段,返回繼續(xù)執(zhí)行步驟 S101。由此可見,本發(fā)明提供的TCP承載的上層PDU的自動(dòng)定界方法對(duì)于未定位的TCP 流,則檢測(cè)作為PDU開始的TCP段,一旦找到該TCP段,則可以將將TCP段按順序加入到一 個(gè)PDU中,即使沒(méi)有跟蹤到TCP流的建立,也可以根據(jù)后續(xù)的作為某個(gè)PDU開始的TCP段對(duì) PDU進(jìn)行定界,從而相對(duì)于現(xiàn)有技術(shù)盡可能地在TCP流中解出上層PDU,減少被丟棄的TCP 段,尤其是在TCP長(zhǎng)連接的情形。另外,由于各種上層協(xié)議的PDU定界方法都被注冊(cè)到了公 共模塊中,而由一個(gè)共同的調(diào)整模塊即可完成對(duì)各種上層協(xié)議的PDU的定界,避免了模塊 實(shí)現(xiàn)過(guò)程中的代碼腫脹,減少了大量的重復(fù)工作。以下以一個(gè)具體的例子詳細(xì)說(shuō)明本發(fā)明的具體實(shí)現(xiàn)。在本例中僅僅詳細(xì)描述調(diào)整模塊的功能實(shí)現(xiàn)。圖3示出了該功能模塊的主要功能的流程圖,該功能可以通過(guò)一個(gè)主控函數(shù)實(shí)現(xiàn) (記為ParsePacket)。從TCP協(xié)議分析模塊傳入到調(diào)整模塊中的TCP流都將經(jīng)過(guò)該主控函 數(shù),并由該主控函數(shù)分析每一個(gè)TCP段。調(diào)整模塊分析該TCP段的方向性信息,包括分析TCP 段的源IP地址和源端口號(hào)、目的IP地址和目的端口號(hào),由這些方向性信息確定該TCP段所 屬的TCP流和該TCP流承載的上層PDU的上層協(xié)議。并根據(jù)確定的TCP流尋找TCP流處理 對(duì)象(記為TCPStream對(duì)象),即執(zhí)行步驟S301。如果存在,則將該TCP段發(fā)送至相應(yīng)的處 理對(duì)象中(對(duì)應(yīng)步驟S302);如果不存在,則為該TCP段所屬的TCP流創(chuàng)建一個(gè)新的TCP流 處理對(duì)象,并將該TCP段發(fā)送至該新創(chuàng)建的處理對(duì)象中(對(duì)應(yīng)步驟S303)。判斷對(duì)TCP段的處理是否成功(對(duì)應(yīng)步驟S304),如果對(duì)TCP段處理成功,則彈出 PDU并提交給上層協(xié)議分析模塊處理(對(duì)應(yīng)步驟S305),而后指示傳入下一個(gè)TCP段(對(duì)應(yīng) 步驟S306),之后返回繼續(xù)執(zhí)行S301。如果步驟S304中判斷結(jié)果為不成功,則進(jìn)行相應(yīng)的失敗處理(對(duì)應(yīng)步驟S307)。需要說(shuō)明的是,上述TCP流處理對(duì)象的處理過(guò)程是對(duì)PDU進(jìn)行定界的主要過(guò)程。圖4示出了上述TCP流處理對(duì)象處理過(guò)程的流程圖。首先判斷本TCP段所屬的TCP流是否處于“已定位”狀態(tài)(步驟S401),如果判斷 結(jié)果為否,表明該TCP段所屬的TCP流處于“未定位”狀態(tài),則依據(jù)定位策略,判斷當(dāng)前的 TCP是否剛好是一個(gè)上層PDU的開始(步驟S402),對(duì)上層PDU開始的判斷可以調(diào)用該P(yáng)DU 所屬上層協(xié)議注冊(cè)的定位策略中的相應(yīng)函數(shù)(可以記為IsPDUStart)實(shí)現(xiàn)。如果步驟S402中的判斷結(jié)果為是,則設(shè)置本TCP流的狀態(tài)為“已定位”狀態(tài)(步 驟S403),并創(chuàng)建一個(gè)新的PDU,并設(shè)置為當(dāng)前的PDU,為當(dāng)前PDU開辟接收緩沖區(qū),準(zhǔn)備接收 數(shù)據(jù)(步驟S404)。在步驟S404后執(zhí)行步驟S405 將當(dāng)前TCP段中所需自己的數(shù)據(jù)填入當(dāng)前PDU中。
而后判斷該P(yáng)DU是否完備(步驟S406),即判斷該P(yáng)DU所填入的數(shù)據(jù)量是否滿足上 層協(xié)議對(duì)一個(gè)PDU數(shù)據(jù)量的要求。當(dāng)步驟S406的判斷結(jié)果為是時(shí),結(jié)束當(dāng)前PDU的接收過(guò)程,并將該P(yáng)DU加入到當(dāng) 前流的已完成PDU列表,并計(jì)算下一個(gè)期望的TCP段序號(hào)(步驟S407)。這里計(jì)算下一個(gè)期 望的TCP段序號(hào)的目的在于在接收到下一個(gè)TCP段時(shí),可以驗(yàn)證前后兩個(gè)到的TCP段之間 是否有丟包的現(xiàn)象發(fā)生。當(dāng)步驟S407的判斷結(jié)果為否時(shí),表明該P(yáng)DU中的數(shù)據(jù)量還不足,即PDU中的數(shù)據(jù) 還不完整,暫時(shí)還沒(méi)有定位出該P(yáng)DU的尾部。此時(shí)需要計(jì)算出當(dāng)前PDU還需要填入的數(shù)據(jù)量 (在實(shí)際中可以描述為欠缺的字節(jié)數(shù)),并計(jì)算下一個(gè)期望的TCP段的序號(hào)(步驟S408),而 后執(zhí)行步驟S413 等待下一個(gè)TCP段。這里計(jì)算下一個(gè)期望的TCP段的序號(hào)的目的在于 在接收到后續(xù)的TCP段并準(zhǔn)備繼續(xù)填入當(dāng)前的PDU中之前,可以首先驗(yàn)證是否存在丟包的 現(xiàn)象,如果發(fā)現(xiàn)存在丟包現(xiàn)象,可以立即停止對(duì)當(dāng)前PDU的定界過(guò)程。在執(zhí)行完步驟S407后,判斷當(dāng)前TCP段中的數(shù)據(jù)是否還有剩余,或者判斷當(dāng)前TCP 段中的字節(jié)是否全部用完(步驟S409)。如果步驟S409中判斷出當(dāng)前TCP段中的數(shù)據(jù)已經(jīng)全部用完,沒(méi)有剩余,則執(zhí)行步 驟S413。如果步驟S409中判斷出當(dāng)前TCP段中的數(shù)據(jù)仍有剩余,沒(méi)有全部用完,則表明該 TCP段中同時(shí)包含了前一個(gè)PDU的結(jié)束部分和后一個(gè)PDU的開始部分,此時(shí)針對(duì)該TCP段中 剩余的數(shù)據(jù)執(zhí)行步驟S404,即針對(duì)該TCP段中剩余的數(shù)據(jù)創(chuàng)建下一個(gè)新的PDU ;而后針對(duì)該 TCP段中剩余的數(shù)據(jù)執(zhí)行步驟S405,即將該TCP段中剩余的數(shù)據(jù)填入針對(duì)該剩余的數(shù)據(jù)新 創(chuàng)建的下一個(gè)PDU中。當(dāng)當(dāng)前接收到的TCP段所屬的TCP流已經(jīng)處于“已定位”狀態(tài),則在步驟S401中 的判斷結(jié)果將為是,此時(shí)執(zhí)行步驟S410 判斷當(dāng)前的TCP段的序號(hào)是否符合本TCP流的預(yù) 期條件,即判斷該TCP段的序號(hào)是否是在處理同一 TCP流的上一個(gè)TCP段時(shí)、計(jì)算出的下一 個(gè)期望的TCP段序號(hào)。當(dāng)步驟S410中的判斷結(jié)果為是時(shí),執(zhí)行步驟S411,當(dāng)步驟S410中的判斷結(jié)果為否 時(shí),執(zhí)行步驟S412 丟棄該TCP段,并清空為該TCP段所屬的TCP流創(chuàng)建的PDU中的數(shù)據(jù), 并將該TCP流的狀態(tài)修改為“未定位”狀態(tài)。而后繼續(xù)執(zhí)行步驟S413。在步驟S402中當(dāng)判斷當(dāng)前TCP段不是上層PDU的開始時(shí),丟棄本TCP段(對(duì)應(yīng)步 驟S414)。步驟S414執(zhí)行完畢后,繼續(xù)執(zhí)行步驟S413。圖5示出了每個(gè)上層協(xié)議在公共模塊中注冊(cè)的上層PDU定界方法的數(shù)據(jù)結(jié)構(gòu) (TCPFrmRegInfo)。其中,dwProtoID提供定界方法的協(xié)議ID,用于標(biāo)識(shí)一個(gè)上層協(xié)議,該協(xié) 議應(yīng)該為TCP承載的上層協(xié)議。PfnGetPDULen是獲取PDU長(zhǎng)度的方法,屬于函數(shù)指針類型。 PfnIsPDUStart是判斷當(dāng)前數(shù)據(jù)的開頭部分是否剛好為PDU的開始的方法,也屬于函數(shù)指 針類型。另外,本發(fā)明將PDU定界過(guò)程抽象出來(lái)且單獨(dú)剝離出來(lái)了,原本需要定界處 理的上層協(xié)議幾乎不再需要花精力去進(jìn)行定界,而只需實(shí)現(xiàn)定界函數(shù)PfnGetPDULeru PfnIsPDUStart而已,原來(lái)很麻煩的過(guò)程變得非常簡(jiǎn)單,且調(diào)整模塊有較大的通用性,因此 復(fù)用性很強(qiáng)。以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng) 視為本發(fā)明的保護(hù)范圍。
權(quán)利要求
1.一種TCP承載的上層協(xié)議數(shù)據(jù)單元(PDU)的自動(dòng)定界方法,其特征在于,包括A調(diào)整模塊接收由TCP協(xié)議分析模塊上傳的TCP段,根據(jù)該TCP段的方向性信息確定該 TCP段所屬的TCP流,以及該TCP流承載的上層PDU所屬的上層協(xié)議;B調(diào)整模塊從公共模塊中獲取該上層協(xié)議在公共模塊中注冊(cè)的PDU定界策略;C所述調(diào)整模塊根據(jù)獲取的PDU定界策略,對(duì)接收到的TCP段進(jìn)行如下處理對(duì)于當(dāng)前 接收到的TCP段所屬的TCP流處于“未定位”狀態(tài)的情況,調(diào)整模塊檢測(cè)當(dāng)前接收到的TCP 段是否是PDU的開始,如果是,則將當(dāng)前接收到的TCP段所屬的TCP流修改為“已定位”狀 態(tài),并創(chuàng)建PDU,將當(dāng)前接收到的TCP段以及后續(xù)接收到的屬于同一 TCP流、并且TCP段序 號(hào)符合預(yù)期條件的TCP段中的數(shù)據(jù)順序加入到所述創(chuàng)建的PDU中,直至該P(yáng)DU完備,合成該 PDU結(jié)束。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括對(duì)于當(dāng)前接收到的TCP段所屬的TCP流處于“未定位”狀態(tài)的情況,當(dāng)檢測(cè)到當(dāng)前接收 到的TCP段不是PDU的開始時(shí),丟棄本TCP段,等待下一個(gè)TCP段,并返回繼續(xù)執(zhí)行A。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,在步驟C中,如果后續(xù)接收到的TCP段的 序號(hào)不符合預(yù)期條件,則調(diào)整模塊清空PDU中的內(nèi)容,并丟棄本次接收到TCP段,將當(dāng)前接 收到的TCP段所屬的TCP流修改為“未定位”狀態(tài);等待下一個(gè)TCP段,返回執(zhí)行步驟A。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,在步驟C將TCP段加入到PDU之后,如果 PDU仍不完備,則記下該P(yáng)DU還需要填入的數(shù)據(jù)量,并計(jì)算下一個(gè)期望的TCP段的序號(hào);所 述TCP段序號(hào)符合的預(yù)期條件為該TCP段的序號(hào)等于所述計(jì)算的下一個(gè)期望的TCP段的序 號(hào)。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,在步驟C中將TCP段加入到PDU之后,如 果PDU完備并且加入到PDU中的TCP段中的數(shù)據(jù)還有剩余,則建立下一個(gè)PDU,并將上述TCP 段中尚未填入到上一個(gè)PDU中的數(shù)據(jù)填入到所述下一個(gè)PDU中。
6.根據(jù)權(quán)利要求1至5中任意一項(xiàng)所述的方法,其特征在于,還包括TCP協(xié)議分析模塊在收到TCP段后,判斷該TCP段在確定了 TCP流承載的上層PDU所屬 的上層協(xié)議后,如果從公共模塊中沒(méi)有獲取到該上層協(xié)議注冊(cè)的PDU定界策略,則將該TCP 流中的TCP段直接發(fā)送至上層協(xié)議分析模塊。
7.根據(jù)權(quán)利要求1至5中任意一項(xiàng)所述的方法,其特征在于,還包括調(diào)整模塊將合成成功的PDU發(fā)送至上層協(xié)議分析模塊中。
全文摘要
本發(fā)明提供一種TCP承載的上層協(xié)議數(shù)據(jù)單元的自動(dòng)定界方法和系統(tǒng),該方法包括,包括A調(diào)整模塊接收由TCP協(xié)議分析模塊上傳的TCP段,根據(jù)該TCP段的方向性信息確定該TCP段所屬的TCP流,以及該TCP流承載的上層PDU所屬的上層協(xié)議;B調(diào)整模塊從公共模塊中獲取該上層協(xié)議在公共模塊中注冊(cè)的PDU定界策略;C所述調(diào)整模塊根據(jù)獲取的PDU定界策略,對(duì)接收到的TCP段進(jìn)行定界處理。本發(fā)明中的方法相對(duì)于現(xiàn)有技術(shù)盡可能地在TCP流中解出上層PDU,減少被丟棄的TCP段,尤其是在TCP長(zhǎng)連接的情形。
文檔編號(hào)H04L29/06GK102006304SQ20101057542
公開日2011年4月6日 申請(qǐng)日期2010年12月6日 優(yōu)先權(quán)日2010年12月6日
發(fā)明者楊海龍, 賈林 申請(qǐng)人:北京中創(chuàng)信測(cè)科技股份有限公司