專利名稱:一種避免冗余Flood的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及網(wǎng)絡(luò)通信技術(shù)領(lǐng)域,尤其涉及一種避免冗余Flood的方法。
背景技術(shù):
OSPF(開放最短路徑優(yōu)先協(xié)議)是運(yùn)行于IP(網(wǎng)際協(xié)議)之上的協(xié)議,它沒有利用TCP(傳輸控制協(xié)議)進(jìn)行報(bào)文的傳輸,因此保證報(bào)文的可靠傳輸就成為OSPF協(xié)議的一部分。目前OSPF協(xié)議可以充分保證報(bào)文的可靠傳輸,但是在兩臺(tái)路由器之間存在多條并行鏈路的情況下卻會(huì)出現(xiàn)傳輸冗余的情況。并行鏈路的數(shù)量越多,冗余傳輸?shù)那闆r也就越嚴(yán)重。如果能夠避免冗余的傳輸,那就能很大地提高路由器的處理效率。
OSPF的網(wǎng)絡(luò)類型P2P,NBMA,Broadcast。P2P就是點(diǎn)到點(diǎn)類型,意思是一條鏈路只能使兩臺(tái)路由器通信。NBMA和Broadcast(廣播網(wǎng))的行為是一致的,這種網(wǎng)絡(luò)中的路由器分為三種角色(以一個(gè)廣播網(wǎng)為例)DR(一定會(huì)有且僅一個(gè)),BDR(是DR的備份路由器,DR壞了BDR就自動(dòng)成為DR了,不一定有,但最多只能一個(gè)),DRother(數(shù)量沒有限制,可以有,可以沒有)。DR、BDR、DRother的概念僅存在于NBMA和Broadcase網(wǎng)絡(luò)中,P2P中不存在也沒有對(duì)應(yīng)的角色。DR、BDR是路由器自動(dòng)選舉產(chǎn)生的,DRother就是除去DR和BDR的路由器了。
顯式ACK在任何類型的網(wǎng)絡(luò)上,如果路由器A給B發(fā)送一個(gè)LSA,然后B回給A一個(gè)ACK報(bào)文的話,這種確認(rèn)的方式叫做顯式ACK。
隱式ACK在NBMA和Broadcast類型的網(wǎng)絡(luò)上,如果DRother給DR發(fā)送一個(gè)LSA,協(xié)議規(guī)定DR只能給DRother回那個(gè)收到的LSA,這種類型叫做隱式ACK。
根據(jù)OSPF標(biāo)準(zhǔn)(RFC2328),一臺(tái)路由器收到一條LSA(鏈路狀態(tài)通告)后應(yīng)該向所有其它鄰居Flood。接收端在收到LSA后會(huì)發(fā)送一個(gè)ACK給發(fā)送端。如果發(fā)送端在一定時(shí)間內(nèi)沒有收到確認(rèn),它會(huì)把LSA再Flood一次,直到收到ACK為止。這樣一個(gè)Flood周期就完成了。
圖1中的拓?fù)浣Y(jié)構(gòu),F(xiàn)lood LSA的過程如圖2所示,RTA和RTB都運(yùn)行OSPF協(xié)議,它們之間有三條并行鏈路,對(duì)應(yīng)的接口分別為s0、s1和s2。假設(shè)RTB向RTA Flood一條LSA,根據(jù)OSPF標(biāo)準(zhǔn),LSA會(huì)分別從RTB的接口s0、s1、s2向RTA Flood;RTA會(huì)分別從三個(gè)接口收到三份相同的LSA,再假設(shè)s0接口的LSA先到達(dá)RTA,RTA會(huì)把該LSA從其接口s1、s2給Flood回RTB,然后再從接口s0發(fā)一個(gè)ACK給RTB,通知RTB在接口s0上發(fā)送的LSA已經(jīng)收到了;接下來RTB從s1、s2 Flood出來的LSA也陸續(xù)到達(dá)RTA,RTA會(huì)認(rèn)為這兩個(gè)LSA是重復(fù)的LSA,它會(huì)分別在s1、s2發(fā)送一個(gè)ACK告訴RTB從上述兩個(gè)接口Flood的LSA已經(jīng)收到了。
發(fā)明內(nèi)容
從圖2可以看到,三個(gè)并行鏈路的情況下,兩臺(tái)路由器報(bào)文發(fā)送總的次數(shù)共六次。事實(shí)上,在圖1中的兩臺(tái)路由器之間冗余Flood的發(fā)送有兩次分別是RTA收到RTB Flood過來的LSA后又分別從接口s1和s2把該LSA Flood回去,在圖2中用虛線顯示。如果RTA不Flood這兩條LSA,那么RTA和RTB都能提高2/6(33%)的效率。而且并行鏈路越多,冗余Flood的LSA越多。四條鏈路會(huì)冗余Flood 3條LSA,浪費(fèi)的效率是3/8(37%)。隨著鏈路的增加,冗余Flood的LSA就越多,浪費(fèi)的效率會(huì)越來越趨近于50%。
本發(fā)明的發(fā)明目的是提供一種避免冗余Flood的方法,通過本發(fā)明,通過本發(fā)明,可以消除冗余Flood的LSA,利用本發(fā)明可以有效減少報(bào)文的Flood,同時(shí)減少報(bào)文的接收處理,降低了帶寬的占用。
本發(fā)明的目的是通過以下技術(shù)方案實(shí)現(xiàn)的一種避免冗余Flood的方法,適用于開放最短優(yōu)先路徑OSPF多鏈路情況,該方法包括A.路由器的一個(gè)接口收到一個(gè)鏈路狀態(tài)廣播LSA,查詢所述LSA的發(fā)送方,記錄所述發(fā)送方的標(biāo)識(shí)Router-id;B.遍歷所述路由器所有的接口下的所有的鄰居,每一次遍歷過程中,如果當(dāng)前的鄰居滿足特定條件,則不向該鄰居Flood LSA。
所述的一種避免冗余Flood的方法,步驟A中所述的LSA,是所述路由器接口收到的比自己數(shù)據(jù)庫中更新的、非所述路由器接口生成的鏈路狀態(tài)廣播LSA。
所述的一種避免冗余Flood的方法,步驟A中所述的發(fā)送方的標(biāo)識(shí)Router-id,置于所述LSA的域中;或者,通過函數(shù)的參數(shù)來傳遞。
所述的一種避免冗余Flood的方法,所述步驟B中遍歷所有的接口下的所有的鄰居之前,確定每一個(gè)接口、每一個(gè)鄰居存在。
所述的一種避免冗余Flood的方法,所述步驟B中鄰居滿足的條件包括當(dāng)前的鄰居的標(biāo)識(shí)Router-id和所述記錄的標(biāo)識(shí)Router-id相同,并且不需要Flood隱式ACK。
所述的一種避免冗余Flood的方法,所述步驟B中判斷不需要Flood隱式ACK的情況包括所述路由器不是指定路由器DR,或者發(fā)送所述LSA的鄰居不是非指定路由器DRother。
所述的一種避免冗余Flood的方法,所述步驟B還包括每一次遍歷過程中,如果當(dāng)前的鄰居不滿足所述的條件,則向該鄰居Flood LSA。
所述的一種避免冗余Flood的方法,有多條并行鏈路時(shí),如果存在一條可靠鏈路,則只在該條鏈路上Flood LSA。
圖1為拓?fù)浣Y(jié)構(gòu)示意圖。
圖2為已有技術(shù)中發(fā)送LSA的示意圖。
圖3a為本發(fā)明中發(fā)送LSA的示意圖。
圖3b為本發(fā)明中發(fā)送LSA的示意圖。
圖4為本發(fā)明中發(fā)送LSA的流程圖。
具體實(shí)施例方式
貫穿說明書,示出的該優(yōu)選實(shí)施例和示例應(yīng)被看作本發(fā)明的范例而不受限制。
路由器Router每次收到一條LSA查詢?cè)摋lLSA是由哪一個(gè)鄰居Flood的,記錄該路由器的標(biāo)識(shí)Router-id;遍歷所有接口下的所有的鄰居路由器,與已經(jīng)記錄的標(biāo)識(shí)Router-id比較;如果標(biāo)識(shí)Router-id相同并且不需要Flood隱式ACK,則跳過該鄰居取下一個(gè)鄰居,否則,向該鄰居Flood LSA。
本發(fā)明提供的一種避免冗余Flood的方法,具體實(shí)施流程如圖4所示,其中,
步驟410路由器的一個(gè)接口收到一個(gè)比自己數(shù)據(jù)庫中更新的,且非自己產(chǎn)生的鏈路狀態(tài)廣播LSA;步驟420在所述接口下的鄰居表中根據(jù)源IP地址查找到發(fā)送所述LSA的鄰居,記錄下該路由器的標(biāo)識(shí)Router-id,取第一個(gè)接口;步驟430如果所述接口不存在,則跳轉(zhuǎn)到步驟540;步驟440所述接口存在,如果所述路由器自己是指定路由器DR,并且鄰居是非指定路由器DRother,則所述接口發(fā)送隱式ACK,否則,跳轉(zhuǎn)到步驟460;步驟450取所述路由器的下一接口,跳轉(zhuǎn)到步驟430;步驟460發(fā)送顯式ACK,取第一個(gè)鄰居;步驟470如果鄰居不存在,跳轉(zhuǎn)到步驟450;步驟480如果鄰居關(guān)系沒有建立,跳轉(zhuǎn)到步驟520;步驟490如果路由器自己是非指定路由器DRother,且LSA是指定路由器DR或備份指定路由器BDR發(fā)送過來的,跳轉(zhuǎn)到步驟450;步驟500假如路由器自己是備份指定路由器BDR,則跳轉(zhuǎn)到步驟450;步驟510
路由器自己不是是備份指定路由器BDR,假如當(dāng)前鄰居的標(biāo)識(shí)Router-id和發(fā)送這個(gè)LSA的鄰居的標(biāo)識(shí)Router-id相同,則跳轉(zhuǎn)到步驟530;步驟520給這個(gè)鄰居發(fā)送LSA;步驟530取下一個(gè)鄰居,跳轉(zhuǎn)到步驟470。
步驟540結(jié)束。
此時(shí),F(xiàn)lood LSA的示意圖如圖3a所示,如果RTA不Flood圖2中虛線表示的兩條冗余LSA,那么RTA和RTB都能提高2÷6=33%的效率,而且并行鏈路越多,冗余Flood的LSA越多。隨著鏈路的增加,冗余Flood的LSA就越多,浪費(fèi)的效率會(huì)越來越趨近于50%,因此,本發(fā)明最大可減少50%的總報(bào)文Flood量。
如圖3b所示,如果在多條并行鏈路的情況下能夠確保其中某一條鏈路一定可靠,則可以指定LSA只在該條鏈路上Flood,這樣就能夠更進(jìn)一步地降低冗余的LSA Flood和接收。以圖1中的拓?fù)錇槔?,如果指定RTB在s0接口上FloodLSA,那么當(dāng)RTB要向RTA Flood一條LSA時(shí),它只會(huì)從s0接口Flood給RTA,而不會(huì)再從s1或s2 Flood LSA。這樣在多條并行鏈路的情況下,F(xiàn)lood LSA時(shí)就可以把多條鏈路看成一條鏈路,使得報(bào)文Flood、接收的效率達(dá)到最高。也就是說一條LSA僅僅兩個(gè)報(bào)文就夠了,比改進(jìn)前減少了四個(gè)報(bào)文,效率提高了66%。
通過本發(fā)明可以判斷鄰居上是否已經(jīng)存在該LSA,如果該鄰居上存在該LSA,則不再向其Flood該LSA,如果該鄰居上不存在該LSA,且存在一條可靠鏈路,則只在該條鏈路上Flood,否則,正常處理。本發(fā)明可以消除冗余Flood的LSA,利用本發(fā)明可以有效減少報(bào)文的Flood,同時(shí)減少報(bào)文的接收處理,降低了帶寬的占用。接口數(shù)量越多,效果越好。隨著接口數(shù)量的增加,最大可減少50%的總報(bào)文Flood量。
權(quán)利要求
1.一種避免冗余Flood的方法,適用于開放最短優(yōu)先路徑OSPF多鏈路情況,其特征在于,該方法包括A.路由器的一個(gè)接口收到一個(gè)鏈路狀態(tài)廣播LSA,查詢所述LSA的發(fā)送方,記錄所述發(fā)送方的標(biāo)識(shí)Router-id;B.遍歷所述路由器所有的接口下的所有的鄰居,每一次遍歷過程中,如果當(dāng)前的鄰居滿足特定條件,則不向該鄰居Flood LSA。
2.根據(jù)權(quán)利要求1所述的一種避免冗余Flood的方法,其特征在于,步驟A中所述的LSA,是所述路由器接口收到的比自己數(shù)據(jù)庫中更新的、非所述路由器接口生成的鏈路狀態(tài)廣播LSA。
3.根據(jù)權(quán)利要求1所述的一種避免冗余Flood的方法,其特征在于,步驟A中所述的發(fā)送方的標(biāo)識(shí)Router-id,置于所述LSA的域中;或者,通過函數(shù)的參數(shù)來傳遞。
4.根據(jù)權(quán)利要求1所述的一種避免冗余Flood的方法,其特征在于,所述步驟B中遍歷所有的接口下的所有的鄰居之前,確定每一個(gè)接口、每一個(gè)鄰居存在。
5.根據(jù)權(quán)利要求1、2、3或4所述的一種避免冗余Flood的方法,其特征在于,所述步驟B中鄰居滿足的條件包括當(dāng)前的鄰居的標(biāo)識(shí)Router-id和所述記錄的標(biāo)識(shí)Router-id相同,并且不需要Flood隱式ACK。
6.根據(jù)權(quán)利要求5所述的一種避免冗余Flood的方法,其特征在于,所述步驟B中判斷不需要Flood隱式ACK的情況包括所述路由器不是指定路由器DR,或者發(fā)送所述LSA的鄰居不是非指定路由器DRother。
7.根據(jù)權(quán)利要求1或6所述的一種避免冗余Flood的方法,其特征在于,所述步驟B還包括每一次遍歷過程中,如果當(dāng)前的鄰居不滿足所述的條件,向該鄰居Flood LSA。
8.根據(jù)權(quán)利要求7所述的一種避免冗余Flood的方法,其特征在于,有多條并行鏈路時(shí),如果存在一條可靠鏈路,則只在所述可靠鏈路上Flood LSA。
全文摘要
本發(fā)明公開了一種避免冗余Flood的方法,根據(jù)開放最短路徑優(yōu)先協(xié)議OSPF的Flood原則在Flood一條鏈路狀態(tài)公告(LSA)的時(shí)候,如果不確定鄰居是否已經(jīng)有該條LSA那就需要把它Flood給對(duì)方,如果已經(jīng)確定該鄰居已經(jīng)有該LSA,則不必再向其Flood該LSA,關(guān)鍵是如何判斷在這個(gè)鄰居上已經(jīng)存在該LSA,本發(fā)明的判斷方法是如果路由器A從路由器B收到一條LSA,那么B一定有該條LSA。通過本發(fā)明,可以消除冗余Flood的LSA,減少報(bào)文的接收、處理工作量,避免帶寬的無效占用。
文檔編號(hào)H04L29/06GK1859375SQ20051010141
公開日2006年11月8日 申請(qǐng)日期2005年11月12日 優(yōu)先權(quán)日2005年11月12日
發(fā)明者楊鋒 申請(qǐng)人:華為技術(shù)有限公司