本技術(shù)涉及計(jì)算機(jī),尤其涉及網(wǎng)絡(luò)通信領(lǐng)域,具體涉及一種數(shù)據(jù)傳輸方法、一種數(shù)據(jù)傳輸裝置、一種計(jì)算機(jī)設(shè)備、一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)以及一種計(jì)算機(jī)程序產(chǎn)品。
背景技術(shù):
1、目前,計(jì)算機(jī)設(shè)備在傳輸網(wǎng)絡(luò)數(shù)據(jù)包時(shí),數(shù)據(jù)都需經(jīng)過內(nèi)核態(tài)到用戶態(tài)的拷貝,比如,當(dāng)網(wǎng)絡(luò)中有網(wǎng)絡(luò)數(shù)據(jù)包到達(dá)網(wǎng)卡設(shè)備時(shí),網(wǎng)卡設(shè)備會(huì)通知內(nèi)核驅(qū)動(dòng)程序(例如該網(wǎng)卡設(shè)備對(duì)應(yīng)的網(wǎng)卡驅(qū)動(dòng)程序),由內(nèi)核驅(qū)動(dòng)程序?qū)⒕W(wǎng)絡(luò)數(shù)據(jù)包拷貝至內(nèi)核態(tài)協(xié)議棧,再由內(nèi)核態(tài)協(xié)議棧處理后將數(shù)據(jù)拷貝至上層應(yīng)用程序。這種傳輸方式導(dǎo)致內(nèi)核驅(qū)動(dòng)程序在中斷處理、上下文切換(即系統(tǒng)運(yùn)行狀態(tài)在用戶態(tài)和內(nèi)核態(tài)之間的切換)和內(nèi)核拷貝等方面有著高昂的開銷,以至于網(wǎng)絡(luò)數(shù)據(jù)包的傳輸效率低下。
技術(shù)實(shí)現(xiàn)思路
1、本技術(shù)實(shí)施例提供一種數(shù)據(jù)傳輸方法、裝置及計(jì)算機(jī)設(shè)備、存儲(chǔ)介質(zhì)、程序產(chǎn)品,可以通過第一工作進(jìn)程將符合過濾規(guī)則的網(wǎng)絡(luò)數(shù)據(jù)包直接從網(wǎng)卡設(shè)備傳遞到業(yè)務(wù)進(jìn)程,無需經(jīng)過內(nèi)核態(tài)到用戶態(tài)的拷貝,能夠提升網(wǎng)絡(luò)數(shù)據(jù)包的傳輸效率。
2、一方面,本技術(shù)實(shí)施例提供了一種數(shù)據(jù)傳輸方法,該方法包括:
3、從網(wǎng)卡設(shè)備獲取待傳輸?shù)木W(wǎng)絡(luò)數(shù)據(jù)包,網(wǎng)絡(luò)數(shù)據(jù)包需傳輸至處于用戶態(tài)的業(yè)務(wù)進(jìn)程;
4、調(diào)用過濾器對(duì)網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行過濾檢測;過濾器中預(yù)設(shè)有過濾規(guī)則,過濾檢測用于確認(rèn)網(wǎng)絡(luò)數(shù)據(jù)包是否符合過濾規(guī)則;
5、若檢測到網(wǎng)絡(luò)數(shù)據(jù)包符合過濾規(guī)則,則確定與過濾器相關(guān)聯(lián)的第一工作進(jìn)程;第一工作進(jìn)程是基于內(nèi)核旁路技術(shù)創(chuàng)建的進(jìn)程;
6、將網(wǎng)絡(luò)數(shù)據(jù)包傳輸至第一工作進(jìn)程,以使業(yè)務(wù)進(jìn)程從第一工作進(jìn)程中消費(fèi)網(wǎng)絡(luò)數(shù)據(jù)包。
7、另一方面,本技術(shù)實(shí)施例提供了一種數(shù)據(jù)傳輸裝置,該裝置包括:
8、獲取單元,用于從網(wǎng)卡設(shè)備獲取待傳輸?shù)木W(wǎng)絡(luò)數(shù)據(jù)包,網(wǎng)絡(luò)數(shù)據(jù)包需傳輸至處于用戶態(tài)的業(yè)務(wù)進(jìn)程;
9、處理單元,用于調(diào)用過濾器對(duì)網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行過濾檢測;過濾器中預(yù)設(shè)有過濾規(guī)則,過濾檢測用于確認(rèn)網(wǎng)絡(luò)數(shù)據(jù)包是否符合過濾規(guī)則;
10、處理單元,還用于若檢測到網(wǎng)絡(luò)數(shù)據(jù)包符合過濾規(guī)則,則確定與過濾器相關(guān)聯(lián)的第一工作進(jìn)程;第一工作進(jìn)程是基于內(nèi)核旁路技術(shù)創(chuàng)建的進(jìn)程;
11、處理單元,還用于將網(wǎng)絡(luò)數(shù)據(jù)包傳輸至第一工作進(jìn)程,以使業(yè)務(wù)進(jìn)程從第一工作進(jìn)程中消費(fèi)網(wǎng)絡(luò)數(shù)據(jù)包。
12、在一種實(shí)現(xiàn)方式中,過濾規(guī)則包括以下至少一項(xiàng):協(xié)議過濾規(guī)則、類型過濾規(guī)則、端口過濾規(guī)則、大小過濾規(guī)則;
13、協(xié)議過濾規(guī)則包括指定的網(wǎng)絡(luò)傳輸協(xié)議,指定的網(wǎng)絡(luò)傳輸協(xié)議包括以下任一種或多種:用戶數(shù)據(jù)報(bào)協(xié)議udp、快速udp網(wǎng)絡(luò)連接協(xié)議quic、傳輸控制協(xié)議tcp、超文本傳輸協(xié)議http、互聯(lián)網(wǎng)協(xié)議ip;
14、類型過濾規(guī)則包括指定的數(shù)據(jù)包類型,指定的數(shù)據(jù)包類型包括以下任一種或多種:視頻數(shù)據(jù)包、音頻數(shù)據(jù)包、圖像數(shù)據(jù)包、文本數(shù)據(jù)包;
15、端口過濾規(guī)則包括指定的端口標(biāo)識(shí);大小過濾規(guī)則包括指定的數(shù)據(jù)包大小范圍;
16、內(nèi)核旁路技術(shù)包括以下任一種:數(shù)據(jù)平面開發(fā)套件dpdk、高性能網(wǎng)絡(luò)輸入/輸出框架netmap。
17、在一種實(shí)現(xiàn)方式中,過濾規(guī)則包括協(xié)議過濾規(guī)則;處理單元用于調(diào)用過濾器對(duì)網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行過濾檢測時(shí),具體用于:
18、調(diào)用過濾器對(duì)網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行解析,得到網(wǎng)絡(luò)數(shù)據(jù)包遵循的網(wǎng)絡(luò)傳輸協(xié)議;
19、若網(wǎng)絡(luò)數(shù)據(jù)包遵循的網(wǎng)絡(luò)傳輸協(xié)議與協(xié)議過濾規(guī)則中指定的網(wǎng)絡(luò)傳輸協(xié)議相匹配,則確認(rèn)網(wǎng)絡(luò)數(shù)據(jù)包符合過濾規(guī)則。
20、在一種實(shí)現(xiàn)方式中,過濾規(guī)則包括類型過濾規(guī)則;處理單元用于調(diào)用過濾器對(duì)網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行過濾檢測時(shí),具體用于:
21、調(diào)用過濾器對(duì)網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行解析,得到網(wǎng)絡(luò)數(shù)據(jù)包所屬的數(shù)據(jù)包類型;
22、若網(wǎng)絡(luò)數(shù)據(jù)包所屬的數(shù)據(jù)包類型與類型過濾規(guī)則中指定的數(shù)據(jù)包類型相匹配,則確認(rèn)網(wǎng)絡(luò)數(shù)據(jù)包符合過濾規(guī)則。
23、在一種實(shí)現(xiàn)方式中,過濾規(guī)則包括端口過濾規(guī)則;處理單元用于調(diào)用過濾器對(duì)網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行過濾檢測時(shí),具體用于:
24、調(diào)用過濾器對(duì)網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行解析,得到網(wǎng)絡(luò)數(shù)據(jù)包中的端口標(biāo)識(shí);
25、若網(wǎng)絡(luò)數(shù)據(jù)包中的端口標(biāo)識(shí)與端口過濾規(guī)則中指定的端口標(biāo)識(shí)相匹配,則確認(rèn)網(wǎng)絡(luò)數(shù)據(jù)包符合過濾規(guī)則。
26、在一種實(shí)現(xiàn)方式中,過濾規(guī)則包括大小過濾規(guī)則;處理單元用于調(diào)用過濾器對(duì)網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行過濾檢測時(shí),具體用于:
27、調(diào)用過濾器對(duì)網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行解析,得到網(wǎng)絡(luò)數(shù)據(jù)包的數(shù)據(jù)包大小;
28、若網(wǎng)絡(luò)數(shù)據(jù)包的數(shù)據(jù)包大小與端口過濾規(guī)則中指定的數(shù)據(jù)包大小范圍相匹配,則確認(rèn)網(wǎng)絡(luò)數(shù)據(jù)包符合過濾規(guī)則。
29、在一種實(shí)現(xiàn)方式中,處理單元還用于:
30、建立過濾器與第一工作進(jìn)程之間的關(guān)聯(lián)關(guān)系。
31、在一種實(shí)現(xiàn)方式中,處理單元用于建立過濾器與第一工作進(jìn)程之間的關(guān)聯(lián)關(guān)系時(shí),具體用于:
32、獲取過濾表達(dá)式,過濾表達(dá)式是基于過濾規(guī)則編寫得到的;
33、對(duì)過濾表達(dá)式進(jìn)行編譯處理,得到過濾器對(duì)應(yīng)的過濾程序;
34、通過輸入輸出控制系統(tǒng)調(diào)用,將過濾程序加載至第一工作進(jìn)程的套接字上;加載成功后,過濾器與第一工作進(jìn)程之間相關(guān)聯(lián)。
35、在一種實(shí)現(xiàn)方式中,處理單元用于將網(wǎng)絡(luò)數(shù)據(jù)包傳輸至第一工作進(jìn)程,以使業(yè)務(wù)進(jìn)程從第一工作進(jìn)程中消費(fèi)網(wǎng)絡(luò)數(shù)據(jù)包時(shí),具體用于:
36、由過濾程序通過第一工作進(jìn)程的套接字,將網(wǎng)絡(luò)數(shù)據(jù)包傳輸至第一工作進(jìn)程;
37、由第一工作進(jìn)程將網(wǎng)絡(luò)數(shù)據(jù)包存儲(chǔ)至第一工作進(jìn)程的數(shù)據(jù)接收隊(duì)列中,以使業(yè)務(wù)進(jìn)程從數(shù)據(jù)接收隊(duì)列中消費(fèi)網(wǎng)絡(luò)數(shù)據(jù)包。
38、在一種實(shí)現(xiàn)方式中,業(yè)務(wù)進(jìn)程從數(shù)據(jù)接收隊(duì)列中消費(fèi)網(wǎng)絡(luò)數(shù)據(jù)包的流程,包括:
39、業(yè)務(wù)進(jìn)程調(diào)用數(shù)據(jù)包接收函數(shù),獲取網(wǎng)絡(luò)數(shù)據(jù)包在第一工作進(jìn)程的數(shù)據(jù)接收隊(duì)列中的地址;
40、業(yè)務(wù)進(jìn)程基于地址將網(wǎng)絡(luò)數(shù)據(jù)包拷貝至目標(biāo)協(xié)議棧,目標(biāo)協(xié)議棧是基于網(wǎng)絡(luò)數(shù)據(jù)包遵循的網(wǎng)絡(luò)傳輸協(xié)議確定的用戶態(tài)協(xié)議棧;
41、業(yè)務(wù)進(jìn)程基于目標(biāo)協(xié)議棧解封網(wǎng)絡(luò)數(shù)據(jù)包,解封后的網(wǎng)絡(luò)數(shù)據(jù)包用于實(shí)現(xiàn)相應(yīng)的業(yè)務(wù)。
42、在一種實(shí)現(xiàn)方式中,處理單元還用于:
43、通過第一工作進(jìn)程接收業(yè)務(wù)進(jìn)程返回的響應(yīng)數(shù)據(jù)包,并將響應(yīng)數(shù)據(jù)包傳輸至網(wǎng)卡設(shè)備。
44、在一種實(shí)現(xiàn)方式中,處理單元用于通過第一工作進(jìn)程接收業(yè)務(wù)進(jìn)程返回的響應(yīng)數(shù)據(jù)包,并將響應(yīng)數(shù)據(jù)包傳輸至網(wǎng)卡設(shè)備時(shí),具體用于:
45、通過第一工作進(jìn)程將響應(yīng)數(shù)據(jù)包存儲(chǔ)至第一工作進(jìn)程的數(shù)據(jù)發(fā)送隊(duì)列中,以使網(wǎng)卡設(shè)備從數(shù)據(jù)發(fā)送隊(duì)列中讀取響應(yīng)數(shù)據(jù)包。
46、在一種實(shí)現(xiàn)方式中,處理單元用于調(diào)用過濾器對(duì)網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行過濾檢測時(shí),具體用于:
47、對(duì)網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行安全校驗(yàn);
48、若網(wǎng)絡(luò)數(shù)據(jù)包未通過安全校驗(yàn),則攔截或丟棄網(wǎng)絡(luò)數(shù)據(jù)包;
49、若網(wǎng)絡(luò)數(shù)據(jù)包通過安全校驗(yàn),則執(zhí)行調(diào)用過濾器對(duì)網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行過濾檢測。
50、在一種實(shí)現(xiàn)方式中,處理單元還用于:
51、若檢測到網(wǎng)絡(luò)數(shù)據(jù)包不符合過濾規(guī)則,則將網(wǎng)絡(luò)數(shù)據(jù)包傳輸至第二工作進(jìn)程,第二工作進(jìn)程是通過內(nèi)核驅(qū)動(dòng)程序創(chuàng)建的進(jìn)程;
52、通過第二工作進(jìn)程將網(wǎng)絡(luò)數(shù)據(jù)包拷貝至內(nèi)核態(tài)協(xié)議棧中;
53、通過第二工作進(jìn)程基于內(nèi)核態(tài)協(xié)議棧解封網(wǎng)絡(luò)數(shù)據(jù)包,并將解封后的網(wǎng)絡(luò)數(shù)據(jù)包拷貝至業(yè)務(wù)進(jìn)程。
54、另一方面,本技術(shù)實(shí)施例提供了一種計(jì)算機(jī)設(shè)備,該設(shè)備包括:
55、處理器,用于加載并執(zhí)行計(jì)算機(jī)程序;
56、計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),該計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中存儲(chǔ)有計(jì)算機(jī)程序,該計(jì)算機(jī)程序被處理器執(zhí)行時(shí),實(shí)現(xiàn)上述數(shù)據(jù)傳輸方法。
57、另一方面,本技術(shù)實(shí)施例提供了一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)存儲(chǔ)有計(jì)算機(jī)程序,該計(jì)算機(jī)程序適于由處理器加載并執(zhí)行上述數(shù)據(jù)傳輸方法。
58、另一方面,本技術(shù)實(shí)施例提供了一種計(jì)算機(jī)程序產(chǎn)品或計(jì)算機(jī)程序,該計(jì)算機(jī)程序產(chǎn)品或計(jì)算機(jī)程序包括計(jì)算機(jī)指令,該計(jì)算機(jī)指令存儲(chǔ)在計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中。計(jì)算機(jī)設(shè)備的處理器從計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)讀取該計(jì)算機(jī)指令,計(jì)算機(jī)指令被處理器執(zhí)行時(shí)實(shí)現(xiàn)上述的數(shù)據(jù)傳輸方法。
59、在本技術(shù)實(shí)施例中,可從網(wǎng)卡設(shè)備獲取待傳輸?shù)木W(wǎng)絡(luò)數(shù)據(jù)包,并調(diào)用過濾器對(duì)網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行過濾檢測;在檢測到該網(wǎng)絡(luò)數(shù)據(jù)包符合過濾器中的過濾規(guī)則時(shí),將網(wǎng)絡(luò)數(shù)據(jù)包傳輸給基于內(nèi)核旁路技術(shù)創(chuàng)建的第一工作進(jìn)程,通過該第一工作進(jìn)程可使網(wǎng)絡(luò)數(shù)據(jù)包繞過內(nèi)核,直接傳遞給處于用戶態(tài)的業(yè)務(wù)進(jìn)程進(jìn)行消費(fèi),使得數(shù)據(jù)無需經(jīng)過內(nèi)核態(tài)到用戶態(tài)的拷貝,進(jìn)而減少內(nèi)核操作收發(fā)數(shù)據(jù)和上下文切換引起的額外處理開銷,有利于提升網(wǎng)絡(luò)數(shù)據(jù)包的傳輸效率。