本發(fā)明涉及通信領(lǐng)域,具體而言,涉及一種報(bào)文處理方法及裝置。
背景技術(shù):
Linux作為免費(fèi)開源的操作系統(tǒng),其強(qiáng)大的網(wǎng)絡(luò)處理能力和穩(wěn)定性,深受通信設(shè)備制造商們的歡迎,現(xiàn)在絕大多數(shù)網(wǎng)絡(luò)設(shè)備都是基于Linux操作系統(tǒng)開發(fā)。
傳輸控制協(xié)議(TCP)/因特網(wǎng)協(xié)議(IP)體系是當(dāng)前互聯(lián)網(wǎng)的通信協(xié)議標(biāo)準(zhǔn),在Linux網(wǎng)絡(luò)內(nèi)核中得到完整的實(shí)現(xiàn),該體系分為四個(gè)層次:應(yīng)用層,傳輸層,網(wǎng)絡(luò)層,網(wǎng)絡(luò)介質(zhì)層。Linux網(wǎng)絡(luò)內(nèi)核參照網(wǎng)絡(luò)協(xié)議體系實(shí)現(xiàn)了網(wǎng)絡(luò)互聯(lián)功能,包括以下部分:
1.套接字接口,網(wǎng)絡(luò)內(nèi)核最頂層支持應(yīng)用程序開發(fā)的接口,套接字接口是一系列標(biāo)準(zhǔn)函數(shù)。套接字支持多種不同類型的協(xié)議族:UNIX域協(xié)議族、TCP/IP協(xié)議族、互聯(lián)網(wǎng)數(shù)據(jù)包交換(IPX)協(xié)議族,其中TCP/IP協(xié)議族應(yīng)用最為廣泛;
2.傳輸層和網(wǎng)絡(luò)層,傳輸層包括標(biāo)準(zhǔn)的TCP和用戶數(shù)據(jù)報(bào)(UDP)協(xié)議模塊,而網(wǎng)絡(luò)層包括標(biāo)準(zhǔn)的IP協(xié)議模塊;
3.數(shù)據(jù)鏈路層,對(duì)于需要邏輯鏈路的網(wǎng)絡(luò),數(shù)據(jù)鏈路層提供獨(dú)立的邏輯鏈路協(xié)議模塊,比如點(diǎn)對(duì)點(diǎn)協(xié)議(PPP)、串行線路網(wǎng)際協(xié)議(SLIP)等。對(duì)于以太網(wǎng),該層比較簡單,主要的以太網(wǎng)協(xié)議實(shí)現(xiàn)被集成到底層網(wǎng)卡驅(qū)動(dòng)中;
4.網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng),由于物理特性的差異,不同的網(wǎng)絡(luò)設(shè)備采用不同的設(shè)備驅(qū)動(dòng)。
本發(fā)明的發(fā)明人在研究過程中發(fā)現(xiàn),用戶態(tài)應(yīng)用程序讀取數(shù)據(jù)報(bào)文,需要先打開網(wǎng)絡(luò)設(shè)備并綁定套接字。數(shù)據(jù)報(bào)文經(jīng)過網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)到內(nèi)核網(wǎng)絡(luò)協(xié)議棧,然后到用戶態(tài)應(yīng)用程序,處理流程復(fù)雜,同時(shí)內(nèi)核態(tài)到用戶態(tài)空間還需要經(jīng)過一次內(nèi)存拷貝,不適合對(duì)性能要求高的場合。
針對(duì)相關(guān)技術(shù)通過套接字接口和網(wǎng)絡(luò)協(xié)議棧無法快速進(jìn)行報(bào)文處理的問題,目前尚未提出有效的解決方案。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提供了一種報(bào)文處理方法及裝置,以至少解決相關(guān)技術(shù)中通過套接字接口和網(wǎng)絡(luò)協(xié)議棧無法快速進(jìn)行報(bào)文處理的問題。
根據(jù)本發(fā)明的一個(gè)方面,提供了一種報(bào)文處理方法,包括:在用戶態(tài)應(yīng)用程序與網(wǎng) 絡(luò)設(shè)備驅(qū)動(dòng)之間創(chuàng)建快速通道緩沖區(qū);判斷待傳輸報(bào)文是否屬于預(yù)設(shè)報(bào)文類型;在判斷到所述待傳輸報(bào)文屬于所述預(yù)設(shè)報(bào)文類型的情況下,通過所述快速通道緩沖區(qū),在用戶態(tài)應(yīng)用程序與網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)之間傳輸所述待傳輸報(bào)文。
優(yōu)選地,在用戶態(tài)應(yīng)用程序與網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)之間創(chuàng)建所述快速通道緩沖區(qū)包括:創(chuàng)建并注冊(cè)快速通道字符節(jié)點(diǎn);通過所述快速通道字符節(jié)點(diǎn),用戶態(tài)應(yīng)用程序通過系統(tǒng)調(diào)用創(chuàng)建共享隊(duì)列,得到所述快速通道緩沖區(qū);通過所述快速通道字符節(jié)點(diǎn),用戶態(tài)應(yīng)用程序設(shè)置所述預(yù)設(shè)報(bào)文類型。
優(yōu)選地,在判斷到所述待傳輸報(bào)文屬于所述預(yù)設(shè)報(bào)文類型的情況下,在通過所述快速通道緩沖區(qū),在用戶態(tài)應(yīng)用程序與網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)之間傳輸所述待傳輸報(bào)文之前,所述方法還包括:判斷所述快速通道緩沖區(qū)是否已滿;其中,在判斷到所述快速通道緩沖區(qū)未滿的情況下,通過所述快速通道緩沖區(qū),在用戶態(tài)應(yīng)用程序與網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)之間傳輸所述待傳輸報(bào)文。
優(yōu)選地,在判斷到所述快速通道緩沖區(qū)已滿的情況下,所述方法還包括:丟棄所述待傳輸報(bào)文。
優(yōu)選地,在判斷到所述待傳輸報(bào)文不屬于所述預(yù)設(shè)報(bào)文類型的情況下,所述方法還包括:通過網(wǎng)絡(luò)協(xié)議棧在用戶態(tài)應(yīng)用程序與網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)之間傳輸所述待傳輸報(bào)文。
優(yōu)選地,通過所述網(wǎng)絡(luò)協(xié)議棧在用戶態(tài)應(yīng)用程序與網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)之間傳輸所述待傳輸報(bào)文包括:將所述待傳輸報(bào)文存儲(chǔ)到所述網(wǎng)絡(luò)協(xié)議棧;通過套接字接口從所述網(wǎng)絡(luò)協(xié)議棧讀取所述待傳輸報(bào)文。
根據(jù)本發(fā)明的另一個(gè)方面,還提供了一種報(bào)文處理裝置,包括:創(chuàng)建模塊,用于在用戶態(tài)應(yīng)用程序與網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)之間創(chuàng)建快速通道緩沖區(qū);第一判斷模塊,用于判斷待傳輸報(bào)文是否屬于預(yù)設(shè)報(bào)文類型;第一傳輸模塊,用于在判斷到所述待傳輸報(bào)文屬于所述預(yù)設(shè)報(bào)文類型的情況下,通過所述快速通道緩沖區(qū),在用戶態(tài)應(yīng)用程序與網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)之間傳輸所述待傳輸報(bào)文。
優(yōu)選地,所述裝置還包括:第二判斷模塊,用于判斷所述快速通道緩沖區(qū)是否已滿;其中,在判斷到所述快速通道緩沖區(qū)未滿的情況下,通過所述快速通道緩沖區(qū),在用戶態(tài)應(yīng)用程序與網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)之間傳輸所述待傳輸報(bào)文。
優(yōu)選地,所述裝置還包括:丟棄模塊,用于在判斷到所述快速通道緩沖區(qū)已滿的情況下,丟棄所述待傳輸報(bào)文。
優(yōu)選地,所述裝置還包括:第二傳輸模塊,用于在判斷到所述待傳輸報(bào)文不屬于所述預(yù)設(shè)報(bào)文類型的情況下,通過網(wǎng)絡(luò)協(xié)議棧在用戶態(tài)應(yīng)用程序與網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)之間傳輸所述待傳輸報(bào)文。
通過本發(fā)明,采用用戶態(tài)應(yīng)用程序與網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)之間創(chuàng)建快速通道緩沖區(qū);判斷 待傳輸報(bào)文是否屬于預(yù)設(shè)報(bào)文類型;在判斷到待傳輸報(bào)文屬于預(yù)設(shè)報(bào)文類型的情況下,通過快速通道緩沖區(qū),在用戶態(tài)應(yīng)用程序與網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)之間傳輸待傳輸報(bào)文的方式,解決了通過套接字接口和網(wǎng)絡(luò)協(xié)議棧無法快速進(jìn)行報(bào)文處理的問題,進(jìn)而達(dá)到了快速進(jìn)行報(bào)文處理的效果。
附圖說明
此處所說明的附圖用來提供對(duì)本發(fā)明的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,本發(fā)明的示意性實(shí)施例及其說明用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的不當(dāng)限定。在附圖中:
圖1是根據(jù)本發(fā)明實(shí)施例的報(bào)文處理方法的流程圖;
圖2是根據(jù)本發(fā)明實(shí)施例的報(bào)文處理裝置的結(jié)構(gòu)框圖;
圖3是根據(jù)本發(fā)明實(shí)施例的報(bào)文處理裝置的優(yōu)選結(jié)構(gòu)框圖一;
圖4是根據(jù)本發(fā)明實(shí)施例的報(bào)文處理裝置的優(yōu)選結(jié)構(gòu)框圖二;
圖5是根據(jù)本發(fā)明實(shí)施例的報(bào)文處理裝置的優(yōu)選結(jié)構(gòu)框圖三;
圖6是根據(jù)本發(fā)明優(yōu)選實(shí)施例的快速報(bào)文處理裝置的結(jié)構(gòu)框圖;
圖7是根據(jù)本發(fā)明優(yōu)選實(shí)施例的快速通道初始化流程圖;
圖8是根據(jù)本發(fā)明優(yōu)選實(shí)施例的內(nèi)核和用戶態(tài)共享隊(duì)列數(shù)據(jù)交互結(jié)構(gòu)框圖;
圖9是根據(jù)本發(fā)明優(yōu)選實(shí)施例的快速報(bào)文處理方法流程圖。
具體實(shí)施方式
下文中將參考附圖并結(jié)合實(shí)施例來詳細(xì)說明本發(fā)明。需要說明的是,在不沖突的情況下,本申請(qǐng)中的實(shí)施例及實(shí)施例中的特征可以相互組合。
需要說明的是,本發(fā)明的說明書和權(quán)利要求書及上述附圖中的術(shù)語“第一”、“第二”等是用于區(qū)別類似的對(duì)象,而不必用于描述特定的順序或先后次序。
在本實(shí)施例中提供了一種報(bào)文處理方法,圖1是根據(jù)本發(fā)明實(shí)施例的報(bào)文處理方法的流程圖,如圖1所示,該流程包括如下步驟:
步驟S102,在用戶態(tài)應(yīng)用程序與網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)之間創(chuàng)建快速通道緩沖區(qū);
步驟S104,判斷待傳輸報(bào)文是否屬于預(yù)設(shè)報(bào)文類型;
步驟S106,在判斷到待傳輸報(bào)文屬于預(yù)設(shè)報(bào)文類型的情況下,通過快速通道緩沖區(qū),在用戶態(tài)應(yīng)用程序與網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)之間傳輸待傳輸報(bào)文。
通過上述步驟,根據(jù)待傳輸報(bào)文的報(bào)文類型,對(duì)于屬于預(yù)設(shè)報(bào)文類型的待傳輸報(bào)文, 通過創(chuàng)建的快速通道緩沖區(qū)對(duì)報(bào)文進(jìn)行傳輸,使得屬于預(yù)設(shè)報(bào)文類型的待傳輸報(bào)文不必經(jīng)過網(wǎng)絡(luò)協(xié)議棧以及套接字接口的復(fù)雜處理,可以根據(jù)需要實(shí)現(xiàn)預(yù)設(shè)類型報(bào)文的快速傳輸??梢姡捎蒙鲜霾襟E,解決了通過套接字接口和網(wǎng)絡(luò)協(xié)議棧無法快速進(jìn)行報(bào)文處理的問題,進(jìn)而達(dá)到了快速進(jìn)行報(bào)文處理的效果。
優(yōu)選地,預(yù)設(shè)報(bào)文類型可以是分片重組報(bào)文。
優(yōu)選地,在步驟S102中,可以通過創(chuàng)建并注冊(cè)快速通道字符節(jié)點(diǎn);通過快速通道字符節(jié)點(diǎn),用戶態(tài)應(yīng)用程序通過系統(tǒng)調(diào)用創(chuàng)建共享隊(duì)列,得到快速通道緩沖區(qū);通過快速通道字符節(jié)點(diǎn),用戶態(tài)應(yīng)用程序設(shè)置預(yù)設(shè)報(bào)文類型,在用戶態(tài)應(yīng)用程序與網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)之間創(chuàng)建快速通道緩沖區(qū)。
優(yōu)選地,快速通道緩沖區(qū)可以是環(huán)形緩沖區(qū),該環(huán)形緩沖區(qū)可以反復(fù)使用固定大小的內(nèi)存空間,寫入與讀出需要進(jìn)行信息的協(xié)調(diào)與同步。
優(yōu)選地,網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)可以將數(shù)據(jù)報(bào)文的接收函數(shù)掛接快速通道報(bào)文處理的回調(diào)函數(shù),通過回調(diào)函數(shù)判斷預(yù)設(shè)報(bào)文類型;用戶態(tài)應(yīng)用程序打開快速通道設(shè)備節(jié)點(diǎn),創(chuàng)建共享隊(duì)列。用戶態(tài)應(yīng)用程序設(shè)置要處理的快速報(bào)文類型,通過系統(tǒng)調(diào)用獲取隊(duì)列的物理地址,映射到用戶態(tài)地址空間用戶態(tài)應(yīng)用程序。
優(yōu)選地,在判斷到待傳輸報(bào)文屬于預(yù)設(shè)報(bào)文類型的情況下,在步驟S104之前,還可以判斷快速通道緩沖區(qū)是否已滿;其中,在判斷到快速通道緩沖區(qū)未滿的情況下,通過快速通道緩沖區(qū),在用戶態(tài)應(yīng)用程序與網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)之間傳輸待傳輸報(bào)文。
優(yōu)選地,在判斷到快速通道緩沖區(qū)已滿的情況下,可以丟棄待傳輸報(bào)文。
優(yōu)選地,在判斷到快速通道緩沖區(qū)已滿的情況下,也可以將待傳輸報(bào)文發(fā)送到網(wǎng)絡(luò)協(xié)議棧,由網(wǎng)絡(luò)協(xié)議棧對(duì)報(bào)文進(jìn)行處理。
優(yōu)選地,在判斷到待傳輸報(bào)文不屬于預(yù)設(shè)報(bào)文類型的情況下,則可以通過網(wǎng)絡(luò)協(xié)議棧在用戶態(tài)應(yīng)用程序與網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)之間傳輸待傳輸報(bào)文,例如,通過網(wǎng)絡(luò)協(xié)議棧在用戶態(tài)應(yīng)用程序與網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)之間傳輸待傳輸報(bào)文的情況下:可以將由網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)發(fā)送至用戶態(tài)應(yīng)用程序的待傳輸報(bào)文存儲(chǔ)到網(wǎng)絡(luò)協(xié)議棧,用戶態(tài)應(yīng)用程序再通過網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)綁定的套接字接口從網(wǎng)絡(luò)協(xié)議棧讀取待傳輸報(bào)文;相應(yīng)的,由用戶態(tài)應(yīng)用程序發(fā)送至網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)的待傳輸報(bào)文也經(jīng)過套接字接口和網(wǎng)絡(luò)協(xié)議棧傳輸。
通過以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到根據(jù)上述實(shí)施例的方法可借助軟件加必需的通用硬件平臺(tái)的方式來實(shí)現(xiàn),當(dāng)然也可以通過硬件,但很多情況下前者是更佳的實(shí)施方式?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)(如ROM/RAM、磁碟、光盤)中,包括若干指令用以使得一臺(tái)終端設(shè)備(可以是手機(jī),計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述的方法。
在本實(shí)施例中還提供了一種報(bào)文處理裝置,該裝置用于實(shí)現(xiàn)上述實(shí)施例及優(yōu)選實(shí)施方式,已經(jīng)進(jìn)行過說明的不再贅述。如以下所使用的,術(shù)語“模塊”可以實(shí)現(xiàn)預(yù)定功能的軟件和/或硬件的組合。盡管以下實(shí)施例所描述的裝置較佳地以軟件來實(shí)現(xiàn),但是硬件,或者軟件和硬件的組合的實(shí)現(xiàn)也是可能并被構(gòu)想的。
圖2是根據(jù)本發(fā)明實(shí)施例的報(bào)文處理裝置的結(jié)構(gòu)框圖,如圖2所示,該裝置包括;創(chuàng)建模塊22、第一判斷模塊24、第一傳輸模塊26,其中,創(chuàng)建模塊22,用于在用戶態(tài)應(yīng)用程序與網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)之間創(chuàng)建快速通道緩沖區(qū);第一判斷模塊24,耦合至創(chuàng)建模塊22,用于判斷待傳輸報(bào)文是否屬于預(yù)設(shè)報(bào)文類型;第一傳輸模塊26,耦合至第一判斷模塊24,用于在判斷到待傳輸報(bào)文屬于預(yù)設(shè)報(bào)文類型的情況下,通過快速通道緩沖區(qū),在用戶態(tài)應(yīng)用程序與網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)之間傳輸待傳輸報(bào)文。
優(yōu)選地,上述創(chuàng)建模塊22用于創(chuàng)建并注冊(cè)快速通道字符節(jié)點(diǎn);通過快速通道字符節(jié)點(diǎn),用戶態(tài)應(yīng)用程序通過系統(tǒng)調(diào)用創(chuàng)建共享隊(duì)列,得到快速通道緩沖區(qū);通過快速通道字符節(jié)點(diǎn),用戶態(tài)應(yīng)用程序設(shè)置預(yù)設(shè)報(bào)文類型。
圖3是根據(jù)本發(fā)明實(shí)施例的報(bào)文處理裝置的優(yōu)選結(jié)構(gòu)框圖一,如圖3所示,該裝置還包括:第二判斷模塊32,耦合至第一判斷模塊24和第一傳輸模塊26之間,用于判斷快速通道緩沖區(qū)是否已滿;其中,在判斷到快速通道緩沖區(qū)未滿的情況下,通過快速通道緩沖區(qū),在用戶態(tài)應(yīng)用程序與網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)之間傳輸待傳輸報(bào)文。
圖4是根據(jù)本發(fā)明實(shí)施例的報(bào)文處理裝置的優(yōu)選結(jié)構(gòu)框圖二,如圖4所示,該裝置還包括:丟棄模塊42,耦合至第二判斷模塊32,用于丟棄待傳輸報(bào)文。
圖5是根據(jù)本發(fā)明實(shí)施例的報(bào)文處理裝置的優(yōu)選結(jié)構(gòu)框圖三,如圖5所示,該裝置還包括:第二傳輸模塊52,耦合至第一判斷模塊24,用于通過網(wǎng)絡(luò)協(xié)議棧在用戶態(tài)應(yīng)用程序與網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)之間傳輸待傳輸報(bào)文。
優(yōu)選地,第二傳輸模塊52可以用于將待傳輸報(bào)文存儲(chǔ)到網(wǎng)絡(luò)協(xié)議棧;通過套接字接口從網(wǎng)絡(luò)協(xié)議棧讀取待傳輸報(bào)文。
需要說明的是,上述各個(gè)模塊是可以通過軟件或硬件來實(shí)現(xiàn)的,對(duì)于后者,可以通過以下方式實(shí)現(xiàn),但不限于此:上述模塊均位于同一處理器中;或者,上述模塊分別位于多個(gè)處理器中。
本發(fā)明的實(shí)施例還提供了一種軟件,該軟件用于執(zhí)行上述實(shí)施例及優(yōu)選實(shí)施方式中描述的技術(shù)方案。
本發(fā)明的實(shí)施例還提供了一種存儲(chǔ)介質(zhì)。在本實(shí)施例中,上述存儲(chǔ)介質(zhì)可以被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:
S20,在用戶態(tài)應(yīng)用程序與網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)之間創(chuàng)建快速通道緩沖區(qū);
S40,判斷待傳輸報(bào)文是否屬于預(yù)設(shè)報(bào)文類型;
S60,在判斷到待傳輸報(bào)文屬于預(yù)設(shè)報(bào)文類型的情況下,通過快速通道緩沖區(qū),在用戶態(tài)應(yīng)用程序與網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)之間傳輸待傳輸報(bào)文。
可選地,存儲(chǔ)介質(zhì)還被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:
S22,創(chuàng)建并注冊(cè)快速通道字符節(jié)點(diǎn);
S24,通過快速通道字符節(jié)點(diǎn),用戶態(tài)應(yīng)用程序通過系統(tǒng)調(diào)用創(chuàng)建共享隊(duì)列,得到快速通道緩沖區(qū);
S26,通過快速通道字符節(jié)點(diǎn),用戶態(tài)應(yīng)用程序設(shè)置預(yù)設(shè)報(bào)文類型。
可選地,存儲(chǔ)介質(zhì)還被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:
S62,判斷快速通道緩沖區(qū)是否已滿。
可選地,存儲(chǔ)介質(zhì)還被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:
S622,在判斷到快速通道緩沖區(qū)未滿的情況下,丟棄待傳輸報(bào)文。
可選地,存儲(chǔ)介質(zhì)還被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:
S50,在判斷到待傳輸報(bào)文不屬于預(yù)設(shè)報(bào)文類型的情況下,通過網(wǎng)絡(luò)協(xié)議棧在用戶態(tài)應(yīng)用程序與網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)之間傳輸待傳輸報(bào)文。
可選地,存儲(chǔ)介質(zhì)還被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:
S52,將待傳輸報(bào)文存儲(chǔ)到網(wǎng)絡(luò)協(xié)議棧;
S54,通過套接字接口從網(wǎng)絡(luò)協(xié)議棧讀取待傳輸報(bào)文。
可選地,在本實(shí)施例中,上述存儲(chǔ)介質(zhì)可以包括但不限于:U盤、只讀存儲(chǔ)器(ROM,Read-Only Memory)、隨機(jī)存取存儲(chǔ)器(RAM,Random Access Memory)、移動(dòng)硬盤、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。
為了使本發(fā)明實(shí)施例的描述更加清楚,下面結(jié)合優(yōu)選實(shí)施例進(jìn)行描述和說明。
本發(fā)明優(yōu)選實(shí)施例提供了一種基于Linux操作系統(tǒng)的快速報(bào)文處理方法,以解決Linux內(nèi)核協(xié)議棧無法高效處理網(wǎng)卡性能要求高的報(bào)文的問題,同時(shí)充分發(fā)揮Linux協(xié)議棧的功能。
本發(fā)明優(yōu)選實(shí)施例提供的一種基于Linux操作系統(tǒng)的快速報(bào)文處理方案,包括如下模塊:
網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)模塊,用于網(wǎng)絡(luò)設(shè)備的探測,數(shù)據(jù)包的接收和發(fā)送。
Linux網(wǎng)絡(luò)協(xié)議棧,Linux提供的標(biāo)準(zhǔn)模塊,用于網(wǎng)絡(luò)報(bào)文處理。
快速通道模塊,用于共享隊(duì)列(相當(dāng)于上述快速通道緩沖區(qū))的創(chuàng)建,快速通道注冊(cè),報(bào)文的接收處理。
用戶態(tài)接收模塊,用于打開共享隊(duì)列,將共享隊(duì)列映射到用戶態(tài)空間,以及報(bào)文的接收處理。
本發(fā)明優(yōu)選實(shí)施例提供的一種基于Linux的快速報(bào)文處理方法,包括如下步驟:
步驟一,網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)在探測時(shí)注冊(cè)快速報(bào)文處理模塊;
步驟二,網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng),數(shù)據(jù)報(bào)文接收函數(shù)掛接快速通道報(bào)文處理的回調(diào)函數(shù);
步驟三,用戶態(tài)應(yīng)用程序,打開快速通道設(shè)備節(jié)點(diǎn),創(chuàng)建共享隊(duì)列,設(shè)置待處理的快速報(bào)文類型(相當(dāng)于上述預(yù)設(shè)報(bào)文類型),通過系統(tǒng)調(diào)用獲取隊(duì)列的物理地址,映射到用戶態(tài)地址空間;
步驟四,按照上述步驟初始化以后,網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)模塊接收的數(shù)據(jù)報(bào)文,可以進(jìn)行正常處理,根據(jù)設(shè)置的報(bào)文類型,確定后續(xù)處理方式;
步驟五,對(duì)于快速報(bào)文,直接存儲(chǔ)到快速通道模塊的共享隊(duì)列,應(yīng)用程序通過映射共享內(nèi)存的方式,獲取數(shù)據(jù)報(bào)文;對(duì)于沒有匹配的報(bào)文,全部上送到Linux網(wǎng)絡(luò)協(xié)議棧,應(yīng)用程序需要通過套接字接口讀取報(bào)文。
下面結(jié)合附圖對(duì)本發(fā)明優(yōu)選實(shí)施例進(jìn)行說明。
為了解決Linux網(wǎng)絡(luò)協(xié)議棧處理高速報(bào)文性能低的問題,本發(fā)明優(yōu)選實(shí)施例提供了一種快速處理報(bào)文的方法,同時(shí)對(duì)于普通報(bào)文可以使用Linux網(wǎng)絡(luò)協(xié)議棧。
圖6是根據(jù)本發(fā)明優(yōu)選實(shí)施例的快速報(bào)文處理裝置的結(jié)構(gòu)框圖,如圖6所示,該裝置包括:在Linux內(nèi)核態(tài)創(chuàng)建的快速通道模塊,耦合至應(yīng)用程序和網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)模塊之間,用于高速報(bào)文的處理,應(yīng)用程序快速報(bào)文通過映射共享內(nèi)存的方式,訪問快速通道模塊的報(bào)文;套接字接口,耦合至應(yīng)用程序和Linux網(wǎng)絡(luò)協(xié)議棧,用于普通報(bào)文通過網(wǎng)絡(luò)套接字的方式訪問Linux網(wǎng)絡(luò)協(xié)議棧;Linux網(wǎng)絡(luò)協(xié)議棧,耦合至套接字接口和網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)模塊之間,用于存儲(chǔ)與處理普通報(bào)文。
本發(fā)明優(yōu)選實(shí)施例中,需要處理的快速報(bào)文可以為分片重組報(bào)文,普通報(bào)文可以為除了分片重組報(bào)文以外的其他報(bào)文,例如地址解析協(xié)議(ARP)請(qǐng)求報(bào)文,因特網(wǎng)協(xié)議版本4(IPv4)報(bào)文。
本發(fā)明優(yōu)選實(shí)施例中,快速通道模塊用于提供創(chuàng)建共享隊(duì)列接口,獲取共享內(nèi)存地址,報(bào)文接收處理,共享隊(duì)列的管理。
圖7是根據(jù)本發(fā)明優(yōu)選實(shí)施例的快速通道初始化流程圖,如圖7所示,該流程包括 以下步驟:
步驟S702,網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)探測,驅(qū)動(dòng)加載;
步驟S704,創(chuàng)建快速通道字符設(shè)備,注冊(cè)設(shè)備節(jié)點(diǎn),提供系統(tǒng)調(diào)用接口,包括創(chuàng)建共享隊(duì)列,獲取映射關(guān)系,設(shè)置快速報(bào)文類型;
步驟S706,網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)的報(bào)文接收處理函數(shù),掛接快速通道報(bào)文的接收函數(shù);
步驟S708,Linux內(nèi)核啟動(dòng),加載快速通道模塊;
步驟S710,用戶程序通過系統(tǒng)調(diào)用,創(chuàng)建快速通道緩沖區(qū),設(shè)置快速通道的報(bào)文類型(相當(dāng)于上述預(yù)設(shè)報(bào)文類型)。
優(yōu)選地,上述共享隊(duì)列是一個(gè)先進(jìn)先出的環(huán)形隊(duì)列,圖8是根據(jù)本發(fā)明優(yōu)選實(shí)施例的內(nèi)核和用戶態(tài)共享隊(duì)列數(shù)據(jù)交互結(jié)構(gòu)框圖,如圖8所示,環(huán)形隊(duì)列不需要進(jìn)行動(dòng)態(tài)的內(nèi)存釋放和分配,可以反復(fù)使用固定大小的內(nèi)存空間;快速通道模塊作為寫入模塊將報(bào)文插入隊(duì)列;用戶程序作為讀出模塊將報(bào)文彈出隊(duì)列;寫入模塊和讀出模塊需要進(jìn)行信息的協(xié)調(diào)和同步;對(duì)于多線程和多進(jìn)程的寫入或讀出模塊,寫入模塊間以及讀出模塊間需要進(jìn)行臨界區(qū)處理。
在實(shí)際的隊(duì)列插入和彈出操作中,是不斷交叉進(jìn)行的,當(dāng)插入(push)操作時(shí),隊(duì)列頭(head)會(huì)增加;而彈出(pop)操作時(shí),隊(duì)列尾(tail)會(huì)增加。push的速度快的時(shí)候,會(huì)追上tail,這個(gè)時(shí)候說明隊(duì)列已滿,不能再進(jìn)行push的操作了,需要等待pop操作騰出隊(duì)列的空間。當(dāng)pop的操作快,使得tail追上head,這個(gè)時(shí)候說明隊(duì)列已空,不能再進(jìn)行pop操作,需要等待push進(jìn)來數(shù)據(jù)。
圖9是根據(jù)本發(fā)明優(yōu)選實(shí)施例的快速報(bào)文處理方法流程圖,如圖9所示,該流程包括以下步驟:
步驟S902,網(wǎng)卡設(shè)備驅(qū)動(dòng)從硬件設(shè)備獲取數(shù)據(jù)報(bào)文;
步驟S904,對(duì)數(shù)據(jù)報(bào)文的二層頭進(jìn)行分析,如果匹配快速通道的關(guān)鍵字(即判斷是否屬于預(yù)設(shè)報(bào)文類型),則執(zhí)行步驟S906,進(jìn)入快速通道處理流程,否則,轉(zhuǎn)到步驟S914,報(bào)文進(jìn)入Linux網(wǎng)絡(luò)協(xié)議棧處理;
步驟S906,判斷隊(duì)列的管理節(jié)點(diǎn)的讀寫指針。若環(huán)形隊(duì)列首尾相接,隊(duì)列已滿,則執(zhí)行步驟S908,否則執(zhí)行步驟S910;
步驟S908,處理隊(duì)列滿的報(bào)文,直接丟掉報(bào)文;
步驟S910,將報(bào)文存儲(chǔ)到環(huán)形隊(duì)列;
步驟S912,調(diào)整環(huán)形隊(duì)列的寫指針,執(zhí)行下一空閑的緩沖區(qū);
步驟S914,處理普通報(bào)文,對(duì)于高性能沒有要求,數(shù)據(jù)報(bào)文被送到Linux網(wǎng)絡(luò)協(xié)議棧處理。
綜上所述,通過本發(fā)明的上述實(shí)施例和優(yōu)選實(shí)施例,新增了一種報(bào)文處理模式,利用快速通道緩沖區(qū),可以有選擇的繞過Linux網(wǎng)絡(luò)協(xié)議棧,簡化報(bào)文的接收流程,減少中央處理器(Central Processing Unit,簡稱為CPU)資源的損耗,使接收性能大幅提升,可以滿足萬兆以太網(wǎng)對(duì)性能的要求,同時(shí)兼顧了網(wǎng)絡(luò)協(xié)議棧的強(qiáng)大功能,使普通報(bào)文可以直接通過Linux網(wǎng)絡(luò)協(xié)議棧處理。
顯然,本領(lǐng)域的技術(shù)人員應(yīng)該明白,上述的本發(fā)明的各模塊或各步驟可以用通用的計(jì)算裝置來實(shí)現(xiàn),它們可以集中在單個(gè)的計(jì)算裝置上,或者分布在多個(gè)計(jì)算裝置所組成的網(wǎng)絡(luò)上,可選地,它們可以用計(jì)算裝置可執(zhí)行的程序代碼來實(shí)現(xiàn),從而,可以將它們存儲(chǔ)在存儲(chǔ)裝置中由計(jì)算裝置來執(zhí)行,并且在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟,或者將它們分別制作成各個(gè)集成電路模塊,或者將它們中的多個(gè)模塊或步驟制作成單個(gè)集成電路模塊來實(shí)現(xiàn)。這樣,本發(fā)明不限制于任何特定的硬件和軟件結(jié)合。
以上所述僅為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明,對(duì)于本領(lǐng)域的技術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。