專利名稱:一種基于以太網(wǎng)驅(qū)動的數(shù)據(jù)轉(zhuǎn)發(fā)方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)傳輸技術(shù),特別是指一種基于以太網(wǎng)驅(qū)動的數(shù)據(jù)轉(zhuǎn)發(fā)方法 和裝置。
背景技術(shù):
隨著網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,網(wǎng)絡(luò)中語音電話數(shù)據(jù)、實時^L頻數(shù)據(jù)、因特網(wǎng) 瀏覽數(shù)據(jù)等各種業(yè)務(wù)類型的數(shù)據(jù)量急劇增加;同時,普通家庭用戶對網(wǎng)絡(luò)傳輸 質(zhì)量和網(wǎng)絡(luò)帶寬的要求也越來越高。顯然,基于以太網(wǎng)路由器的數(shù)據(jù)傳輸勢必 將會成為今后發(fā)展的一個重要方向。
目前,基于LINUX的以太網(wǎng)上行路由器與基于非對稱數(shù)字用戶線路 (ADSL , Asymmetric Digital Subscriber Line )的上4亍路由器相比,雖然其性能 有了較大的提高,但其在網(wǎng)絡(luò)報文的轉(zhuǎn)發(fā)方面仍然存在著瓶頸,所謂瓶頸集中 體現(xiàn)在基于LINUX的以太網(wǎng)路由器網(wǎng)絡(luò)驅(qū)動的收包處理上。從LINUX系統(tǒng)的 網(wǎng)絡(luò)驅(qū)動層來看,以太網(wǎng)上行路由器對接收到的每一幀網(wǎng)絡(luò)報文的處理流程為 介質(zhì)訪問控制層(MAC, Media Access Control)收到一幀一>引發(fā)石更件中斷一> 中央處理單元(CPU, Central Process Unit)調(diào)用相應(yīng)的中斷處理函數(shù)進行硬件 中斷的處理一〉CPU調(diào)用網(wǎng)絡(luò)接口接收函數(shù)netif—rx函數(shù),將此網(wǎng)絡(luò)報文發(fā)送 到LINUX協(xié)議棧一>標(biāo)記軟中斷一>中斷完成。
可以看出,上述處理過程中每一幀網(wǎng)絡(luò)報文都需向LINUX協(xié)議棧發(fā)送一 遍,但是在實際應(yīng)用中,某些報文是不需要進入LINUX協(xié)議棧中處理的。這 樣,將每一幀網(wǎng)^^艮文都發(fā)送給LINUX協(xié)議棧處理,會增加網(wǎng)絡(luò)報文在LINUX 協(xié)議棧中的處理時間,使網(wǎng)絡(luò)報文的傳輸效率和速率受到了很大程度的限制, 從而限制了網(wǎng)絡(luò)的吞吐量。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明的主要目的在于提供一種基于以太網(wǎng)驅(qū)動的數(shù)據(jù)轉(zhuǎn)發(fā)方
法和裝置,可以減少數(shù)據(jù)報文在LINUX協(xié)議棧中的處理時間,提高數(shù)據(jù)的傳
輸速度和效率。
為達到上述目的,本發(fā)明的技術(shù)方案是這樣實現(xiàn)的
本發(fā)明提供了 一種基于以太網(wǎng)驅(qū)動的數(shù)據(jù)轉(zhuǎn)發(fā)方法,該方法包括
包頭處理器PHP確認(rèn)當(dāng)前數(shù)據(jù)包需進行快速轉(zhuǎn)發(fā)時,查找到當(dāng)前數(shù)據(jù)包在
快速轉(zhuǎn)發(fā)表中匹配的快速轉(zhuǎn)發(fā)入口 ;
驅(qū)動接收端在當(dāng)前數(shù)據(jù)包為傳輸控制協(xié)議TCP控制報文之外的TCP報文,
或者當(dāng)前數(shù)據(jù)包為沒有超時的用戶數(shù)據(jù)報協(xié)議UDP報文時,將當(dāng)前數(shù)據(jù)包通過
所述快速轉(zhuǎn)發(fā)入口發(fā)送到驅(qū)動發(fā)送端; 驅(qū)動發(fā)送端轉(zhuǎn)發(fā)所述凄t據(jù)包。
其中,在確認(rèn)當(dāng)前數(shù)據(jù)包需進行快速轉(zhuǎn)發(fā)之前,該方法還包括 依據(jù)報文類型,將數(shù)據(jù)包按照預(yù)設(shè)的優(yōu)先級置入PHP中,并將所述數(shù)據(jù)包
包頭的描述符存儲在PHP的分組包頭結(jié)構(gòu)描述符中;驅(qū)動接收端依據(jù)所述優(yōu)先
級將包頭描述符從PHP中取出,并存儲。
在所述分組包頭結(jié)構(gòu)描述符中設(shè)置狀態(tài)位,則所述確認(rèn)當(dāng)前數(shù)據(jù)包需進行
快速轉(zhuǎn)發(fā)為
依據(jù)當(dāng)前凝:據(jù)包包頭描述符對應(yīng)的分組包頭結(jié)構(gòu)描述符中的狀態(tài)位,如果 所述狀態(tài)位置位,則確認(rèn)當(dāng)前數(shù)據(jù)包需進行快速轉(zhuǎn)發(fā);否則,將當(dāng)前數(shù)據(jù)包發(fā) 送給LINUX協(xié)i義棧。
所述查找數(shù)據(jù)包在快速轉(zhuǎn)發(fā)表中匹配的快速轉(zhuǎn)發(fā)入口為
依據(jù)當(dāng)前數(shù)據(jù)包的包頭描述符對應(yīng)的分組包頭結(jié)構(gòu)描述符,計算該數(shù)據(jù)包 的PHP哈希HASH值,并依據(jù)所述PHP HASH值在所述快速轉(zhuǎn)發(fā)表中查找匹 配的快速轉(zhuǎn)發(fā)入口。
該方法還包4舌當(dāng)數(shù)據(jù)包第 一次經(jīng)過LINUX協(xié)議棧時,通過LINUX協(xié)議棧學(xué)習(xí)該數(shù)據(jù)包 的路由信息,并得到該數(shù)據(jù)包在驅(qū)動接收端的目的端口;計算該數(shù)據(jù)包的PHP HASH值,將所述目的端口作為快速轉(zhuǎn)發(fā)入口與該所述PHP HASH值進行匹配, 存入快速轉(zhuǎn)發(fā)表中,并為其設(shè)置老化時間;在所述老化時間到時后,將所述快 速轉(zhuǎn)發(fā)入口刪除。
該方法還包括
在快速轉(zhuǎn)發(fā)表中沒有查找到與當(dāng)前數(shù)據(jù)包匹配的快速轉(zhuǎn)發(fā)入口時,將該數(shù) 據(jù)包發(fā)送給LINUX協(xié)議棧。 該方法還包括
當(dāng)前數(shù)據(jù)包報文為TCP控制報文,或者為超時的UDP報文時,將該數(shù)據(jù) 包發(fā)送給LINUX協(xié)議棧。
所述驅(qū)動發(fā)送端轉(zhuǎn)發(fā)當(dāng)前數(shù)據(jù)包為
所述驅(qū)動發(fā)送端將所述數(shù)據(jù)包的包頭描述符添加到硬件發(fā)送隊列中,通過 所述硬件發(fā)送隊列將數(shù)據(jù)包轉(zhuǎn)發(fā)出去。
本發(fā)明還提供了一種基于以太網(wǎng)驅(qū)動的數(shù)據(jù)轉(zhuǎn)發(fā)裝置,該裝置包括PHP、 驅(qū)動接收端和驅(qū)動發(fā)送端,其中,
所迷PHP,用于在確認(rèn)當(dāng)前數(shù)據(jù)包需進行快速轉(zhuǎn)發(fā)時,查找到當(dāng)前數(shù)據(jù)包 在快速轉(zhuǎn)發(fā)表中匹配的快速轉(zhuǎn)發(fā)入口;還用于判斷當(dāng)前數(shù)據(jù)包是否為TCP控制 報文之外的TCP報文,或者是否為沒有超時的UDP報文;
所述驅(qū)動接收端,用于存儲需轉(zhuǎn)發(fā)的數(shù)據(jù)包,并將確認(rèn)為除TCP控制報文 外的TCP報文,或者為沒有超時的UDP報文,通過快速轉(zhuǎn)發(fā)入口發(fā)送給驅(qū)動 發(fā)送端;
所述驅(qū)動發(fā)送端,用于接收所述驅(qū)動接收端發(fā)送的報文數(shù)據(jù)包,并將所述 數(shù)據(jù)包轉(zhuǎn)發(fā)出去。
其中,所述PHP,還用于將數(shù)據(jù)包的包頭描述符存儲在PHP的分組包頭結(jié) 構(gòu)描述符中;
所述驅(qū)動接收端,還用于在PHP確認(rèn)當(dāng)前數(shù)據(jù)包不需進行快速轉(zhuǎn)發(fā)時;或
7者PHP在快速轉(zhuǎn)發(fā)表中沒有查找到與當(dāng)前數(shù)據(jù)包匹配的快速轉(zhuǎn)發(fā)入口時;或者 PHP確認(rèn)當(dāng)前數(shù)據(jù)包為TCP控制報文,或為超時的UDP報文時,將數(shù)據(jù)包發(fā) 送給LINUX協(xié)i義棧。
本發(fā)明基于以太網(wǎng)驅(qū)動的數(shù)據(jù)轉(zhuǎn)發(fā)方法,在現(xiàn)有基于以太網(wǎng)驅(qū)動的路由器 中結(jié)合使用了包頭處理器(PHP, Packet Header Processor),并在路由器對數(shù)據(jù) 進行處理時,通過PHP來協(xié)助CPU對當(dāng)前需要處理的數(shù)據(jù)進行轉(zhuǎn)發(fā)條件的判 斷,將一些不需要經(jīng)過LINUX協(xié)議棧處理的數(shù)據(jù)報文直接轉(zhuǎn)發(fā)出去,從而減 少了報文在LINUX協(xié)議棧處理的時間;同時,由于PHP的使用,分擔(dān)了 CPU 的工作負(fù)擔(dān),提高了系統(tǒng)的工作效率,從而提高了數(shù)據(jù)在以太網(wǎng)路由器中的處 理速度,提高了傳輸?shù)乃俣群托?、以及網(wǎng)絡(luò)吞吐量。
圖1為本發(fā)明數(shù)據(jù)轉(zhuǎn)發(fā)方法中驅(qū)動接收端對網(wǎng)絡(luò)報文的處理流程示意圖; 圖2為本發(fā)明數(shù)據(jù)轉(zhuǎn)發(fā)方法中驅(qū)動發(fā)送端對網(wǎng)絡(luò)報文的處理流程示意圖; 圖3為本發(fā)明數(shù)據(jù)轉(zhuǎn)發(fā)裝置的組成結(jié)構(gòu)關(guān)系示意圖。
具體實施例方式
下面結(jié)合附圖和具體實施例對本發(fā)明的技術(shù)方案進一步詳細闡述。 本發(fā)明基于以太網(wǎng)驅(qū)動的數(shù)據(jù)轉(zhuǎn)發(fā)方法,結(jié)合使用PHP和基于以太網(wǎng)驅(qū)動 的路由器對傳輸數(shù)據(jù)進行處理,調(diào)整了基于LINUX的以太網(wǎng)驅(qū)動對數(shù)據(jù)的收 發(fā)流程,跳過正常的和多余的以太網(wǎng)驅(qū)動的數(shù)據(jù)處理流程,從而減少了數(shù)據(jù)在 LINUX協(xié)議棧中的處理時間。
本發(fā)明中,將網(wǎng)絡(luò)報文不經(jīng)過LINUX協(xié)議棧處理的轉(zhuǎn)發(fā)稱為快速轉(zhuǎn)發(fā)。 網(wǎng)絡(luò)報文在本發(fā)明的數(shù)據(jù)處理流程中以數(shù)據(jù)包的形式存在,驅(qū)動接收端對 網(wǎng)絡(luò)報文的處理基于數(shù)據(jù)包包頭的描述符,該描述符是包頭中的一個字段,用 于描述數(shù)據(jù)包的包頭信息,唯一標(biāo)識數(shù)據(jù)包并確定數(shù)據(jù)包在內(nèi)存中的存儲位置。 以太網(wǎng)路由器通二層的邏輯接口接收到網(wǎng)絡(luò)報文后,將網(wǎng)絡(luò)報文數(shù)據(jù)包存放在
8內(nèi)存中;將包頭描述符作為內(nèi)存中數(shù)據(jù)包的索引存放在高速緩存區(qū)中預(yù)先劃分的分組緩存中,則依據(jù)分組緩存中的包頭描述符,可以查找到該包頭描述符在內(nèi)存中對應(yīng)的數(shù)據(jù)包。圖1為本發(fā)明基于以太網(wǎng)驅(qū)動的數(shù)據(jù)轉(zhuǎn)發(fā)方法中驅(qū)動接收端對網(wǎng)絡(luò)報文的處理流程,如圖l所示,該流程包括
步驟101,依據(jù)包頭描述符中的報文類型,將包頭描述符按照預(yù)設(shè)的優(yōu)先級置入PHP的結(jié)果隊列中。
較佳地,可以依據(jù)包頭描述符中的報文類型,將包頭描述符按照不同的優(yōu)先級置入PHP中相應(yīng)的結(jié)果隊列。如可以預(yù)先設(shè)置報文類型和優(yōu)先級的對應(yīng)關(guān)系,將報文分為高、中、低三個優(yōu)先級,則PHP的結(jié)果隊列可以分為高優(yōu)先級隊列、中優(yōu)先級隊列和低優(yōu)先級隊列。具體的,可以將語音報文等對實時性要求相對較高的報文的優(yōu)先級設(shè)置為高,則將該報文數(shù)據(jù)包的包頭描述符置入PHP結(jié)果隊列中的高優(yōu)先級隊列中。
在PHP將包頭描述符置入其結(jié)果隊列之前,以太網(wǎng)路由器的精簡指令計算機(RISC, reduced instruction set computer)將任務(wù)指針力文在PHP的請求(R叫uest)隊列中,以控制PHP執(zhí)行以下任務(wù)PHP將包頭描述符從分組緩存中取出,存儲到PHP的分組包頭結(jié)構(gòu)描述符中,則包頭描述符在PHP中的表現(xiàn)形式為分組包頭結(jié)構(gòu)描述符;然后PHP依據(jù)分組包頭結(jié)構(gòu)描述符驗證該數(shù)據(jù)包的校驗和、即驗證其有效性,如果無效,則將該數(shù)據(jù)包丟棄;如果有效,則將該包頭描述符添加到RISC的硬件接收隊列中。
然后,PHP將包頭描述符從RISC的硬件接收隊列中取出,置入PHP的結(jié)果隊列中。
步驟102,以太網(wǎng)驅(qū)動從PHP的結(jié)果隊列中取出包頭描述符,并按照預(yù)設(shè)的優(yōu)先級存儲。
以太網(wǎng)驅(qū)動的接收端將包頭描述符依次從PHP的結(jié)果隊列中取出,并按優(yōu)先級存入分組緩存中。
然后,PHP按照預(yù)設(shè)的優(yōu)先級對分組緩存中的包頭描述符依次進行分析,以決定包頭描述符對應(yīng)的數(shù)據(jù)包是否需要進行快速轉(zhuǎn)發(fā)。步驟103,判斷當(dāng)前包頭描述符對應(yīng)的數(shù)據(jù)包是否可以進行快速轉(zhuǎn)發(fā),如果是,則執(zhí)行步驟104;如果不是,則執(zhí)行步驟108,將包頭描述符直接發(fā)送給LINUX協(xié)議棧,進行正常的處理。
較佳地,可以在當(dāng)前包頭描述符對應(yīng)的分組包頭結(jié)構(gòu)描述符中設(shè)置一個狀態(tài)位,假設(shè)狀態(tài)位為1時,表示當(dāng)前包頭描述符對應(yīng)的數(shù)據(jù)包需要進行快速轉(zhuǎn)發(fā);如果為0,則將該包頭描述符直接發(fā)送給LINUX協(xié)議棧。
根據(jù)報文類型可知,網(wǎng)絡(luò)報文中有一些必須要送往LINUX協(xié)議棧進行處理,如以太網(wǎng)點到點連接協(xié)議(PPPOE)報文和各種類型的控制報文,本發(fā)明將這些報文的包頭描述符對應(yīng)的分組包頭結(jié)構(gòu)描述符的狀態(tài)位設(shè)為0;將其他報文的包頭描述符對應(yīng)的分組包頭結(jié)構(gòu)描述符的狀態(tài)位設(shè)置為1,即表示這些報文可以進行快速轉(zhuǎn)發(fā),然后執(zhí)行步驟104。
步驟104,判斷當(dāng)前包頭描述符對應(yīng)的數(shù)據(jù)包是否有匹配的快速轉(zhuǎn)發(fā)入口,如果有,則執(zhí)行步驟105;如果沒有,則執(zhí)行步驟108。
PHP依據(jù)當(dāng)前包頭描述符在分組包頭結(jié)構(gòu)描述符中對應(yīng)的內(nèi)容,如協(xié)議類型、源IP地址、目的IP地址、源端口號及目的端口號等,計算該數(shù)據(jù)包的PHP哈希(HASH)值,此處可以通過現(xiàn)有技術(shù)實現(xiàn),不再贅述。根據(jù)計算得到的PHP HASH值在快速轉(zhuǎn)發(fā)表中查找與該PHP HASH值匹配的快速轉(zhuǎn)發(fā)入口 。其中,快速轉(zhuǎn)發(fā)表存放在高速緩存區(qū)的快速轉(zhuǎn)發(fā)緩存中,快速轉(zhuǎn)發(fā)表中保存了 PHPHASH值與快速轉(zhuǎn)發(fā)入口的匹配關(guān)系。
當(dāng) 一個數(shù)據(jù)包第一次通過LINUX協(xié)議棧時,LINUX協(xié)議棧會通過包頭描述符學(xué)習(xí)到該數(shù)據(jù)包的路由信息,由此可以得到該數(shù)據(jù)包在驅(qū)動接收端的目的端口 ,然后將該目的端口設(shè)為該數(shù)據(jù)包對應(yīng)的快速轉(zhuǎn)發(fā)入口 ;將該數(shù)據(jù)包的PHPHASH值與該快速轉(zhuǎn)發(fā)入口進行匹配,并存放在快速轉(zhuǎn)發(fā)表中。同時,可根據(jù)需要為該快速轉(zhuǎn)發(fā)入口設(shè)置一個老化時間,當(dāng)超過該設(shè)定的老化時間后,在快速轉(zhuǎn)發(fā)表中將該快速轉(zhuǎn)發(fā)入口刪除,以避免快速轉(zhuǎn)發(fā)表溢出。
如果當(dāng)前包頭描述符對應(yīng)的數(shù)據(jù)包沒有匹配的快速轉(zhuǎn)發(fā)入口 ,則執(zhí)行步驟108,將該包頭描述符發(fā)送給LINUX協(xié)議棧,學(xué)習(xí)該數(shù)據(jù)包的路由信息,得到對應(yīng)的快速轉(zhuǎn)發(fā)入口。
如果當(dāng)前包頭對應(yīng)的數(shù)據(jù)包有匹配的快速轉(zhuǎn)發(fā)入口 ,則執(zhí)行步驟105。
步驟105,判斷當(dāng)前包頭描述符對應(yīng)的報文是否為傳輸控制協(xié)議(TCP,Transmission Control Protocol)凈艮文或用戶數(shù)據(jù)凈艮協(xié)i義(UDP, User DatagramProtocol)報文,如果是,則執(zhí)行步驟106;否則,執(zhí)行步驟108。
較佳地,可以在包頭描述符中設(shè)置相應(yīng)的標(biāo)志位來表示該報文的類型,通過讀取該標(biāo)志位即可判斷出報文的類型。如果當(dāng)前包頭描述符對應(yīng)的數(shù)據(jù)包報文不是TCP或UDP報文,則將該包頭描述符直接發(fā)送給LINUX協(xié)議棧,進行正常的處理流程;如果是,則執(zhí)行步驟106。
步驟106 107,判斷TCP報文是否為TCP控制報文、或UDP報文是否超時,如果否,則將包頭描述符通過快速轉(zhuǎn)發(fā)入口發(fā)送給驅(qū)動發(fā)送端,當(dāng)前流程結(jié)束;如果是,則執(zhí)行步驟108。
對于TCP報文,可以在其包頭描述符中設(shè)置相應(yīng)的標(biāo)志位來表示其是否為TCP控制報文,如該標(biāo)志位為1表示該TCP報文為TCP控制報文;該標(biāo)志位為0時表示該TCP才艮文不為TCP控制才艮文。
對于UDP報文,可以在系統(tǒng)中設(shè)置一個時間值,驅(qū)動接收端將前后兩次接收到的UDP報文的時間間隔與預(yù)設(shè)的時間值相比較,如果時間間隔大于預(yù)設(shè)的時間值,則當(dāng)前接收到的UDP報文超時;反之,則沒有超時。
當(dāng)TCP報文為TCP控制報文,或者UDP報文超時時,將包頭描述符發(fā)送給LINUX協(xié)議棧進行處理;如果TCP報文不是TCP控制報文,或者UDP報文沒有超時,則將包頭描述符通過快速轉(zhuǎn)發(fā)入口發(fā)送給驅(qū)動發(fā)送端。
通過圖1的流程可知,驅(qū)動接收端發(fā)送給驅(qū)動發(fā)送端的報文經(jīng)過兩個途徑一是驅(qū)動接收端將報文發(fā)送給LINUX協(xié)議棧,LINUX協(xié)議棧處理后下發(fā)給驅(qū)動發(fā)送端; 一是驅(qū)動接收端通過快速轉(zhuǎn)發(fā)入口發(fā)送給驅(qū)動發(fā)送端。
圖2為本發(fā)明中驅(qū)動發(fā)送端對網(wǎng)絡(luò)"^艮文的處理流程,驅(qū)動發(fā)送端對報文的處理也是基于包頭標(biāo)識符。
對于LINUX協(xié)議棧下發(fā)的報文,按照步驟201 步驟204的流程來處理;對于驅(qū)動接收端通過快速轉(zhuǎn)發(fā)入口發(fā)送過來的報文,執(zhí)行步驟202~204的流程。從圖2所示的流程可知,對于LINUX協(xié)議棧處理后下發(fā)給驅(qū)動發(fā)送端的數(shù)據(jù)需要對其包頭進行相應(yīng)的調(diào)整;而對于驅(qū)動接收端通過快速轉(zhuǎn)發(fā)入口發(fā)送給驅(qū)動發(fā)送端數(shù)包則不需要,具體處理包括步驟201,對包頭進4亍調(diào)整。
對于LINUX協(xié)議棧下發(fā)給驅(qū)動發(fā)送端的數(shù)據(jù),需要對其包頭進行調(diào)整當(dāng)包頭描述符通過LINUX協(xié)議棧進行處理時,可以得知當(dāng)前包頭描述符對應(yīng)的數(shù)據(jù)包所使用的路由轉(zhuǎn)發(fā)協(xié)議,驅(qū)動發(fā)送端根據(jù)數(shù)據(jù)包使用的路由轉(zhuǎn)發(fā)協(xié)議的類型在包頭中加上相應(yīng)的協(xié)議類型字^:,同時需在PHP的孩t碼中增加對此新增協(xié)議字段的識別程序。
步驟202,判斷當(dāng)前包頭描述符對應(yīng)的報文是否為TCP或UDP報文,如果是,則執(zhí)行步驟203;如果否,則執(zhí)行步驟204。該步驟的判斷與步驟105相同,此處不再贅述。步驟203,為當(dāng)前包頭描述符對應(yīng)的數(shù)據(jù)包設(shè)置快速轉(zhuǎn)發(fā)出口 。如果驅(qū)動發(fā)送端接收到的數(shù)據(jù)包報文為TCP或UDP報文,則PHP為該數(shù)據(jù)包設(shè)置快速轉(zhuǎn)發(fā)出口向高速緩存區(qū)申請一個快速轉(zhuǎn)發(fā)緩存,然后依據(jù)該包頭描述符到內(nèi)存中查找其對應(yīng)的數(shù)據(jù)包,并將該數(shù)據(jù)包存儲到申請的快速轉(zhuǎn)發(fā)緩存中。
步驟204,將包頭描述符添加到硬件發(fā)送隊列中,并將數(shù)據(jù)包轉(zhuǎn)發(fā)出去。當(dāng)驅(qū)動發(fā)送端接收到的數(shù)據(jù)包報文不是TCP或UDP報文時,則PHP直接將包頭描述符依據(jù)預(yù)設(shè)的優(yōu)先級添加到RISC中相應(yīng)的硬件發(fā)送隊列中,如高優(yōu)先級硬件發(fā)送隊列、中優(yōu)先級硬件發(fā)送隊列和低優(yōu)先級硬件發(fā)送隊列;然后驅(qū)動發(fā)送端依據(jù)RISC硬件發(fā)送隊列的優(yōu)先級,將包頭描述符在內(nèi)存中對應(yīng)的數(shù)椐包發(fā)送出去。
當(dāng)驅(qū)動發(fā)送端接收到的數(shù)據(jù)包報文為TCP或UDP報文時,PHP為其設(shè)置快速轉(zhuǎn)發(fā)出口;再將該數(shù)據(jù)包的包頭描述符依據(jù)預(yù)設(shè)的優(yōu)先級添加到RISC中相應(yīng)的硬件發(fā)送隊列中;然后驅(qū)動發(fā)送端依據(jù)RISC硬件發(fā)送隊列的優(yōu)先級,將包頭描述符在快速轉(zhuǎn)發(fā)出口中對應(yīng)的數(shù)據(jù)包發(fā)送出去。
綜上所述,本發(fā)明在現(xiàn)有的以太網(wǎng)路由器中結(jié)合使用了 PHP,通過PHP來分擔(dān)RISC的工作負(fù)擔(dān)。其中,路由器接收到網(wǎng)絡(luò)報文后將數(shù)據(jù)包存儲在內(nèi)存中,將包頭描述符存在在高速緩存中;RISC控制PHP將包頭描述符進行排序,驅(qū)動接收端將排序后的包頭描述符從PHP中取出并存儲;然后,RISC控制PHP對驅(qū)動接收端的包頭描述符進行分析處理,驅(qū)動接收端再將處理后的包頭描述通過快速轉(zhuǎn)發(fā)入口發(fā)送給驅(qū)動發(fā)送端;在驅(qū)動發(fā)送端,RISC控制PHP為數(shù)據(jù)包設(shè)置快速轉(zhuǎn)發(fā)出口 ,并將包頭描述符按照優(yōu)先級存入RISC相應(yīng)的硬件發(fā)送隊列中,最后驅(qū)動發(fā)送端依據(jù)RISC硬件隊列的優(yōu)先級,將包頭描述符在快速轉(zhuǎn)發(fā)出口中對應(yīng)的數(shù)據(jù)進行轉(zhuǎn)發(fā)。
為了實現(xiàn)本發(fā)明基于以太網(wǎng)驅(qū)動的數(shù)據(jù)轉(zhuǎn)發(fā)方法,本發(fā)明提供了 一種數(shù)據(jù)轉(zhuǎn)發(fā)裝置,如圖3所示,該裝置包括PHPIO、驅(qū)動接收端20和驅(qū)動發(fā)送端30,其中,
PHP 10,用于在確iU區(qū)動接收端20中當(dāng)前數(shù)據(jù)包可以進4亍快速轉(zhuǎn)發(fā)時,查找到該數(shù)據(jù)包在快速轉(zhuǎn)發(fā)表中匹配的快速轉(zhuǎn)發(fā)入口 ;還用于判斷當(dāng)前數(shù)據(jù)包是否為除TCP控制報文外的TCP報文,或者判斷是否為沒有超時的UDP報文;
驅(qū)動接收端20,用于存儲需要轉(zhuǎn)發(fā)的數(shù)據(jù)包,并將確認(rèn)為除TCP控制報文夕卜的TCP報文,或者確認(rèn)為沒有超時的UDP報文,通過快速轉(zhuǎn)發(fā)入口發(fā)送給驅(qū)動發(fā)送端30;
驅(qū)動發(fā)送端30,用于接收驅(qū)動接收端20發(fā)送的報文數(shù)據(jù)包,并將報文轉(zhuǎn)發(fā)出去。
另夕卜,PHP10,還用于將數(shù)據(jù)包的包頭描述符存入PHP的分組包頭結(jié)構(gòu)描述符中;
驅(qū)動接收端20,還用于在PHP10確認(rèn)當(dāng)前數(shù)據(jù)包不進行快速轉(zhuǎn)發(fā)時;或者PHP 10在快速轉(zhuǎn)發(fā)表中沒有查找到與當(dāng)前數(shù)據(jù)包匹配的快速轉(zhuǎn)發(fā)入口時;或者PHP 10確認(rèn)當(dāng)前數(shù)據(jù)包為TCP控制報文,或為超時的UDP報文時,將數(shù)據(jù)包發(fā)送給LINUX協(xié)議棧。
13以上所述,僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護范圍。
權(quán)利要求
1、一種基于以太網(wǎng)驅(qū)動的數(shù)據(jù)轉(zhuǎn)發(fā)方法,其特征在于,該方法包括包頭處理器PHP確認(rèn)當(dāng)前數(shù)據(jù)包需進行快速轉(zhuǎn)發(fā)時,查找到當(dāng)前數(shù)據(jù)包在快速轉(zhuǎn)發(fā)表中匹配的快速轉(zhuǎn)發(fā)入口;驅(qū)動接收端在當(dāng)前數(shù)據(jù)包為傳輸控制協(xié)議TCP控制報文之外的TCP報文,或者當(dāng)前數(shù)據(jù)包為沒有超時的用戶數(shù)據(jù)報協(xié)議UDP報文時,將當(dāng)前數(shù)據(jù)包通過所述快速轉(zhuǎn)發(fā)入口發(fā)送到驅(qū)動發(fā)送端;驅(qū)動發(fā)送端轉(zhuǎn)發(fā)所述數(shù)據(jù)包。
2、 根據(jù)權(quán)利要求1所述基于以太網(wǎng)驅(qū)動的數(shù)據(jù)轉(zhuǎn)發(fā)方法,其特征在于,在 確認(rèn)當(dāng)前數(shù)據(jù)包需進行快速轉(zhuǎn)發(fā)之前,該方法還包括依據(jù)報文類型,將數(shù)據(jù)包按照預(yù)設(shè)的優(yōu)先級置入PHP中,并將所述數(shù)據(jù)包 包頭的描述符存儲在PHP的分組包頭結(jié)構(gòu)描述符中;驅(qū)動接收端依據(jù)所述優(yōu)先 級將包頭描述符從PHP中取出,并存儲。
3、 根據(jù)權(quán)利要求2所述基于以太網(wǎng)驅(qū)動的數(shù)據(jù)轉(zhuǎn)發(fā)方法,其特征在于,在 所述分組包頭結(jié)構(gòu)描述符中設(shè)置狀態(tài)位,則所述確認(rèn)當(dāng)前凝:據(jù)包需進行快速轉(zhuǎn) 發(fā)為依據(jù)當(dāng)前數(shù)據(jù)包包頭描述符對應(yīng)的分組包頭結(jié)構(gòu)描述符中的狀態(tài)位,如果 所述狀態(tài)位置位,則確認(rèn)當(dāng)前數(shù)據(jù)包需進行快速轉(zhuǎn)發(fā);否則,將當(dāng)前數(shù)據(jù)包發(fā) 送給LINUX協(xié)議棧。
4、 根據(jù)權(quán)利要求2所述基于以太網(wǎng)驅(qū)動的數(shù)據(jù)轉(zhuǎn)發(fā)方法,其特征在于,所 述查找數(shù)據(jù)包在快速轉(zhuǎn)發(fā)表中匹配的快速轉(zhuǎn)發(fā)入口為依據(jù)當(dāng)前數(shù)據(jù)包的包頭描述符對應(yīng)的分組包頭結(jié)構(gòu)描述符,計算該數(shù)據(jù)包 的PHP哈希HASH值,并依據(jù)所述PHP HASH值在所述快速轉(zhuǎn)發(fā)表中查找匹 配的快速轉(zhuǎn)發(fā)入口。
5、 根據(jù)權(quán)利要求4所述基于以太網(wǎng)驅(qū)動的數(shù)據(jù)轉(zhuǎn)發(fā)方法,其特征在于,該 方法還包括當(dāng)數(shù)據(jù)包第 一次經(jīng)過LINUX協(xié)議棧時,通過LINUX協(xié)議棧學(xué)習(xí)該數(shù)據(jù)包 的路由信息,并得到該數(shù)據(jù)包在驅(qū)動接收端的目的端口 ;計算該數(shù)據(jù)包的PHP HASH值,將所述目的端口作為快速轉(zhuǎn)發(fā)入口與該所述PHP HASH值進行匹配, 存入快速轉(zhuǎn)發(fā)表中,并為其設(shè)置老化時間;在所述老化時間到時后,將所述快 速轉(zhuǎn)發(fā)入口刪除。
6、 根據(jù)權(quán)利要求1至4中任一項所述基于以太網(wǎng)驅(qū)動的數(shù)據(jù)轉(zhuǎn)發(fā)方法,其 特4正在于,該方法還包4奮在快速轉(zhuǎn)發(fā)表中沒有查找到與當(dāng)前數(shù)據(jù)包匹配的快速轉(zhuǎn)發(fā)入口時,將該數(shù) 據(jù)包發(fā)送給LINUX協(xié)議棧。
7、 根據(jù)權(quán)利要求1至4中任一項所述基于以太網(wǎng)驅(qū)動的數(shù)據(jù)轉(zhuǎn)發(fā)方法,其 特征在于,該方法還包括當(dāng)前數(shù)據(jù)包報文為TCP控制報文,或者為超時的UDP報文時,將該數(shù)據(jù) 包發(fā)送給LINUX協(xié)i義棧。
8、 根據(jù)權(quán)利要求1至4中任一項所述基于以太網(wǎng)驅(qū)動的數(shù)據(jù)轉(zhuǎn)發(fā)方法,其 特征在于,所述驅(qū)動發(fā)送端轉(zhuǎn)發(fā)當(dāng)前數(shù)據(jù)包為所述驅(qū)動發(fā)送端將所述數(shù)據(jù)包的包頭描述符添加到硬件發(fā)送隊列中,通過 所述硬件發(fā)送隊列將數(shù)據(jù)包轉(zhuǎn)發(fā)出去。
9、 一種基于以太網(wǎng)驅(qū)動的數(shù)據(jù)轉(zhuǎn)發(fā)裝置,其特征在于,該裝置包括PHP、 驅(qū)動接收端和驅(qū)動發(fā)送端,其中,所述PHP,用于在確認(rèn)當(dāng)前數(shù)據(jù)包需進行快速轉(zhuǎn)發(fā)時,查找到當(dāng)前數(shù)據(jù)包 在快速轉(zhuǎn)發(fā)表中匹配的快速轉(zhuǎn)發(fā)入口;還用于判斷當(dāng)前數(shù)據(jù)包是否為TCP控制 報文之外的TCP報文,或者是否為沒有超時的UDP報文;所述驅(qū)動接收端,用于存儲需轉(zhuǎn)發(fā)的數(shù)據(jù)包,并將確認(rèn)為除TCP控制報文 外的TCP報文,或者為沒有超時的UDP報文,通過快速轉(zhuǎn)發(fā)入口發(fā)送給驅(qū)動 發(fā)送端;所述驅(qū)動發(fā)送端,用于接收所述驅(qū)動接收端發(fā)送的報文數(shù)據(jù)包,并將所述 數(shù)據(jù)包轉(zhuǎn)發(fā)出去。
10、根據(jù)權(quán)利要求9所述基于以太網(wǎng)驅(qū)動的數(shù)據(jù)轉(zhuǎn)發(fā)裝置,其特征在于,所述PHP,還用于將數(shù)據(jù)包的包頭描述符存儲在PHP的分組包頭結(jié)構(gòu)描述符中;所述驅(qū)動接收端,還用于在PHP確認(rèn)當(dāng)前數(shù)據(jù)包不需進行快速轉(zhuǎn)發(fā)時;或 者PHP在快速轉(zhuǎn)發(fā)表中沒有查找到與當(dāng)前數(shù)據(jù)包匹配的快速轉(zhuǎn)發(fā)入口時;或者 PHP確認(rèn)當(dāng)前數(shù)據(jù)包為TCP控制報文,或為超時的UDP報文時,將數(shù)據(jù)包發(fā) 送給LINUX協(xié)議才戔。
全文摘要
本發(fā)明公開了一種基于以太網(wǎng)驅(qū)動的數(shù)據(jù)轉(zhuǎn)發(fā)方法,該方法包括包頭處理器(PHP)確認(rèn)當(dāng)前數(shù)據(jù)包需進行快速轉(zhuǎn)發(fā)時,查找到當(dāng)前數(shù)據(jù)包在快速轉(zhuǎn)發(fā)表中匹配的快速轉(zhuǎn)發(fā)入口;驅(qū)動接收端在當(dāng)前數(shù)據(jù)包為傳輸控制協(xié)議(TCP)控制報文之外的TCP報文,或者當(dāng)前數(shù)據(jù)包為沒有超時的用戶數(shù)據(jù)報協(xié)議(UDP)報文時,將當(dāng)前數(shù)據(jù)包通過快速轉(zhuǎn)發(fā)入口發(fā)送到驅(qū)動發(fā)送端;驅(qū)動發(fā)送端轉(zhuǎn)發(fā)數(shù)據(jù)包。本發(fā)明還公開了一種基于以太網(wǎng)驅(qū)動的數(shù)據(jù)轉(zhuǎn)發(fā)裝置,基于本發(fā)明的方法和裝置,可以節(jié)約數(shù)據(jù)報文在LINUX協(xié)議棧中的處理時間。
文檔編號H04L12/56GK101494605SQ20091007925
公開日2009年7月29日 申請日期2009年3月5日 優(yōu)先權(quán)日2009年3月5日
發(fā)明者穩(wěn) 李, 輝 郭 申請人:中興通訊股份有限公司