專(zhuān)利名稱(chēng)::一種加速Linux系統(tǒng)本地?cái)?shù)據(jù)包處理的方法及裝置的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及Linux系統(tǒng)本地?cái)?shù)據(jù)包處理(Linux操作系統(tǒng)網(wǎng)絡(luò)領(lǐng)域),具體說(shuō)是一種加速Linux系統(tǒng)本地?cái)?shù)據(jù)包處理的方法及裝置。
背景技術(shù):
:隨著Linux操作系統(tǒng)的發(fā)展,Linux已廣泛應(yīng)用于各種嵌入式系統(tǒng)中。Linux和其他嵌入式操作系統(tǒng)相比較具有非常大的優(yōu)勢(shì)。首先,Linux是開(kāi)放源代碼的,不存在黑箱技術(shù),遍布全球的眾多Linux愛(ài)好者又是Linux開(kāi)發(fā)者的強(qiáng)大技術(shù)支持;其次,Linux的內(nèi)核小、效率高,內(nèi)核的更新速度很快,Linux是可以定制的,其系統(tǒng)內(nèi)核最小只有約上百K字節(jié);第三,Linux是免費(fèi)的操作系統(tǒng),在價(jià)格上極具競(jìng)爭(zhēng)力。Linux還有著嵌入式操作系統(tǒng)所需要的很多特色,突出的就是=Linux適應(yīng)于多種CPU和多種硬件平臺(tái),是一個(gè)跨平臺(tái)的系統(tǒng)。Linux對(duì)網(wǎng)絡(luò)中最常用的TCP/IP協(xié)議有最完備的支持。提供了包括十兆、百兆、千兆的以太網(wǎng)絡(luò),以及無(wú)線(xiàn)網(wǎng)絡(luò),令牌環(huán)網(wǎng)、光纖甚至衛(wèi)星的支持。所以L(fǎng)inux很適于網(wǎng)絡(luò)設(shè)備?;贚inux操作系統(tǒng)在嵌入式領(lǐng)域的顯著優(yōu)勢(shì),各嵌入式芯片生產(chǎn)商紛紛向Linux靠攏,并對(duì)Linux系統(tǒng)作出了不同程度的優(yōu)化。比如,在數(shù)據(jù)轉(zhuǎn)發(fā)方面,就有各種加速解決方案的提出。但是目前的各類(lèi)加速方案中,有幾個(gè)明顯的缺陷I.加速只涉及數(shù)據(jù)轉(zhuǎn)發(fā)方面,對(duì)Linux本地?cái)?shù)據(jù)包的處理沒(méi)做任何的優(yōu)化。2.一旦啟用數(shù)據(jù)加速功能,對(duì)Linuxnetfilter(包過(guò)濾框架)功能支持不夠完善。而隨著網(wǎng)絡(luò)技術(shù)的發(fā)展和創(chuàng)新,像IP電話(huà),可視電話(huà)等新興業(yè)務(wù)的出現(xiàn),對(duì)終端接入設(shè)備(如家庭網(wǎng)關(guān))的本地?cái)?shù)據(jù)包處理能力提出了更高要求。為提高類(lèi)似新興業(yè)務(wù)的服務(wù)質(zhì)量,同時(shí)節(jié)約Linux系統(tǒng)本身資源,加強(qiáng)Linux系統(tǒng)對(duì)本地?cái)?shù)據(jù)包的處理能力顯得極其重要。
發(fā)明內(nèi)容針對(duì)現(xiàn)有技術(shù)中存在的缺陷,本發(fā)明的目的在于提供一種加速Linux系統(tǒng)本地?cái)?shù)據(jù)包處理的方法及裝置,簡(jiǎn)化數(shù)據(jù)包在Linux協(xié)議棧的處理流程,從而達(dá)到加速Linux系統(tǒng)對(duì)本地?cái)?shù)據(jù)包處理的目的。為達(dá)到以上目的,本發(fā)明采取的技術(shù)方案是一種加速Linux系統(tǒng)本地?cái)?shù)據(jù)包處理的方法,其特征在于在寬帶接入設(shè)備的Linux系統(tǒng)中,將本地?cái)?shù)據(jù)包經(jīng)LinuxIP協(xié)議棧處理后的路由和包修改信息,記錄在該數(shù)據(jù)包所屬的連接跟蹤結(jié)構(gòu)體中,形成連接跟蹤條目,對(duì)后續(xù)屬于此連接跟蹤條目的本地?cái)?shù)據(jù)包,將使用連接跟蹤條目中記錄下來(lái)的路由和包修改信息直接處理,從而達(dá)到加速本地?cái)?shù)據(jù)包處理的目的。在上述技術(shù)方案的基礎(chǔ)上,在Linux系統(tǒng)中,每一條連接跟蹤條目都有唯一的連接跟蹤結(jié)構(gòu)體structnfconn與之對(duì)應(yīng)。在上述技術(shù)方案的基礎(chǔ)上,連接跟蹤條目通過(guò)加速信息記錄表記錄屬于該連接跟蹤條目的本地?cái)?shù)據(jù)包經(jīng)LinuxIP協(xié)議棧處理后的路由和包修改信息,每一條連接跟蹤條目與兩張加速信息記錄表對(duì)應(yīng),兩張加速信息記錄表分別記錄屬于此連接跟蹤條目的本地?cái)?shù)據(jù)包發(fā)送方向和接收方向的路由和包修改信息;所述加速信息記錄表以結(jié)構(gòu)體structnfp_info形式保存,在連接跟蹤結(jié)構(gòu)體structnf_conn中,設(shè)有指針數(shù)組structnfp_info*nfp[IP_DIR.MAX],IP_DIR_MAX表示數(shù)據(jù)流方向最大值,取值為2,其中包括指針nfp和指針nfp[l];指針nfp用于指向連接跟蹤條目本地?cái)?shù)據(jù)包發(fā)送方向的數(shù)據(jù)所對(duì)應(yīng)的加速信息記錄表,當(dāng)nfp等于NULL時(shí),表明該連接跟蹤條目本地?cái)?shù)據(jù)包發(fā)送方向不啟用加速處理功能;當(dāng)nfp[O]指向結(jié)構(gòu)體structnfp_info實(shí)例時(shí),表明該連接跟蹤條目本地?cái)?shù)據(jù)包發(fā)送方向啟用加速處理功能;指針nfp[I]用于指向連接跟蹤條目本地?cái)?shù)據(jù)包接收方向的數(shù)據(jù)所對(duì)應(yīng)的加速信息記錄表,當(dāng)nfp[l]等于NULL時(shí),表明該連接跟蹤條目本地?cái)?shù)據(jù)包接收方向不啟用加速處理功能;當(dāng)nfp[l]指向結(jié)構(gòu)體structnfp_info實(shí)例時(shí),表明該連接跟蹤條目本地?cái)?shù)據(jù)包接收方向啟用加速處理功能。在上述技術(shù)方案的基礎(chǔ)上,結(jié)構(gòu)體structnfp_info中至少包括以下成員成員structdst_dentry*dst,用于記錄數(shù)據(jù)包路由信息;成員—u32dscp,用于記錄數(shù)據(jù)包差分服務(wù)代碼點(diǎn)DSCP值;成員—u32priority,用于記錄數(shù)據(jù)包優(yōu)先級(jí)skb_>priority的值;成員—u32mark,用于記錄Linux內(nèi)核數(shù)據(jù)包標(biāo)記skb_>mark的值;成員structnet_device*output_dev,用于記錄本地?cái)?shù)據(jù)包發(fā)送方向的出口網(wǎng)絡(luò)設(shè)備;成員structnet_device*input_dev,用于記錄本地?cái)?shù)據(jù)包接收方向的入口網(wǎng)絡(luò)設(shè)備;成員_u8attri,用于記錄加速信息表屬性,其中記錄發(fā)送方向加速信息取I,記錄接收方向加速信息取2。在上述技術(shù)方案的基礎(chǔ)上,本地?cái)?shù)據(jù)包接收方向的處理流程包括以下步驟步驟101,Linux系統(tǒng)從網(wǎng)絡(luò)驅(qū)動(dòng)層收取數(shù)據(jù)幀;步驟102,檢查數(shù)據(jù)巾貞是否帶有vlan標(biāo)簽vlantag,如果有vlantag,則執(zhí)行步驟103,否則執(zhí)行步驟104;步驟103,剝除數(shù)據(jù)巾貞的vlantag,重新執(zhí)行步驟102;步驟104,檢查數(shù)據(jù)幀是否為IP數(shù)據(jù),如果是,則去除數(shù)據(jù)幀的MAC頭部,形成數(shù)據(jù)包,再執(zhí)行步驟105,否則將數(shù)據(jù)幀提交Linux協(xié)議棧處理,此處不再進(jìn)一步分析;步驟105,從數(shù)據(jù)包中提取IP五元組信息,所述IP五元組信息包括數(shù)據(jù)包源IP,源端口,目的IP,目的端口以及傳輸層協(xié)議TCP或者UDP,根據(jù)此IP五元組信息,查詢(xún)Linux協(xié)議棧連接跟蹤表,如果找到數(shù)據(jù)包所屬的連接跟蹤條目對(duì)應(yīng)的結(jié)構(gòu)體structnf_conn,則執(zhí)行步驟106,否則執(zhí)行步驟109;步驟106,檢查數(shù)據(jù)包所屬連接跟蹤結(jié)構(gòu)體成員structnfp_info*nfp[I]是否為NULL,如果為NULL,則執(zhí)行步驟109,否則執(zhí)行步驟107;步驟107,用數(shù)據(jù)包所屬連接跟蹤條目記錄的數(shù)據(jù)包發(fā)送方向的源IP、源端口、目的IP、目的端口依次替換數(shù)據(jù)包的目的IP、目的端口、源IP、源端口;連接跟蹤條目記錄的數(shù)據(jù)包發(fā)送方向的源IP、源端口、目的IP、目的端口記錄在連接跟蹤結(jié)構(gòu)體structnf_conn成員structnf_conntrack_tupIe_hashtuplehash[IP_CT_DIR_MAX]中;步驟108,根據(jù)指針nfp[l]所指向的加速信息記錄表,對(duì)數(shù)據(jù)包skb內(nèi)容進(jìn)行相應(yīng)的修改,修改內(nèi)容包括用加速信息記錄表中的dscp值重新設(shè)置數(shù)據(jù)包DSCP域;將加速信息記錄表中的dst、priority、mark、output_dev和input_dev分別賦值給skb_>_skb_dst、skb_>priority、skb_>mark、skb_>dev和skb_>input_dev,修改完成后執(zhí)行步驟111;步驟109,數(shù)據(jù)包進(jìn)入LinuxIP協(xié)議棧的收包處理流程;步驟110,提取數(shù)據(jù)包經(jīng)LinuxIP協(xié)議棧處理后的路由結(jié)果、skb_>mark、skb->priority>skb_>dev和skb_>input_dev信息,依次賦值給加速信息記錄表的dst、mark、priority、output_dev和input_dev成員,并建立連接跟蹤結(jié)構(gòu)體成員nfp[I]與加速信息記錄表的映射關(guān)系;然后執(zhí)行步驟111;步驟111,將數(shù)據(jù)包提交函數(shù)ip_local_deliver_finish處理,然后進(jìn)入Linuxsocket處理流程。在上述技術(shù)方案的基礎(chǔ)上,本地?cái)?shù)據(jù)包發(fā)送方向的處理流程包括以下步驟步驟201,函數(shù)ip_local_out從傳輸層接收發(fā)送數(shù)據(jù)包;步驟202,從數(shù)據(jù)包中提取IP五元組信息,所述IP五元組信息包括數(shù)據(jù)包源IP,源端口,目的IP,目的端口以及傳輸層協(xié)議TCP或者UDP,根據(jù)此IP五元組信息,查詢(xún)Linux協(xié)議棧連接跟蹤表,如果找到數(shù)據(jù)包所屬的連接跟蹤條目對(duì)應(yīng)的結(jié)構(gòu)體structnf_conn,則執(zhí)行步驟203,否則執(zhí)行步驟206;步驟203,檢查數(shù)據(jù)包所屬連接跟蹤結(jié)構(gòu)體成員structnfp_info*nfp[O]是否為NULL,如果為NULL,則執(zhí)行步驟206,否則執(zhí)行步驟204;步驟204,用數(shù)據(jù)包所屬連接跟蹤條目記錄的數(shù)據(jù)包接收方向的源IP、源端口、目的IP、目的端口依次替換數(shù)據(jù)包的目的IP、目的端口、源IP、源端口;連接跟蹤條目記錄的數(shù)據(jù)包接收方向的源IP、源端口、目的IP、目的端口記錄在連接跟蹤結(jié)構(gòu)體structnf_conn成員structnf_conntrack_tupIe_hashtuplehash[IP_CT_DIR_MAX]中;步驟205,根據(jù)指針nfp所指向的加速信息記錄表,對(duì)數(shù)據(jù)包skb內(nèi)容進(jìn)行相應(yīng)的修改,修改內(nèi)容包括用加速信息記錄表中的dscp值重新設(shè)置數(shù)據(jù)包DSCP域;將加速信息記錄表中的dst、priority、mark、output_dev和input_dev分別賦值給skb_>_skb_dst、skb_>priority、skb_>mark、skb_>dev和skb_>input_dev,修改完成后執(zhí)行步驟208;步驟206,數(shù)據(jù)包進(jìn)入LinuxIP協(xié)議棧的發(fā)包處理流程;步驟207,提取數(shù)據(jù)包經(jīng)LinuxIP協(xié)議棧處理后的路由結(jié)果、skb_>mark、skb->priority>skb_>dev和skb_>input_dev信息,依次賦值給加速信息記錄表的dst、mark、priority、output_dev和input_dev成員,并建立連接跟蹤結(jié)構(gòu)體成員nfp與加速/[目息記錄表的映射關(guān)系;然后執(zhí)行步驟208;步驟208,將數(shù)據(jù)包提交函數(shù)ip_finish_0UtpUt處理,然后進(jìn)入網(wǎng)絡(luò)驅(qū)動(dòng)層發(fā)送出去。在上述技術(shù)方案的基礎(chǔ)上,當(dāng)加速信息記錄表需要?jiǎng)h除時(shí),由加速信息刪除單元完成該操作,包括以下步驟步驟301:當(dāng)Linux網(wǎng)絡(luò)狀態(tài)改變,以通知鏈的形式發(fā)送消息給消息處理器;所述Linux網(wǎng)絡(luò)狀態(tài)改變包括dptables規(guī)則的添加或刪除;網(wǎng)絡(luò)設(shè)備狀態(tài)改變;IPV4地址改變;路由表的添加或刪除;路由緩存清除;以及連接跟蹤條目自身老化;步驟302:消息處理器根據(jù)接收到的消息,匹配與之對(duì)應(yīng)的連接跟蹤條目;步驟303:消息處理器檢查所匹配的連接跟蹤條目是否存在與之對(duì)應(yīng)的加速信息記錄表,如果存在,則執(zhí)行步驟304,否則結(jié)束退出;步驟304:消息處理器刪除所匹配的連接跟蹤條目所對(duì)應(yīng)的加速信息記錄表。一種加速Linux系統(tǒng)本地?cái)?shù)據(jù)包處理的裝置,其特征在于,包括加速信息存儲(chǔ)單元,加速信息設(shè)置單元,加速判決單元,本地?cái)?shù)據(jù)包加速處理單元和加速信息刪除單元;加速信息存儲(chǔ)單元,用于保存屬于同一條連接跟蹤條目的數(shù)據(jù)包在進(jìn)行加速處理時(shí)所需要的路由和包修改信息,這些信息以加速信息記錄表的形式保存,加速信息記錄表通過(guò)連接跟蹤條目間接訪(fǎng)問(wèn);加速信息設(shè)置單元,負(fù)責(zé)新建和設(shè)置加速信息記錄表,并建立加速信息記錄表與連接跟蹤條目的映射關(guān)系;加速判決單元,用于判斷本地?cái)?shù)據(jù)包是否可以進(jìn)行加速處理,如果可以進(jìn)行加速處理,則將該數(shù)據(jù)包提交本地?cái)?shù)據(jù)包加速處理單元處理,否則將該數(shù)據(jù)包提交Linux協(xié)議棧處理;進(jìn)一步,如果該數(shù)據(jù)包為IP數(shù)據(jù),則在LinuxIP協(xié)議棧將該數(shù)據(jù)包處理完成后,該數(shù)據(jù)包將進(jìn)一步提交加速信息設(shè)置單元處理;本地?cái)?shù)據(jù)包加速處理單元,負(fù)責(zé)根據(jù)本地?cái)?shù)據(jù)包所屬連接跟蹤條目以及其對(duì)應(yīng)的加速信息記錄表內(nèi)容,對(duì)該數(shù)據(jù)包進(jìn)行修改,修改完成后,將接收的本地?cái)?shù)據(jù)包提交Linuxsocket層處理,將發(fā)送的本地?cái)?shù)據(jù)包提交網(wǎng)絡(luò)驅(qū)動(dòng)層處理;加速信息刪除單元,負(fù)責(zé)監(jiān)控Linux網(wǎng)絡(luò)狀態(tài)的變化,清除與其狀態(tài)變化相關(guān)聯(lián)的連接跟蹤條目所對(duì)應(yīng)的加速信息記錄表。本發(fā)明所述的加速Linux系統(tǒng)本地?cái)?shù)據(jù)包處理的方法及裝置,簡(jiǎn)化數(shù)據(jù)包在Linux協(xié)議棧的處理流程,從而達(dá)到加速Linux系統(tǒng)對(duì)本地?cái)?shù)據(jù)包處理的目的,有效的提高了Linux系統(tǒng)處理本地?cái)?shù)據(jù)包的能力,彌補(bǔ)了目前網(wǎng)絡(luò)加速領(lǐng)域?qū)inux系統(tǒng)收發(fā)本地?cái)?shù)據(jù)包進(jìn)行加速的空白。本發(fā)明具備以下特點(diǎn)I.本發(fā)明基于Linux協(xié)議棧實(shí)現(xiàn),與具體的硬件無(wú)關(guān),方便在各硬件平臺(tái)上進(jìn)行移植;2.本發(fā)明通監(jiān)控iptables(IP信息包過(guò)濾系統(tǒng))規(guī)則的變化,在實(shí)現(xiàn)加速的同時(shí),有效的支持Linuxnetfilter(包過(guò)濾框架)功能。本發(fā)明有如下附圖圖I是本地?cái)?shù)據(jù)包加速處理框圖;圖2是連接跟蹤條目以及加速/[目息記錄表關(guān)系不意圖;圖3是本地?cái)?shù)據(jù)包接收處理流程圖4是本地?cái)?shù)據(jù)包發(fā)送處理流程圖;圖5是加速/[目息記錄表刪除流程圖。具體實(shí)施例方式以下結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步詳細(xì)說(shuō)明。本發(fā)明主要應(yīng)用于寬帶接入設(shè)備,對(duì)提升寬帶接入設(shè)備的性能以及處理能力有顯著效果。本發(fā)明所述的加速Linux系統(tǒng)本地?cái)?shù)據(jù)包處理的方法的核心思想是在寬帶接入設(shè)備的Linux系統(tǒng)中,將本地?cái)?shù)據(jù)包經(jīng)LinuxIP協(xié)議棧處理后的路由和包修改信息,記錄在該數(shù)據(jù)包所屬的連接跟蹤結(jié)構(gòu)體中,形成連接跟蹤條目,對(duì)后續(xù)屬于此連接跟蹤條目的本地?cái)?shù)據(jù)包,將使用連接跟蹤條目中記錄下來(lái)的路由和包修改信息直接處理,從而達(dá)到加速本地?cái)?shù)據(jù)包處理的目的。在Linux系統(tǒng)中,每一條連接跟蹤條目都有唯一的連接跟蹤結(jié)構(gòu)體與之對(duì)應(yīng),以結(jié)構(gòu)體structnf_conn表示,參見(jiàn)圖2。在上述技術(shù)方案的基礎(chǔ)上,連接跟蹤條目通過(guò)加速信息記錄表記錄屬于該連接跟蹤條目的本地?cái)?shù)據(jù)包經(jīng)LinuxIP協(xié)議棧處理后的路由和包修改信息,每一條連接跟蹤條目與兩張加速信息記錄表對(duì)應(yīng),兩張加速信息記錄表分別記錄屬于此連接跟蹤條目的本地?cái)?shù)據(jù)包發(fā)送方向和接收方向的路由和包修改信息;連接跟蹤條目和加速信息記錄表的關(guān)系如圖2所示,所述加速信息記錄表以結(jié)構(gòu)體structnfp_info形式保存,即加速信息記錄表與結(jié)構(gòu)體structnfp_info對(duì)應(yīng),結(jié)構(gòu)體structnfp_info用于記錄屬于該連接跟蹤條目(指與加速信息記錄表對(duì)應(yīng)的連接跟蹤條目)的本地?cái)?shù)據(jù)包經(jīng)LinuxIP協(xié)議棧處理后的路由和包修改信息;在連接跟蹤結(jié)構(gòu)體structnf_conn中,增加指針數(shù)組structnfp_info*nfp[IP_DIR.MAX],IP_DIR_MAX表示數(shù)據(jù)流方向最大值,取值為2,其中包括指針nfp和指針nfp[I](即structnfp_info*nfp[O]和structnfp_info*nfp[I]);圖2所不的結(jié)構(gòu)體structnf_conn中未提及的其他成員均屬于Linux系統(tǒng)自定義成員,不屬
發(fā)明內(nèi)容,不再詳述;指針nfp用于指向連接跟蹤條目本地?cái)?shù)據(jù)包發(fā)送方向的數(shù)據(jù)所對(duì)應(yīng)的加速信息記錄表,當(dāng)nfp等于NULL時(shí),表明該連接跟蹤條目本地?cái)?shù)據(jù)包發(fā)送方向不啟用加速處理功能;當(dāng)nfp指向一個(gè)結(jié)構(gòu)體structnfp_info實(shí)例時(shí)(結(jié)構(gòu)體指針是用來(lái)指向結(jié)構(gòu)體實(shí)例的),表明該連接跟蹤條目本地?cái)?shù)據(jù)包發(fā)送方向啟用加速處理功能;指針nfp[l]用于指向連接跟蹤條目本地?cái)?shù)據(jù)包接收方向的數(shù)據(jù)所對(duì)應(yīng)的加速信息記錄表,當(dāng)nfp[l]等于NULL時(shí),表明該連接跟蹤條目本地?cái)?shù)據(jù)包接收方向不啟用加速處理功能;當(dāng)nfp[l]指向另一個(gè)結(jié)構(gòu)體structnfp_info實(shí)例時(shí)(結(jié)構(gòu)體指針是用來(lái)指向結(jié)構(gòu)體實(shí)例的,此實(shí)例不是nfp指向的那一個(gè)實(shí)例,而是另一個(gè)),表明該連接跟蹤條目本地?cái)?shù)據(jù)包接收方向啟用加速處理功能。圖2所示加速信息記錄表對(duì)應(yīng)的結(jié)構(gòu)體structnfp_info的實(shí)例中,其各成員介紹如下成員structdst_dentry*dst,用于記錄數(shù)據(jù)包路由信息;成員—u32dscp,用于記錄數(shù)據(jù)包DSCP(差分服務(wù)代碼點(diǎn))值;成員—u32priority,用于記錄skb_>priority(數(shù)據(jù)包優(yōu)先級(jí))的值;9成員—u32mark,用于記錄skb_>mark(Linux內(nèi)核數(shù)據(jù)包標(biāo)記)的值;成員structnet_device*output_dev,用于記錄本地?cái)?shù)據(jù)包發(fā)送方向的出口網(wǎng)絡(luò)設(shè)備;成員structnet_device*input_dev,用于記錄本地?cái)?shù)據(jù)包接收方向的入口網(wǎng)絡(luò)設(shè)備;成員_u8attri,用于記錄加速信息表屬性,其中記錄發(fā)送方向加速信息取I,記錄接收方向加速信息取2。數(shù)據(jù)包一旦進(jìn)入本地?cái)?shù)據(jù)包加速處理單元,將根據(jù)加速信息記錄表中的這些信息對(duì)數(shù)據(jù)包進(jìn)行相應(yīng)修改。下面結(jié)合圖4和圖3,對(duì)本發(fā)明的本地?cái)?shù)據(jù)包發(fā)送方向和接收方向的處理流程進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。如圖3所示,本地?cái)?shù)據(jù)包接收方向的處理流程包括以下步驟步驟101,Linux系統(tǒng)從網(wǎng)絡(luò)驅(qū)動(dòng)層收取數(shù)據(jù)幀;步驟102,檢查數(shù)據(jù)巾貞是否帶有vlantag(vlan標(biāo)簽),如果有vlantag,則執(zhí)行步驟103,否則執(zhí)行步驟104;步驟103,剝除數(shù)據(jù)巾貞的vlantag,重新執(zhí)行步驟102;步驟104,檢查數(shù)據(jù)幀是否為IP數(shù)據(jù),如果是,則去除數(shù)據(jù)幀的MAC頭部,形成數(shù)據(jù)包,再執(zhí)行步驟105,否則將數(shù)據(jù)幀提交Linux協(xié)議棧處理,此處不再進(jìn)一步分析,接收方向的處理流程結(jié)束;步驟105,從數(shù)據(jù)包中提取IP五元組信息,所述IP五元組信息包括數(shù)據(jù)包源IP,源端口,目的IP,目的端口以及傳輸層協(xié)議TCP或者UDP,根據(jù)此IP五元組信息,查詢(xún)Linux協(xié)議棧連接跟蹤表,如果找到數(shù)據(jù)包所屬的連接跟蹤條目對(duì)應(yīng)的結(jié)構(gòu)體structnf_conn,則執(zhí)行步驟106,否則執(zhí)行步驟109;連接跟蹤表是連接跟蹤條目形成的hash鏈表,屬公知技術(shù)范疇,不再詳述;步驟106,檢查數(shù)據(jù)包所屬連接跟蹤結(jié)構(gòu)體成員structnfp_info*nfp[I](即指針nfp[I])是否為NULL(空),如果為NULL,則執(zhí)行步驟109,否則執(zhí)行步驟107;步驟107,用數(shù)據(jù)包所屬連接跟蹤條目記錄的數(shù)據(jù)包發(fā)送方向的源IP、源端口、目的IP、目的端口依次替換數(shù)據(jù)包的目的IP、目的端口、源IP、源端口;連接跟蹤條目記錄的數(shù)據(jù)包發(fā)送方向的源IP、源端口、目的IP、目的端口記錄在連接跟蹤結(jié)構(gòu)體structnf_conn成員structnf_conntrack_tupIe_hashtuplehash[IP_CT_DIR_MAX]中,此為L(zhǎng)inux系統(tǒng)標(biāo)準(zhǔn)處理方法,不再詳述;步驟108,根據(jù)指針nfp[l]所指向的加速信息記錄表,對(duì)數(shù)據(jù)包skb內(nèi)容進(jìn)行相應(yīng)的修改,修改內(nèi)容包括用加速信息記錄表中的dscp值重新設(shè)置數(shù)據(jù)包DSCP域;將加速信息記錄表中的dst、priority>mark、output_dev和input_dev分別賦值給skb_>skb_dst、skb_>priority、skb_>mark、skb_>dev和skb_>input_dev,修改完成后執(zhí)行步驟111;skb是數(shù)據(jù)包在Linux內(nèi)核的表現(xiàn)形式,本發(fā)明主要涉及的skb成員如下skb_>_skb_dst記錄數(shù)據(jù)包路由結(jié)果信息;skb->mark記錄數(shù)據(jù)包在Linux內(nèi)核的標(biāo)記;skb_>priority記錄數(shù)據(jù)包優(yōu)先級(jí);skb_>dev記錄數(shù)據(jù)包出口網(wǎng)絡(luò)設(shè)備;skb_>input_dev記錄數(shù)據(jù)包入口網(wǎng)絡(luò)設(shè)備;步驟109,數(shù)據(jù)包進(jìn)入LinuxIP協(xié)議棧的收包處理流程;步驟110,提取數(shù)據(jù)包經(jīng)LinuxIP協(xié)議棧處理后的路由結(jié)果、skb_>mark、skb->priority>skb_>dev和skb_>input_dev信息,依次賦值給加速信息記錄表的dst、mark、priority、output_dev和input_dev成員,并建立連接跟蹤結(jié)構(gòu)體成員nfp[I]與加速信息記錄表的映射關(guān)系;然后執(zhí)行步驟111;步驟111,將數(shù)據(jù)包提交函數(shù)ip_local_deliver_finish處理,然后進(jìn)入Linuxsocket處理流程。所述ip_local_deliver_finish為L(zhǎng)inux系統(tǒng)公知函數(shù),不再詳述。所述Linuxsocket處理流程為L(zhǎng)inux系統(tǒng)公知處理流程,不再詳述。上述流程中,步驟110可以通過(guò)向HOOK點(diǎn)NF_INET_LOCAL_IN注冊(cè)鉤子函數(shù)實(shí)現(xiàn),鉤子函數(shù)的優(yōu)先級(jí)取最低,確保本地?cái)?shù)據(jù)包已經(jīng)由LinuxIP協(xié)議棧處理完成。所述HOOK和NF_INET_LOCAL_IN為L(zhǎng)inux系統(tǒng)公知宏定義,不再詳述。如圖4所示,本地?cái)?shù)據(jù)包發(fā)送方向的處理流程包括以下步驟步驟201,函數(shù)ip_local_out從傳輸層接收發(fā)送數(shù)據(jù)包;所述ip_local_out為L(zhǎng)inux系統(tǒng)公知函數(shù),不再詳述;步驟202,從數(shù)據(jù)包中提取IP五元組信息,所述IP五元組信息包括數(shù)據(jù)包源IP,源端口,目的IP,目的端口以及傳輸層協(xié)議TCP或者UDP,根據(jù)此IP五元組信息,查詢(xún)Linux協(xié)議棧連接跟蹤表,如果找到數(shù)據(jù)包所屬的連接跟蹤條目對(duì)應(yīng)的結(jié)構(gòu)體structnf_conn,則執(zhí)行步驟203,否則執(zhí)行步驟206;步驟203,檢查數(shù)據(jù)包所屬連接跟蹤結(jié)構(gòu)體成員structnfp_info*nfp[O](即指針nfp[O])是否為NULL(空),如果為NULL,則執(zhí)行步驟206,否則執(zhí)行步驟204;步驟204,用數(shù)據(jù)包所屬連接跟蹤條目記錄的數(shù)據(jù)包接收方向的源IP、源端口、目的IP、目的端口依次替換數(shù)據(jù)包的目的IP、目的端口、源IP、源端口;連接跟蹤條目記錄的數(shù)據(jù)包接收方向的源IP、源端口、目的IP、目的端口記錄在連接跟蹤結(jié)構(gòu)體structnf_conn成員structnf_conntrack_tupIe_hashtuplehash[IP_CT_DIR_MAX]中,此為L(zhǎng)inux系統(tǒng)標(biāo)準(zhǔn)處理方法,不再詳述;步驟205,根據(jù)指針nfp[O]所指向的加速信息記錄表,對(duì)數(shù)據(jù)包skb內(nèi)容進(jìn)行相應(yīng)的修改,修改內(nèi)容包括用加速信息記錄表中的dscp值重新設(shè)置數(shù)據(jù)包DSCP域;將加速信息記錄表中的dst、priority、mark、output_dev和input_dev分別賦值給skb_>_skb_dst、skb_>priority、skb_>mark、skb_>dev和skb_>input_dev,修改完成后執(zhí)行步驟208;步驟206,數(shù)據(jù)包進(jìn)入LinuxIP協(xié)議棧的發(fā)包處理流程;步驟207,提取數(shù)據(jù)包經(jīng)LinuxIP協(xié)議棧處理后的路由結(jié)果、skb_>mark、skb->priority>skb_>dev和skb_>input_dev信息,依次賦值給加速信息記錄表的dst、mark、priority、output_dev和input_dev成員,并建立連接跟蹤結(jié)構(gòu)體成員nfp與加速/[目息記錄表的映射關(guān)系;然后執(zhí)行步驟208;步驟208,將數(shù)據(jù)包提交函數(shù)ip_finish_0UtpUt處理,然后進(jìn)入網(wǎng)絡(luò)驅(qū)動(dòng)層發(fā)送出去。所述ip_finish_output為L(zhǎng)inux系統(tǒng)公知函數(shù),不再詳述。上述流程中,步驟207可以通過(guò)向Η00Κ點(diǎn)NF_INET_P0ST_R0UTING或NF_BR_P0ST_ROUTING注冊(cè)鉤子函數(shù)實(shí)現(xiàn),鉤子函數(shù)的優(yōu)先級(jí)取最低,確保數(shù)據(jù)包已經(jīng)由LinuxIP協(xié)議棧處理完成。所述HOOK、NF_INET_P0ST_R0UTING和NF_BR_P0ST_R0UTING為L(zhǎng)inux系統(tǒng)公知宏定義,不再詳述。在上述技術(shù)方案的基礎(chǔ)上,已設(shè)置好的加速信息記錄表,可能因?yàn)長(zhǎng)inux網(wǎng)絡(luò)狀態(tài)改變而需要?jiǎng)h除,則由加速信息刪除單元完成該操作。如圖5所示,當(dāng)加速信息記錄表需要?jiǎng)h除時(shí),加速信息刪除單元的執(zhí)行流程包括以下步驟步驟301:當(dāng)Linux網(wǎng)絡(luò)狀態(tài)改變,以通知鏈的形式發(fā)送消息給消息處理器;所述Linux網(wǎng)絡(luò)狀態(tài)改變包括dptables規(guī)則的添加或刪除;網(wǎng)絡(luò)設(shè)備狀態(tài)改變;IPV4地址改變;路由表的添加或刪除;路由緩存清除;以及連接跟蹤條目自身老化;步驟302:消息處理器根據(jù)接收到的消息,匹配與之對(duì)應(yīng)的連接跟蹤條目(一條消息可能對(duì)應(yīng)多條連接跟蹤條目);步驟303:消息處理器檢查所匹配的連接跟蹤條目是否存在與之對(duì)應(yīng)的加速信息記錄表,如果存在,則執(zhí)行步驟304,否則結(jié)束退出;步驟304:消息處理器刪除所匹配的連接跟蹤條目所對(duì)應(yīng)的加速信息記錄表。經(jīng)實(shí)踐表明,本發(fā)明對(duì)Linux收發(fā)本地?cái)?shù)據(jù)包的性能有較大幅度的提升。以一嵌入式Linux系統(tǒng)為例,在不啟用加速處理功能的情況下,本地UDP數(shù)據(jù)吞吐量為401M,在開(kāi)啟加速處理功能的情況下,本地UDP數(shù)據(jù)吞吐量提升至591M,提升約50%。根據(jù)上述方法,本發(fā)明提供了一種加速Linux系統(tǒng)本地?cái)?shù)據(jù)包處理的裝置,如圖I所示,本發(fā)明所述的加速Linux系統(tǒng)本地?cái)?shù)據(jù)包處理的裝置,至少包括加速信息存儲(chǔ)單元,加速信息設(shè)置單元,加速判決單元,本地?cái)?shù)據(jù)包加速處理單元和加速信息刪除單元;加速信息存儲(chǔ)單元,用于保存屬于同一條連接跟蹤條目的數(shù)據(jù)包在進(jìn)行加速處理時(shí)所需要的路由和包修改信息,這些信息以加速信息記錄表的形式保存,加速信息記錄表通過(guò)連接跟蹤條目間接訪(fǎng)問(wèn);加速信息設(shè)置單元,負(fù)責(zé)新建和設(shè)置加速信息記錄表,并建立加速信息記錄表與連接跟蹤條目的映射關(guān)系;加速判決單元,用于判斷本地?cái)?shù)據(jù)包是否可以進(jìn)行加速處理,如果可以進(jìn)行加速處理,則將該數(shù)據(jù)包提交本地?cái)?shù)據(jù)包加速處理單元處理,否則將該數(shù)據(jù)包提交Linux協(xié)議棧處理;進(jìn)一步,如果該數(shù)據(jù)包為IP數(shù)據(jù),則在LinuxIP協(xié)議棧將該數(shù)據(jù)包處理完成后,該數(shù)據(jù)包將進(jìn)一步提交加速信息設(shè)置單元處理;所述LinuxIP協(xié)議棧是Linux協(xié)議棧的子集,只負(fù)責(zé)IP包的處理;本地?cái)?shù)據(jù)包加速處理單元,負(fù)責(zé)根據(jù)本地?cái)?shù)據(jù)包所屬連接跟蹤條目以及其對(duì)應(yīng)的加速信息記錄表內(nèi)容,對(duì)該數(shù)據(jù)包進(jìn)行修改,修改完成后,將接收的本地?cái)?shù)據(jù)包提交Linuxsocket層處理,將發(fā)送的本地?cái)?shù)據(jù)包提交網(wǎng)絡(luò)驅(qū)動(dòng)層處理;加速信息刪除單元,負(fù)責(zé)監(jiān)控Linux網(wǎng)絡(luò)狀態(tài)的變化(狀態(tài)變化包括dptables規(guī)則的添加和刪除;網(wǎng)絡(luò)設(shè)備狀態(tài)改變;IPV4地址改變;路由表的添加和刪除;路由緩存清除以及連接跟蹤條目自身老化),清除與其狀態(tài)變化相關(guān)聯(lián)的連接跟蹤條目所對(duì)應(yīng)的加速信息記錄表。下面結(jié)合附圖1,對(duì)數(shù)據(jù)包的發(fā)送和接收過(guò)程進(jìn)行進(jìn)一步描述。發(fā)送過(guò)程步驟一用戶(hù)程序打開(kāi)socket發(fā)送數(shù)據(jù)包,數(shù)據(jù)包經(jīng)傳輸層(TCP/UDP協(xié)議層)后進(jìn)入加速判決單元;步驟二加速判決單元提取數(shù)據(jù)包IP五元組信息,根據(jù)IP五元組信息查詢(xún)連接跟蹤表,檢查是否存在與數(shù)據(jù)包處理相對(duì)應(yīng)的加速信息記錄表,如果存在,則將數(shù)據(jù)包提交本地?cái)?shù)據(jù)包加速處理單元處理(步驟四),否則將數(shù)據(jù)包提交LinuxIP協(xié)議棧處理,經(jīng)LinuxIP協(xié)議棧處理完成后進(jìn)入加速信息設(shè)置單元處理(步驟三);步驟三加速信息設(shè)置單元提取數(shù)據(jù)包經(jīng)LinuxIP協(xié)議棧處理后的路由和包修改信息,設(shè)置加速信息記錄表,并建立加速信息記錄表與數(shù)據(jù)包所屬連接跟蹤條目的映射關(guān)系,然后將數(shù)據(jù)包提交網(wǎng)絡(luò)接口驅(qū)動(dòng)層發(fā)送出去;步驟四本地?cái)?shù)據(jù)包加速處理單元根據(jù)數(shù)據(jù)包所對(duì)應(yīng)的連接跟蹤條目和加速信息記錄表,對(duì)數(shù)據(jù)包進(jìn)行相應(yīng)的修改,修改完成后將數(shù)據(jù)包提交網(wǎng)絡(luò)接口驅(qū)動(dòng)層發(fā)送出去。接收過(guò)程步驟一網(wǎng)絡(luò)接口驅(qū)動(dòng)層接收數(shù)據(jù)幀,并將數(shù)據(jù)幀提交加速判決單元處理;步驟二加速判決單元首先檢查數(shù)據(jù)巾貞是否攜帶vlan標(biāo)簽,如果攜帶vlan標(biāo)簽,則剝除vlan標(biāo)簽。之后剝除數(shù)據(jù)幀的MAC頭部,形成數(shù)據(jù)包,再檢查數(shù)據(jù)包是非為IP數(shù)據(jù),如果非IP數(shù)據(jù)則提交Linux協(xié)議棧處理,否則提取數(shù)據(jù)包IP五元組信息,根據(jù)IP五元組信息查詢(xún)連接跟蹤表,檢查是否存在與數(shù)據(jù)包處理相對(duì)應(yīng)的加速信息記錄表,如果存在,則將數(shù)據(jù)包提交本地?cái)?shù)據(jù)包加速處理單元處理(步驟四),否則將數(shù)據(jù)包提交LinuxIP協(xié)議棧處理,經(jīng)IP協(xié)議棧處理完成后進(jìn)入加速信息設(shè)置單元處理(步驟三);步驟三加速信息設(shè)置單元提取數(shù)據(jù)包經(jīng)LinuxIP協(xié)議棧處理后的路由和包修改信息,設(shè)置加速信息記錄表,并建立加速信息記錄表與數(shù)據(jù)包所屬連接跟蹤條目的映射關(guān)系,然后將數(shù)據(jù)包提交Linuxsocket層接收;步驟四本地?cái)?shù)據(jù)包加速處理單元根據(jù)數(shù)據(jù)包所對(duì)應(yīng)的連接跟蹤條目和加速信息記錄表,對(duì)數(shù)據(jù)包進(jìn)行相應(yīng)的修改,修改完成后將數(shù)據(jù)包提交Linuxsocket層接收。以上所述僅為本發(fā)明的較佳實(shí)施例,并不用于限制本發(fā)明,凡在本發(fā)明精神和原則之內(nèi)所做的任何修改、等同替換和改進(jìn)等,均含于本發(fā)明的保護(hù)范圍之內(nèi)。本說(shuō)明書(shū)中未作詳細(xì)描述的內(nèi)容屬于本領(lǐng)域?qū)I(yè)技術(shù)人員公知的現(xiàn)有技術(shù)。權(quán)利要求1.一種加速Linux系統(tǒng)本地?cái)?shù)據(jù)包處理的方法,其特征在于在寬帶接入設(shè)備的Linux系統(tǒng)中,將本地?cái)?shù)據(jù)包經(jīng)LinuxIP協(xié)議棧處理后的路由和包修改信息,記錄在該數(shù)據(jù)包所屬的連接跟蹤結(jié)構(gòu)體中,形成連接跟蹤條目,對(duì)后續(xù)屬于此連接跟蹤條目的本地?cái)?shù)據(jù)包,將使用連接跟蹤條目中記錄下來(lái)的路由和包修改信息直接處理,從而達(dá)到加速本地?cái)?shù)據(jù)包處理的目的。2.如權(quán)利要求I所述的加速Linux系統(tǒng)本地?cái)?shù)據(jù)包處理的方法,其特征在于在Linux系統(tǒng)中,每一條連接跟蹤條目都有唯一的連接跟蹤結(jié)構(gòu)體structnf_conn與之對(duì)應(yīng)。3.如權(quán)利要求2所述的加速Linux系統(tǒng)本地?cái)?shù)據(jù)包處理的方法,其特征在于連接跟蹤條目通過(guò)加速信息記錄表記錄屬于該連接跟蹤條目的本地?cái)?shù)據(jù)包經(jīng)LinuxIP協(xié)議棧處理后的路由和包修改信息,每一條連接跟蹤條目與兩張加速信息記錄表對(duì)應(yīng),兩張加速信息記錄表分別記錄屬于此連接跟蹤條目的本地?cái)?shù)據(jù)包發(fā)送方向和接收方向的路由和包修改信息;所述加速信息記錄表以結(jié)構(gòu)體structnfp_info形式保存,在連接跟蹤結(jié)構(gòu)體structnf_conn中,設(shè)有指針數(shù)組structnfp_info*nfp[IP_DIR_MAX],IP_DIR_MAX表示數(shù)據(jù)流方向最大值,取值為2,其中包括指針nfp和指針nfp[l];指針nfp用于指向連接跟蹤條目本地?cái)?shù)據(jù)包發(fā)送方向的數(shù)據(jù)所對(duì)應(yīng)的加速信息記錄表,當(dāng)nfp[O]等于NULL時(shí),表明該連接跟蹤條目本地?cái)?shù)據(jù)包發(fā)送方向不啟用加速處理功能;當(dāng)nfp[O]指向結(jié)構(gòu)體structnfp_info實(shí)例時(shí),表明該連接跟蹤條目本地?cái)?shù)據(jù)包發(fā)送方向啟用加速處理功能;指針nfp[l]用于指向連接跟蹤條目本地?cái)?shù)據(jù)包接收方向的數(shù)據(jù)所對(duì)應(yīng)的加速信息記錄表,當(dāng)nfp[I]等于NULL時(shí),表明該連接跟蹤條目本地?cái)?shù)據(jù)包接收方向不啟用加速處理功能;當(dāng)nfp[l]指向結(jié)構(gòu)體structnfp_info實(shí)例時(shí),表明該連接跟蹤條目本地?cái)?shù)據(jù)包接收方向啟用加速處理功能。4.如權(quán)利要求3所述的加速Linux系統(tǒng)本地?cái)?shù)據(jù)包處理的方法,其特征在于,結(jié)構(gòu)體structnfp_info中至少包括以下成員成員structdst_dentry*dst,用于記錄數(shù)據(jù)包路由信息;成員—u32dscp,用于記錄數(shù)據(jù)包差分服務(wù)代碼點(diǎn)DSCP值;成員—u32priority,用于記錄數(shù)據(jù)包優(yōu)先級(jí)skb_>priority的值;成員—u32mark,用于記錄Linux內(nèi)核數(shù)據(jù)包標(biāo)記skb_>mark的值;成員structnet_device*output_dev,用于記錄本地?cái)?shù)據(jù)包發(fā)送方向的出口網(wǎng)絡(luò)設(shè)備;成員structnet_device*input_dev,用于記錄本地?cái)?shù)據(jù)包接收方向的入口網(wǎng)絡(luò)設(shè)備;成員_u8attri,用于記錄加速信息表屬性,其中記錄發(fā)送方向加速信息取I,記錄接收方向加速信息取2。5.如權(quán)利要求3所述的加速Linux系統(tǒng)本地?cái)?shù)據(jù)包處理的方法,其特征在于,本地?cái)?shù)據(jù)包接收方向的處理流程包括以下步驟步驟101,Linux系統(tǒng)從網(wǎng)絡(luò)驅(qū)動(dòng)層收取數(shù)據(jù)幀;步驟102,檢查數(shù)據(jù)巾貞是否帶有vlan標(biāo)簽vlantag,如果有vlantag,則執(zhí)行步驟103,否則執(zhí)行步驟104;步驟103,剝除數(shù)據(jù)巾貞的vlantag,重新執(zhí)行步驟102;步驟104,檢查數(shù)據(jù)幀是否為IP數(shù)據(jù),如果是,則去除數(shù)據(jù)幀的MAC頭部,形成數(shù)據(jù)包,再執(zhí)行步驟105,否則將數(shù)據(jù)幀提交Linux協(xié)議棧處理,此處不再進(jìn)一步分析;步驟105,從數(shù)據(jù)包中提取IP五元組信息,所述IP五元組信息包括數(shù)據(jù)包源IP,源端口,目的IP,目的端口以及傳輸層協(xié)議TCP或者UDP,根據(jù)此IP五元組信息,查詢(xún)Linux協(xié)議棧連接跟蹤表,如果找到數(shù)據(jù)包所屬的連接跟蹤條目對(duì)應(yīng)的結(jié)構(gòu)體structnf_conn,則執(zhí)行步驟106,否則執(zhí)行步驟109;步驟106,檢查數(shù)據(jù)包所屬連接跟蹤結(jié)構(gòu)體成員structnfp_info*nfp[l]是否為NULL,如果為NULL,則執(zhí)行步驟109,否則執(zhí)行步驟107;步驟107,用數(shù)據(jù)包所屬連接跟蹤條目記錄的數(shù)據(jù)包發(fā)送方向的源IP、源端口、目的IP、目的端口依次替換數(shù)據(jù)包的目的IP、目的端口、源IP、源端口;連接跟蹤條目記錄的數(shù)據(jù)包發(fā)送方向的源IP、源端口、目的IP、目的端口記錄在連接跟蹤結(jié)構(gòu)體structnf_conn成員structnf_conntrack_tupIe_hashtuplehash[IP_CT_DIR_MAX]中;步驟108,根據(jù)指針nfp[l]所指向的加速信息記錄表,對(duì)數(shù)據(jù)包skb內(nèi)容進(jìn)行相應(yīng)的修改,修改內(nèi)容包括用加速信息記錄表中的dscp值重新設(shè)置數(shù)據(jù)包DSCP域;將加速信息記錄表中的dst、priority>mark、output_dev和input_dev分別賦值給skb->_skb_dst、skb_>priority、skb_>mark、skb_>dev和skb_>input_dev,修改完成后執(zhí)行步驟111;步驟109,數(shù)據(jù)包進(jìn)入LinuxIP協(xié)議棧的收包處理流程;步驟110,提取數(shù)據(jù)包經(jīng)LinuxIP協(xié)議棧處理后的路由結(jié)果、skb_>mark、skb->priority>skb_>dev和skb_>input_dev信息,依次賦值給加速信息記錄表的dst、mark、priority、output_dev和input_dev成員,并建立連接跟蹤結(jié)構(gòu)體成員nfp[I]與加速信息記錄表的映射關(guān)系;然后執(zhí)行步驟111;步驟111,將數(shù)據(jù)包提交函數(shù)ip_local_deliver_finish處理,然后進(jìn)入Linuxsocket處理流程。6.如權(quán)利要求3所述的加速Linux系統(tǒng)本地?cái)?shù)據(jù)包處理的方法,其特征在于,本地?cái)?shù)據(jù)包發(fā)送方向的處理流程包括以下步驟步驟201,函數(shù)ip_local_out從傳輸層接收發(fā)送數(shù)據(jù)包;步驟202,從數(shù)據(jù)包中提取IP五元組信息,所述IP五元組信息包括數(shù)據(jù)包源IP,源端口,目的IP,目的端口以及傳輸層協(xié)議TCP或者UDP,根據(jù)此IP五元組信息,查詢(xún)Linux協(xié)議棧連接跟蹤表,如果找到數(shù)據(jù)包所屬的連接跟蹤條目對(duì)應(yīng)的結(jié)構(gòu)體structnf_conn,則執(zhí)行步驟203,否則執(zhí)行步驟206;步驟203,檢查數(shù)據(jù)包所屬連接跟蹤結(jié)構(gòu)體成員structnfp_info*nfp是否為NULL,如果為NULL,則執(zhí)行步驟206,否則執(zhí)行步驟204;步驟204,用數(shù)據(jù)包所屬連接跟蹤條目記錄的數(shù)據(jù)包接收方向的源IP、源端口、目的IP、目的端口依次替換數(shù)據(jù)包的目的IP、目的端口、源IP、源端口;連接跟蹤條目記錄的數(shù)據(jù)包接收方向的源IP、源端口、目的IP、目的端口記錄在連接跟蹤結(jié)構(gòu)體structnf_conn成員structnf_conntrack_tupIe_hashtuplehash[IP_CT_DIR_MAX]中;步驟205,根據(jù)指針nfp所指向的加速信息記錄表,對(duì)數(shù)據(jù)包skb內(nèi)容進(jìn)行相應(yīng)的修改,修改內(nèi)容包括用加速信息記錄表中的dscp值重新設(shè)置數(shù)據(jù)包DSCP域;將加速信息記錄表中的dst、priority>mark、output_dev和input_dev分別賦值給skb_>skb_dst、skb_>priority、skb_>mark、skb_>dev和skb_>input_dev,修改完成后執(zhí)行步驟208;步驟206,數(shù)據(jù)包進(jìn)入LinuxIP協(xié)議棧的發(fā)包處理流程;步驟207,提取數(shù)據(jù)包經(jīng)LinuxIP協(xié)議棧處理后的路由結(jié)果、skb_>mark、skb->priority>skb_>dev和skb_>input_dev信息,依次賦值給加速信息記錄表的dst、mark、priority、output_dev和input_dev成員,并建立連接跟蹤結(jié)構(gòu)體成員nfp[O]與加速/[目息記錄表的映射關(guān)系;然后執(zhí)行步驟208;步驟208,將數(shù)據(jù)包提交函數(shù)ip_finish_0UtpUt處理,然后進(jìn)入網(wǎng)絡(luò)驅(qū)動(dòng)層發(fā)送出去。7.如權(quán)利要求3所述的加速Linux系統(tǒng)本地?cái)?shù)據(jù)包處理的方法,其特征在于,當(dāng)加速信息記錄表需要?jiǎng)h除時(shí),由加速信息刪除單元完成該操作,包括以下步驟步驟301:當(dāng)Linux網(wǎng)絡(luò)狀態(tài)改變,以通知鏈的形式發(fā)送消息給消息處理器;所述Linux網(wǎng)絡(luò)狀態(tài)改變包括dptables規(guī)則的添加或刪除;網(wǎng)絡(luò)設(shè)備狀態(tài)改變;IPV4地址改變;路由表的添加或刪除;路由緩存清除;以及連接跟蹤條目自身老化;步驟302:消息處理器根據(jù)接收到的消息,匹配與之對(duì)應(yīng)的連接跟蹤條目;步驟303:消息處理器檢查所匹配的連接跟蹤條目是否存在與之對(duì)應(yīng)的加速信息記錄表,如果存在,則執(zhí)行步驟304,否則結(jié)束退出;步驟304:消息處理器刪除所匹配的連接跟蹤條目所對(duì)應(yīng)的加速信息記錄表。8.一種加速Linux系統(tǒng)本地?cái)?shù)據(jù)包處理的裝置,其特征在于,包括加速信息存儲(chǔ)單元,加速信息設(shè)置單元,加速判決單元,本地?cái)?shù)據(jù)包加速處理單元和加速信息刪除單元;加速信息存儲(chǔ)單元,用于保存屬于同一條連接跟蹤條目的數(shù)據(jù)包在進(jìn)行加速處理時(shí)所需要的路由和包修改信息,這些信息以加速信息記錄表的形式保存,加速信息記錄表通過(guò)連接跟蹤條目間接訪(fǎng)問(wèn);加速信息設(shè)置單元,負(fù)責(zé)新建和設(shè)置加速信息記錄表,并建立加速信息記錄表與連接跟蹤條目的映射關(guān)系;加速判決單元,用于判斷本地?cái)?shù)據(jù)包是否可以進(jìn)行加速處理,如果可以進(jìn)行加速處理,則將該數(shù)據(jù)包提交本地?cái)?shù)據(jù)包加速處理單元處理,否則將該數(shù)據(jù)包提交Linux協(xié)議棧處理;進(jìn)一步,如果該數(shù)據(jù)包為IP數(shù)據(jù),則在LinuxIP協(xié)議棧將該數(shù)據(jù)包處理完成后,該數(shù)據(jù)包將進(jìn)一步提交加速信息設(shè)置單元處理;本地?cái)?shù)據(jù)包加速處理單元,負(fù)責(zé)根據(jù)本地?cái)?shù)據(jù)包所屬連接跟蹤條目以及其對(duì)應(yīng)的加速信息記錄表內(nèi)容,對(duì)該數(shù)據(jù)包進(jìn)行修改,修改完成后,將接收的本地?cái)?shù)據(jù)包提交Linuxsocket層處理,將發(fā)送的本地?cái)?shù)據(jù)包提交網(wǎng)絡(luò)驅(qū)動(dòng)層處理;加速信息刪除單元,負(fù)責(zé)監(jiān)控Linux網(wǎng)絡(luò)狀態(tài)的變化,清除與其狀態(tài)變化相關(guān)聯(lián)的連接跟蹤條目所對(duì)應(yīng)的加速信息記錄表。全文摘要本發(fā)明涉及一種加速Linux系統(tǒng)本地?cái)?shù)據(jù)包處理的方法及裝置,將本地?cái)?shù)據(jù)包經(jīng)LinuxIP協(xié)議棧處理后的路由和包修改信息,記錄在該數(shù)據(jù)包所屬連接跟蹤結(jié)構(gòu)體中,形成連接跟蹤條目,對(duì)后續(xù)屬于此連接跟蹤條目的本地?cái)?shù)據(jù)包,將使用連接跟蹤條目中記錄下來(lái)的路由和包修改信息直接處理,從而達(dá)到加速本地?cái)?shù)據(jù)包處理的目的。本發(fā)明所述的加速Linux系統(tǒng)本地?cái)?shù)據(jù)包處理的方法及裝置,簡(jiǎn)化數(shù)據(jù)包在Linux協(xié)議棧的處理流程,從而達(dá)到加速Linux系統(tǒng)對(duì)本地?cái)?shù)據(jù)包處理的目的,有效的提高了Linux系統(tǒng)處理本地?cái)?shù)據(jù)包的能力,彌補(bǔ)了目前網(wǎng)絡(luò)加速領(lǐng)域?qū)inux系統(tǒng)收發(fā)本地?cái)?shù)據(jù)包進(jìn)行加速的空白。文檔編號(hào)H04L12/70GK102946347SQ201210524029公開(kāi)日2013年2月27日申請(qǐng)日期2012年12月7日優(yōu)先權(quán)日2012年12月7日發(fā)明者陽(yáng)琳峰,王志軍,曹祁生申請(qǐng)人:烽火通信科技股份有限公司