国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)方法、裝置及系統(tǒng)的制作方法

      文檔序號(hào):8005227閱讀:266來源:國(guó)知局
      網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)方法、裝置及系統(tǒng)的制作方法【專利摘要】本發(fā)明提供了一種網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)方法、裝置及系統(tǒng),其中的方法包括:根據(jù)所接收的數(shù)據(jù)流獲取數(shù)據(jù)流中的數(shù)據(jù)報(bào)文;根據(jù)數(shù)據(jù)流中的首個(gè)數(shù)據(jù)報(bào)文進(jìn)行NAT策略匹配,建立NAT轉(zhuǎn)換關(guān)系表;根據(jù)數(shù)據(jù)流中除首個(gè)數(shù)據(jù)報(bào)文外的其它數(shù)據(jù)報(bào)文轉(zhuǎn)換前后的五元組信息和NAT轉(zhuǎn)換關(guān)系表,確定除首個(gè)數(shù)據(jù)報(bào)文外的其它數(shù)據(jù)報(bào)文對(duì)應(yīng)轉(zhuǎn)發(fā)的CPU。通過本發(fā)明,在有無NAPT/NAT場(chǎng)景下,能夠保證將同一數(shù)據(jù)流中的數(shù)據(jù)報(bào)文分配給相同的CPU進(jìn)行處理,減少鎖的使用和CPU?cache抖動(dòng),提升網(wǎng)絡(luò)轉(zhuǎn)發(fā)的性能?!緦@f明】網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)方法、裝置及系統(tǒng)【
      技術(shù)領(lǐng)域
      】[0001]本發(fā)明涉及計(jì)算機(jī)通信【
      技術(shù)領(lǐng)域
      】,更為具體地,涉及一種網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)方法、裝置及系統(tǒng)。【
      背景技術(shù)
      】[0002]RPS(ReceivePacketSteering)是一種軟件模擬硬件網(wǎng)卡多隊(duì)列的技術(shù),通過對(duì)IP數(shù)據(jù)流的Hash歸類,將同一IP流的數(shù)據(jù)報(bào)文分配給相同的CPU進(jìn)行處理,實(shí)現(xiàn)了網(wǎng)絡(luò)協(xié)議棧的軟中斷在多CPU上的負(fù)載均衡,大大提升了單隊(duì)列網(wǎng)卡多CPU網(wǎng)絡(luò)轉(zhuǎn)發(fā)設(shè)備的性能。[0003]但是當(dāng)真正了解了RPS模塊的工作原理和實(shí)現(xiàn)流程后,不難發(fā)現(xiàn)其目前的實(shí)現(xiàn)存在一個(gè)嚴(yán)重缺點(diǎn):無法支持存在網(wǎng)絡(luò)地址轉(zhuǎn)換的拓?fù)?。[0004]網(wǎng)絡(luò)地址轉(zhuǎn)換(NetworkAddressTranslation,簡(jiǎn)稱NAT)是一種將私有(保留)地址轉(zhuǎn)化為合法IP地址的轉(zhuǎn)換技術(shù),它被廣泛應(yīng)用于各種類型Internet接入方式和各種類型的網(wǎng)絡(luò)中。其完美地解決了IP地址不足的問題,而且有效地避免了網(wǎng)絡(luò)外部的攻擊,隱藏并保護(hù)網(wǎng)絡(luò)內(nèi)部的計(jì)算機(jī)。NAT可以簡(jiǎn)單分為基礎(chǔ)網(wǎng)絡(luò)地址之間的轉(zhuǎn)換(基礎(chǔ)NAT)、基礎(chǔ)網(wǎng)絡(luò)地址和端口轉(zhuǎn)換(NAPT)兩種。[0005]我們看一下RPS模塊在NAT場(chǎng)景下的應(yīng)用記錄的問題,下面以NAPT舉例。[0006]圖1示出了RPS模塊應(yīng)用在NAPT場(chǎng)景下的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)。如圖1所示,客戶端通過網(wǎng)絡(luò)轉(zhuǎn)發(fā)設(shè)備進(jìn)行NAPT轉(zhuǎn)換后訪問服務(wù)器。轉(zhuǎn)換規(guī)則如下:[0007]I)1.1.1.1(1025)->103.1.1.69(4000)[0008]2)1.1.1.1(1026)->103.1.1.69(4001)[0009]3)1.1.1.1(1027)->103.1.1.69(4002)[0010]4)1.1.1.1(1028)->103.1.1.69(4003)[0011]以規(guī)則I為例,NIC-O收到客戶端發(fā)的數(shù)據(jù)流時(shí)進(jìn)行RPS模塊,提取數(shù)據(jù)流中數(shù)據(jù)報(bào)文的四元組信息,并按大小排列后進(jìn)行Hash(202.107.111.17,1.1.1.1,8080,1025),計(jì)算結(jié)果為該數(shù)據(jù)報(bào)文應(yīng)該交由CPUl進(jìn)行處理。而NIC-1收到服務(wù)端應(yīng)答的數(shù)據(jù)流后也進(jìn)行RPS,由于NAPT的記錄,提取后的四元組排序后,Hash(202.107.111.17,103.1.1.69,808O,4000)得到的結(jié)果是該數(shù)據(jù)報(bào)文應(yīng)該交給CPU3進(jìn)行處理。顯然,NIC-O和NIC-1計(jì)算后得到的結(jié)果并不相同。因此,記錄NAPT/NAT的情況下,RPS模塊并無法保證將同一數(shù)據(jù)流的數(shù)據(jù)報(bào)文分配給同一CPU進(jìn)行處理。[0012]由于在NAPT/NAT場(chǎng)景下RPS模塊無法保證將同一數(shù)據(jù)流的數(shù)據(jù)報(bào)文交給同一CPU進(jìn)行處理,會(huì)帶來兩個(gè)問題:[0013]1、數(shù)據(jù)流相關(guān)資源需要加鎖保護(hù),帶來了軟件實(shí)現(xiàn)的復(fù)雜性。同時(shí)由于鎖互斥,多核之間不能完全并行,導(dǎo)致性能損失。[0014]2、數(shù)據(jù)報(bào)文在不同CPU上頻繁處理,導(dǎo)致CPUcache抖動(dòng),進(jìn)一步影響性能?!?br/>發(fā)明內(nèi)容】[0015]鑒于上述問題,本發(fā)明的目的是提供一種網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)方法、裝置及系統(tǒng),以實(shí)現(xiàn)在有無NAPT/NAT場(chǎng)景下,RPS模塊保證將同一條數(shù)據(jù)流中數(shù)據(jù)報(bào)文可以分配給同一個(gè)CPU進(jìn)行處理。[0016]本發(fā)明提供一種網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)方法,包括:[0017]獲取數(shù)據(jù)流中的數(shù)據(jù)報(bào)文;[0018]根據(jù)數(shù)據(jù)流中的首個(gè)數(shù)據(jù)報(bào)文進(jìn)行NAT策略匹配,建立包含數(shù)據(jù)流所對(duì)應(yīng)CPU的NAT轉(zhuǎn)換關(guān)系表;[0019]根據(jù)數(shù)據(jù)流中除首個(gè)數(shù)據(jù)報(bào)文外的其它數(shù)據(jù)報(bào)文轉(zhuǎn)換前后的五元組信息和NAT轉(zhuǎn)換關(guān)系表,確定除首個(gè)數(shù)據(jù)報(bào)文外的其它數(shù)據(jù)報(bào)文對(duì)應(yīng)的CPU。[0020]本發(fā)明還提供一種網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)裝置,包括:[0021]數(shù)據(jù)報(bào)文獲取單元,用于獲取數(shù)據(jù)流中的數(shù)據(jù)報(bào)文;[0022]NAT轉(zhuǎn)換關(guān)系表構(gòu)建單元,用于根據(jù)數(shù)據(jù)流中的首個(gè)數(shù)據(jù)報(bào)文進(jìn)行NAT策略匹配,建立包含數(shù)據(jù)流所對(duì)應(yīng)CPU的NAT轉(zhuǎn)換關(guān)系表;[0023]轉(zhuǎn)發(fā)單元,用于根據(jù)數(shù)據(jù)流中除首個(gè)數(shù)據(jù)報(bào)文外的其它數(shù)據(jù)報(bào)文轉(zhuǎn)換前后的五元組信息和NAT轉(zhuǎn)換關(guān)系表,確定除首個(gè)數(shù)據(jù)報(bào)文外的其它數(shù)據(jù)報(bào)文對(duì)應(yīng)的CPU。[0024]本發(fā)明又提供一種網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)系統(tǒng),包括網(wǎng)卡、CPU和上述網(wǎng)絡(luò)轉(zhuǎn)發(fā)裝置,其中,網(wǎng)卡用于接收客戶端與服務(wù)端的數(shù)據(jù)流;CPU用于處理數(shù)據(jù)流中的數(shù)據(jù)報(bào)文;網(wǎng)絡(luò)轉(zhuǎn)發(fā)裝置用于將同一條數(shù)據(jù)流的數(shù)據(jù)報(bào)文分配給同一個(gè)CPU處理。[0025]利用上述根據(jù)本發(fā)明的網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)方法、裝置及系統(tǒng),在有無NAPT/NAT場(chǎng)景下,保證將同一數(shù)據(jù)流中數(shù)據(jù)報(bào)文分配到相同的CPU進(jìn)行處理,減少鎖的使用和CPUcache抖動(dòng),提升網(wǎng)絡(luò)轉(zhuǎn)發(fā)的性能。[0026]為了實(shí)現(xiàn)上述以及相關(guān)目的,本發(fā)明的一個(gè)或多個(gè)方面包括后面將詳細(xì)說明并在權(quán)利要求中特別指的特征。下面的說明以及附圖詳細(xì)說明了本發(fā)明的某些示例性方面。然而,這些方面指示的僅僅是可使用本發(fā)明的原理的各種方式中的一些方式。此外,本發(fā)明旨在包括所有這些方面以及它們的等同物?!緦@綀D】【附圖說明】[0027]通過參考以下結(jié)合附圖的說明及權(quán)利要求書的內(nèi)容,并且隨著對(duì)本發(fā)明的更全面理解,本發(fā)明的其它目的及結(jié)果將更加明白及易于理解。在附圖中:[0028]圖1為RPS模塊應(yīng)用在NAPT場(chǎng)景下的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)圖;[0029]圖2為根據(jù)本發(fā)明的網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)方法的流程圖;[0030]圖3為根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)報(bào)文進(jìn)入RPS模塊的流程圖;[0031]圖4為根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)報(bào)文進(jìn)入轉(zhuǎn)發(fā)流程示意圖;[0032]圖5為根據(jù)本發(fā)明實(shí)施例的NAT轉(zhuǎn)換表的結(jié)構(gòu)圖;[0033]圖6為根據(jù)本發(fā)明的網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)裝置的方框圖。[0034]在所有附圖中相同的標(biāo)號(hào)指示相似或相應(yīng)的特征或功能?!揪唧w實(shí)施方式】[0035]以下將結(jié)合附圖對(duì)本發(fā)明的具體實(shí)施例進(jìn)行詳細(xì)描述。[0036]為了解決現(xiàn)有技術(shù)中在NAPT/NAT場(chǎng)景下RPS模塊不能將同一數(shù)據(jù)流中的數(shù)據(jù)報(bào)文分配給同一CPU進(jìn)行處理的問題,本發(fā)明通過構(gòu)建關(guān)鍵字和建立NAT轉(zhuǎn)換關(guān)系表,通過查詢NAT轉(zhuǎn)換關(guān)系表,將同一數(shù)據(jù)流的數(shù)據(jù)報(bào)文分配給同一CPU進(jìn)行處理,從而保證將同一數(shù)據(jù)流中數(shù)據(jù)報(bào)文分配到相同的CPU進(jìn)行處理,減少鎖的使用和CPUcache抖動(dòng)。[0037]圖2示出了根據(jù)本發(fā)明的網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)方法的流程。[0038]如圖2所示,當(dāng)RPS模塊接收到數(shù)據(jù)流后,根據(jù)所接收數(shù)據(jù)流中的數(shù)據(jù)報(bào)文獲取所述數(shù)據(jù)報(bào)文的五元組信息(步驟S210);然后,根據(jù)所述數(shù)據(jù)流中的首個(gè)數(shù)據(jù)報(bào)文進(jìn)行NAT策略匹配,建立NAT轉(zhuǎn)換關(guān)系表(步驟S220);在建立NAT轉(zhuǎn)換關(guān)系表之后,在步驟S230中,就可以根據(jù)數(shù)據(jù)流中除首個(gè)數(shù)據(jù)報(bào)文外的其它數(shù)據(jù)報(bào)文轉(zhuǎn)換前后的五元組信息和NAT轉(zhuǎn)換關(guān)系表,確定除首個(gè)數(shù)據(jù)報(bào)文外的其它數(shù)據(jù)報(bào)文對(duì)應(yīng)的CPU。[0039]在確定了對(duì)應(yīng)轉(zhuǎn)發(fā)的CPU之后,就可以以該CPU為轉(zhuǎn)發(fā)目標(biāo)轉(zhuǎn)發(fā)除首個(gè)數(shù)據(jù)報(bào)文外的其它數(shù)據(jù)報(bào)文。由于該CPU是根據(jù)首個(gè)數(shù)據(jù)報(bào)文所建立的NAT轉(zhuǎn)換關(guān)系表確定的,因此,就能夠通過對(duì)該NAT轉(zhuǎn)換關(guān)系表的查詢將同一數(shù)據(jù)流的數(shù)據(jù)報(bào)文交給同一CPU進(jìn)行處理,從而避免數(shù)據(jù)報(bào)文在不同CPU上頻繁處理所導(dǎo)致的CPUcache抖動(dòng)。[0040]本發(fā)明提供的網(wǎng)絡(luò)轉(zhuǎn)發(fā)方法,分為兩個(gè)流程,數(shù)據(jù)報(bào)文先進(jìn)入RPS模塊的處理流程和數(shù)據(jù)報(bào)文從RPS模塊結(jié)束后,進(jìn)入數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)流程。[0041]圖3示出了根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)報(bào)文進(jìn)入RPS模塊的流程。[0042]如圖3所示,將客戶端的網(wǎng)卡收到的數(shù)據(jù)流和服務(wù)端的網(wǎng)卡收到的數(shù)據(jù)流送至RPS模塊入口,RPS模塊接收網(wǎng)卡送來的數(shù)據(jù)流,并判斷是否為IP數(shù)據(jù)報(bào)文,若非IP數(shù)據(jù)報(bào)文,則RPS模塊記錄當(dāng)前CPU信息并返回給CPU;若為IP數(shù)據(jù)報(bào)文,獲取數(shù)據(jù)報(bào)文的源IP地址、目的IP地址和協(xié)議號(hào),并檢測(cè)數(shù)據(jù)報(bào)文獲取的協(xié)議號(hào)是否為TCP協(xié)議或UDP協(xié)議,若是,則獲取數(shù)據(jù)報(bào)文的源端口和目的端口,通過構(gòu)建Key查詢NAT轉(zhuǎn)換關(guān)系表;若否,則將源端口和目的端口歸零,通過構(gòu)建Key查詢NAT轉(zhuǎn)換關(guān)系表(Key和NAT轉(zhuǎn)換關(guān)系表在后面詳細(xì)描述),如果構(gòu)建的Key命中NAT轉(zhuǎn)換關(guān)系表,數(shù)據(jù)報(bào)文對(duì)應(yīng)的CPU即為Key命中NAT轉(zhuǎn)換關(guān)系表中的CPU,提取數(shù)據(jù)報(bào)文對(duì)應(yīng)的CPU信息返回給網(wǎng)卡,如果構(gòu)建的Key未命中NAT轉(zhuǎn)換關(guān)系表,則根據(jù)數(shù)據(jù)報(bào)文轉(zhuǎn)換前的五元組信息獲取對(duì)應(yīng)的CPU。[0043]其中,五元組信息包括源IP地址、目的IP地址、源端口、目的端口和協(xié)議號(hào),獲取五元組信息是為了計(jì)算五元組信息的Hash值。[0044]其中,判斷TCP或UDP協(xié)議是為了獲取傳輸層端口,因?yàn)槠渌鼈鬏攲訁f(xié)議沒有端口,所以如果不是TCP或UDP協(xié)議則默認(rèn)將端口設(shè)置為O。[0045]由于數(shù)據(jù)報(bào)文先進(jìn)入RPS模塊進(jìn)行處理再構(gòu)建NAT轉(zhuǎn)換關(guān)系表進(jìn)行轉(zhuǎn)發(fā),所以首個(gè)數(shù)據(jù)報(bào)文一定不會(huì)命中NAT轉(zhuǎn)換關(guān)系表,查詢不到首個(gè)數(shù)據(jù)報(bào)文對(duì)應(yīng)的CPU,則會(huì)根據(jù)首個(gè)數(shù)據(jù)報(bào)文轉(zhuǎn)換前的五元組信息確定對(duì)應(yīng)的CPU,具體過程為:[0046](I)獲取首個(gè)數(shù)據(jù)報(bào)文轉(zhuǎn)換前的五元組信息,包括源IP地址、目的IP地址、源端口、目的端口、協(xié)議號(hào),其中對(duì)于非m)P、非TCP協(xié)議的報(bào)文源端口和目的端口設(shè)置為ο;[0047](2)將五元組信息構(gòu)建為關(guān)鍵字,作為Hash函數(shù)的輸入,獲取Hash值;其中,Hash函數(shù)的實(shí)現(xiàn)有多種方式,通過把關(guān)鍵字映射到Hash表中的一個(gè)位置訪問記錄,加快查找速度,常見的有直接尋址法、數(shù)字分析法、折疊法、隨機(jī)數(shù)法、除留余數(shù)法等;本處Hash使用了折疊法,根據(jù)五元組的輸入,獲取到一個(gè)32位的Hash值;[0048](3)獲取當(dāng)前設(shè)備的工作CPU數(shù)量,通過Hash值對(duì)cpu數(shù)量取模,得到首個(gè)數(shù)據(jù)報(bào)文所在的CPU。[0049]數(shù)據(jù)報(bào)文從RPS模塊結(jié)束后,進(jìn)入數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)流程,這個(gè)流程中會(huì)針對(duì)同一數(shù)據(jù)流中的首個(gè)數(shù)據(jù)報(bào)文,構(gòu)建NAT轉(zhuǎn)換關(guān)系表,用于同一數(shù)據(jù)流中后續(xù)數(shù)據(jù)報(bào)文的查找,對(duì)于不同的數(shù)據(jù)流都會(huì)根據(jù)數(shù)據(jù)流中的首個(gè)數(shù)據(jù)報(bào)文構(gòu)建NAT轉(zhuǎn)換關(guān)系表,則數(shù)據(jù)流中除首個(gè)數(shù)據(jù)報(bào)文外的其它數(shù)據(jù)報(bào)文都可以依據(jù)該NAT轉(zhuǎn)換關(guān)系表確定其對(duì)應(yīng)的是與首個(gè)數(shù)據(jù)報(bào)文相同的CPU。[0050]圖4示出了根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)報(bào)文進(jìn)入轉(zhuǎn)發(fā)的流程。[0051]如圖4所示,首先檢測(cè)進(jìn)入轉(zhuǎn)發(fā)流程的數(shù)據(jù)流是否為IP數(shù)據(jù)報(bào)文,如果不是IP數(shù)據(jù)報(bào)文,則繼續(xù)檢測(cè)進(jìn)入轉(zhuǎn)發(fā)流程的數(shù)據(jù)流,如果是IP數(shù)據(jù)報(bào)文,則檢測(cè)數(shù)據(jù)報(bào)文是否為首個(gè)數(shù)據(jù)報(bào)文,如果不是首個(gè)數(shù)據(jù)報(bào)文,則繼續(xù)檢測(cè)進(jìn)入轉(zhuǎn)發(fā)流程的數(shù)據(jù)報(bào)文,如果是首個(gè)數(shù)據(jù)報(bào)文,以Lkey記錄首個(gè)數(shù)據(jù)報(bào)文NAT轉(zhuǎn)換前的五元組信息;然后首個(gè)數(shù)據(jù)報(bào)文開始進(jìn)行NAT轉(zhuǎn)換,以Rkey記錄NAT轉(zhuǎn)換后的五元組信息;根據(jù)計(jì)算RPS的Hash值獲取首個(gè)數(shù)據(jù)報(bào)文對(duì)應(yīng)轉(zhuǎn)發(fā)的CPU,記錄首個(gè)數(shù)據(jù)報(bào)文對(duì)應(yīng)轉(zhuǎn)發(fā)的CPU信息,將首個(gè)數(shù)據(jù)報(bào)文NAT轉(zhuǎn)換前的五元組信息的Hash值、首個(gè)數(shù)據(jù)報(bào)文NAT轉(zhuǎn)換后的五元組信息的Hash值和首個(gè)數(shù)據(jù)報(bào)文對(duì)應(yīng)轉(zhuǎn)發(fā)的CPU信息構(gòu)建成NAT單鏈表;以首個(gè)數(shù)據(jù)報(bào)文NAT轉(zhuǎn)換前的五元組信息的Hash值和所述首個(gè)數(shù)據(jù)報(bào)文NAT轉(zhuǎn)換后的五元組信息的Hash值構(gòu)建一Hash數(shù)組;將Hash數(shù)組和單鏈表組合,建立所述NAT轉(zhuǎn)換關(guān)系表。[0052]其中,在同一數(shù)據(jù)流中構(gòu)建的key,先用于計(jì)算NAT轉(zhuǎn)換關(guān)系表中的Hash值,在沒有命中NAT轉(zhuǎn)換關(guān)系表時(shí),再用做計(jì)算RPS的Hash值,需要注意的是,這兩個(gè)Hash算法不同。[0053]需要說明的是,在同一數(shù)據(jù)流中的后續(xù)數(shù)據(jù)報(bào)文進(jìn)入RPS模塊處理的過程中,將構(gòu)建的Key下標(biāo)為L(zhǎng)key的Hash值或Rkey的Hash值,Hash值用于尋址,通過構(gòu)建Lkey的Hash值或Rkey的Hash值都可以在NAT轉(zhuǎn)換關(guān)系表中獲取到同一CPU,即為根據(jù)同一數(shù)據(jù)流中的首個(gè)數(shù)據(jù)報(bào)文計(jì)算出的CPU。[0054]也就是說,當(dāng)同一數(shù)據(jù)流中的首個(gè)數(shù)據(jù)報(bào)文進(jìn)入RPS模塊時(shí),獲取首個(gè)數(shù)據(jù)報(bào)文的源IP地址、目的IP地址和協(xié)議號(hào),并檢測(cè)首個(gè)數(shù)據(jù)報(bào)文獲取的協(xié)議號(hào)是否為TCP協(xié)議或UDP協(xié)議,若是,則獲取數(shù)據(jù)報(bào)文的源端口和目的端口,通過構(gòu)建Key查詢NAT轉(zhuǎn)換關(guān)系表;若否,則將源端口和目的端口歸零,通過構(gòu)建Key查詢NAT轉(zhuǎn)換關(guān)系表,由于首個(gè)數(shù)據(jù)報(bào)文還沒有從RPS模塊結(jié)束無法構(gòu)建NAT轉(zhuǎn)換關(guān)系表,所以首個(gè)數(shù)據(jù)報(bào)文查詢不到NAT轉(zhuǎn)換關(guān)系表,則通過首個(gè)數(shù)據(jù)報(bào)文轉(zhuǎn)換前的五元組信息計(jì)算RPS的Hash值,獲取對(duì)應(yīng)的CPU信息。[0055]而同一數(shù)據(jù)流中的后續(xù)數(shù)據(jù)報(bào)文不用再構(gòu)建NAT轉(zhuǎn)換關(guān)系表,直接查詢根據(jù)首個(gè)數(shù)據(jù)報(bào)文構(gòu)建的NAT轉(zhuǎn)換關(guān)系表。[0056]對(duì)于不同數(shù)據(jù)流的首個(gè)數(shù)據(jù)報(bào)文一定不會(huì)命中之前數(shù)據(jù)流構(gòu)建的NAT轉(zhuǎn)換關(guān)系表,需要根據(jù)數(shù)據(jù)流中的首個(gè)數(shù)據(jù)報(bào)文重新構(gòu)建NAT轉(zhuǎn)換關(guān)系表。[0057]為了詳細(xì)說明NAT轉(zhuǎn)換關(guān)系表的結(jié)構(gòu),圖5示出了根據(jù)本發(fā)明實(shí)施例的NAT轉(zhuǎn)換表的結(jié)構(gòu)。[0058]如圖5所示,NAT轉(zhuǎn)換關(guān)系表包括:[0059]Hash數(shù)組和單鏈表,單鏈表的表項(xiàng)包含Lkey的Hash值、Rkey的Hash值、首個(gè)數(shù)據(jù)報(bào)文所在的CPU信息(Cpu_info)和其它信息(0ther_info)其中,Lkey記錄數(shù)據(jù)報(bào)文NAT前的五元組信息(Lkey_info),Rkey記錄數(shù)據(jù)報(bào)文NAT后的五元組信息(Rkey_info);Hash數(shù)組下標(biāo)為L(zhǎng)key的Hash值和Rkey的Hash值。[0060]圖5中的addrl、addr2、addr3、addrlO代表了不同的數(shù)據(jù)流,一個(gè)數(shù)據(jù)流會(huì)對(duì)應(yīng)一個(gè)節(jié)點(diǎn)項(xiàng),該節(jié)點(diǎn)項(xiàng)記錄Cpu+Lkey+Rkey信息,但由于Hash本身可能會(huì)有沖突,所以每個(gè)數(shù)組項(xiàng)下面可能會(huì)串聯(lián)多個(gè)節(jié)點(diǎn)。[0061]由于用于計(jì)算Hash值的轉(zhuǎn)換前后的五元組信息不相同,因此,計(jì)算出的Hash值不同,例如,根據(jù)轉(zhuǎn)換前五元組信息計(jì)算出的Hash值是1024,根據(jù)轉(zhuǎn)換后五元組信息計(jì)算出的Hash值是10027,這樣就命中了數(shù)組Hash_table[1024]和Hash_table[10027]兩個(gè)表項(xiàng),Hash數(shù)組的每個(gè)表項(xiàng)串聯(lián)了單鏈表,每個(gè)鏈表節(jié)點(diǎn)就是之前記錄的Cpu+Lkey+Rkey信息,如NAT_entry所示,由此查詢到CPU信息。[0062]如上參照實(shí)施例和附圖描述了根據(jù)本發(fā)明的網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)方法。本發(fā)明的網(wǎng)絡(luò)轉(zhuǎn)發(fā)方法,可以采用軟件實(shí)現(xiàn),也可以采用硬件實(shí)現(xiàn),或采用軟件和硬件組合的方式實(shí)現(xiàn)。[0063]與上述方法相對(duì)應(yīng),本發(fā)明還提供一種網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)裝置。圖6示出了根據(jù)本發(fā)明的網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)裝置,如圖6所示,本發(fā)明提供的網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)裝置600,包括:數(shù)據(jù)報(bào)文獲取單元610、NAT轉(zhuǎn)換關(guān)系表構(gòu)建單元620、轉(zhuǎn)發(fā)單元630。[0064]其中,數(shù)據(jù)報(bào)文獲取單元610,用于獲取數(shù)據(jù)流中的數(shù)據(jù)報(bào)文;NAT轉(zhuǎn)換關(guān)系表構(gòu)建單元620,用于根據(jù)數(shù)據(jù)流中的首個(gè)數(shù)據(jù)報(bào)文進(jìn)行NAT策略匹配,建立包含數(shù)據(jù)流所對(duì)應(yīng)CPU的NAT轉(zhuǎn)換關(guān)系表;轉(zhuǎn)發(fā)單元630,用于根據(jù)數(shù)據(jù)流中除首個(gè)數(shù)據(jù)報(bào)文外的其它數(shù)據(jù)報(bào)文轉(zhuǎn)換前后的五元組信息和NAT轉(zhuǎn)換關(guān)系表,確定除首個(gè)數(shù)據(jù)報(bào)文外的其它數(shù)據(jù)報(bào)文對(duì)應(yīng)的CPU。[0065]其中,數(shù)據(jù)報(bào)文獲取單元610進(jìn)一步包括首個(gè)數(shù)據(jù)報(bào)文判斷單元611(圖未示出),用于通過查詢所述NAT轉(zhuǎn)換關(guān)系表,判斷所述數(shù)據(jù)流中的數(shù)據(jù)報(bào)文是否為所述首個(gè)數(shù)據(jù)報(bào)文。[0066]其中,NAT轉(zhuǎn)換關(guān)系表構(gòu)建單元620進(jìn)一步包括轉(zhuǎn)換前五元組信息記錄單元621(圖未示出),用于記錄所述首個(gè)數(shù)據(jù)報(bào)文NAT轉(zhuǎn)換前的五元組信息;轉(zhuǎn)換后五元組信息記錄單元622(圖未示出),用于記錄所述首個(gè)數(shù)據(jù)報(bào)文NAT轉(zhuǎn)換后的五元組信息;CPU獲取單元623(圖未示出),根據(jù)首個(gè)數(shù)據(jù)報(bào)文NAT轉(zhuǎn)換前的五元組信息構(gòu)建關(guān)鍵字作為Hash函數(shù)的輸入,獲取Hash值,通過Hash值對(duì)工作的CPU數(shù)量取模,獲取首個(gè)數(shù)據(jù)報(bào)文對(duì)應(yīng)的CPU;CPU信息記錄單元624(圖未示出),用于記錄所述首個(gè)數(shù)據(jù)報(bào)文對(duì)應(yīng)的CPU信息;單鏈表構(gòu)建單元625(圖未示出),將所述首個(gè)數(shù)據(jù)報(bào)文NAT轉(zhuǎn)換前的五元組信息的Hash值、所述首個(gè)數(shù)據(jù)報(bào)文NAT轉(zhuǎn)換后的五元組信息的Hash值和首個(gè)數(shù)據(jù)報(bào)文對(duì)應(yīng)轉(zhuǎn)發(fā)的CPU信息構(gòu)建成單鏈表;Hash數(shù)組確定單元626(圖未示出),用于以所述首個(gè)數(shù)據(jù)報(bào)文NAT轉(zhuǎn)換前的五元組信息的Hash值和所述首個(gè)數(shù)據(jù)報(bào)文NAT轉(zhuǎn)換后的五元組信息的Hash值確定一Hash數(shù)組;NAT轉(zhuǎn)換關(guān)系表建立單元627(圖未示出),用于根據(jù)所述Hash數(shù)組和所述單鏈表,建立所述NAT轉(zhuǎn)換關(guān)系表。[0067]另外,本發(fā)明又提供一種網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)系統(tǒng),包括網(wǎng)卡、CPU和前述網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)裝置,其中,網(wǎng)卡用于接收客戶端與服務(wù)端的數(shù)據(jù)流;CPU用于處理數(shù)據(jù)流中的數(shù)據(jù)報(bào)文;網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)裝置用于將同一條數(shù)據(jù)流的數(shù)據(jù)報(bào)文分配給同一個(gè)CPU處理。[0068]在上述網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)系統(tǒng)中,網(wǎng)卡的數(shù)量至少為兩塊,CPU至少為雙核CPU。[0069]如上參照附圖以示例的方式描述根據(jù)本發(fā)明的網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)方法、裝置及系統(tǒng)。但是,本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,對(duì)于上述本發(fā)明所提的網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)方法、裝置及系統(tǒng),還可以在不脫離本【
      發(fā)明內(nèi)容】的基礎(chǔ)上做各種改進(jìn)。因此,本發(fā)明的保護(hù)范圍應(yīng)當(dāng)由所附的權(quán)利要求書的內(nèi)容確定?!緳?quán)利要求】1.一種網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)方法,包括:獲取數(shù)據(jù)流中的數(shù)據(jù)報(bào)文;根據(jù)所述數(shù)據(jù)流中的首個(gè)數(shù)據(jù)報(bào)文進(jìn)行NAT策略匹配,建立包含所述數(shù)據(jù)流所對(duì)應(yīng)CPU的NAT轉(zhuǎn)換關(guān)系表;根據(jù)所述數(shù)據(jù)流中除首個(gè)數(shù)據(jù)報(bào)文外的其它數(shù)據(jù)報(bào)文轉(zhuǎn)換前后的五元組信息和所述NAT轉(zhuǎn)換關(guān)系表,確定所述除首個(gè)數(shù)據(jù)報(bào)文外的其它數(shù)據(jù)報(bào)文對(duì)應(yīng)的CPU。2.如權(quán)利要求1所述的網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)方法,其中,通過查詢所述NAT轉(zhuǎn)換關(guān)系表,判斷所述數(shù)據(jù)流中的數(shù)據(jù)報(bào)文是否為所述首個(gè)數(shù)據(jù)報(bào)文。3.如權(quán)利要求1所述的網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)方法,其中,在所述建立NAT轉(zhuǎn)換關(guān)系表的過程中,獲取所述首個(gè)數(shù)據(jù)報(bào)文NAT轉(zhuǎn)換前的五元組信息;獲取所述首個(gè)數(shù)據(jù)報(bào)文NAT轉(zhuǎn)換后的五元組信息;根據(jù)所述首個(gè)數(shù)據(jù)報(bào)文NAT轉(zhuǎn)換前的五元組信息構(gòu)建關(guān)鍵字作為Hash函數(shù)的輸入,獲取Hash值,通過Hash值對(duì)工作的CPU數(shù)量取模,獲取所述首個(gè)數(shù)據(jù)報(bào)文對(duì)應(yīng)的CPU;將所述首個(gè)數(shù)據(jù)報(bào)文NAT轉(zhuǎn)換前的五元組信息的Hash值、所述首個(gè)數(shù)據(jù)報(bào)文NAT轉(zhuǎn)換后的五元組信息的Hash值和所述首個(gè)數(shù)據(jù)報(bào)文對(duì)應(yīng)的CPU信息構(gòu)建成單鏈表;以所述首個(gè)數(shù)據(jù)報(bào)文NAT轉(zhuǎn)換前的五元組信息的Hash值和所述首個(gè)數(shù)據(jù)報(bào)文NAT轉(zhuǎn)換后的五元組信息的Hash值確定一Hash數(shù)組;根據(jù)所述Hash數(shù)組和所述單鏈表,建立所述NAT轉(zhuǎn)換關(guān)系表。4.如權(quán)利要求3所述的網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)方法,其中,在根據(jù)所述數(shù)據(jù)流中除首個(gè)數(shù)據(jù)報(bào)文外的其它數(shù)據(jù)報(bào)文的五元組信息和所述NAT轉(zhuǎn)換關(guān)系表,確定所述除首個(gè)數(shù)據(jù)報(bào)文外的其它數(shù)據(jù)報(bào)文對(duì)應(yīng)所述CPU的過程中,通過構(gòu)建所述數(shù)據(jù)報(bào)文NAT轉(zhuǎn)換前的五元組信息的Hash值或所述數(shù)據(jù)報(bào)文NAT轉(zhuǎn)換后的五元組信息的Hash值查詢所述NAT轉(zhuǎn)換關(guān)系表,確定所述數(shù)據(jù)報(bào)文對(duì)應(yīng)的CPU。5.如權(quán)利要求1~4中任一項(xiàng)所述的網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)方法,其中,所述五元組信息包括源IP地址、目的IP地址、源端口、目的端口和協(xié)議號(hào);如果所述數(shù)據(jù)報(bào)文獲取的協(xié)議號(hào)是TCP協(xié)議或UDP協(xié)議,則獲取源端口和目的端口;如果所述數(shù)據(jù)報(bào)文獲取的協(xié)議號(hào)不是TCP協(xié)議或UDP協(xié)議,則將源端口和目的端口歸零,直接構(gòu)建所述數(shù)據(jù)報(bào)文在NAT轉(zhuǎn)換前的五元組信息的Hash值或所述數(shù)據(jù)報(bào)文在NAT轉(zhuǎn)換后的五元組信息的Hash值。6.一種網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)裝置,包括:數(shù)據(jù)報(bào)文獲取單元,用于獲取數(shù)據(jù)流中的數(shù)據(jù)報(bào)文;NAT轉(zhuǎn)換關(guān)系表構(gòu)建單元,用于根據(jù)所述數(shù)據(jù)流中的首個(gè)數(shù)據(jù)報(bào)文進(jìn)行NAT策略匹配,建立包含所述數(shù)據(jù)流所對(duì)應(yīng)CPU的NAT轉(zhuǎn)換關(guān)系表;轉(zhuǎn)發(fā)單元,用于根據(jù)所述數(shù)據(jù)流中除首個(gè)數(shù)據(jù)報(bào)文外的其它數(shù)據(jù)報(bào)文轉(zhuǎn)換前后的五元組信息和所述NAT轉(zhuǎn)換關(guān)系表,確定所述除首個(gè)數(shù)據(jù)報(bào)文外的其它數(shù)據(jù)報(bào)文對(duì)應(yīng)的CPU。7.如權(quán)利要求6所述的網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)裝置,其中,所述數(shù)據(jù)報(bào)文獲取單元進(jìn)一步包括:首個(gè)數(shù)據(jù)報(bào)文判斷單元,用于通過查詢所述NAT轉(zhuǎn)換關(guān)系表,判斷所述數(shù)據(jù)流中的數(shù)據(jù)報(bào)文是否為所述首個(gè)數(shù)據(jù)報(bào)文。8.如權(quán)利要求6所述的網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)裝置,其中,所述NAT轉(zhuǎn)換關(guān)系表構(gòu)建單元進(jìn)一步包括:轉(zhuǎn)換前五元組信息記錄單元,用于記錄所述首個(gè)數(shù)據(jù)報(bào)文NAT轉(zhuǎn)換前的五元組信息;轉(zhuǎn)換后五元組信息記錄單元,用于記錄所述首個(gè)數(shù)據(jù)報(bào)文NAT轉(zhuǎn)換后的五元組信息;CPU獲取單元,根據(jù)所述首個(gè)數(shù)據(jù)報(bào)文NAT轉(zhuǎn)換前的五元組信息構(gòu)建關(guān)鍵字作為Hash函數(shù)的輸入,獲取Hash值,通過Hash值對(duì)工作的CPU數(shù)量取模,獲取所述首個(gè)數(shù)據(jù)報(bào)文對(duì)應(yīng)的CPU;CPU信息記錄單元,用于記錄所述首個(gè)數(shù)據(jù)報(bào)文對(duì)應(yīng)的CPU信息;單鏈表構(gòu)建單元,將所述首個(gè)數(shù)據(jù)報(bào)文NAT轉(zhuǎn)換前的五元組信息的Hash值、所述首個(gè)數(shù)據(jù)報(bào)文NAT轉(zhuǎn)換后的五元組信息的Hash值和所述首個(gè)數(shù)據(jù)報(bào)文對(duì)應(yīng)轉(zhuǎn)發(fā)的CPU信息構(gòu)建成單鏈表;Hash數(shù)組確定單元,用于以所述首個(gè)數(shù)據(jù)報(bào)文NAT轉(zhuǎn)換前的五元組信息的Hash值和所述首個(gè)數(shù)據(jù)報(bào)文NAT轉(zhuǎn)換后的五元組信息的Hash值確定一Hash數(shù)組;NAT轉(zhuǎn)換關(guān)系表建立單元,用于根據(jù)所述Hash數(shù)組和所述單鏈表,建立所述NAT轉(zhuǎn)換關(guān)系表。9.一種網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)系統(tǒng),包括網(wǎng)卡、CPU和如權(quán)利要求6~8中任一項(xiàng)所述網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)裝置,其中,所述網(wǎng)卡用于接收客戶端與服務(wù)端的數(shù)據(jù)流;所述CPU用于處理數(shù)據(jù)流中的數(shù)據(jù)報(bào)文;所述網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)裝置用于將同一條數(shù)據(jù)流的數(shù)據(jù)報(bào)文分配給同一個(gè)CPU處理。10.如權(quán)利要求9所述的網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)系統(tǒng),其中,所述網(wǎng)卡的數(shù)量至少為兩塊;所述CPU至少為雙核CPU?!疚臋n編號(hào)】H04L12/741GK103475586SQ201310374283【公開日】2013年12月25日申請(qǐng)日期:2013年8月22日優(yōu)先權(quán)日:2013年8月22日【發(fā)明者】韓偉,李恕海,劉軍申請(qǐng)人:東軟集團(tuán)股份有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1