本申請涉及通信技術(shù)領(lǐng)域,特別涉及一種基于等價(jià)路由的報(bào)文轉(zhuǎn)發(fā)方法和裝置。
背景技術(shù):
網(wǎng)絡(luò)設(shè)備的基本任務(wù)是處理和轉(zhuǎn)發(fā)不同接口上各種類型的數(shù)據(jù),當(dāng)前網(wǎng)絡(luò)設(shè)備普遍采用控制面與數(shù)據(jù)面分離的技術(shù),控制面負(fù)責(zé)學(xué)習(xí)并生成各種表項(xiàng),并且將表項(xiàng)下發(fā)到數(shù)據(jù)面,用于指導(dǎo)設(shè)備轉(zhuǎn)發(fā),數(shù)據(jù)面根據(jù)控制面下發(fā)的表項(xiàng)轉(zhuǎn)發(fā)數(shù)據(jù)。
現(xiàn)有技術(shù)中,數(shù)據(jù)面的轉(zhuǎn)發(fā)芯片接收到數(shù)據(jù)報(bào)文后,先通過路由表查詢路由表項(xiàng),在查找到對應(yīng)的路由表項(xiàng)后,再查找與該路由表項(xiàng)對應(yīng)的ARP(Address Resolution Protocol,地址解析協(xié)議)表項(xiàng),若查找到了有效的ARP表項(xiàng),則將數(shù)據(jù)報(bào)文按照該ARP表項(xiàng)中的MAC地址轉(zhuǎn)發(fā)出去。若未查找到有效的ARP表項(xiàng),則將該數(shù)據(jù)報(bào)文上送到控制面,然后由CPU學(xué)習(xí)該數(shù)據(jù)報(bào)文對應(yīng)的ARP表項(xiàng),并將學(xué)習(xí)到的ARP表項(xiàng)下發(fā)到轉(zhuǎn)發(fā)芯片,使轉(zhuǎn)發(fā)芯片根據(jù)該ARP表項(xiàng)轉(zhuǎn)發(fā)數(shù)據(jù)報(bào)文。
當(dāng)控制面路由協(xié)議從多個(gè)接口上學(xué)到等價(jià)路由時(shí),生成的路由表項(xiàng)是等價(jià)路由表項(xiàng),即一個(gè)目的網(wǎng)段對應(yīng)多個(gè)轉(zhuǎn)發(fā)路徑。某條命中等價(jià)路由的數(shù)據(jù)報(bào)文,在轉(zhuǎn)發(fā)過程中,首個(gè)數(shù)據(jù)報(bào)文一般要走兩次轉(zhuǎn)發(fā)環(huán)節(jié),第一是轉(zhuǎn)發(fā)芯片轉(zhuǎn)發(fā)環(huán)節(jié),第二是軟件轉(zhuǎn)發(fā)環(huán)節(jié),并通過等價(jià)路由選路算法確定轉(zhuǎn)發(fā)路徑。由于轉(zhuǎn)發(fā)芯片轉(zhuǎn)發(fā)環(huán)節(jié)和軟件轉(zhuǎn)發(fā)環(huán)節(jié)是相對獨(dú)立的,兩者的等價(jià)路由選路算法有可能不一樣,確定的轉(zhuǎn)發(fā)路徑也不一樣,因而轉(zhuǎn)發(fā)芯片選擇出的下一跳對應(yīng)的ARP表項(xiàng)可能始終為無效狀態(tài),因此會(huì)出現(xiàn)后續(xù)報(bào)文無法由轉(zhuǎn)發(fā)芯片完成轉(zhuǎn)發(fā),需要全部上送軟件層面轉(zhuǎn)發(fā),這就失去了轉(zhuǎn)發(fā)芯片高速轉(zhuǎn)發(fā)的優(yōu)勢,并且浪費(fèi)了CPU資源。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本申請?zhí)峁┮环N基于等價(jià)路由的報(bào)文轉(zhuǎn)發(fā)方法和裝置,用于解決轉(zhuǎn)發(fā)芯片轉(zhuǎn)發(fā)環(huán)節(jié)和CPU轉(zhuǎn)發(fā)環(huán)節(jié)選路不一致,造成某些場景下流量持續(xù)由CPU處理,浪費(fèi)CPU的處理資源的問題。
具體地,本申請是通過如下技術(shù)方案實(shí)現(xiàn)的:
一種基于等價(jià)路由的報(bào)文轉(zhuǎn)發(fā)方法,包括:
CPU學(xué)習(xí)到路由表項(xiàng)后,如果該路由表項(xiàng)包含等價(jià)路由,針對該等價(jià)路由中的每一個(gè)下一跳,分別學(xué)習(xí)對應(yīng)的ARP表項(xiàng);
CPU向轉(zhuǎn)發(fā)芯片下發(fā)學(xué)習(xí)到的路由表項(xiàng)以及ARP表項(xiàng);
當(dāng)轉(zhuǎn)發(fā)芯片接收到數(shù)據(jù)報(bào)文時(shí),如果該數(shù)據(jù)報(bào)文命中包含等價(jià)路由的路由表項(xiàng),基于預(yù)設(shè)的等價(jià)路由選路算法確定下一跳,并基于由CPU預(yù)先學(xué)習(xí)到的與該下一跳對應(yīng)的ARP表項(xiàng)轉(zhuǎn)發(fā)所述數(shù)據(jù)報(bào)文。
在所述基于等價(jià)路由的報(bào)文轉(zhuǎn)發(fā)方法中,所述方法還包括:
CPU為學(xué)習(xí)到的所述ARP表項(xiàng)增加預(yù)設(shè)標(biāo)記。
在所述基于等價(jià)路由的報(bào)文轉(zhuǎn)發(fā)方法中,所述方法還包括:
當(dāng)任一個(gè)ARP表項(xiàng)到達(dá)老化時(shí)長時(shí),CPU檢查該ARP表項(xiàng)是否有預(yù)設(shè)標(biāo)記;
若該ARP表項(xiàng)有預(yù)設(shè)標(biāo)記,重新學(xué)習(xí)該ARP表項(xiàng)。
在所述基于等價(jià)路由的報(bào)文轉(zhuǎn)發(fā)方法中,所述方法還包括:
當(dāng)任一個(gè)ARP表項(xiàng)到達(dá)老化時(shí)長時(shí),CPU檢查該ARP表項(xiàng)是否有預(yù)設(shè)標(biāo)記;
若該ARP表項(xiàng)沒有預(yù)設(shè)標(biāo)記,正常老化該表項(xiàng)。
在所述基于等價(jià)路由的報(bào)文轉(zhuǎn)發(fā)方法中,還包括:
如果所述數(shù)據(jù)報(bào)文命中不包含等價(jià)路由的路由表項(xiàng)時(shí),轉(zhuǎn)發(fā)芯片上送所述數(shù)據(jù)報(bào)文至CPU,由CPU學(xué)習(xí)該數(shù)據(jù)報(bào)文對應(yīng)的ARP表項(xiàng),并將該ARP表項(xiàng)下發(fā)至轉(zhuǎn)發(fā)芯片,以使轉(zhuǎn)發(fā)芯片根據(jù)該ARP表項(xiàng)轉(zhuǎn)發(fā)接收的后續(xù)數(shù)據(jù)報(bào)文;
如果所述數(shù)據(jù)報(bào)文未命中任何路由表項(xiàng),丟棄所述數(shù)據(jù)報(bào)文。
一種基于等價(jià)路由的報(bào)文轉(zhuǎn)發(fā)裝置,包括:
學(xué)習(xí)單元,用于在CPU學(xué)習(xí)到路由表項(xiàng)后,如果該路由表項(xiàng)包含等價(jià)路由,針對該等價(jià)路由中的每一個(gè)下一跳,分別學(xué)習(xí)對應(yīng)的ARP表項(xiàng);
下發(fā)單元,用于向轉(zhuǎn)發(fā)芯片下發(fā)學(xué)習(xí)到的路由表項(xiàng)以及ARP表項(xiàng);
轉(zhuǎn)發(fā)單元,用于當(dāng)轉(zhuǎn)發(fā)芯片接收到數(shù)據(jù)報(bào)文時(shí),如果該數(shù)據(jù)報(bào)文命中包含等價(jià)路由的路由表項(xiàng),基于預(yù)設(shè)的等價(jià)路由選路算法確定下一跳,并基于由CPU預(yù)先學(xué)習(xí)到的與該下一跳對應(yīng)的ARP表項(xiàng)轉(zhuǎn)發(fā)所述數(shù)據(jù)報(bào)文。
在所述基于等價(jià)路由的報(bào)文轉(zhuǎn)發(fā)裝置中,所述裝置還包括:
標(biāo)記單元,用于為學(xué)習(xí)到的所述ARP表項(xiàng)增加預(yù)設(shè)標(biāo)記。
在所述基于等價(jià)路由的報(bào)文轉(zhuǎn)發(fā)裝置中,所述學(xué)習(xí)單元進(jìn)一步用于:
當(dāng)任一個(gè)ARP表項(xiàng)到達(dá)老化時(shí)長時(shí),CPU檢查該ARP表項(xiàng)是否有預(yù)設(shè)標(biāo)記;
若該ARP表項(xiàng)有預(yù)設(shè)標(biāo)記,重新學(xué)習(xí)該ARP表項(xiàng)。
在所述基于等價(jià)路由的報(bào)文轉(zhuǎn)發(fā)裝置中,所述學(xué)習(xí)單元進(jìn)一步用于:
當(dāng)任一個(gè)ARP表項(xiàng)到達(dá)老化時(shí)長時(shí),CPU檢查該ARP表項(xiàng)是否有預(yù)設(shè)標(biāo)記;
若該ARP表項(xiàng)沒有預(yù)設(shè)標(biāo)記,正常老化該表項(xiàng)。
在所述基于等價(jià)路由的報(bào)文轉(zhuǎn)發(fā)裝置中,所述裝置還包括:
上送單元,用于如果所述數(shù)據(jù)報(bào)文命中不包含等價(jià)路由的路由表項(xiàng)時(shí),上送所述數(shù)據(jù)報(bào)文至CPU,由CPU學(xué)習(xí)該數(shù)據(jù)報(bào)文對應(yīng)的ARP表項(xiàng),并將該ARP表項(xiàng)下發(fā)至轉(zhuǎn)發(fā)芯片,以使轉(zhuǎn)發(fā)芯片根據(jù)該ARP表項(xiàng)轉(zhuǎn)發(fā)接收的后續(xù)數(shù)據(jù)報(bào)文;
丟棄單元,用于在所述數(shù)據(jù)報(bào)文未命中任何路由表項(xiàng)時(shí),丟棄所述數(shù)據(jù)報(bào)文。
本發(fā)明實(shí)施例中,CPU學(xué)習(xí)到路由表項(xiàng)后,在該路由表項(xiàng)包含等價(jià)路由的情況下,針對該等價(jià)路由的每一個(gè)下一跳,分別觸發(fā)學(xué)習(xí)對應(yīng)的ARP表項(xiàng)。CPU向轉(zhuǎn)發(fā)芯片下發(fā)學(xué)習(xí)到的路由表項(xiàng)和ARP表項(xiàng)。轉(zhuǎn)發(fā)芯片接收到數(shù)據(jù)報(bào)文時(shí),如果該數(shù)據(jù)報(bào)文命中包含等價(jià)路由的路由表項(xiàng)。轉(zhuǎn)發(fā)芯片基于由CPU預(yù)先學(xué)習(xí)的等價(jià)路由對應(yīng)的ARP表項(xiàng)轉(zhuǎn)發(fā)數(shù)據(jù)報(bào)文。
這樣當(dāng)轉(zhuǎn)發(fā)芯片接收到的數(shù)據(jù)報(bào)文命中包含等價(jià)路由的路由表項(xiàng)時(shí),由于該等價(jià)路由每一個(gè)下一跳對應(yīng)的ARP表項(xiàng)已經(jīng)預(yù)先學(xué)習(xí)過,因此轉(zhuǎn)發(fā)芯片不再需要將該數(shù)據(jù)報(bào)文上送CPU,轉(zhuǎn)發(fā)芯片可以在本地自主地決策轉(zhuǎn)發(fā)下一跳,并通過預(yù)先學(xué)習(xí)完成的與決策出的轉(zhuǎn)發(fā)下一跳對應(yīng)的ARP表項(xiàng)轉(zhuǎn)發(fā)該數(shù)據(jù)報(bào)文,從而可以充分利用轉(zhuǎn)發(fā)芯片高速轉(zhuǎn)發(fā)的優(yōu)勢,有效節(jié)約CPU的處理資源。
附圖說明
圖1是現(xiàn)有技術(shù)方案的一個(gè)數(shù)據(jù)報(bào)文轉(zhuǎn)發(fā)流程圖;
圖2是本申請示出的一種基于等價(jià)路由的報(bào)文轉(zhuǎn)發(fā)方法的流程圖;
圖3是本申請示出的一種基于等價(jià)路由的報(bào)文轉(zhuǎn)發(fā)裝置的邏輯框圖;
圖4是本申請示出的一種基于等價(jià)路由的報(bào)文轉(zhuǎn)發(fā)裝置的硬件結(jié)構(gòu)圖。
具體實(shí)施方式
為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明實(shí)施例中的技術(shù)方案,并使本發(fā)明實(shí)施例的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖對現(xiàn)有技術(shù)方案和本發(fā)明實(shí)施例中的技術(shù)方案作進(jìn)一步詳細(xì)的說明。
參見圖1,為現(xiàn)有技術(shù)方案的一個(gè)數(shù)據(jù)報(bào)文轉(zhuǎn)發(fā)流程圖,該技術(shù)方案應(yīng)用于路由設(shè)備上,路由設(shè)備包括CPU和轉(zhuǎn)發(fā)芯片。
其中,CPU也可以稱之為控制面,用于生成各類表項(xiàng),執(zhí)行ARP學(xué)習(xí)。轉(zhuǎn)發(fā)芯片也可以稱之為數(shù)據(jù)面,可以用于基于CPU下發(fā)的各類表項(xiàng)轉(zhuǎn)發(fā)數(shù)據(jù)報(bào)文。
當(dāng)數(shù)據(jù)報(bào)文到達(dá)轉(zhuǎn)發(fā)芯片時(shí),轉(zhuǎn)發(fā)芯片可以基于該數(shù)據(jù)報(bào)文中攜帶的轉(zhuǎn)發(fā)信息,在本地進(jìn)行路由表查詢;如果該數(shù)據(jù)報(bào)文沒有命中路由表項(xiàng),則可以丟棄該數(shù)據(jù)報(bào)文。
網(wǎng)絡(luò)設(shè)備的控制面負(fù)責(zé)生成各類表項(xiàng),并將表項(xiàng)下發(fā)至轉(zhuǎn)發(fā)芯片,用以指導(dǎo)數(shù)據(jù)轉(zhuǎn)發(fā);其中,控制面下發(fā)的各類表項(xiàng)包括路由表項(xiàng)。
路由表是3層網(wǎng)絡(luò)設(shè)備通過各路由協(xié)議學(xué)習(xí)并計(jì)算匯總,生成的一個(gè)數(shù)據(jù)庫,路由表存儲(chǔ)著指向特定網(wǎng)絡(luò)地址的轉(zhuǎn)發(fā)路徑。路由表中的每條路由表項(xiàng)包含三個(gè)基本信息:目的地址、出接口和下一跳。
數(shù)據(jù)報(bào)文到達(dá)轉(zhuǎn)發(fā)芯片后,通過數(shù)據(jù)報(bào)文的目的地址查詢路由表,如果存在某一條路由表項(xiàng)的目的地址與該數(shù)據(jù)報(bào)文的目的地址一致,此時(shí)該數(shù)據(jù)報(bào)文命中該路由表項(xiàng),則說明該數(shù)據(jù)報(bào)文將經(jīng)過該路由表項(xiàng)中的路由轉(zhuǎn)發(fā)。如果數(shù)據(jù)報(bào)文的目的地址在路由表中無法找到具有匹配的目的地址的路由表項(xiàng),此時(shí)該數(shù)據(jù)報(bào)文未命中任何路由表項(xiàng),則轉(zhuǎn)發(fā)芯片將該數(shù)據(jù)報(bào)文丟棄。
如果上述數(shù)據(jù)報(bào)文命中了某一條路由表項(xiàng),轉(zhuǎn)發(fā)芯片根據(jù)該路由表項(xiàng)的下一跳查找ARP表,判斷對應(yīng)的ARP表項(xiàng)是否為有效狀態(tài)(比如可以判斷對應(yīng)的ARP表項(xiàng)中的MAC地址是否為空);如果該ARP表項(xiàng)為有效狀態(tài),則將上述數(shù)據(jù)報(bào)文按照該ARP表項(xiàng)中的MAC地址,以及相應(yīng)的出接口轉(zhuǎn)發(fā)出去。
如果該ARP表項(xiàng)為無效狀態(tài)(比如該ARP表項(xiàng)中的MAC地址為空),此時(shí)轉(zhuǎn)發(fā)芯片可以將該數(shù)據(jù)報(bào)文上送CPU處理,CPU在查詢路由表項(xiàng)后,發(fā)現(xiàn)下一跳對應(yīng)的ARP表項(xiàng)為無效狀態(tài),則CPU可以基于ARP協(xié)議,針對該路由表項(xiàng)來學(xué)習(xí)對應(yīng)的ARP表項(xiàng)。
其中,ARP協(xié)議是根據(jù)下一跳的IP地址學(xué)習(xí)MAC地址的協(xié)議,CPU在基于ARP協(xié)議學(xué)習(xí)ARP表項(xiàng)時(shí),可以將包含下一跳IP地址的ARP請求廣播到網(wǎng)絡(luò)上的所有主機(jī),然后接收包含下一跳IP地址對應(yīng)的MAC地址的返回消息,收到返回消息后以下一跳IP地址和MAC地址創(chuàng)建ARP表項(xiàng),并保留該ARP表項(xiàng)一段時(shí)間。
CPU在針對命中的該路由表項(xiàng)來學(xué)習(xí)對應(yīng)的ARP表項(xiàng)時(shí),還可以將該數(shù)據(jù)報(bào)文加入該ARP的緩存隊(duì)列;如果在規(guī)定的時(shí)間內(nèi),成功學(xué)到該下一跳的ARP表項(xiàng),則可以基于學(xué)習(xí)到的ARP表項(xiàng)中的MAC地址,以及相應(yīng)的出接口將該數(shù)據(jù)報(bào)文轉(zhuǎn)發(fā)出去,并將學(xué)習(xí)到的ARP表項(xiàng)下發(fā)至轉(zhuǎn)發(fā)芯片。轉(zhuǎn)發(fā)芯片在接收到CPU下發(fā)的ARP表項(xiàng)時(shí),可以將該ARP表項(xiàng)更新為有效狀態(tài)。
可見,現(xiàn)有技術(shù)中ARP表項(xiàng)的學(xué)習(xí),是由流量觸發(fā)的。由于ARP的流量觸發(fā)學(xué)習(xí)機(jī)制,ARP表項(xiàng)在第一次被用到以前先是無效狀態(tài),經(jīng)過流量觸發(fā)后,才由轉(zhuǎn)發(fā)芯片上送數(shù)據(jù)報(bào)文到CPU觸發(fā)學(xué)習(xí)該ARP表項(xiàng);當(dāng)轉(zhuǎn)發(fā)芯片接收到CPU下發(fā)的成功學(xué)習(xí)到的ARP表項(xiàng)后,轉(zhuǎn)發(fā)芯片可以在ARP表中將該ARP表項(xiàng)更新為有效狀態(tài)。
某條流量的首個(gè)數(shù)據(jù)報(bào)文在命中包含等價(jià)路由的路由表項(xiàng)的情況下,轉(zhuǎn)發(fā)芯片通過等價(jià)路由選路算法確定轉(zhuǎn)發(fā)路徑,根據(jù)確定的下一跳查詢ARP表,如果該下一跳對應(yīng)的ARP表項(xiàng)處于無效狀態(tài),轉(zhuǎn)發(fā)芯片可以將上述數(shù)據(jù)報(bào)文上送到CPU進(jìn)行處理。CPU在收到轉(zhuǎn)發(fā)芯片上送的數(shù)據(jù)報(bào)文后,可以進(jìn)行相同的查路由操作,并通過等價(jià)路由選路算法確定轉(zhuǎn)發(fā)路徑,并學(xué)習(xí)確定出的下一跳對應(yīng)的ARP表項(xiàng),然后將學(xué)習(xí)到的ARP表項(xiàng)下發(fā)至轉(zhuǎn)發(fā)芯片,以指導(dǎo)轉(zhuǎn)發(fā)芯片的轉(zhuǎn)發(fā)。
然而,由于CPU與轉(zhuǎn)發(fā)芯片相互獨(dú)立,兩者的選路算法可能是不一致的,因而確定的轉(zhuǎn)發(fā)路徑也可能不一致;例如,假設(shè)CPU確定的轉(zhuǎn)發(fā)路徑是下一跳B,CPU會(huì)學(xué)習(xí)下一跳B對應(yīng)的ARP表項(xiàng),在成功學(xué)習(xí)到該ARP表項(xiàng)之后,CPU可按照該ARP表項(xiàng)轉(zhuǎn)發(fā)首數(shù)據(jù)報(bào)文,并在成功轉(zhuǎn)發(fā)后,將下一跳B對應(yīng)的ARP表項(xiàng)下發(fā)到轉(zhuǎn)發(fā)芯片。假設(shè)此時(shí)轉(zhuǎn)發(fā)芯片的確定的轉(zhuǎn)發(fā)路徑是下一跳A,而CPU下發(fā)的ARP表項(xiàng)為下一跳B對應(yīng)的ARP表項(xiàng),因而轉(zhuǎn)發(fā)芯片上的ARP表中,與下一跳A對應(yīng)的ARP表項(xiàng)將始終處于無效狀態(tài),而在這種情況下,轉(zhuǎn)發(fā)芯片將無法利用上述ARP表項(xiàng)轉(zhuǎn)發(fā)數(shù)據(jù)報(bào)文。上述流量的后續(xù)數(shù)據(jù)報(bào)文將始終會(huì)被上送至CPU,由CPU進(jìn)行軟件層面的轉(zhuǎn)發(fā),這就是導(dǎo)致無法利用轉(zhuǎn)發(fā)芯片高速轉(zhuǎn)發(fā)的性能優(yōu)勢,浪費(fèi)了CPU的處理資源。
為解決上述問題,本發(fā)明實(shí)施例的技術(shù)方案,對于包含等價(jià)路由的路由表項(xiàng),采用ARP表項(xiàng)的預(yù)先學(xué)習(xí)的機(jī)制,主動(dòng)地維護(hù)ARP表項(xiàng)的狀態(tài),ARP表項(xiàng)的學(xué)習(xí)將不再依賴流量動(dòng)態(tài)觸發(fā)。
參見圖2,為本發(fā)明基于等價(jià)路由的報(bào)文轉(zhuǎn)發(fā)方法的一個(gè)實(shí)施例流程圖,該實(shí)施例的執(zhí)行主體是路由設(shè)備,該路由設(shè)備包括CPU和轉(zhuǎn)發(fā)芯片。其中,CPU也可以稱之為控制面,用于生成各類表項(xiàng),執(zhí)行ARP學(xué)習(xí)。轉(zhuǎn)發(fā)芯片也可以稱之為數(shù)據(jù)面,可以用于基于CPU下發(fā)的各類表項(xiàng)轉(zhuǎn)發(fā)數(shù)據(jù)報(bào)文;所述方法包括以下步驟:
步驟201:CPU學(xué)習(xí)到路由表項(xiàng)后,如果該路由表項(xiàng)包含等價(jià)路由,針對該等價(jià)路由中的每一個(gè)下一跳,分別學(xué)習(xí)對應(yīng)的ARP表項(xiàng)。
步驟202:CPU向轉(zhuǎn)發(fā)芯片下發(fā)學(xué)習(xí)到的路由表項(xiàng)以及ARP表項(xiàng)。
步驟203:當(dāng)轉(zhuǎn)發(fā)芯片接收到數(shù)據(jù)報(bào)文時(shí),如果該數(shù)據(jù)報(bào)文命中包含等價(jià)路由的路由表項(xiàng),基于預(yù)設(shè)的等價(jià)路由算法確定下一跳,并基于由CPU預(yù)先學(xué)習(xí)到的與該下一跳對應(yīng)的ARP表項(xiàng)轉(zhuǎn)發(fā)上述數(shù)據(jù)報(bào)文。
如前所述,在現(xiàn)有技術(shù)中,ARP表項(xiàng)的學(xué)習(xí)通常依靠流量觸發(fā)的,因而對于包含等價(jià)路由的路由表項(xiàng),可能由于轉(zhuǎn)發(fā)芯片和CPU確定的下一跳不一致,導(dǎo)致數(shù)據(jù)報(bào)文將始終會(huì)被上送至CPU,由CPU進(jìn)行軟件層面的轉(zhuǎn)發(fā),而無法利用轉(zhuǎn)發(fā)芯片高速轉(zhuǎn)發(fā)的性能的問題。
在本實(shí)施例中,對于包含等價(jià)路由的路由表項(xiàng),將采用預(yù)先學(xué)習(xí)ARP表項(xiàng)的機(jī)制,來規(guī)避由于轉(zhuǎn)發(fā)芯片與CPU確定出的下一跳不一致的情況下,而造成浪費(fèi)CPU的處理資源,無法利用轉(zhuǎn)發(fā)芯片高速轉(zhuǎn)發(fā)的性能的問題。
在本例中,CPU可以根據(jù)路由協(xié)議(比如OSPF協(xié)議),從網(wǎng)絡(luò)設(shè)備的接口上學(xué)習(xí)路由表項(xiàng),當(dāng)CPU學(xué)習(xí)到包含等價(jià)路由的路由表項(xiàng)時(shí),CPU可以主動(dòng)學(xué)習(xí)該等價(jià)路由中每一個(gè)下一跳對應(yīng)的ARP表項(xiàng)。
在示出的一種實(shí)施方式中,當(dāng)CPU學(xué)習(xí)到上述等價(jià)路由中每一個(gè)下一跳對應(yīng)的ARP表項(xiàng)時(shí),還可以為學(xué)習(xí)到的ARP表項(xiàng)增加預(yù)設(shè)標(biāo)記。其中,該預(yù)設(shè)標(biāo)記表示該ARP表項(xiàng)被等價(jià)路由引用。
在本例中,CPU可以將學(xué)習(xí)到的路由表項(xiàng),以及上述ARP表項(xiàng),下發(fā)至轉(zhuǎn)發(fā)芯片;轉(zhuǎn)發(fā)芯片在接收到CPU下發(fā)的ARP表項(xiàng)后,可以將該ARP表項(xiàng)存儲(chǔ)至ARP表中,后續(xù)轉(zhuǎn)發(fā)芯片可以基于ARP表中的ARP表項(xiàng)來轉(zhuǎn)發(fā)數(shù)據(jù)報(bào)文。
其中,系統(tǒng)規(guī)定每個(gè)ARP表項(xiàng)有一定的生命周期,因此ARP表中每一個(gè)ARP表項(xiàng)均會(huì)預(yù)設(shè)一個(gè)老化時(shí)長,到達(dá)老化時(shí)長后刪除該ARP表項(xiàng),以此減少ARP表中的表項(xiàng),提高ARP表查詢效率。ARP表項(xiàng)的老化時(shí)長在不同系統(tǒng)中的設(shè)定不同,可以通過系統(tǒng)注冊表或網(wǎng)絡(luò)設(shè)備的某些命令進(jìn)行設(shè)置。
在示出的一種實(shí)施方式中,當(dāng)某一個(gè)ARP表項(xiàng)到達(dá)老化時(shí)長時(shí),此時(shí)可以檢查該ARP表項(xiàng)是否有上述預(yù)設(shè)標(biāo)記。如果沒有上述預(yù)設(shè)標(biāo)記,則正常老化該表項(xiàng)。如果該ARP表項(xiàng)有上述預(yù)設(shè)標(biāo)記,則有CPU重新學(xué)習(xí)該ARP表項(xiàng),從而確保等價(jià)路由對應(yīng)的ARP表項(xiàng)始終處于有效狀態(tài)。
在本例中,轉(zhuǎn)發(fā)芯片接收到數(shù)據(jù)報(bào)文,根據(jù)數(shù)據(jù)報(bào)文的目的地址在路由表中查詢包含相同目的地址的路由表項(xiàng)。
一方面,如果查詢得到的路由表項(xiàng)中包含等價(jià)路由,該路由表項(xiàng)中的每一個(gè)下一跳對應(yīng)的ARP表項(xiàng)都已經(jīng)由CPU預(yù)先觸發(fā)學(xué)習(xí)過,轉(zhuǎn)發(fā)芯片根據(jù)等價(jià)路由選路算法選定的任一轉(zhuǎn)發(fā)路徑對應(yīng)的ARP表項(xiàng),轉(zhuǎn)發(fā)上述數(shù)據(jù)報(bào)文。
另一方面,如果轉(zhuǎn)發(fā)芯片根據(jù)數(shù)據(jù)報(bào)文的目的地址,在路由表中查詢得到不包含等價(jià)路由的路由表項(xiàng),此時(shí)轉(zhuǎn)發(fā)芯片基于現(xiàn)有的轉(zhuǎn)發(fā)機(jī)制針對該數(shù)據(jù)報(bào)文轉(zhuǎn)發(fā)即可。
具體的,轉(zhuǎn)發(fā)芯片可以在ARP表中查詢與該路由表項(xiàng)中的下一跳對應(yīng)的ARP表項(xiàng)。在默認(rèn)情況下,ARP表項(xiàng)通常為無效狀態(tài),在這種情況下,轉(zhuǎn)發(fā)芯片可以將該數(shù)據(jù)報(bào)文上送至CPU進(jìn)行處理,CPU在進(jìn)行路由查詢操作后,可以觸發(fā)學(xué)習(xí)上述路由表項(xiàng)的下一跳對應(yīng)的ARP表項(xiàng)。
CPU在成功學(xué)習(xí)到ARP表項(xiàng)后,可以基于學(xué)習(xí)的該ARP表項(xiàng)轉(zhuǎn)發(fā)數(shù)據(jù)報(bào)文,并下發(fā)該ARP表項(xiàng)至轉(zhuǎn)發(fā)芯片。轉(zhuǎn)發(fā)芯片在接收到CPU下發(fā)的該ARP表項(xiàng)后,此時(shí)該ARP表項(xiàng)處于有效狀態(tài),轉(zhuǎn)發(fā)芯片收到后續(xù)的數(shù)據(jù)報(bào)文時(shí),如果后續(xù)的數(shù)據(jù)報(bào)文命中與該ARP表項(xiàng)對應(yīng)的路由表項(xiàng),則轉(zhuǎn)發(fā)芯片無需將該數(shù)據(jù)報(bào)文上送至CPU進(jìn)行處理,直接根據(jù)該ARP表項(xiàng)轉(zhuǎn)發(fā)上述數(shù)據(jù)報(bào)文。
當(dāng)然,如果轉(zhuǎn)發(fā)芯片根據(jù)數(shù)據(jù)報(bào)文的目的地址在路由表中無法查到具有相同目的地址的路由表項(xiàng),則該數(shù)據(jù)報(bào)文未命中任何路由表項(xiàng),此時(shí)轉(zhuǎn)發(fā)芯片可以將該數(shù)據(jù)報(bào)文丟棄。
由上述實(shí)施例可見,該實(shí)施例通過預(yù)先觸發(fā)ARP協(xié)議學(xué)習(xí)的方式,不再依賴流量動(dòng)態(tài)觸發(fā),主動(dòng)學(xué)習(xí)等價(jià)路由對應(yīng)的ARP表項(xiàng)。并且對包含等價(jià)路由的路由表項(xiàng)中每個(gè)下一跳對應(yīng)的ARP表項(xiàng)增加預(yù)設(shè)標(biāo)記,始終維護(hù)上述ARP表項(xiàng)為有效狀態(tài)。通過這兩個(gè)措施,使得單一流量命中等價(jià)路由的情況下,規(guī)避了CPU和轉(zhuǎn)發(fā)芯片因等價(jià)路由選路算法確定的轉(zhuǎn)發(fā)路徑不一致,導(dǎo)致的數(shù)據(jù)報(bào)文始終由CPU轉(zhuǎn)發(fā)的情況,有效利用轉(zhuǎn)發(fā)芯片高速轉(zhuǎn)發(fā)的性能優(yōu)勢,節(jié)約了CPU的處理資源。
與本發(fā)明基于等價(jià)路由的報(bào)文轉(zhuǎn)發(fā)方法的實(shí)施例相對應(yīng),本發(fā)明還提供了用于執(zhí)行上述方法實(shí)施例的裝置的實(shí)施例。
參見圖3,為本發(fā)明基于等價(jià)路由的報(bào)文轉(zhuǎn)發(fā)裝置的一個(gè)實(shí)施例框圖:
如圖3所示,該基于等價(jià)路由的報(bào)文轉(zhuǎn)發(fā)裝置30包括:
學(xué)習(xí)單元310,用于在CPU學(xué)習(xí)到路由表項(xiàng)后,如果該路由表項(xiàng)包含等價(jià)路由,針對該等價(jià)路由中的每一個(gè)下一跳,分別學(xué)習(xí)對應(yīng)的ARP表項(xiàng)。
下發(fā)單元320,用于向轉(zhuǎn)發(fā)芯片下發(fā)學(xué)習(xí)到的路由表項(xiàng)以及ARP表項(xiàng)。
轉(zhuǎn)發(fā)單元330,用于當(dāng)轉(zhuǎn)發(fā)芯片接收到數(shù)據(jù)報(bào)文時(shí),如果該數(shù)據(jù)報(bào)文命中包含等價(jià)路由的路由表項(xiàng),基于預(yù)設(shè)的等價(jià)路由選路算法確定下一跳,并基于由CPU預(yù)先學(xué)習(xí)到的與該下一跳對應(yīng)的ARP表項(xiàng)轉(zhuǎn)發(fā)所述數(shù)據(jù)報(bào)文。
在本例中,所述裝置30還包括:
標(biāo)記單元340,用于為學(xué)習(xí)到的所述ARP表項(xiàng)增加預(yù)設(shè)標(biāo)記。
在本例中,所述學(xué)習(xí)單元310進(jìn)一步用于:
當(dāng)任一個(gè)ARP表項(xiàng)到達(dá)老化時(shí)長時(shí),檢查該ARP表項(xiàng)是否有預(yù)設(shè)標(biāo)記。
若該ARP表項(xiàng)有預(yù)設(shè)標(biāo)記,重新學(xué)習(xí)該ARP表項(xiàng)。
在本例中,所述學(xué)習(xí)單元310進(jìn)一步用于:
當(dāng)任一個(gè)ARP表項(xiàng)到達(dá)老化時(shí)長時(shí),檢查該ARP表項(xiàng)是否有預(yù)設(shè)標(biāo)記。
若該ARP表項(xiàng)沒有預(yù)設(shè)標(biāo)記,正常老化該表項(xiàng)。
在本例中,所述裝置30還包括:
上送單元350,用于如果所述數(shù)據(jù)報(bào)文命中不包含等價(jià)路由的路由表項(xiàng)時(shí),上送所述數(shù)據(jù)報(bào)文至CPU,由CPU學(xué)習(xí)該數(shù)據(jù)報(bào)文對應(yīng)的ARP表項(xiàng),并將該ARP表項(xiàng)下發(fā)至轉(zhuǎn)發(fā)芯片,以使轉(zhuǎn)發(fā)芯片根據(jù)該ARP表項(xiàng)轉(zhuǎn)發(fā)接收的后續(xù)數(shù)據(jù)報(bào)文。
丟棄單元360,用于在所述數(shù)據(jù)報(bào)文未命中任何路由表項(xiàng)時(shí),丟棄所述數(shù)據(jù)報(bào)文。
本申請基于等價(jià)路由的報(bào)文轉(zhuǎn)發(fā)裝置的實(shí)施例可以應(yīng)用在路由設(shè)備上。裝置實(shí)施例可以通過軟件實(shí)現(xiàn),也可以通過硬件或者軟硬件結(jié)合的方式實(shí)現(xiàn)。以軟件實(shí)現(xiàn)為例,作為一個(gè)邏輯意義上的裝置,是通過其所在路由設(shè)備的處理器將非易失性存儲(chǔ)器中對應(yīng)的計(jì)算機(jī)程序指令讀取到內(nèi)存中運(yùn)行形成的。從硬件層面而言,如圖4所示,為本申請基于等價(jià)路由的報(bào)文轉(zhuǎn)發(fā)裝置所在路由設(shè)備的一種硬件結(jié)構(gòu)圖,除了圖4所示的處理器、內(nèi)存、網(wǎng)絡(luò)接口、以及非易失性存儲(chǔ)器之外,實(shí)施例中裝置所在的路由設(shè)備通常根據(jù)該基于等價(jià)路由的報(bào)文轉(zhuǎn)發(fā)裝置的實(shí)際功能,還可以包括其他硬件,對此不再贅述。
上述裝置中各個(gè)單元的功能和作用的實(shí)現(xiàn)過程具體詳見上述方法中對應(yīng)步驟的實(shí)現(xiàn)過程,在此不再贅述。
對于裝置實(shí)施例而言,由于其基本對應(yīng)于方法實(shí)施例,所以相關(guān)之處參見方法實(shí)施例的部分說明即可。以上所描述的裝置實(shí)施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上。可以根據(jù)實(shí)際的需要選擇其中的部分或者全部模塊來實(shí)現(xiàn)本申請方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動(dòng)的情況下,即可以理解并實(shí)施。
以上所述僅為本申請的較佳實(shí)施例而已,并不用以限制本申請,凡在本申請的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本申請保護(hù)的范圍之內(nèi)。