国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種接收端重組數(shù)據(jù)包的方法

      文檔序號:7620910閱讀:293來源:國知局
      專利名稱:一種接收端重組數(shù)據(jù)包的方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及數(shù)據(jù)傳送技術(shù),特別涉及一種接收端重組數(shù)據(jù)包的方法。
      背景技術(shù)
      在很多數(shù)據(jù)傳送過程中,需要對比較大的數(shù)據(jù)包切多個包分片發(fā)送,在接收端對收到的包分片進行重組。包分片的最后分片一般有特殊的標志指示包的結(jié)束,例如AAL2(ATM Adaptation Layer Type 2,ATM適配層類型2)CPS(Common Part Sublayer,公共部分子層)的包做SSSAR(Service SpecificSegmentation and Re-assembly sublayer,業(yè)務(wù)特定的分割和重組子層)時,采用UUI(27)(User-to-User Information,用戶對用戶指示)作為包的結(jié)束標志,AAL5(ATM Adaptation Layer Type 5,ATM適配層類型5)的包采用ATM層的PTI(Payload Type Indicator,凈荷類型指示)進行指示。
      對于一條連接或者鏈路,發(fā)出的包分片必須是連續(xù)的,在一個數(shù)據(jù)包的傳送過程中,如果該數(shù)據(jù)包的第一分片攜帶有起始標志,接收端接收到該數(shù)據(jù)包的第一分片時,申請內(nèi)存寫入該第一分片的凈荷,并將后續(xù)收到的包分片的凈荷寫入內(nèi)存,當收到最后分片時,接收端將收到的所有包分片重組為一個數(shù)據(jù)包,然后釋放所申請的內(nèi)存。如果在前一個數(shù)據(jù)包的接收沒有結(jié)束時收到帶有起始標志的后續(xù)數(shù)據(jù)包的第一分片時,應(yīng)該釋放內(nèi)存丟棄前一個不完整的數(shù)據(jù)包,再開始接收并處理新的數(shù)據(jù)包。
      由于AAL2和AAL5的SAR的數(shù)據(jù)包的第一分片中沒有攜帶起始標志,因此如果帶有結(jié)束標志的數(shù)據(jù)包的最后分片因為某些原因丟失后,會造成長時間收不到數(shù)據(jù)包結(jié)束標志的情況,這時候無法重組數(shù)據(jù)包,也無法及時處理已經(jīng)收到的包分片,接收端會因為占用很多的內(nèi)存而不能釋放,導致其他連接或者模塊得不到內(nèi)存。在極端情況下,可能會耗盡所有的內(nèi)存,導致系統(tǒng)癱瘓。

      發(fā)明內(nèi)容
      本發(fā)明公開一種接收端重組數(shù)據(jù)包的方法,以解決現(xiàn)有技術(shù)中,當接收端沒有收到數(shù)據(jù)包的最后分片時,無法及時處理已經(jīng)收到的包分片,使接收端過多占用內(nèi)存的問題。
      一種接收端重組數(shù)據(jù)包的方法,所述數(shù)據(jù)包被發(fā)送端分割為多個包分片傳送給接收端,接收端在收到一個中間分片時,累計已經(jīng)收到的所有包分片的總長度,當該總長度大于設(shè)定的長度閾值時,釋放當前用于保存收到的包分片的內(nèi)存,并丟棄正在處于接收狀態(tài)的數(shù)據(jù)包的所有包分片;當該總長度小于設(shè)定的長度閾值時,將該包分片的凈荷寫入當前所申請的內(nèi)存中保存。
      根據(jù)所述的方法,所述正在處于接收狀態(tài)的數(shù)據(jù)包的所有包分片包括已經(jīng)收到的所有包分片、在收到一個帶有結(jié)束標志的最后分片之前收到的包分片、以及該最后分片。
      所述的方法中,接收端丟棄正在處于接收狀態(tài)的數(shù)據(jù)包的所有包分片的方法為接收端在釋放所述內(nèi)存時設(shè)置一個錯誤標志,并在丟棄所述最后分片后取消該錯誤標志,則接收端丟棄該錯誤標志設(shè)置過程中接收到的所有包分片。
      所述方法還包括接收端在丟棄一個最后分片并取消所述錯誤標志后,設(shè)置接收下一個數(shù)據(jù)包的起始標志,在收到下一個包分片并申請內(nèi)存寫入該包分片的凈荷后,取消該起始標志。
      所述方法還包括接收端在收到一個最后分片時,累計已經(jīng)接收到的所有包分片的總長度,當該總長度與當前報文長度域中的長度值相等時,將該最后分片的凈荷寫入所述內(nèi)存進行重組后再釋放當前所申請的內(nèi)存;否則丟棄當前報文和該最后分片并釋放所述內(nèi)存。
      所述方法還包括接收端在完成一個數(shù)據(jù)包的重組并釋放所述內(nèi)存后,設(shè)置接收下一個數(shù)據(jù)包的起始標志,在收到下一個包分片并申請內(nèi)存寫入該包分片的凈荷后,取消該起始標志。
      所述的方法中,所述數(shù)據(jù)包的長度閾值由管理層根據(jù)業(yè)務(wù)類型設(shè)置。
      本發(fā)明所述方法的有益效果如下使用本發(fā)明所述方法,由接收端在重組數(shù)據(jù)包的包分片過程中,每次接收到一個中間分片時,累計已經(jīng)接收到的所有包分片的總長度,并比較該總長度和設(shè)定的數(shù)據(jù)包長度門限值,從而能夠判斷該數(shù)據(jù)包的最后包分片是否已經(jīng)丟失,如果丟失則及時的處理傳輸過程中發(fā)生錯誤的數(shù)據(jù)包,解決了現(xiàn)有技術(shù)中因丟失數(shù)據(jù)包最后包分片而造成的占用內(nèi)存的問題。


      圖1為本發(fā)明所述接收端重組數(shù)據(jù)包的方法流程圖。
      具體實施例方式
      本發(fā)明的技術(shù)構(gòu)思為設(shè)定一個數(shù)據(jù)包的最大長度,由接收端在每次收到一個中間分片時,判斷已經(jīng)接收到的所有包分片的長度之和是否大于該最大長度,如果是,則說明至少丟失了一個最后分片,在已經(jīng)接收的包分片中可能包括兩個或兩個以上的數(shù)據(jù)包包分片,接收端無法正確重組,這時,為了節(jié)約內(nèi)存、提高內(nèi)存的使用率,接收端應(yīng)該及時釋放當前申請的內(nèi)存,并將無法重組的處于接收狀態(tài)的所有數(shù)據(jù)包的包分片全部丟棄,即丟棄已經(jīng)收到的包分片和后續(xù)接收到的部分包分片,直到收到一個最后分片并丟棄該最后分片為止,可以將這一過程定義為一個丟棄過程。為實現(xiàn)該技術(shù)構(gòu)思,需要解決下列問題1、設(shè)定數(shù)據(jù)包的最大允許長度數(shù)據(jù)包的最大允許長度可以由管理層設(shè)置,一般取決于業(yè)務(wù)類型的需要,例如,如果絕大多數(shù)IP包長度不會大于512,可以以512字節(jié)為允許最大長度,而IP協(xié)議規(guī)定的最大長度為65535;AAL5協(xié)議允許65535字節(jié)保長,但是實際包可能不會大于2K字節(jié),就可以以2K作為最大允許長度。
      2、丟棄過程的控制參照現(xiàn)有協(xié)議的一些規(guī)定,接收端可以利用在上下文中設(shè)置錯誤標志Error來控制丟棄過程,同樣也可以采用類似Error的其他任何形式的標志,只要可以表示錯誤的發(fā)生與否即可。具體方法是接收端在啟動丟棄過程后,置錯誤標志Error=1,當結(jié)束丟棄后,置Error=0。這樣,當Error=1時,接收端應(yīng)該丟棄收到包分片,當Error=0接收端將收到的包分片的凈荷寫入申請的內(nèi)存。
      由于本發(fā)明所述技術(shù)方案應(yīng)用于第一分片中沒有攜帶起始標志,這樣接收端無法直接從收到的包分片中判定是否是第一分片,可以通過在上下文中設(shè)置狀態(tài)參數(shù)start進行指示,同樣也可以采用類似Start其他任何形式的標志。這樣,由接收端每次處理完一個數(shù)據(jù)包并釋放內(nèi)存的同時,置Start=0,然后將收到的下一個包分片視為一個數(shù)據(jù)包的第一分片重新申請內(nèi)存,再置Start=1,接收該數(shù)據(jù)包的其他分片寫入內(nèi)存并進行相關(guān)處理。
      在本方法中,接收端每次接收到一個數(shù)據(jù)包分片時,首先判斷該分片是否存在錯誤,如果是,則同樣啟動丟棄過程,釋放內(nèi)存并丟棄當前包分片和后續(xù)收到的所有包分片,一直到將收到的一個最后分片丟棄為止,再重新開始下一個數(shù)據(jù)包分片的接收和處理。如果收到的第一分片即發(fā)生錯誤,接收端直接丟棄該分片啟動丟棄過程,一直到將收到的一個最后分片丟棄為止,再重新開始下一個數(shù)據(jù)包的接收和處理,在這個處理過程中,接收端不需要申請內(nèi)存。
      本發(fā)明所述技術(shù)方案的詳細流程如圖1所示S1、接收端接收包分片;S2、判斷該數(shù)據(jù)包分片本身是否存在錯誤;如果該包分片本身沒有錯誤,則執(zhí)行步驟S4;否則執(zhí)行步驟S13~S16后返回步驟S1接收下一個數(shù)據(jù)包分片。
      S3、根據(jù)當前上下文中的錯誤標志Error進行處理;如果Error=0,則執(zhí)行步驟S4判斷是否開始下一個數(shù)據(jù)包的接收處理;否則執(zhí)行步驟S13~S16后,返回步驟S1接收下一個數(shù)據(jù)包分片。
      S4、根據(jù)起始標志Start進行處理;如果Start=0,表明收到的包分片為一個第一分片,則執(zhí)行步驟S11~S12后,返回步驟S1接收下一個數(shù)據(jù)包分片;否則,表明收到的包分片不是第一分片,執(zhí)行步驟S5。
      S5、判斷該包分片是否為最后分片;如果是中間分片,執(zhí)行步驟S6;如果是最后分片,執(zhí)行步驟S8。
      S6、判斷已經(jīng)收到的所有包分片的長度和是否大于設(shè)定的最大允許長度;如果是,表明中間丟失了最后分片,現(xiàn)在收到的包分片可能已經(jīng)是下一個數(shù)據(jù)包中的一個分片了,則執(zhí)行步驟S7啟動丟棄過程;否則,表明接收過程正常,則執(zhí)行步驟S12將收到的包分片的凈荷寫入當前申請的內(nèi)存中。
      S7、釋放已經(jīng)申請的內(nèi)存、丟棄當前收到的包分片、置Error=1;在該步驟中,由于接收過程發(fā)生錯誤,因此啟動丟棄過程,釋放已經(jīng)申請的內(nèi)存、丟棄當前收到的包分片,并置錯誤Error=1,然后返回步驟S1接收下一個包分片,在Error重新置0之前,根據(jù)步驟S13到S16,接收端丟棄后續(xù)收到的包分片。
      S8、當收到最后分片時,判斷收到的所有包分片的長度是否與該報文長度域中的信息一致,如果是則執(zhí)行步驟S9;否則執(zhí)行步驟S10。
      S9、將該包分片的凈荷寫入內(nèi)存,重組數(shù)據(jù)包并進行后續(xù)處理,釋放內(nèi)存并置Start=0,由接收端根據(jù)Start=0在步驟S4中判斷是否需要重新申請內(nèi)存。
      S10、由于收到的所有包分片的總長度和該報文長度域中的信息不一致,因此判定為非法報文,丟棄當前報文和包分片,同時釋放內(nèi)存并置Start=0,由接收端根據(jù)Start=0在步驟S4中判斷是否需要重新申請內(nèi)存。
      S11、申請內(nèi)存并置Start=1;由于步驟S4中Start=0,表明收到了數(shù)據(jù)包的第一分片,為該數(shù)據(jù)包申請內(nèi)存并置Start=1,然后執(zhí)行步驟S12。
      S12、將收到的包分片的凈荷寫入內(nèi)存并累計已經(jīng)收到的所有數(shù)據(jù)的長度之和;接收端每寫入一個包分片的凈荷,都累加出所有數(shù)據(jù)的長度之和并保存,以便在步驟S6中進行判斷。
      S13~S16、當收到的包分片的上下文中錯誤標志置為1時,說明存在錯誤或者,接收端處于丟棄過程中,這時當收到的數(shù)據(jù)包是一個最后分片,則表明應(yīng)該結(jié)束丟棄過程,接收端置Start=0、Error=0,丟棄收到的包分片,開始下一個數(shù)據(jù)的接收;當收到的包分片不是一個最后分片時,保持Error=1,持續(xù)丟棄過程,直到收到一個最后分片時在步驟S15中置Error=0。
      如果接收端收到的第一分片是一個錯誤分片,則執(zhí)行步驟S13、S14后執(zhí)行步驟S16,再返回步驟S1,接收端逐個丟棄當前數(shù)據(jù)包的所有包分片,不必申請內(nèi)存。
      本方法適用于數(shù)據(jù)包的第一分片不攜帶起始標志的所有數(shù)據(jù)傳送協(xié)議,包括但是不限于AAL2 SSSAR,AAL5 SAR處理過程。
      顯然,本領(lǐng)域的技術(shù)人員可以對本發(fā)明進行各種改動和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動和變型在內(nèi)。
      權(quán)利要求
      1.一種接收端重組數(shù)據(jù)包方法,所述數(shù)據(jù)包被發(fā)送端分割為多個包分片傳送給接收端,其特征在于,接收端在收到一個中間分片時,累計已經(jīng)收到的所有包分片的總長度,當該總長度大于設(shè)定的長度閾值時,釋放當前用于保存收到的包分片的內(nèi)存,并丟棄正在處于接收狀態(tài)的數(shù)據(jù)包的所有包分片;當該總長度小于設(shè)定的長度閾值時,將該包分片的凈荷寫入當前所申請的內(nèi)存中保存。
      2.如權(quán)利要求1所述的方法,其特征在于,所述正在處于接收狀態(tài)的數(shù)據(jù)包的所有包分片包括已經(jīng)收到的所有包分片、在收到一個帶有結(jié)束標志的最后分片之前收到的包分片、以及該最后分片。
      3.如權(quán)利要求2所述的方法,其特征在于,接收端丟棄正在處于接收狀態(tài)的數(shù)據(jù)包的所有包分片的方法為接收端在釋放所述內(nèi)存時設(shè)置一個錯誤標志,并在丟棄所述最后分片后取消該錯誤標志,則接收端丟棄該錯誤標志被設(shè)置過程中接收到的所有包分片。
      4.如權(quán)利要求3所述的方法,其特征在于,所述方法還包括接收端在丟棄一個最后分片并取消所述錯誤標志后,設(shè)置接收下一個數(shù)據(jù)包的起始標志,在收到下一個包分片并申請內(nèi)存寫入該包分片的凈荷后,取消該起始標志。
      5.如權(quán)利要求1所述的方法,其特征在于,所述方法還包括接收端在收到一個最后分片時,累計已經(jīng)接收到的所有包分片的總長度,當該總長度與當前報文長度域中的長度值相等時,將該最后分片的凈荷寫入所述內(nèi)存進行重組后再釋放當前所申請的內(nèi)存;否則丟棄當前報文和該最后分片并釋放所述內(nèi)存。
      6.如權(quán)利要求5所述的方法,其特征在于,所述方法還包括接收端在完成一個數(shù)據(jù)包的重組并釋放所述內(nèi)存后,設(shè)置接收下一個數(shù)據(jù)包的起始標志,在收到下一個包分片并申請內(nèi)存寫入該包分片的凈荷后,取消該起始標志。
      7.如權(quán)利要求1~6任意之一所述的方法,其特征在于,所述數(shù)據(jù)包的長度閾值由管理層根據(jù)業(yè)務(wù)類型設(shè)置。
      全文摘要
      本發(fā)明涉及數(shù)據(jù)傳送技術(shù),特別涉及一種接收端重組數(shù)據(jù)包的方法,以解決現(xiàn)有技術(shù)中,當接收端沒有收到數(shù)據(jù)包的最后分片時,無法及時處理已經(jīng)收到的包分片,使接收端過多占用內(nèi)存的問題。一種接收端重組數(shù)據(jù)包方法,所述數(shù)據(jù)包被發(fā)送端分割為多個包分片傳送給接收端,接收端在收到一個中間分片時,累計已經(jīng)收到的所有包分片的總長度,當該總長度大于設(shè)定的長度閾值時,釋放當前用于保存包分片的內(nèi)存,并丟棄正在處于接收狀態(tài)的數(shù)據(jù)包的所有包分片;當該總長度小于設(shè)定的長度閾值時,將該包分片的凈荷寫入當前所申請的內(nèi)存中保存,并通過在上下文中設(shè)置錯誤標志和起始標志控制丟棄包分片。
      文檔編號H04L12/00GK1852100SQ200510085288
      公開日2006年10月25日 申請日期2005年7月22日 優(yōu)先權(quán)日2005年7月22日
      發(fā)明者邱偉民 申請人:華為技術(shù)有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1