專利名稱:一種數(shù)據(jù)包收發(fā)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及互聯(lián)網(wǎng)的可靠性保護(hù)方法,尤其涉及一種提高網(wǎng)絡(luò)系統(tǒng)性能的數(shù)據(jù)包
收發(fā)方法。
背景技術(shù):
隨著信息化過程時代的加速發(fā)展,互聯(lián)網(wǎng)已逐步滲透進(jìn)人們的生活中。為了滿足 人們對服務(wù)和網(wǎng)絡(luò)應(yīng)用越來越豐富的要求,運(yùn)營商不斷地發(fā)展著新的業(yè)務(wù),而新業(yè)務(wù)的發(fā) 展必須考慮網(wǎng)絡(luò)的性能。眾所周知,系統(tǒng)性能的好壞最關(guān)鍵的影響因素是網(wǎng)絡(luò)系統(tǒng)中數(shù)據(jù) 包的收發(fā)。 現(xiàn)有的數(shù)據(jù)包收發(fā)方法包括以下步驟
步驟SlOl,網(wǎng)卡驅(qū)動程序接收數(shù)據(jù)包;
步驟S102,產(chǎn)生硬件中斷; 步驟S103,通知操作系統(tǒng)的內(nèi)核空間接收所述數(shù)據(jù)包; 步驟S104,調(diào)用所述操作系統(tǒng)的軟件中斷服務(wù)程序并通過IP協(xié)議棧對所述數(shù)據(jù)
包執(zhí)行一次內(nèi)存拷貝一從操作系統(tǒng)的內(nèi)核空間拷貝到用戶空間; 步驟S105,所述用戶空間的上層應(yīng)用程序?qū)λ鰯?shù)據(jù)包進(jìn)行處理; 步驟S106,調(diào)用所述操作系統(tǒng)的軟件中斷服務(wù)程序,通過IP協(xié)議棧對處理后的數(shù)
據(jù)包進(jìn)行另一次內(nèi)存拷貝-從用戶空間拷貝到操作系統(tǒng)的內(nèi)核空間; 步驟S107,所述網(wǎng)卡驅(qū)動程序發(fā)送所述數(shù)據(jù)包,結(jié)束。 由上可以看出,在上述數(shù)據(jù)包的收發(fā)方法中,由于所述用戶空間的上層應(yīng)用程序 無法直接對操作系統(tǒng)的內(nèi)核空間的數(shù)據(jù)包進(jìn)行讀寫操作,因此需要通過IP協(xié)議棧對數(shù)據(jù) 包進(jìn)行兩次拷貝并且頻繁地進(jìn)行系統(tǒng)調(diào)用,以故CPU的利用率和總線帶寬的利用低、軟件 中斷響應(yīng)時間長、系統(tǒng)整體效率低、網(wǎng)絡(luò)吞吐量小。因此系統(tǒng)性能差。
因此,有必要提供一種改進(jìn)的數(shù)據(jù)包收發(fā)方法以克服現(xiàn)有技術(shù)的缺陷。
發(fā)明內(nèi)容
本發(fā)明實(shí)施例的目的在于提供一種數(shù)據(jù)包收發(fā)方法,能提高CPU的利用率和總線 帶寬的利用率,縮短軟件中斷響應(yīng)時間,提升系統(tǒng)整體效率和網(wǎng)絡(luò)吞吐量,進(jìn)而改善系統(tǒng)性 能。 為了實(shí)現(xiàn)上述目的,本發(fā)明提供了一種數(shù)據(jù)包收發(fā)方法,包括如下步驟在網(wǎng)卡的 物理內(nèi)存中設(shè)置一段作為緩存的空間并建立用戶空間的上層應(yīng)用程序與所述緩存的映射 關(guān)系;網(wǎng)卡硬件接收數(shù)據(jù)包;將所述數(shù)據(jù)包寫入所述緩存;產(chǎn)生硬件中斷;調(diào)用網(wǎng)卡軟件中 斷服務(wù)程序并通知網(wǎng)卡驅(qū)動程序接收所述緩存中的數(shù)據(jù)包,所述網(wǎng)卡驅(qū)動程序進(jìn)而通知所 述用戶空間的上層應(yīng)用程序接收所述緩存中的數(shù)據(jù)包;所述上層應(yīng)用程序接收所述緩存中 的數(shù)據(jù)包并對所述數(shù)據(jù)包進(jìn)行處理;調(diào)用所述網(wǎng)卡軟件中斷服務(wù)程序并通知所述網(wǎng)卡驅(qū)動 程序發(fā)送所述數(shù)據(jù)包;所述網(wǎng)卡驅(qū)動程序發(fā)送所述數(shù)據(jù)包。
在本發(fā)明的一個實(shí)施例中,所述網(wǎng)卡硬件接收數(shù)據(jù)包的步驟之前還包括建立工 作集。 較佳地,所述將所述數(shù)據(jù)包寫入所述緩存的步驟具體為通過直接存儲器存取數(shù) 據(jù)傳輸方式將所述數(shù)據(jù)包寫入所述緩存。 同樣較佳地,所述網(wǎng)卡驅(qū)動程序進(jìn)而通知所述用戶空間的上層應(yīng)用程序接收所述 緩存中的數(shù)據(jù)包的步驟具體為所述網(wǎng)卡驅(qū)動程序進(jìn)而采取異步通信方式通知所述用戶空 間的上層應(yīng)用程序接收所述緩存中的數(shù)據(jù)包;所述通知所述網(wǎng)卡驅(qū)動程序發(fā)送所述數(shù)據(jù)包 的步驟具體為采取異步通信方式通知所述網(wǎng)卡驅(qū)動程序發(fā)送所述數(shù)據(jù)包。
在本發(fā)明的另一個實(shí)施例中,所述上層應(yīng)用程序接收所述緩存中的數(shù)據(jù)包的步驟 之前還包括檢測所述上層應(yīng)用程序收包是否正常;當(dāng)檢測到所述上層應(yīng)用程序正常收包 時,所述網(wǎng)卡驅(qū)動程序轉(zhuǎn)入運(yùn)行模式狀態(tài)。 較佳地,所述方法還包括步驟當(dāng)檢測到所述上層應(yīng)用程序不正常收包時,所述網(wǎng)
卡驅(qū)動程序自動轉(zhuǎn)入保護(hù)模式狀態(tài)并按照預(yù)配置的規(guī)則發(fā)送所述數(shù)據(jù)包。 在本發(fā)明的再一實(shí)施例在中,所述網(wǎng)卡驅(qū)動程序檢測所述上層應(yīng)用程序收包是否
正常的步驟之前還包括建立包緩沖區(qū);將所述緩存區(qū)數(shù)據(jù)包傳送至所述緩沖區(qū),則所述
上層應(yīng)用程序接收所述緩存中的數(shù)據(jù)包并對所述數(shù)據(jù)包進(jìn)行處理的步驟具體為所述上層
應(yīng)用程序接收經(jīng)由所述緩存?zhèn)魉椭了鼍彌_區(qū)的數(shù)據(jù)包并對所述數(shù)據(jù)包進(jìn)行處理。 與現(xiàn)有技術(shù)相比,本發(fā)明數(shù)據(jù)包收發(fā)方法在接收或發(fā)送數(shù)據(jù)包時能通過用戶空間
的上層應(yīng)用程序與網(wǎng)卡緩存的映射關(guān)系直接與用戶空間的上層應(yīng)用程序進(jìn)行交互,不需要
利用操作系統(tǒng)的IP棧對數(shù)據(jù)包進(jìn)行操作系統(tǒng)的內(nèi)核空間與用戶空間之間的兩次拷貝,不
會出現(xiàn)大量不必要的軟件中斷,因而本方法提高了 CPU和總線帶寬的利用率,縮短了軟件
中斷響應(yīng)時間,極大地提升了系統(tǒng)整體效率和網(wǎng)絡(luò)吞吐量。因此系統(tǒng)性能好。
圖1為現(xiàn)有技術(shù)數(shù)據(jù)包收發(fā)方法的流程圖。
圖2為本發(fā)明數(shù)據(jù)包收發(fā)方法的第一個實(shí)施例的流程圖。 圖3為本發(fā)明數(shù)據(jù)包收發(fā)方法的第二個實(shí)施例的流程圖。
具體實(shí)施例方式
現(xiàn)在參考附圖描述本發(fā)明的實(shí)施例,附圖中類似的元件標(biāo)號代表類似的元件。如 上所述,本發(fā)明提供了一種數(shù)據(jù)包收發(fā)方法,無需利用操作系統(tǒng)的IP棧對數(shù)據(jù)包進(jìn)行操作 系統(tǒng)的內(nèi)核空間與用戶空間之間的兩次拷貝,能通過用戶空間的上層應(yīng)用程序與網(wǎng)卡緩存 的映射關(guān)系直接與用戶空間的上層應(yīng)用程序進(jìn)行交互,不會出現(xiàn)大量的不必要的軟件中 斷,CPU的利用率和總線帶寬的利用率大、軟件中斷響應(yīng)時間短、系統(tǒng)整體效率高和網(wǎng)絡(luò)吞 吐量大、系統(tǒng)性能好。下面將詳細(xì)闡述。 參考圖2,本實(shí)施例一數(shù)據(jù)包收發(fā)方法包括如下步驟 步驟S201,在網(wǎng)卡的物理內(nèi)存中設(shè)置一段作為緩存的空間并建立用戶空間的上層 應(yīng)用程序與所述緩存的映射關(guān)系;
步驟S202 ,建立工作集;
步驟S203,網(wǎng)卡硬件接收數(shù)據(jù)包; 步驟S204,通過直接存儲器存取(DMA, Direct Memory Access)數(shù)據(jù)傳輸方式將
所述數(shù)據(jù)包寫入所述緩存; 步驟S205,產(chǎn)生硬件中斷; 步驟S206,調(diào)用網(wǎng)卡軟件中斷服務(wù)程序并通知網(wǎng)卡驅(qū)動程序接收所述緩存中的數(shù) 據(jù)包; 步驟S207,判斷所述用戶空間的上層應(yīng)用程序是否需要進(jìn)行收包,如果是,轉(zhuǎn)步驟 S209,如果不是,繼續(xù)步驟S208 ; 步驟S208,所述網(wǎng)卡驅(qū)動程序按照預(yù)配置的規(guī)則發(fā)送所述數(shù)據(jù)包,結(jié)束; 步驟S209,所述網(wǎng)卡驅(qū)動程序采取異步通信方式通知所述用戶空間的上層應(yīng)用程
序接收所述緩存中的數(shù)據(jù)包; 步驟S210,所述上層應(yīng)用程序訪問所述緩存的地址,接收所述緩存地址中對應(yīng)的 數(shù)據(jù)包,并對所述數(shù)據(jù)包進(jìn)行分析、修改等處理; 步驟S211,調(diào)用所述網(wǎng)卡軟件中斷服務(wù)程序,所述上層應(yīng)用程序采取異步通信方
式通知所述網(wǎng)卡驅(qū)動程序發(fā)送所述數(shù)據(jù)包; 步驟S212,所述網(wǎng)卡驅(qū)動程序發(fā)送所述數(shù)據(jù)包,結(jié)束。 由上可以看出,本實(shí)施例數(shù)據(jù)包收發(fā)方法在接收或發(fā)送數(shù)據(jù)包時能通過用戶空間 的上層應(yīng)用程序與網(wǎng)卡緩存的映射關(guān)系直接與用戶空間的上層應(yīng)用程序進(jìn)行交互,不需要 利用操作系統(tǒng)的IP棧對數(shù)據(jù)包進(jìn)行操作系統(tǒng)的內(nèi)核空間與用戶空間之間的兩次拷貝,不 會出現(xiàn)大量的不必要的軟件中斷,因而本方法提高了 CPU的利用率、總線帶寬的利用率,縮 短了軟件中斷響應(yīng)時間,極大地提升了系統(tǒng)整體效率和網(wǎng)絡(luò)吞吐量。因此系統(tǒng)性能好。
另外,所述直接存儲器存取數(shù)據(jù)傳輸方式傳輸速度非???,減少了 CPU的干預(yù),能 大幅提高系統(tǒng)效率。所述工作集的建立可以確定多個網(wǎng)卡協(xié)同工作的關(guān)系。
參考圖3,本實(shí)施例二數(shù)據(jù)包收發(fā)方法包括如下步驟 步驟S301,在網(wǎng)卡的物理內(nèi)存中設(shè)置一段作為緩存的空間并建立用戶空間的上層 應(yīng)用程序與所述緩存的映射關(guān)系;
步驟S302 ,建立工作集;
步驟S303 ,建立包緩沖區(qū);
步驟S304,網(wǎng)卡硬件接收數(shù)據(jù)包; 步驟S305,通過直接存儲器存取數(shù)據(jù)傳輸方式將所述數(shù)據(jù)包寫入所述緩存;
步驟S306 ,產(chǎn)生硬件中斷; 步驟S307,調(diào)用網(wǎng)卡軟件中斷服務(wù)程序并通知網(wǎng)卡驅(qū)動程序接收所述緩存中的數(shù) 據(jù)包; 步驟S308,判斷所述用戶空間的上層應(yīng)用程序是否需要進(jìn)行收包,如果是,轉(zhuǎn)步驟 S310,如果不是,繼續(xù)步驟S309 ; 步驟S309,所述網(wǎng)卡驅(qū)動程序按照預(yù)配置的規(guī)則發(fā)送所述數(shù)據(jù)包,結(jié)束; 步驟S310,所述網(wǎng)卡驅(qū)動程序采取異步通信方式通知所述用戶空間的上層應(yīng)用程
序接收所述緩存中的數(shù)據(jù)包; 步驟S311,將所述緩存地址中對應(yīng)的數(shù)據(jù)包傳送至所述緩沖區(qū);
步驟S312,周期性檢測所述上層應(yīng)用程序收包是否正常,當(dāng)檢測到所述上層應(yīng)用 程序不正常收包時,繼續(xù)步驟S313,當(dāng)檢測到所述上層應(yīng)用程序正常收包時,轉(zhuǎn)步驟S314 ;
步驟S313,所述網(wǎng)卡驅(qū)動程序自動轉(zhuǎn)入保護(hù)模式(PASSBY)狀態(tài),轉(zhuǎn)步驟S309 ;
步驟S314,所述網(wǎng)卡驅(qū)動程序轉(zhuǎn)入運(yùn)行模式(DELIVER)狀態(tài);
步驟S315,所述上層應(yīng)用程序接收經(jīng)由所述緩存?zhèn)魉椭了鼍彌_區(qū)的數(shù)據(jù)包并對 所述數(shù)據(jù)包進(jìn)行分析、修改等處理; 步驟S316,調(diào)用所述網(wǎng)卡軟件中斷服務(wù)程序,所述上層應(yīng)用程序采取異步通信方
式通知所述網(wǎng)卡驅(qū)動程序發(fā)送所述數(shù)據(jù)包; 步驟S317,所述網(wǎng)卡驅(qū)動程序發(fā)送所述數(shù)據(jù)包,結(jié)束; 由上可以看出,本實(shí)施例數(shù)據(jù)包收發(fā)方法不僅能實(shí)現(xiàn)用戶空間的上層應(yīng)用程序與 網(wǎng)卡驅(qū)動的交互,系統(tǒng)整體效率高、網(wǎng)絡(luò)吞吐量大、系統(tǒng)性能好,此外引入的對上層應(yīng)用程 序的周期性檢測機(jī)制能保證網(wǎng)絡(luò)系統(tǒng)運(yùn)行的暢通,在軟件升級甚至軟件故障的情況下,網(wǎng) 絡(luò)系統(tǒng)都能夠快速反應(yīng),因而成功實(shí)現(xiàn)對網(wǎng)絡(luò)系統(tǒng)的保護(hù),系統(tǒng)的可靠性和穩(wěn)定性高。經(jīng)測 試,本實(shí)施例的方法最長故障響應(yīng)時間已經(jīng)達(dá)到了電信級可靠性要求。 另外,本實(shí)施例通過建立緩沖區(qū)來存儲一段時間的數(shù)據(jù)包,避免數(shù)據(jù)包在處理過 程中丟失,進(jìn)而增加了系統(tǒng)的可靠性。此外,所述上層應(yīng)用程序可以直接訪問所述包緩沖 區(qū),減少內(nèi)存的拷貝。 以上所述是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員 來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也視為 本發(fā)明的保護(hù)范圍。
權(quán)利要求
一種數(shù)據(jù)包收發(fā)方法,包括如下步驟在網(wǎng)卡的物理內(nèi)存中設(shè)置一段作為緩存的空間并建立用戶空間的上層應(yīng)用程序與所述緩存的映射關(guān)系;網(wǎng)卡硬件接收數(shù)據(jù)包;將所述數(shù)據(jù)包寫入所述緩存;產(chǎn)生硬件中斷;調(diào)用網(wǎng)卡軟件中斷服務(wù)程序并通知網(wǎng)卡驅(qū)動程序接收所述緩存中的數(shù)據(jù)包,所述網(wǎng)卡驅(qū)動程序進(jìn)而通知所述用戶空間的上層應(yīng)用程序接收所述緩存中的數(shù)據(jù)包;所述上層應(yīng)用程序接收所述緩存中的數(shù)據(jù)包并對所述數(shù)據(jù)包進(jìn)行處理;調(diào)用所述網(wǎng)卡軟件中斷服務(wù)程序并通知所述網(wǎng)卡驅(qū)動程序發(fā)送所述數(shù)據(jù)包;以及所述網(wǎng)卡驅(qū)動程序發(fā)送所述數(shù)據(jù)包。
2. 如權(quán)利要求1所述的數(shù)據(jù)包收發(fā)方法,其特征在于,所述網(wǎng)卡硬件接收數(shù)據(jù)包的步 驟之前還包括建立工作集。
3. 如權(quán)利要求1所述的數(shù)據(jù)包收發(fā)方法,其特征在于,所述將所述數(shù)據(jù)包寫入所述緩 存的步驟具體為通過直接存儲器存取數(shù)據(jù)傳輸方式將所述數(shù)據(jù)包寫入所述緩存。
4. 如權(quán)利要求1所述的數(shù)據(jù)包收發(fā)方法,其特征在于,所述網(wǎng)卡驅(qū)動程序進(jìn)而通知所 述用戶空間的上層應(yīng)用程序接收所述緩存中的數(shù)據(jù)包的步驟具體為所述網(wǎng)卡驅(qū)動程序進(jìn)而采取異步通信方式通知所述用戶空間的上層應(yīng)用程序接收所 述緩存中的數(shù)據(jù)包,所述通知所述網(wǎng)卡驅(qū)動程序發(fā)送所述數(shù)據(jù)包的步驟具體為 采取異步通信方式通知所述網(wǎng)卡驅(qū)動程序發(fā)送所述數(shù)據(jù)包。
5. 如權(quán)利要求1所述的數(shù)據(jù)包收發(fā)方法,其特征在于,所述上層應(yīng)用程序接收所述緩 存中的數(shù)據(jù)包的步驟之前還包括檢測所述上層應(yīng)用程序收包是否正常;當(dāng)檢測到所述上層應(yīng)用程序正常收包時,所述網(wǎng)卡驅(qū)動程序轉(zhuǎn)入運(yùn)行模式狀態(tài)。
6. 如權(quán)利要求5所述的數(shù)據(jù)包收發(fā)方法,其特征在于,還包括步驟當(dāng)檢測到所述上層應(yīng)用程序不正常收包時,所述網(wǎng)卡驅(qū)動程序自動轉(zhuǎn)入保護(hù)模式狀態(tài) 并按照預(yù)配置的規(guī)則發(fā)送所述數(shù)據(jù)包。
7. 如權(quán)利要求5所述的數(shù)據(jù)包收發(fā)方法,其特征在于,所述網(wǎng)卡驅(qū)動程序檢測所述上 層應(yīng)用程序收包是否正常的步驟之前還包括建立包緩沖區(qū);將所述緩存區(qū)數(shù)據(jù)包傳送至所述緩沖區(qū),貝U,所述上層應(yīng)用程序接收所述緩存中的數(shù)據(jù)包并對所述數(shù)據(jù)包進(jìn)行處理的步驟具體為所述上層應(yīng)用程序接收經(jīng)由所述緩存?zhèn)魉椭了鼍彌_區(qū)的數(shù)據(jù)包并對所述數(shù)據(jù)包進(jìn) 行處理。
全文摘要
本發(fā)明公開了一種數(shù)據(jù)包收發(fā)方法,包括如下步驟在網(wǎng)卡的物理內(nèi)存中設(shè)置緩存并建立用戶空間的上層應(yīng)用程序與緩存的映射關(guān)系;網(wǎng)卡硬件接收數(shù)據(jù)包;將數(shù)據(jù)包寫入緩存;產(chǎn)生硬件中斷;調(diào)用網(wǎng)卡軟件中斷服務(wù)程序并通知網(wǎng)卡驅(qū)動程序接收緩存中的數(shù)據(jù)包,網(wǎng)卡驅(qū)動程序通知上層應(yīng)用程序接收緩存中的數(shù)據(jù)包;上層應(yīng)用程序接收數(shù)據(jù)包并對數(shù)據(jù)包進(jìn)行處理;調(diào)用網(wǎng)卡軟件中斷服務(wù)程序并通知網(wǎng)卡驅(qū)動程序發(fā)送數(shù)據(jù)包;所述網(wǎng)卡驅(qū)動程序發(fā)送數(shù)據(jù)包。本方法收發(fā)數(shù)據(jù)包時無需利用IP棧對數(shù)據(jù)包進(jìn)行操作系統(tǒng)的內(nèi)核空間與用戶空間之間的兩次拷貝,不會出現(xiàn)大量的不必要的軟件中斷,CPU和總線帶寬的利用率大、軟件中斷響應(yīng)時間短、網(wǎng)絡(luò)吞吐量大、系統(tǒng)性能好。
文檔編號H04L29/08GK101702688SQ20091027284
公開日2010年5月5日 申請日期2009年11月24日 優(yōu)先權(quán)日2009年11月24日
發(fā)明者劉鋒 申請人:武漢綠色網(wǎng)絡(luò)信息服務(wù)有限責(zé)任公司