報文處理方法及裝置與流程
2023-05-31 18:04:16 1

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