專利名稱:處理數(shù)據(jù)報文的方法及網(wǎng)絡(luò)節(jié)點的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通信領(lǐng)域,特別涉及一種處理數(shù)據(jù)報文的方法及網(wǎng)絡(luò)節(jié)點。
背景技術(shù):
隨著通信系統(tǒng)的日益復(fù)雜,通信網(wǎng)絡(luò)越來越龐大,業(yè)務(wù)種類也越來越多。網(wǎng)絡(luò)節(jié)點常常需要完成大量的數(shù)據(jù)報文的處理工作,特別是在對不同處理層的接口處理上,網(wǎng)絡(luò)節(jié)點常常需要對數(shù)據(jù)報文進(jìn)行封裝、解封裝報文頭處理。且在封裝、解封裝過程中,存在拷貝、 挪移等內(nèi)存操作,因而容易引起高速CPU (Central Processing Unit,中央處理單元)與低速內(nèi)存設(shè)備之間的速度匹配失衡問題。為了解決高速CPU與低速內(nèi)存設(shè)備之間的速度匹配失衡問題,現(xiàn)有技術(shù)采取緩存機(jī)制,預(yù)先將可能用到的一塊內(nèi)存數(shù)據(jù)讀入高速緩存中,當(dāng)CPU訪問某塊內(nèi)存數(shù)據(jù)時,先從高速緩存中查找,如果高速緩存命中,則直接使用高速緩存的數(shù)據(jù),如果高速緩存未命中, 再去訪問內(nèi)存設(shè)備,從而通過該種方式降低對低速內(nèi)存設(shè)備的訪問頻率,進(jìn)而隱藏速度匹配失衡的問題。在實現(xiàn)本發(fā)明的過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)至少存在以下缺點由于高速緩存未命中時,CPU仍然需要訪問低速內(nèi)存設(shè)備,針對該種情況,與CPU 直接訪問內(nèi)存設(shè)備相比,現(xiàn)有技術(shù)增加了查找高速緩存的過程,因而導(dǎo)致處理數(shù)據(jù)報文的時延變長;另外,即使高速緩存命中,同樣存在對數(shù)據(jù)報文進(jìn)行拷貝等操作,由于存在數(shù)據(jù)報文的拷貝,必將導(dǎo)致短的數(shù)據(jù)報文處理時延短,長的數(shù)據(jù)報文處理時延長,處理時延與報文長度存在的這種關(guān)聯(lián)關(guān)系,使網(wǎng)絡(luò)節(jié)點處理數(shù)據(jù)報文的性能指標(biāo)(即每秒處理的報文數(shù))將隨著報文長度的增加而降低,對系統(tǒng)的吞吐能力造成影響。
發(fā)明內(nèi)容
為了使處理數(shù)據(jù)報文的性能與報文長度無關(guān),減少處理數(shù)據(jù)報文的時延,進(jìn)而提升系統(tǒng)的吞吐能力,本發(fā)明實施例提供了一種處理數(shù)據(jù)報文的方法及網(wǎng)絡(luò)節(jié)點。所述技術(shù)方案如下—方面,提供了一種處理數(shù)據(jù)報文的方法,所述方法包括獲取數(shù)據(jù)報文的報文句柄,所述報文句柄至少包含一個緩存句柄,每個緩存句柄對應(yīng)一個緩存數(shù)據(jù)報文片段的緩存單元,且所述每個緩存句柄中至少包括與其對應(yīng)的緩存單元所緩存的數(shù)據(jù)報文片段的緩存地址和數(shù)據(jù)長度值;解析所述報文句柄的首個緩存句柄,根據(jù)所述首個緩存句柄中的緩存地址及約定協(xié)議確定所述數(shù)據(jù)報文的報文頭緩存地址及報文頭數(shù)據(jù)長度;根據(jù)所述報文頭緩存地址及報文頭數(shù)據(jù)長度,對所述數(shù)據(jù)報文的報文頭解封裝, 并根據(jù)解封裝后的數(shù)據(jù)報文的緩存地址和數(shù)據(jù)長度更新所述報文句柄。另一方面,還提供了一種處理數(shù)據(jù)報文的網(wǎng)絡(luò)節(jié)點,所述網(wǎng)絡(luò)節(jié)點包括獲取模塊,用于獲取數(shù)據(jù)報文的報文句柄,所述報文句柄至少包含一個緩存句柄,每個緩存句柄對應(yīng)一個緩存數(shù)據(jù)報文片段的緩存單元,且所述每個緩存句柄中至少包括與其對應(yīng)的緩存單元所緩存的數(shù)據(jù)報文片段的緩存地址和數(shù)據(jù)長度值;解析模塊,用于解析所述報文句柄的首個緩存句柄,根據(jù)所述首個緩存句柄中的緩存地址及約定協(xié)議確定所述數(shù)據(jù)報文的報文頭緩存地址及報文頭數(shù)據(jù)長度;解封裝模塊,用于根據(jù)所述報文頭緩存地址及報文頭數(shù)據(jù)長度,對所述數(shù)據(jù)報文的報文頭解封裝;更新模塊,用于根據(jù)解封裝后的數(shù)據(jù)報文的緩存地址和數(shù)據(jù)長度更新所述報文句柄。提供了一種處理數(shù)據(jù)報文的方法,所述方法包括 獲取數(shù)據(jù)報文的報文句柄,所述報文句柄至少包含一個緩存句柄,每個緩存句柄對應(yīng)一個緩存數(shù)據(jù)報文片段的緩存單元,且所述每個緩存句柄中至少包括與其對應(yīng)的緩存單元所緩存的數(shù)據(jù)報文片段的緩存地址和數(shù)據(jù)長度值;解析所述報文句柄的首個緩存句柄,根據(jù)所述首個緩存句柄中的緩存地址確定預(yù)留的內(nèi)存區(qū)域;根據(jù)所述預(yù)留的內(nèi)存區(qū)域?qū)λ鰯?shù)據(jù)報文封裝報文頭,并根據(jù)封裝后的數(shù)據(jù)報文的緩存地址和數(shù)據(jù)長度更新所述報文句柄。還提供了一種處理數(shù)據(jù)報文的網(wǎng)絡(luò)節(jié)點,所述網(wǎng)絡(luò)節(jié)點包括獲取模塊,用于獲取數(shù)據(jù)報文的報文句柄,所述報文句柄至少包含一個緩存句柄, 每個緩存句柄對應(yīng)一個緩存數(shù)據(jù)報文片段的緩存單元,且所述每個緩存句柄中至少包括與其對應(yīng)的緩存單元所緩存的數(shù)據(jù)報文片段的緩存地址和數(shù)據(jù)長度值;解析模塊,用于解析所述報文句柄的首個緩存句柄,根據(jù)所述首個緩存句柄中的緩存地址確定預(yù)留的內(nèi)存區(qū)域;封裝模塊,用于根據(jù)所述預(yù)留的內(nèi)存區(qū)域?qū)λ鰯?shù)據(jù)報文封裝報文頭;更新模塊,用于根據(jù)封裝后的數(shù)據(jù)報文的緩存地址和數(shù)據(jù)長度更新所述報文句柄。本發(fā)明實施例提供的技術(shù)方案的有益效果是通過采用報文句柄的方式實現(xiàn)對數(shù)據(jù)報文進(jìn)行解封裝或封裝處理,使處理數(shù)據(jù)報文的性能與報文長度無關(guān),且無需重復(fù)拷貝數(shù)據(jù)報文,進(jìn)而有效提高數(shù)據(jù)報文的處理效率, 并可提高系統(tǒng)的吞吐性能;另外,通過充分利用預(yù)留的內(nèi)存區(qū)域進(jìn)行報文頭封裝,還可以降低緩存單元的申請頻率。
為了更清楚地說明本發(fā)明實施例中的技術(shù)方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1是本發(fā)明實施例一提供的處理數(shù)據(jù)報文的方法流程圖;圖2是本發(fā)明實施例二提供的處理數(shù)據(jù)報文的方法流程圖;圖3是本發(fā)明實施例二提供的緩存空間布局示意圖4是本發(fā)明實施例二提供的緩存句柄結(jié)構(gòu)示意圖;圖5是本發(fā)明實施例二提供的報文句柄結(jié)構(gòu)示意圖;圖6是本發(fā)明實施例二提供的數(shù)據(jù)報文解封裝示意圖;圖7是本發(fā)明實施例三提供的處理數(shù)據(jù)報文的網(wǎng)絡(luò)節(jié)點結(jié)構(gòu)示意圖;圖8是本發(fā)明實施例三提供的處理數(shù)據(jù)報文的另一種網(wǎng)絡(luò)節(jié)點結(jié)構(gòu)示意圖;圖9是本發(fā)明實施例三提供的更新模塊結(jié)構(gòu)示意圖;圖10是本發(fā)明實施例四提供的處理數(shù)據(jù)報文的方法流程圖;圖11是本發(fā)明實施例五提供的處理數(shù)據(jù)報文的方法流程
圖12是本發(fā)明實施例五提供的數(shù)據(jù)報文封裝示意圖;圖13是本發(fā)明實施例六提供的處理數(shù)據(jù)報文的網(wǎng)絡(luò)節(jié)點結(jié)構(gòu)示意圖;圖14是本發(fā)明實施例六提供的另一種處理數(shù)據(jù)報文的網(wǎng)絡(luò)節(jié)點結(jié)構(gòu)示意圖。
具體實施例方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合附圖對本發(fā)明實施方式作進(jìn)一步地詳細(xì)描述。實施例一參見圖1,本實施例提供了一種處理數(shù)據(jù)報文的方法,該方法流程具體如下101 獲取數(shù)據(jù)報文的報文句柄,報文句柄至少包含一個緩存句柄,每個緩存句柄對應(yīng)一個緩存數(shù)據(jù)報文片段的緩存單元,且每個緩存句柄中至少包括與其對應(yīng)的緩存單元所緩存的數(shù)據(jù)報文片段的緩存地址和數(shù)據(jù)長度值;102:解析報文句柄的首個緩存句柄,根據(jù)首個緩存句柄中的緩存地址及約定協(xié)議確定數(shù)據(jù)報文的報文頭緩存地址及報文頭數(shù)據(jù)長度;103:根據(jù)報文頭緩存地址及報文頭數(shù)據(jù)長度,對數(shù)據(jù)報文的報文頭解封裝,并根據(jù)解封裝后的數(shù)據(jù)報文的緩存地址和數(shù)據(jù)長度更新報文句柄。本實施例提供的方法,通過采用報文句柄的方式實現(xiàn)對數(shù)據(jù)報文進(jìn)行解封裝處理,使處理數(shù)據(jù)報文的性能與報文長度無關(guān),且無需重復(fù)拷貝數(shù)據(jù)報文,進(jìn)而有效提高數(shù)據(jù)報文的處理效率,提高系統(tǒng)吞吐性能。實施例二本實施例作為對上述實施例一的解釋說明,提供了一種處理數(shù)據(jù)報文的方法,且為了避免在對數(shù)據(jù)報文解封裝時進(jìn)行重復(fù)拷貝,本實施例同樣采取了將數(shù)據(jù)報文寫入緩存單元,并構(gòu)造報文句柄的方式,通過傳遞報文句柄實現(xiàn)對數(shù)據(jù)報文進(jìn)行解封裝處理。參見圖 2,方法流程具體如下201 接收數(shù)據(jù)報文,并將數(shù)據(jù)報文寫入預(yù)先提取的一至多個緩存單元中;針對該步驟,為了能夠預(yù)先提取緩存單元,可以在初始化時配置一個專屬的空閑緩存鏈表,該空閑緩存鏈表中的每個節(jié)點均包含一個緩存地址,每個緩存地址均對應(yīng)一個長度固定的緩存單元。當(dāng)接收到數(shù)據(jù)報文后,通過專屬的空閑緩存鏈表預(yù)先提取緩存單元, 之后再將數(shù)據(jù)報文寫入該預(yù)先提取的緩存單元中,則每個緩存單元中均緩存一個數(shù)據(jù)報文片段。提取的緩存單元的個數(shù)可根據(jù)數(shù)據(jù)報文的數(shù)據(jù)長度,以及緩存單元的字節(jié)長度確定,例如,數(shù)據(jù)報文的數(shù)據(jù)長度為2048字節(jié),而每個緩存單元的字節(jié)長度為1056字節(jié),則由此可以確定需要預(yù)先提取2個緩存單元,用于緩存該數(shù)據(jù)報文。本實施例不對預(yù)先提取的緩存單元的個數(shù),以及緩存單元的字節(jié)長度進(jìn)行限定。 對于緩存單元的字節(jié)長度,為了均衡使用各個高速緩存行,提高高速緩存的命中率,本實施例對緩存單元的字節(jié)長度N進(jìn)行了特殊處理,N = (2"n+m), η ^ 11,m為高速緩存行的大小,以現(xiàn)有的高速緩存行為例,此處m—般為32字節(jié),實際應(yīng)用時還可以調(diào)整m的值,本實施例不對m的具體數(shù)值進(jìn)行限定。所有緩存單元構(gòu)成的緩存空間可如圖3所示,每個緩存單元的起始地址均滿足高速緩存行大小的整數(shù)倍,且同一緩存區(qū)域內(nèi)的相鄰緩存單元在地址空間上是連續(xù)存放的,即相鄰兩個緩存單元之間沒有額外的填充或開銷。需要說明的是,同樣為了能夠提高高速緩存的命中率,實施例一及后續(xù)實施例涉及到的緩存單元的字節(jié)長度均采用本實施例提供的字節(jié)長度N,后續(xù)不再贅述。202 根據(jù)每個緩存單元的緩存地址構(gòu)造緩存句柄,得到數(shù)據(jù)報文的報文句柄;具體地,根據(jù)每個緩存單元的緩存地址構(gòu)造緩存句柄時,本實施例不對緩存句柄的具體內(nèi)容及格式進(jìn)行限定,每個緩存句柄應(yīng)至少包括與其對應(yīng)的緩存單元所緩存的數(shù)據(jù)報文片段的緩存地址和數(shù)據(jù)長度值,還可以包括Own字段、Resv字段和EOP字段,各字段對應(yīng)的寬度可以根據(jù)實際情況進(jìn)行調(diào)整,本實施例對此不做具體限定。如圖4所示的緩存句柄結(jié)構(gòu)示意圖,其中,Addr字段和Len字段分別表示與該緩存句柄對應(yīng)的緩存單元所緩存的數(shù)據(jù)報文片段的緩存地址和數(shù)據(jù)長度值。當(dāng)報文句柄包含多個緩存句柄時,為了區(qū)分不同的報文句柄,每個緩存句柄中還包括EOP字段,用于標(biāo)識該緩存句柄是否為報文句柄中的最后一個緩存句柄。例如,僅當(dāng)緩存句柄為所在報文句柄的最后一個緩存句柄時,EOP字段的值為1,其余緩存句柄的EOP字段的值均為O。本實施例不對 EOP字段的取值所對應(yīng)的結(jié)果進(jìn)行限定,例如,還可以將報文句柄的最后一個緩存句柄中的 EOP字段設(shè)為0,其余緩存句柄的EOP字段設(shè)為1。另外,圖4所示的緩存句柄中還包括了用于標(biāo)識該緩存句柄對應(yīng)的緩存單元所有者的Own字段,Own字段不同的兩個緩存句柄對應(yīng)的緩存單元的所有者不同。除此之外,緩存句柄還包括了 Resv字段,該字段可以作為預(yù)留字段,在實際應(yīng)用時,通過該字段對緩存句柄的內(nèi)容進(jìn)行擴(kuò)展。根據(jù)每個緩存單元的緩存地址構(gòu)造緩存句柄之后,即可得到包含至少一個緩存句柄的報文句柄,本實施例以包含4個緩存句柄的報文句柄為例,則報文句柄結(jié)構(gòu)如圖5所
7J\ ο203:獲取數(shù)據(jù)報文的報文句柄,解析報文句柄的首個緩存句柄,根據(jù)首個緩存句柄中的緩存地址及約定協(xié)議確定數(shù)據(jù)報文的報文頭緩存地址及報文頭數(shù)據(jù)長度;針對該步驟,獲取到的數(shù)據(jù)報文的報文句柄仍以圖5所示的報文句柄為例,由于數(shù)據(jù)報文的解封裝處理都集中在報文頭部,而報文頭被存儲在首個緩存句柄對應(yīng)的首個緩存單元中,則解封裝處理需要針對報文句柄的首個緩存句柄(如圖5所示的首個緩存句柄 0),報文頭緩存地址應(yīng)該與首個緩存句柄中的緩存地址相同,因此,通過解析報文句柄的首個緩存句柄,得到該首個緩存句柄的緩存地址,即可得到報文頭緩存地址。另外,通過約定協(xié)議可以確定報文頭數(shù)據(jù)長度,約定協(xié)議不同,報文頭數(shù)據(jù)長度也將不同,本實施例不對具體的約定協(xié)議進(jìn)行限定。204:根據(jù)報文頭緩存地址及報文頭數(shù)據(jù)長度,對數(shù)據(jù)報文的報文頭解封裝,并根據(jù)解封裝后的數(shù)據(jù)報文的緩存地址和數(shù)據(jù)長度更新報文句柄;具體地,根據(jù)報文頭緩存地址即可查找到報文頭的緩存位置,并按照報文頭數(shù)據(jù)長度對數(shù)據(jù)報文的報文頭進(jìn)行解封裝,解封裝的方式可通過現(xiàn)有技術(shù)實現(xiàn),本實施例對此不做贅述。以報文頭緩存在一個緩存單元中為例,解封裝前后的示意圖可如圖6所示,由于數(shù)據(jù)報文被剝頭,緩存報文頭的緩存單元中的數(shù)據(jù)將發(fā)生變化解封裝前,緩存單元中緩存的數(shù)據(jù)報文片段包括L(n-1)層的報文頭和L(n)層的有效數(shù)據(jù);在對報文頭進(jìn)行解封裝之后,該緩存單元中緩存的數(shù)據(jù)報文片段僅剩下L(n)層的有效數(shù)據(jù),而該緩存單元的空閑區(qū)域則相應(yīng)增大。如圖6所示,緩存單元所緩存數(shù)據(jù)的緩存地址由Addr A變成了 Addr 數(shù)據(jù)長度也相應(yīng)由Len B變成了 Len 因此,與該發(fā)生變化的緩存單元相對應(yīng)的緩存句柄需要更新其緩存地址及數(shù)據(jù)長度值,而緩存句柄的更新也就意味著該數(shù)據(jù)報文的報文句柄也將隨之更新,也就是說,需要根據(jù)解封裝后的數(shù)據(jù)報文的緩存地址和數(shù)據(jù)長度,確定被解封裝的報文頭所在緩存單元當(dāng)前所緩存的數(shù)據(jù)報文片段的緩存地址和數(shù)據(jù)長度,并根據(jù)確定的緩存地址和數(shù)據(jù)長度更新該被解封裝的報文頭所在緩存單元對應(yīng)的緩存句柄。由于被解封裝的報文頭可以緩存在一至多個緩存單元中,則更新報文句柄的過程可根據(jù)以下兩種情況采取不同的方式一、被解封裝的報文頭全部緩存在首個緩存單元中針對該種情況,報文頭被解封裝后,僅有緩存報文頭的首個緩存單元內(nèi)的數(shù)據(jù)發(fā)生了變化,因此,僅需要更新被解封裝的報文頭所在首個緩存單元所對應(yīng)的首個緩存句柄, 將首個緩存單元的緩存地址及數(shù)據(jù)長度值進(jìn)行修改即可;二、被解封裝的報文頭被緩存在多個緩存單元中針對該種情況,報文頭被解封裝后,所有緩存報文頭的緩存單元都將發(fā)生變化,則需要更新被解封裝的報文頭所在緩存單元相對應(yīng)的緩存句柄,例如,首個緩存單元僅緩存了報文頭的前半部分,而后半部分緩存在下一個緩存單元中,則報文頭被解封裝之后,首個緩存句柄及下一個緩存句柄中的緩存地址及數(shù)據(jù)長度值都將被更新。無論是上述哪種情況,當(dāng)更新后的報文句柄中存在數(shù)據(jù)長度值為零的緩存句柄時,為了節(jié)省緩存資源,都需要將數(shù)據(jù)長度值為零的緩存句柄所對應(yīng)的緩存單元釋放,并將報文句柄中的后續(xù)緩存句柄逐個前移。對于數(shù)據(jù)長度值為零的緩存句柄,由于其緩存地址在解封裝前后發(fā)生了變化,因而將不是與其對應(yīng)的緩存單元的起始地址,則在釋放該數(shù)據(jù)長度值為零的緩存句柄對應(yīng)的緩存單元時,需要根據(jù)該數(shù)據(jù)長度值為零的緩存句柄中當(dāng)前的緩存地址換算對應(yīng)的緩存單元的起始地址,根據(jù)起始地址釋放數(shù)據(jù)長度值為零的緩存句柄對應(yīng)的緩存單元。本實施例不對具體的換算方式進(jìn)行限定,仍以圖3所示的緩存空間示意圖為例,如果所有緩存單元構(gòu)成的緩存空間的起始地址為Atl,數(shù)據(jù)長度值為零的緩存句柄當(dāng)前的緩存地址為Ax,則該數(shù)據(jù)長度值為零的緩存句柄對應(yīng)的緩存單元的起始地址=A+L ( Α,-Αο ) /N」*N,其中,N為該待釋放的緩存單元的字節(jié)長度。 需要說明的是,步驟203至步驟204僅是對數(shù)據(jù)報文進(jìn)行一次解封裝處理,如果還需要繼續(xù)對其進(jìn)行解封裝,則可以重復(fù)執(zhí)行步驟203和步驟204,直至解封裝完畢。
本實施例提供的方法,通過采用報文句柄的方式實現(xiàn)對數(shù)據(jù)報文進(jìn)行解封裝處理,使處理數(shù)據(jù)報文的性能與報文長度無關(guān),且無需重復(fù)拷貝數(shù)據(jù)報文,并在緩存單元的設(shè)計上考慮了高速緩存命中率的問題,從而能夠有效提高數(shù)據(jù)報文的處理效率,提高系統(tǒng)吞吐性能。實施例三參見圖7,本實施例提供了一種處理數(shù)據(jù)報文的網(wǎng)絡(luò)節(jié)點,該網(wǎng)絡(luò)節(jié)點包括獲取模塊701,用于獲取數(shù)據(jù)報文的報文句柄,報文句柄至少包含一個緩存句柄, 每個緩存句柄對應(yīng)一個緩存數(shù)據(jù)報文片段的緩存單元,且每個緩存句柄中至少包括與其對應(yīng)的緩存單元所緩存的數(shù)據(jù)報文片段的緩存地址和數(shù)據(jù)長度值;解析模塊702,用于解析報文句柄的首個緩存句柄,根據(jù)首個緩存句柄中的緩存地址及約定協(xié)議確定數(shù)據(jù)報文的報文頭緩存地址及報文頭數(shù)據(jù)長度;解封裝模塊703,用于根據(jù)報文頭緩存地址及報文頭數(shù)據(jù)長度,對數(shù)據(jù)報文的報文頭解封裝;更新模塊704,用于根據(jù)解封裝后的數(shù)據(jù)報文的緩存地址和數(shù)據(jù)長度更新報文句柄。參見圖8,該網(wǎng)絡(luò)節(jié)點還包括接收模塊705,用于接收數(shù)據(jù)報文;句柄構(gòu)造模塊706,用于將數(shù)據(jù)報文寫入預(yù)先提取的一至多個緩存單元中,每個緩存單元緩存一個數(shù)據(jù)報文片段;根據(jù)每個緩存單元的緩存地址構(gòu)造緩存句柄,得到數(shù)據(jù)報文的報文句柄。進(jìn)一步地,參見圖9,更新模塊704,具體包括更新單元704a,用于根據(jù)解封裝后的數(shù)據(jù)報文的緩存地址和數(shù)據(jù)長度,確定被解封裝的報文頭所在緩存單元當(dāng)前所緩存的數(shù)據(jù)報文片段的緩存地址和數(shù)據(jù)長度,并根據(jù)確定的緩存地址和數(shù)據(jù)長度更新被解封裝的報文頭所在緩存單元對應(yīng)的緩存句柄;釋放單元704b,用于當(dāng)更新后的報文句柄中存在數(shù)據(jù)長度值為零的緩存句柄時, 將數(shù)據(jù)長度值為零的緩存句柄所對應(yīng)的緩存單元釋放;調(diào)整單元704c,用于在將數(shù)據(jù)長度值為零的緩存句柄所對應(yīng)的緩存單元釋放后, 將報文句柄中的后續(xù)緩存句柄逐個前移。其中,釋放單元704b,具體用于根據(jù)數(shù)據(jù)長度值為零的緩存句柄中當(dāng)前的緩存地址換算對應(yīng)的緩存單元的起始地址,根據(jù)起始地址釋放數(shù)據(jù)長度值為零的緩存句柄所對應(yīng)的緩存單元。本實施例提供的網(wǎng)絡(luò)節(jié)點,通過采用報文句柄的方式實現(xiàn)對數(shù)據(jù)報文進(jìn)行解封裝處理,使整個處理過程中實現(xiàn)了零拷貝,且處理報文的性能與報文長度無關(guān),并在緩存單元的設(shè)計上考慮了高速緩存命中率問題,不僅可以有效提高數(shù)據(jù)報文的處理效率,還能有效提高吞吐性能。實施例四參見圖10,本實施例提供了一種處理數(shù)據(jù)報文的方法,該方法流程具體如下1001 獲取數(shù)據(jù)報文的報文句柄,報文句柄至少包含一個緩存句柄,每個緩存句柄對應(yīng)一個緩存數(shù)據(jù)報文片段的緩存單元,且每個緩存句柄中至少包括與其對應(yīng)的緩存單元所緩存的數(shù)據(jù)報文片段的緩存地址和數(shù)據(jù)長度值;
1002 解析報文句柄的首個緩存句柄,根據(jù)首個緩存句柄中的緩存地址確定預(yù)留的內(nèi)存區(qū)域;1003:根據(jù)預(yù)留的內(nèi)存區(qū)域?qū)?shù)據(jù)報文封裝報文頭,并根據(jù)封裝后的數(shù)據(jù)報文的緩存地址和數(shù)據(jù)長度更新報文句柄。本實施例提供的方法,通過采用報文句柄的方式實現(xiàn)對數(shù)據(jù)報文進(jìn)行封裝處理, 使處理數(shù)據(jù)報文的性能與報文長度無關(guān),且無需重復(fù)拷貝數(shù)據(jù)報文,從而有效提高數(shù)據(jù)報文的處理效率,提高系統(tǒng)吞吐性能;另外,通過充分利用預(yù)留的內(nèi)存區(qū)域進(jìn)行報文頭封裝, 還可以有效降低緩存單元的申請頻率。實施例五本實施例作為對上述實施例四的解釋說明,提供了一種處理數(shù)據(jù)報文的方法,且為了避免在對數(shù)據(jù)報文封裝時進(jìn)行重復(fù)拷貝,本實施例同樣采取了通過報文句柄實現(xiàn)對數(shù)據(jù)報文進(jìn)行封裝處理的方式。參見圖11,本實施例提供的方法流程具體如下1101 獲取數(shù)據(jù)報文的報文句柄,報文句柄至少包含一個緩存句柄,每個緩存句柄對應(yīng)一個緩存數(shù)據(jù)報文片段的緩存單元,且每個緩存句柄中至少包括與其對應(yīng)的緩存單元所緩存的數(shù)據(jù)報文片段的緩存地址和數(shù)據(jù)長度值;針對該步驟,獲取數(shù)據(jù)報文的報文句柄時,本實施例不對具體獲取方式進(jìn)行限定, 如果該數(shù)據(jù)報文是經(jīng)過上述實施例一和實施例二提供的方法進(jìn)行解封裝之后得到的數(shù)據(jù)報文,則獲取到的報文句柄應(yīng)為上述實施例一和實施例二更新后的報文句柄。除此之外,該數(shù)據(jù)報文的報文句柄還可以是本實施例重新構(gòu)造的,構(gòu)造方式同實施例二中描述的一樣,也需要將該數(shù)據(jù)報文寫入預(yù)先提取的一至多個緩存單元中,與實施例二中緩存單元有所不同的是,此時提取的緩存單元占用的是內(nèi)存空間,也就是內(nèi)存中的空閑緩存鏈表對應(yīng)的緩存單元,因此,該種方式構(gòu)造的緩存單元與解封裝前構(gòu)造的緩存單元的所有者不同,兩個緩存單元對應(yīng)的緩存句柄中的Own字段的值不同。無論是通過哪種方式獲取數(shù)據(jù)報文的報文句柄,該報文句柄的首個緩存句柄對應(yīng)的緩存單元均預(yù)留一定的內(nèi)存空間,以便后續(xù)添加封裝的報文頭,從而可以降低緩存的申請頻率。1102:解析報文句柄的首個緩存句柄,根據(jù)首個緩存句柄中的緩存地址確定預(yù)留的內(nèi)存區(qū)域;其中,由于每個緩存單元的字節(jié)長度是固定的,且在獲取數(shù)據(jù)報文的報文句柄時, 首個緩存句柄對應(yīng)的緩存單元預(yù)留了一定的內(nèi)存空間,則在解析報文句柄的首個緩存句柄,得到首個緩存句柄中的緩存地址之后,根據(jù)該緩存地址及首個緩存句柄所對應(yīng)的緩存單元的字節(jié)長度,即可確定預(yù)留的內(nèi)存區(qū)域。1103:根據(jù)預(yù)留的內(nèi)存區(qū)域?qū)?shù)據(jù)報文封裝報文頭,并根據(jù)封裝后的數(shù)據(jù)報文的緩存地址和數(shù)據(jù)長度更新報文句柄;具體地,根據(jù)預(yù)留的內(nèi)存區(qū)域?qū)?shù)據(jù)報文封裝報文頭時,可分為以下兩種情況一、當(dāng)預(yù)留的內(nèi)存區(qū)域足以容納封裝的報文頭時,則將報文頭封裝到預(yù)留的內(nèi)存區(qū)域內(nèi);針對該種情況,僅需將報文頭封裝在首個緩存單元中,則根據(jù)封裝后的數(shù)據(jù)報文的緩存地址和數(shù)據(jù)長度更新報文句柄,具體包括根據(jù)封裝后的數(shù)據(jù)報文的緩存地址及數(shù)據(jù)長度,更新報文句柄的首個緩存句柄中的緩存地址和數(shù)據(jù)長度值。封裝前后的示意圖可如圖12所示,封裝前,緩存單元所緩存的數(shù)據(jù)報文片段僅包括L(η)層的有效數(shù)據(jù);封裝完報文頭后,該緩存單元所緩存的數(shù)據(jù)報文片段除了包括L(n)層的有效數(shù)據(jù),還包括封裝的 L(η)層報文頭,則預(yù)留的內(nèi)存區(qū)域也相應(yīng)減少,即圖12中的空閑區(qū)。緩存單元所緩存數(shù)據(jù)的緩存地址也由Addr X變成了 Addr X—,數(shù)據(jù)長度也相應(yīng)由Len Y變成了 Len 因此,與該緩存單元相對應(yīng)的緩存句柄中的緩存地址及數(shù)據(jù)長度值需要根據(jù)χ—和r進(jìn)行更新。二、當(dāng)預(yù)留的內(nèi)存區(qū)域不足以容納封裝的報文頭時,則申請一個新的緩存單元,并將封裝的報文頭從后向前寫入新的緩存單元中;或是將部分報文頭數(shù)據(jù)寫入預(yù)留的內(nèi)存區(qū)域之后,再申請一個新的緩存單元,將剩余的報文頭數(shù)據(jù)從后向前寫入新的緩存單元中;本實施例不對該種情況下寫入報文頭的方式進(jìn)行限定。針對該種情況,無論采取哪種寫入報文頭的方式,根據(jù)封裝后的數(shù)據(jù)報文的緩存地址和數(shù)據(jù)長度更新報文句柄,具體包括根據(jù)新的緩存單元的地址構(gòu)造一個新的緩存句柄,并將新的緩存句柄作為報文句柄的首個緩存句柄,原有的緩存句柄逐個后移。需要說明的是,上述步驟1101至步驟1103僅以對數(shù)據(jù)報文進(jìn)行一次封裝處理進(jìn)行了舉例說明,如果還需要繼續(xù)對其進(jìn)行封裝,則可以重復(fù)執(zhí)行步驟1101至步驟1103,直至封裝完畢,通過下面的步驟1104將封裝好的數(shù)據(jù)報文發(fā)送。1104 將封裝后的數(shù)據(jù)報文發(fā)送,并釋放更新后的報文句柄中各個緩存句柄對應(yīng)的緩存單元。針對該步驟,同上述實施例二中釋放緩存單元一樣,此處釋放緩存單元時,仍然需要根據(jù)更新后的報文句柄中各個緩存句柄當(dāng)前的緩存地址字段換算對應(yīng)的緩存單元的起始地址,根據(jù)起始地址釋放各個緩存句柄對應(yīng)的緩存單元,此處不再贅述。綜上所述,本實施例提供的方法,通過采用報文句柄的方式實現(xiàn)對數(shù)據(jù)報文進(jìn)行封裝處理,使處理數(shù)據(jù)報文的性能與報文長度無關(guān),且無需重復(fù)拷貝數(shù)據(jù)報文,并在緩存單元的設(shè)計上考慮高速緩存命中率問題,從而有效提高數(shù)據(jù)報文的處理效率,提高系統(tǒng)吞吐性能;另外,通過充分利用預(yù)留的內(nèi)存區(qū)域進(jìn)行報文頭封裝,還可以有效降低緩存單元的申請頻率。實施例六參見圖13,本實施例提供了一種處理數(shù)據(jù)報文的網(wǎng)絡(luò)節(jié)點,該網(wǎng)絡(luò)節(jié)點包括獲取模塊1301,用于獲取數(shù)據(jù)報文的報文句柄,報文句柄至少包含一個緩存句柄, 每個緩存句柄對應(yīng)一個緩存數(shù)據(jù)報文片段的緩存單元,且每個緩存句柄中至少包括與其對應(yīng)的緩存單元所緩存的數(shù)據(jù)報文片段的緩存地址和數(shù)據(jù)長度值;解析模塊1302,用于解析報文句柄的首個緩存句柄,根據(jù)首個緩存句柄中的緩存地址確定預(yù)留的內(nèi)存區(qū)域;封裝模塊1303,用于根據(jù)預(yù)留的內(nèi)存區(qū)域?qū)?shù)據(jù)報文封裝報文頭;更新模塊1304,用于根據(jù)封裝后的數(shù)據(jù)報文的緩存地址和數(shù)據(jù)長度更新報文句柄。其中,封裝模塊1303,具體用于在預(yù)留的內(nèi)存區(qū)域足以容納封裝的報文頭時,將報文頭封裝到預(yù)留的內(nèi)存區(qū)域內(nèi);相應(yīng)地,更新模塊1304,具體用于根據(jù)封裝后的數(shù)據(jù)報文的緩存地址及數(shù)據(jù)長度更新報文句柄的首個報文句柄中的緩存地址和數(shù)據(jù)長度值??蛇x地,封裝模塊1303,具體用于在預(yù)留的內(nèi)存區(qū)域不足以容納封裝的報文頭時, 申請一個新的緩存單元,并將封裝的報文頭從后向前寫入新的緩存單元中;相應(yīng)地,更新模塊1304,具體用于根據(jù)新的緩存單元的地址構(gòu)造一個新的緩存句柄,并將新的緩存句柄作為報文句柄的首個緩存句柄,原有的緩存句柄逐個后移。參見圖14,該網(wǎng)絡(luò)節(jié)點還包括發(fā)送模塊1305,用于將封裝后的數(shù)據(jù)報文發(fā)送;釋放模塊1306,用于在將封裝后的數(shù)據(jù)報文發(fā)送后,釋放更新后的報文句柄中各個緩存句柄對應(yīng)的緩存單元。具體地,釋放模塊1306,具體用于在將封裝后的數(shù)據(jù)報文發(fā)送后,根據(jù)更新后的報文句柄中各個緩存句柄當(dāng)前的緩存地址字段換算對應(yīng)的緩存單元的起始地址,根據(jù)起始地址釋放各個緩存句柄對應(yīng)的緩存單元。本實施例提供的網(wǎng)絡(luò)節(jié)點,通過采用報文句柄的方式實現(xiàn)對數(shù)據(jù)報文進(jìn)行封裝處理,使處理數(shù)據(jù)報文的性能與報文長度無關(guān),且無需重復(fù)拷貝數(shù)據(jù)報文,并在緩存單元的設(shè)計上考慮高速緩存命中率問題,從而有效提高數(shù)據(jù)報文的處理效率,提高系統(tǒng)吞吐性能;另外,通過充分利用預(yù)留的內(nèi)存區(qū)域進(jìn)行報文頭封裝,還可以有效降低緩存單元的申請頻率。需要說明的是上述實施例提供的處理數(shù)據(jù)報文的網(wǎng)絡(luò)節(jié)點在處理數(shù)據(jù)報文時, 僅以上述各功能模塊的劃分進(jìn)行舉例說明,實際應(yīng)用中,可以根據(jù)需要而將上述功能分配由不同的功能模塊完成,即將網(wǎng)絡(luò)節(jié)點的內(nèi)部結(jié)構(gòu)劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。另外,上述實施例提供的處理數(shù)據(jù)報文的網(wǎng)絡(luò)節(jié)點與處理數(shù)據(jù)報文的方法實施例屬于同一構(gòu)思,其具體實現(xiàn)過程詳見方法實施例,這里不再贅述。上述本發(fā)明實施例序號僅僅為了描述,不代表實施例的優(yōu)劣。本發(fā)明實施例中的全部或部分步驟,可以利用軟件實現(xiàn),相應(yīng)的軟件程序可以存儲在可讀取的存儲介質(zhì)中,如光盤或硬盤等。以上所述僅為本發(fā)明的較佳實施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
1權(quán)利要求
1.一種處理數(shù)據(jù)報文的方法,其特征在于,所述方法包括獲取數(shù)據(jù)報文的報文句柄,所述報文句柄至少包含一個緩存句柄,每個緩存句柄對應(yīng)一個緩存數(shù)據(jù)報文片段的緩存單元,且所述每個緩存句柄中至少包括與其對應(yīng)的緩存單元所緩存的數(shù)據(jù)報文片段的緩存地址和數(shù)據(jù)長度值;解析所述報文句柄的首個緩存句柄,根據(jù)所述首個緩存句柄中的緩存地址及約定協(xié)議確定所述數(shù)據(jù)報文的報文頭緩存地址及報文頭數(shù)據(jù)長度;根據(jù)所述報文頭緩存地址及報文頭數(shù)據(jù)長度,對所述數(shù)據(jù)報文的報文頭解封裝,并根據(jù)解封裝后的數(shù)據(jù)報文的緩存地址和數(shù)據(jù)長度更新所述報文句柄。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述獲取數(shù)據(jù)報文的報文句柄之前,還包括接收數(shù)據(jù)報文,并將所述數(shù)據(jù)報文寫入預(yù)先提取的一至多個緩存單元中,每個緩存單元緩存一個數(shù)據(jù)報文片段;根據(jù)每個緩存單元的緩存地址構(gòu)造緩存句柄,得到所述數(shù)據(jù)報文的報文句柄。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述根據(jù)解封裝后的數(shù)據(jù)報文的緩存地址和數(shù)據(jù)長度更新所述報文句柄,具體包括根據(jù)解封裝后的數(shù)據(jù)報文的緩存地址和數(shù)據(jù)長度,確定被解封裝的報文頭所在緩存單元當(dāng)前所緩存的數(shù)據(jù)報文片段的緩存地址和數(shù)據(jù)長度,并根據(jù)確定的所述緩存地址和數(shù)據(jù)長度更新所述被解封裝的報文頭所在緩存單元對應(yīng)的緩存句柄;當(dāng)更新后的報文句柄中存在數(shù)據(jù)長度值為零的緩存句柄時,將所述數(shù)據(jù)長度值為零的緩存句柄所對應(yīng)的緩存單元釋放,并將所述報文句柄中的后續(xù)緩存句柄逐個前移。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述將所述數(shù)據(jù)長度值為零的緩存句柄所對應(yīng)的緩存單元釋放,具體包括根據(jù)所述數(shù)據(jù)長度值為零的緩存句柄中當(dāng)前的緩存地址換算對應(yīng)的緩存單元的起始地址,根據(jù)所述起始地址釋放所述數(shù)據(jù)長度值為零的緩存句柄所對應(yīng)的緩存單元。
5.根據(jù)權(quán)利要求1至4任一權(quán)利要求所述的方法,其特征在于,所述緩存單元的字節(jié)長度N= (2~n+m),其中,η彡11,m為高速緩存行的大小。
6.一種處理數(shù)據(jù)報文的網(wǎng)絡(luò)節(jié)點,其特征在于,所述網(wǎng)絡(luò)節(jié)點包括獲取模塊,用于獲取數(shù)據(jù)報文的報文句柄,所述報文句柄至少包含一個緩存句柄,每個緩存句柄對應(yīng)一個緩存數(shù)據(jù)報文片段的緩存單元,且所述每個緩存句柄中至少包括與其對應(yīng)的緩存單元所緩存的數(shù)據(jù)報文片段的緩存地址和數(shù)據(jù)長度值;解析模塊,用于解析所述報文句柄的首個緩存句柄,根據(jù)所述首個緩存句柄中的緩存地址及約定協(xié)議確定所述數(shù)據(jù)報文的報文頭緩存地址及報文頭數(shù)據(jù)長度;解封裝模塊,用于根據(jù)所述報文頭緩存地址及報文頭數(shù)據(jù)長度,對所述數(shù)據(jù)報文的報文頭解封裝;更新模塊,用于根據(jù)解封裝后的數(shù)據(jù)報文的緩存地址和數(shù)據(jù)長度更新所述報文句柄。
7.根據(jù)權(quán)利要求6所述的網(wǎng)絡(luò)節(jié)點,其特征在于,所述網(wǎng)絡(luò)節(jié)點,還包括 接收模塊,用于接收數(shù)據(jù)報文;句柄構(gòu)造模塊,用于將所述數(shù)據(jù)報文寫入預(yù)先提取的一至多個緩存單元中,每個緩存單元緩存一個數(shù)據(jù)報文片段;根據(jù)每個緩存單元的緩存地址構(gòu)造緩存句柄,得到所述數(shù)據(jù)報文的報文句柄。
8.根據(jù)權(quán)利要求6所述的網(wǎng)絡(luò)節(jié)點,其特征在于,所述更新模塊,具體包括更新單元,用于根據(jù)解封裝后的數(shù)據(jù)報文的緩存地址和數(shù)據(jù)長度,確定被解封裝的報文頭所在緩存單元當(dāng)前所緩存的數(shù)據(jù)報文片段的緩存地址和數(shù)據(jù)長度,并根據(jù)確定的所述緩存地址和數(shù)據(jù)長度更新所述被解封裝的報文頭所在緩存單元對應(yīng)的緩存句柄;釋放單元,用于當(dāng)更新后的報文句柄中存在數(shù)據(jù)長度值為零的緩存句柄時,將所述數(shù)據(jù)長度值為零的緩存句柄所對應(yīng)的緩存單元釋放;調(diào)整單元,用于在將所述數(shù)據(jù)長度值為零的緩存句柄所對應(yīng)的緩存單元釋放后,將所述報文句柄中的后續(xù)緩存句柄逐個前移。
9.根據(jù)權(quán)利要求8所述的網(wǎng)絡(luò)節(jié)點,其特征在于,所述釋放單元,具體用于根據(jù)所述數(shù)據(jù)長度值為零的緩存句柄中當(dāng)前的緩存地址換算對應(yīng)的緩存單元的起始地址,根據(jù)所述起始地址釋放所述數(shù)據(jù)長度值為零的緩存句柄所對應(yīng)的緩存單元。
10.一種處理數(shù)據(jù)報文的方法,其特征在于,所述方法包括獲取數(shù)據(jù)報文的報文句柄,所述報文句柄至少包含一個緩存句柄,每個緩存句柄對應(yīng)一個緩存數(shù)據(jù)報文片段的緩存單元,且所述每個緩存句柄中至少包括與其對應(yīng)的緩存單元所緩存的數(shù)據(jù)報文片段的緩存地址和數(shù)據(jù)長度值;解析所述報文句柄的首個緩存句柄,根據(jù)所述首個緩存句柄中的緩存地址確定預(yù)留的內(nèi)存區(qū)域;根據(jù)所述預(yù)留的內(nèi)存區(qū)域?qū)λ鰯?shù)據(jù)報文封裝報文頭,并根據(jù)封裝后的數(shù)據(jù)報文的緩存地址和數(shù)據(jù)長度更新所述報文句柄。
11.根據(jù)權(quán)利要求10所述的方法,其特征在于,所述根據(jù)所述預(yù)留的內(nèi)存區(qū)域?qū)λ鰯?shù)據(jù)報文封裝報文頭,具體包括所述預(yù)留的內(nèi)存區(qū)域足以容納封裝的報文頭時,則將所述報文頭封裝到所述預(yù)留的內(nèi)存區(qū)域內(nèi);相應(yīng)地,所述根據(jù)封裝后的數(shù)據(jù)報文的緩存地址和數(shù)據(jù)長度更新所述報文句柄,具體包括根據(jù)封裝后的數(shù)據(jù)報文的緩存地址及數(shù)據(jù)長度,更新所述報文句柄的首個緩存句柄中的緩存地址和數(shù)據(jù)長度值。
12.根據(jù)權(quán)利要求10所述的方法,其特征在于,所述根據(jù)所述預(yù)留的內(nèi)存區(qū)域?qū)λ鰯?shù)據(jù)報文封裝報文頭,具體包括所述預(yù)留的內(nèi)存區(qū)域不足以容納封裝的報文頭時,則申請一個新的緩存單元,并將所述封裝的報文頭從后向前寫入所述新的緩存單元中;相應(yīng)地,所述根據(jù)封裝后的數(shù)據(jù)報文的緩存地址和數(shù)據(jù)長度更新所述報文句柄,具體包括根據(jù)所述新的緩存單元的地址構(gòu)造一個新的緩存句柄,并將所述新的緩存句柄作為所述報文句柄的首個緩存句柄,原有的緩存句柄逐個后移。
13.根據(jù)權(quán)利要求10所述的方法,其特征在于,所述根據(jù)封裝后的數(shù)據(jù)報文的緩存地址和數(shù)據(jù)長度更新所述報文句柄之后,還包括將封裝后的數(shù)據(jù)報文發(fā)送,并釋放更新后的報文句柄中各個緩存句柄對應(yīng)的緩存單元。
14.根據(jù)權(quán)利要求13所述的方法,其特征在于,所述釋放更新后的報文句柄中各個緩存句柄對應(yīng)的緩存單元,具體包括根據(jù)更新后的報文句柄中各個緩存句柄當(dāng)前的緩存地址字段換算對應(yīng)的緩存單元的起始地址,根據(jù)所述起始地址釋放各個緩存句柄對應(yīng)的緩存單元。
15.根據(jù)權(quán)利要求10至14任一權(quán)利要求所述的方法,其特征在于,所述緩存單元的字節(jié)長度N= (2~n+m),其中,η彡11,m為高速緩存行的大小。
16.一種處理數(shù)據(jù)報文的網(wǎng)絡(luò)節(jié)點,其特征在于,所述網(wǎng)絡(luò)節(jié)點包括獲取模塊,用于獲取數(shù)據(jù)報文的報文句柄,所述報文句柄至少包含一個緩存句柄,每個緩存句柄對應(yīng)一個緩存數(shù)據(jù)報文片段的緩存單元,且所述每個緩存句柄中至少包括與其對應(yīng)的緩存單元所緩存的數(shù)據(jù)報文片段的緩存地址和數(shù)據(jù)長度值;解析模塊,用于解析所述報文句柄的首個緩存句柄,根據(jù)所述首個緩存句柄中的緩存地址確定預(yù)留的內(nèi)存區(qū)域;封裝模塊,用于根據(jù)所述預(yù)留的內(nèi)存區(qū)域?qū)λ鰯?shù)據(jù)報文封裝報文頭;更新模塊,用于根據(jù)封裝后的數(shù)據(jù)報文的緩存地址和數(shù)據(jù)長度更新所述報文句柄。
17.根據(jù)權(quán)利要求16所述的網(wǎng)絡(luò)節(jié)點,其特征在于,所述封裝模塊,具體用于在所述預(yù)留的內(nèi)存區(qū)域足以容納封裝的報文頭時,將所述報文頭封裝到所述預(yù)留的內(nèi)存區(qū)域內(nèi);相應(yīng)地,所述更新模塊,具體用于根據(jù)封裝后的數(shù)據(jù)報文的緩存地址及數(shù)據(jù)長度更新所述報文句柄的首個報文句柄中的緩存地址和數(shù)據(jù)長度值。
18.根據(jù)權(quán)利要求16所述的網(wǎng)絡(luò)節(jié)點,其特征在于,所述封裝模塊,具體用于在所述預(yù)留的內(nèi)存區(qū)域不足以容納封裝的報文頭時,申請一個新的緩存單元,并將所述封裝的報文頭從后向前寫入所述新的緩存單元中;相應(yīng)地,所述更新模塊,具體用于根據(jù)所述新的緩存單元的地址構(gòu)造一個新的緩存句柄,并將所述新的緩存句柄作為所述報文句柄的首個緩存句柄,原有的緩存句柄逐個后移。
19.根據(jù)權(quán)利要求16所述的網(wǎng)絡(luò)節(jié)點,其特征在于,所述網(wǎng)絡(luò)節(jié)點,還包括發(fā)送模塊,用于將封裝后的數(shù)據(jù)報文發(fā)送;釋放模塊,用于在將所述封裝后的數(shù)據(jù)報文發(fā)送后,釋放更新后的報文句柄中各個緩存句柄對應(yīng)的緩存單元。
20.根據(jù)權(quán)利要求19所述的網(wǎng)絡(luò)節(jié)點,其特征在于,所述釋放模塊,具體用于在將所述封裝后的數(shù)據(jù)報文發(fā)送后,根據(jù)更新后的報文句柄中各個緩存句柄當(dāng)前的緩存地址字段換算對應(yīng)的緩存單元的起始地址,根據(jù)所述起始地址釋放各個緩存句柄對應(yīng)的緩存單元。
全文摘要
本發(fā)明公開了一種處理數(shù)據(jù)報文的方法及網(wǎng)絡(luò)節(jié)點,屬于通信領(lǐng)域。方法包括獲取數(shù)據(jù)報文的報文句柄,報文句柄至少包含一個緩存句柄,每個緩存句柄中至少包括與其對應(yīng)的緩存單元所緩存的數(shù)據(jù)報文片段的緩存地址和數(shù)據(jù)長度值;根據(jù)首個緩存句柄中的緩存地址及約定協(xié)議確定的數(shù)據(jù)報文的報文頭緩存地址及報文頭數(shù)據(jù)長度,對數(shù)據(jù)報文進(jìn)行報文頭的解封裝或封裝,并根據(jù)解封裝或封裝后的數(shù)據(jù)報文的緩存地址和數(shù)據(jù)長度更新報文句柄。本發(fā)明通過采用報文句柄的方式對數(shù)據(jù)報文進(jìn)行解封裝或封裝處理,使處理報文的性能與報文長度無關(guān);另外,充分利用預(yù)留的內(nèi)存區(qū)域封裝報文頭,降低緩存單元的申請頻率,從而有效提高數(shù)據(jù)報文的處理效率,提高系統(tǒng)吞吐性能。
文檔編號H04L12/56GK102223285SQ201010148050
公開日2011年10月19日 申請日期2010年4月16日 優(yōu)先權(quán)日2010年4月16日
發(fā)明者趙金芳 申請人:大唐移動通信設(shè)備有限公司