專利名稱:一種多跳路由系統(tǒng)間的故障快速檢測方法
技術領域:
本發(fā)明涉及的多跳路由系統(tǒng)間的故障檢測方法具體包括 1.本地路由器和對端路由器互發(fā)Hello報文,當報文中含有確認收到的信息時, 則判斷路由系統(tǒng)之間雙向鏈路是正常的,反之,則判斷路由系統(tǒng)之間雙向鏈路發(fā)生故障。
2.當本地路由器在定時器的超時間隔內(nèi)沒有收到對端路由器的Hello報文時,則
判斷路由系統(tǒng)之間雙向鏈路發(fā)生故障。 [OO53][實施方式1] 下面結(jié)合附圖,以兩臺路由器構(gòu)建的系統(tǒng)為例,對實施例中的路由系統(tǒng)間的故障 檢測方法進行說明。
圖1中示出了兩臺路由器之間進行快速故障檢測的網(wǎng)絡結(jié)構(gòu)。 以兩臺路由器構(gòu)成的路由系統(tǒng)為例,如圖1所示,該路由系統(tǒng)為多跳路由系統(tǒng),系
統(tǒng)包括路由器R1和路由器R2,兩臺路由器可以互相向?qū)Χ寺酚善靼l(fā)送消息。 結(jié)合圖2所示,兩臺路由器啟動故障檢測模塊并初始化后,接收消息,具體步驟包
6括, S201 :啟動路由器Rl和路由器R2 ; S202 :分別對路由器Rl和路由器R2故障檢測模塊進行初始化;
初始化過程,即,創(chuàng)建一個鏈路快速檢查鏈表(CheckList),該鏈表中包含鏈 路檢測時所需信息,包括對端路由器的IP地址(DstlP)、Hello報文發(fā)送間隔變量 (Sendlnterval)、鏈路魯棒性變量(LinkRobustness) , Hello報文剩余發(fā)送次數(shù)變量 (RemainN咖)、鏈路故障檢測定時器(LinkTimer) 、Hello報文發(fā)送間隔定時器(SendTimer) 以及主檢測標識(MasterFlag)等, 在本實施例中,鏈路魯棒性變量(LinkRobustness)用于反映鏈路的擁塞程度,默
認值為2 ;Hello報文發(fā)送間隔變量(Sendlnterval)默認值為20毫秒, 鏈路故障檢測定時器(LinkTimer)和Hello報文發(fā)送間隔定時器(SendTimer)均
為遞減定時器。上述兩者在超時后均會被置為o,而兩者在運行過程中均不為o。其中,當
鏈路故障檢測定時器(LinkTimer)超時,則表示路由器間的鏈路發(fā)生故障; S203 :初始化完成后路由器等待接收消息,根據(jù)接收到的消息類型,執(zhí)行相應步
驟, 路由器可能接收到的消息類型包括故障快速檢測開始消息、Hello報文接收消 息、定時器超時消息; S204 :接收到的消息類型為故障快速檢測開始消息; S205 :本地路由器從上述故障快速檢測開始消息中獲取對端路由器的IP地址; S206 :獲取IP地址后,在鏈路快速檢查鏈表中,查找與上述IP地址對應的節(jié)點; S207 :當本地路由器查找的對應節(jié)點后,向?qū)Χ寺酚善靼l(fā)送Hello報文。 上述故障檢測消息的處理過程,實現(xiàn)了本地路由器向?qū)Χ寺酚善鞒晒Πl(fā)送Hello
報文的過程。 上述故障檢測消息的處理流程具體可參見圖4。 S208 :接收到的消息類型為Hello報文接收消息; S209 :判斷接收到的Hello報文中是否含有確認收到的信息; S210 :當Hello報文中包含確認收到的信息時,則可判斷路由器間的雙向鏈路通
信正常; S211 :當Hello報文中沒有包含確認收到的信息時,則可判斷路由器間的雙向鏈 路通信故障; S212 :當檢測雙向鏈路通信故障后,查找發(fā)生故障的節(jié)點; S213 :對雙向鏈路進行故障處理。 上述Hello報文接收消息的處理流程具體可參見圖5。 S214 :接收到的消息類型為定時器超時消息; S215 :判斷鏈路故障檢測定時器是否超時; 當判斷鏈路故障檢測定時器沒有超時,執(zhí)行步驟210 ; 當判斷鏈路故障檢測定時器超時,執(zhí)行步驟211、步驟212和步驟213。 上述定時器超時消息的處理流程具體可參見圖6。 圖3示出了上述Hello報文的報文格式。
如圖3所示,Hello報文格式內(nèi)容包括IP報頭、Hello報文發(fā)送間隔變量 (Sendlnterval)、鏈路魯棒性變量(LinkRobustness),以及連接狀態(tài)變量(LinkStatus)。
其中,Hello報文發(fā)送間隔變量(Sendlnterval),字節(jié)數(shù)為2 ;
鏈路魯棒性變量(LinkRobustness),字節(jié)數(shù)為1 ;
連接狀態(tài)變量(LinkStatus),字節(jié)數(shù)為1 , 此夕卜,Hello報文發(fā)送間隔變量(Sendlnterval)和鏈路魯棒性變量 (LinkRobustness),用于使本地路由器和對端路由器的報文發(fā)送間隔、鏈路魯棒值和判斷 鏈路故障的時間間隔均相同。 連接狀態(tài)變量(LinkStatus),用于反映對端路由器和本地路由器的單向鏈路狀 態(tài)。 本發(fā)明提供的Hello報文,相比較于BFD技術的Hello報文,結(jié)構(gòu)更加簡單,在進
行故障快速檢測時,占用的帶寬更少。 [OO91][實施方式2] 圖4中示出了故障快速檢測開始消息處理流程。 在本實施例中,以路由器Rl為本地路由器,路由器R2為對端路由器。 在步驟203中,當本地路由器R1的故障檢測模塊接收到的消息類型為故障快速檢
測消息時,執(zhí)行如下步驟 S401 :本地路由器Rl從該消息中獲取對端路由器R2的IP地址(DstIP),根據(jù)該 地址查找步驟202中創(chuàng)建的鏈路快速檢查鏈表(CheckList)。查看該表中是否包含有與上 述IP地址(DstIP)對應的節(jié)點。 當創(chuàng)建的鏈路快速檢查鏈表(CheckList)中沒有包含與上述IP地址(DstIP)對 應的節(jié)點時,執(zhí)行步驟402至步驟407 S402 :故障快速檢測模塊在鏈路快速檢查鏈表(CheckList)中增加一個節(jié)點,
當創(chuàng)建的鏈路快速檢查鏈表(CheckList)中包含有與上述IP地址(DstIP)對應 的節(jié)點時,則跳過上述步驟402,依次執(zhí)行步驟403至步驟407 ;
S403 :使RemainN咖=LinkRobustness, MasterFlag = 1 ; S404 :啟動上述節(jié)點中的鏈路故障檢測定時器(LinkTimer),該定時器的超時間 隔為LinkTimeout,由以下公式石角定,LinkTimeout = 2* (LinkRobustness-1) *SendInterva l+MaxLinkDelay,其中,MaxLinkDelay為最大鏈路延遲。鏈路延遲為報文往返對端路由器 所經(jīng)歷的時間,MaxLinkDelay默認值為5毫秒。 S405 :本地路由器R1向?qū)Χ寺酚善鱎2發(fā)送Hello報文。其中Sendlnterval域 和LinkRobustness域的值分別與步驟403中Sendlnterval值和LinkRobustness值相同, LinkStatus域的值為1,表示對端路由器到本地路由器的單向鏈路是正常的;
S406 :RemainN咖=RemainNum-l ; S407 :啟動Hello報文發(fā)送間隔定時器(SendTimer),其超時間隔為 Sendlnterval。 上述故障檢測消息的處理過程,實現(xiàn)了由本地路由器向?qū)Χ寺酚善鞒晒Πl(fā)送 Hello報文。 綜上,當路由器的故障快速檢測模塊收到故障快速檢測開始消息,說明該路由器是故障快速檢測的主動者,相應地該路由器會將主檢測者標識(MasterFlag)置為1,同時 將發(fā)送的Hello報文的Sendlnterval域和LinkRobustness域分別賦值為自己的報文發(fā)送 間隔和鏈路魯棒值。 當路由器的故障快速檢測模塊沒有收到故障快速檢測開始消息,則說明該路由器 是故障快速檢測的被動者,收到對端路由器的Hello報文后,該路由器就會將MasterFlag 置為0,同時將發(fā)送的Hello報文的Sendlnterval域和LinkRobustness域均置為0。
本地路由器和對端路由器可以均為主動者,但不能均為被動者。
[實施方式3] 圖5中示出了 Hello報文接收消息的處理流程。 在步驟203中,當路由器R2的故障檢測模塊接收到的消息類型為Hello報文接收 消息時,則根據(jù)收到的Hello報文消息判斷通信鏈路狀態(tài),若路由器R2收到路由器Rl發(fā)送 的Hello報文中含有確認收到的信息,即連接狀態(tài)變量(LinkStatus),則判斷本地路由器 Rl到對端路由器R2的雙向鏈路通信正常。包括如下步驟
S501 :判斷Hello報文中的LinkStatus是否為1 ;
若LinkStatus為1 ,則執(zhí)行步驟502 ; S502 :查詢CheckList表,看表中是否含有與SrcIP對應的節(jié)點,S卩,SrcIP與節(jié)點 中的DstIP相同; 當未找到上述對應節(jié)點時,執(zhí)行步驟504,即判斷報文中的Sendlnterval值和 LinkRobustness值是否均不為0 ; 當報文中的Sendlnterval值和LinkRobustness值至少有一個為0時,執(zhí)行步驟 511,丟棄該報文; 當報文中的Sendlnterval值和LinkRobustness值至少有一個不為0時,則依次 執(zhí)行步驟505和步驟506 ; 當找到上述對應節(jié)點時,執(zhí)行步驟503,即判斷LinkTimer是否為0 ;
當LinkTimer = 0時,執(zhí)行步驟511,丟棄該報文;
當LinkTimer不為0時,執(zhí)行步驟506 ; S505 :在CheckList表中增加一個節(jié)點,把報文中的SrcIP、 Sendlnterval值和 LinkRoubustness值分別賦值給該節(jié)點中的DstIP、 Sendlnterval禾口 LinkRoubustness,
此夕卜,將LinkRoubustness賦值給RemainN咖;將MasterFlag置為0 ;
S506 :判斷MasterFlag值、矛艮文中的Sendlnterval值禾口 LinkRoubustness值;
S507 :判斷Sendlnterval = 0或LinkRobustness = 0,并且MasterFlag = 0時, 則執(zhí)行步驟511,即丟棄該報文; S514 :判斷Sendlnterval = 0或LinkRobustness = 0,并且MasterFlag = 1時, 則依次執(zhí)行步驟515和S516 ; S512 :判斷Sendlnterval不為0且LinkRobustness不為0時,依次執(zhí)行步驟513、 步驟515和步驟516 ; S513 :將上述報文中的Sendlnterval值和LinkRobustness值分別賦值給SrcIP 所對應節(jié)點中的Sendlnterval值禾口 LinkRobustness值; S515 :故障檢測模塊更新SrcIP所對應節(jié)點中的定時器LinkTimer,其超時間隔LinkTimeout由以下公式確定 LinkTimeout = LinkRobustness氺Sendlnterval+SingleLinkDelay其中,LinkRobustness值禾口 SingleLinkDelay值均為SrcIP所對應節(jié)點中的
LinkRobustness值禾口 S ingleLinkDelay值; SingleDelay = MaxSingleDelay-MinSingleDelay, MaxSingleDelay為報文從對端路由器R2到本地路由器Rl的最大單向鏈路延遲;
MinSingleDelay為報文從對端路由器R2到本地路由器Rl的最小單向鏈路延遲,
SingleDelay默認值為3毫秒。 S516 :查看SrcIP所對應節(jié)點中的RemainNum值、LinkTimer和SendTimer的超時 乘!j余值,分另ll為SendRemain禾口 LinkRemain ; 當判斷RemainNum > 0且SendRemain > Sendlnterva1/2,或者RemainNum《0 且LinkRemain > Sendlnterval/2+SingleLinkDelay時,執(zhí)行步驟518,艮卩RemainNum = LinkRobustness_l; S519 :當RemainNum > 0且SendRemain《Sendlnterva1/2,或者RemainNum《0 且LinkRemain《Sendlnterval/2+SingleLinkDelay時,則執(zhí)行步驟520,艮卩RemainNum = LinkRobustness。 當步驟501中,判斷LinkStatus為0時,則執(zhí)行步驟508 ;
S508 :查看CheckList表,查找所要操作的節(jié)點。
當沒有找到該節(jié)點時,執(zhí)行步驟511,即丟棄收到的報文。
當找到該節(jié)點時,則執(zhí)行以下步驟 S509 :從CheckList表中刪除節(jié)點,包括清除定時器LinkTimer和SendTimer ;
S510 :進行鏈路故障處理。 [OH3][實施方式4] 圖6示出了定時器超時消息的處理流程。 在步驟203中,當故障檢測模塊接收到消息為定時器超時消息時,執(zhí)行以下步驟
S601 :判斷超時定時器的類型。 S602 :判斷超時定時器為SendTimer,執(zhí)行步驟603 ;
S603 :判斷LinkTimer禾口 RemainNum的值。 S604 :判斷LinkTimer = 0且RemainNum = 0時,則執(zhí)行步驟605 ;
S605 :從CheckList中刪除SendTimer對應的節(jié)點; S606 :判斷LinkTimer = 0且RemainNum > 0,依次執(zhí)行步驟607、步驟608和步驟 609 ; S607 :發(fā)送Hello報文,其中,報文中的Sendlnterval域、LinkStatus域和
LinkRobustness域均置為0 ; S608 :RemainN咖=RemainNum-l ; S609 :啟動SendTimer,超時間隔為 Sendlnterval/LinkRobustness ; S610 :在步驟603中,判斷LinkTimer不為0時,執(zhí)行步驟611 ;
S611 :判斷RemainNum的值;
10
S612 :當RemainNum > 0時,則執(zhí)行步驟613、步驟614和步驟615 ; S613 :發(fā)送Hello矛艮文,矛艮文中的Sendlnterval、 LinkStatus禾口 LinkRobustness
值均為非0值; S614 :RemainNum = LinkRobustness-l ;
S615 :啟動SendTimer,超時間隔為Sendlnterval ;
S616 :在步驟611中,判斷RemainNum = 0,執(zhí)行步驟617 ;
S617 :SendTimer = 0 ; 在步驟601中,判斷定時器類型為LinkTimer,即步驟618。 當定時器LinkTimer超時時,說明鏈路發(fā)生故障,則執(zhí)行以下步驟 S619 :使LinkTimer = 0,并使RemainNum = LinkRobustness ; S620 :向?qū)Χ寺酚善靼l(fā)送Hello報文,并且把Hello報文中的Sendlnterval域、
LinkStatus域禾口 LinkRobustness域均置為0 ; S621 :RemainN咖=RemainNum-l ; S622 :啟動SendTimer,其超時間隔為 Sendlnterval/LinkRobustness ; S623 :判斷Master的值,當MasterFlag = 1時,則執(zhí)行步驟624 ;
S624:鏈路故障處理。 S卩,當鏈路故障檢測定時器超過規(guī)定的超時間隔后,本地路由器會以Hello報文
發(fā)送間隔變量除以鏈路魯棒性變量的時間間隔向?qū)Χ寺酚善靼l(fā)送次數(shù)等于鏈路魯棒性變
量的Hello報文,通知對端路由器發(fā)生鏈路故障。而后,進行鏈路故障處理。 綜上,當路由器R1可以收到路由器R2的Hello報文,并且報文中含有確認收到的
信息時,則判斷路由器R1到路由器R2的雙向鏈路是正常的。 當路由器R1在規(guī)定時間內(nèi)沒有收到路由器R2的Hello報文,或者收到的報文中 不含有確認收到的信息時,則判斷路由器R1到路由器R2的雙向鏈路的某個節(jié)點發(fā)生故障。
當故障檢測模塊檢測到路由系統(tǒng)間的鏈路發(fā)生故障時,查找發(fā)生故障的節(jié)點,對 鏈路進行故障處理。 此外,路由器R2也可以作為報文發(fā)送者,即發(fā)送報文消息的主動方,路由器R1作 為報文接收者,即接收報文消息的被動方,采用如上所述的相同方法來判斷其對端路由器 的雙向鏈路是否發(fā)生故障。 以上所披露的僅為本發(fā)明的優(yōu)選實施例,當然不能以此來限定本發(fā)明的權利保護 范圍??梢岳斫猓鶕?jù)本發(fā)明所附權利要求書中限定的實質(zhì)和范圍所作的等同變化,仍屬于 本發(fā)明所涵蓋的范圍。
權利要求
一種多跳路由系統(tǒng)間的故障快速檢測方法,用于檢測路由系統(tǒng)間的鏈路故障,該多跳路由系統(tǒng)至少包括一臺本地路由器和一臺對端路由器,在本地路由器和對端路由器上分別設置故障檢測模塊,其特征在于所述多跳路由系統(tǒng)間故障快速檢測方法包括,A1啟動本地路由器和對端路由器;A2分別對本地路由器和對端路由器的故障檢測模塊進行初始化;A3等待接收消息;A4若A3中接收到對端路由器的消息類型為故障快速檢測開始消息,本地路由器從該消息中獲取對端路由器的IP地址,檢查與所述IP地址對應的節(jié)點,然后向?qū)Χ寺酚善靼l(fā)送Hello報文;A5若A3中接收到的消息類型為Hello報文接收消息,判斷本地路由器收到對端路由器發(fā)送的Hello報文中是否含有確認收到的信息,當Hello報文中含有確認收到的信息,判斷本地路由器到對端路由器的雙向鏈路通信正常,當Hello報文中沒有含有確認收到的信息,判斷本地路由器到對端路由器的雙向鏈路發(fā)生故障;A6若A3中接收到的消息類型為定時器超時消息,判斷超時定時器的類型,包括Hello報文發(fā)送間隔定時器和鏈路故障檢測定時器,當所述鏈路故障檢測定時器超出規(guī)定的超時間隔后,判斷本地路由器到對端路由器的雙向鏈路發(fā)生故障;A7故障檢測模塊檢測到鏈路發(fā)生故障后,查找發(fā)生故障的節(jié)點,對鏈路進行故障處理。
2. 如權利要求1所述的多跳路由系統(tǒng)間的故障快速檢測方法,其特征在于故障檢測 模塊進行初始化,即,創(chuàng)建一個鏈路快速檢查鏈表,所述鏈表包含鏈路檢測所需信息。
3. 如權利要求l所述的多跳路由系統(tǒng)間的故障快速檢測方法,其特征在于所述Hello 報文格式包括,IP報頭;Hello報文發(fā)送間隔變量; 鏈路魯棒性變量;所述Hello報文發(fā)送間隔變量和鏈路魯棒性變量,用于使本地路由器和對端路由器的 報文發(fā)送間隔、鏈路魯棒值和判斷鏈路故障的時間間隔均相同,連接狀態(tài)變量,用于反映對端路由器到本地路由器的單向鏈路狀態(tài)。
4. 如權利要求1或3所述的多跳路由系統(tǒng)間的故障快速檢測方法,其特征在于所述 Hello報文中確認收到的信息為連接狀態(tài)變量。
5. 如權利要求l所述的多跳路由系統(tǒng)間的故障快速檢測方法,其特征在于所述Hello 報文發(fā)送間隔定時器和所述鏈路故障檢測定時器均為遞減定時器。
6. 如權利要求1所述的多跳路由系統(tǒng)間的故障快速檢測方法,其特征在于所述鏈路 故障檢測定時器超過規(guī)定的超時間隔后,本地路由器會以間隔為Hello報文發(fā)送間隔變量 除以鏈路魯棒性變量的時間間隔向?qū)Χ寺酚善靼l(fā)送次數(shù)等于鏈路魯棒性變量的Hello報文,通知對端路由器發(fā)生鏈路故障。
7.如權利要求1所述的多跳路由系統(tǒng)間的故障快速檢測方法,其特征在于當本地路 由器的故障檢測模塊檢測到系統(tǒng)間的鏈路發(fā)生故障時,查看鏈路快速檢查鏈表,查找故障 對應的操作節(jié)點,當找到所述節(jié)點時,則從鏈路快速檢查鏈表中刪除該操作節(jié)點,并清除Hello報文發(fā) 送間隔定時器和鏈路故障檢測定時器,然后進行鏈路故障處理; 當沒有找到所述節(jié)點時,則丟棄收到的Hello報文。
全文摘要
本發(fā)明披露了一種多跳路由系統(tǒng)間的故障快速檢測方法,該方法包括,本地路由器經(jīng)初始化后向?qū)Χ寺酚善髦芷谛园l(fā)送Hello報文。當本地路由器在超時間隔內(nèi)收到對端路由器的Hello報文,且報文中含有本地路由器的Hello報文確認收到的信息時,則認為兩臺路由器間的雙向鏈路正常;當本地路由器在規(guī)定的時間內(nèi)沒有收到對端路由器的Hello報文,或者收到的報文中不含有本地路由器的Hello報文確認收到的信息時,則認為到雙向鏈路發(fā)生故障。同時,對端路由器也可以采用相同的方法來檢測到本地路由器的雙向鏈路是否發(fā)生故障。
文檔編號H04L12/26GK101695037SQ200910235578
公開日2010年4月14日 申請日期2009年9月29日 優(yōu)先權日2009年9月29日
發(fā)明者徐明偉, 李琦, 陳文龍 申請人:清華大學;