本發(fā)明涉及通信技術(shù)領(lǐng)域,特別涉及一種檢測報文的發(fā)送方法及裝置。
背景技術(shù):
為了保護(hù)關(guān)鍵應(yīng)用,網(wǎng)絡(luò)中會設(shè)計有一定的冗余備份鏈路,網(wǎng)絡(luò)發(fā)生故障時,就要求網(wǎng)絡(luò)設(shè)備能夠快速檢測出故障,并將流量切換至備份鏈路,以加快網(wǎng)絡(luò)收斂速度。目前,上層協(xié)議通常采用BFD(Bidirectional Forwarding Detection,雙向轉(zhuǎn)發(fā)檢測)機(jī)制檢測鏈路故障,其檢測時間在毫秒級。BFD是一種通用的、標(biāo)準(zhǔn)化的、介質(zhì)無關(guān)和協(xié)議無關(guān)的快速故障檢測機(jī)制。
為了實(shí)現(xiàn)快速檢測,盡量減少報文發(fā)送流程中的時間消耗,現(xiàn)有技術(shù)中,BFD模塊通常依據(jù)將要發(fā)送檢測報文的目標(biāo)鏈路的信息,提前封裝檢測報文至鏈路層,然后在檢測報文的發(fā)送時刻到來時,調(diào)用底層的發(fā)送接口通過目標(biāo)鏈路直接發(fā)送檢測報文,以達(dá)到快速發(fā)送的目的。
但是,對于兩個網(wǎng)絡(luò)設(shè)備之間存在至少兩條等價鏈路的情況,在檢測報文的發(fā)送時刻到來之前,如果目標(biāo)鏈路發(fā)生故障,由于檢測報文是依據(jù)目標(biāo)鏈路的接口的信息封裝的,所以網(wǎng)絡(luò)設(shè)備還是會將檢測報文通過目標(biāo)鏈路發(fā)送至目的地址。但是由于該目標(biāo)鏈路發(fā)生故障,對端將無法接收到該檢測報文,從而導(dǎo)致BFD會話中斷。而實(shí)際上,這兩個網(wǎng)絡(luò)設(shè)備之間的鏈路已經(jīng)發(fā)生等價鏈路切換,即通過另一條等價鏈路發(fā)送報文,但由于BFD會話已經(jīng)中斷,因此無法繼續(xù)檢測這兩個網(wǎng)絡(luò)設(shè)備之間的鏈路。
對于兩個網(wǎng)絡(luò)設(shè)備之間存在至少兩條鏈路的情況,在檢測報文的發(fā)送時刻到來之前,如果目標(biāo)鏈路由最優(yōu)鏈路變?yōu)榉亲顑?yōu)鏈路,網(wǎng)絡(luò)設(shè)備之間的另一條鏈路從非最優(yōu)鏈路變?yōu)樽顑?yōu)鏈路,則業(yè)務(wù)報文不通過目標(biāo)鏈路發(fā)送。由于檢測報文已經(jīng)封裝好了,因此它還是會通過目標(biāo)鏈路發(fā)送。也就是說,此時檢測的鏈路并不是業(yè)務(wù)報文實(shí)際走的鏈路。
例如,如圖1所示,路由器A與C之間存在兩條等價鏈路L1和L2,A創(chuàng)建的BFD會話采用L1的接口a發(fā)送BFD報文,預(yù)先將BFD報文封裝好。在發(fā)送時刻到來之前,當(dāng)L1發(fā)生故障時,AC之間的檢測報文接收超時,導(dǎo)致BFD會話中斷。同時,A檢測到L1發(fā)生故障后,啟用L2。但是,由于A與C之間的BFD會話已經(jīng)中斷了,因此無法對L2實(shí)施檢測。
也就是說,當(dāng)網(wǎng)絡(luò)設(shè)備之間的鏈路發(fā)生切換時,無法繼續(xù)檢測當(dāng)前啟用的鏈路,鏈路狀態(tài)檢測的穩(wěn)定性和準(zhǔn)確性不高。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例的目的在于提供了一種檢測報文的發(fā)送方法及裝置,當(dāng)鏈路發(fā)生切換時,能夠繼續(xù)檢測當(dāng)前啟用的鏈路,提高鏈路狀態(tài)檢測的穩(wěn)定性和準(zhǔn)確性。
為了達(dá)到上述目的,本申請公開了一種檢測報文的發(fā)送方法,第一檢測報文的第一封裝報文已經(jīng)根據(jù)第一鏈路的第一接口的信息預(yù)先封裝好;所述方法包括:
在報文發(fā)送時機(jī)到來之前,當(dāng)所述第一鏈路滿足預(yù)設(shè)條件時,確定到達(dá)所述第一檢測報文的目的地址的第二鏈路;
根據(jù)所述第二鏈路的第二接口的信息,對所述第一檢測報文重新封裝,得到第二封裝報文;
在滿足報文發(fā)送條件時,通過所述第二鏈路發(fā)送所述第二封裝報文。
為了達(dá)到上述目的,本申請公開了一種檢測報文的發(fā)送裝置,第一檢測報文的第一封裝報文已經(jīng)根據(jù)第一鏈路的第一接口的信息預(yù)先封裝好;所述裝置包括:
確定模塊,用于在報文發(fā)送時機(jī)到來之前,當(dāng)所述第一鏈路滿足預(yù)設(shè)條件時,確定到達(dá)所述第一檢測報文的目的地址的第二鏈路;
封裝模塊,用于根據(jù)所述第二鏈路的第二接口的信息,對所述第一檢測報文重新封裝,得到第二封裝報文;
發(fā)送模塊,用于在滿足報文發(fā)送條件時,通過所述第二鏈路發(fā)送所述第二封裝報文。
由上述技術(shù)方案可見,本發(fā)明實(shí)施例中,第一檢測報文的第一封裝報文已經(jīng)根據(jù)第一鏈路的第一接口的信息預(yù)先封裝好,在報文發(fā)送時機(jī)到來之前,當(dāng)?shù)谝绘溌窛M足預(yù)設(shè)條件時,確定到達(dá)第一檢測報文的目的地址的第二鏈路,根據(jù)第二鏈路的第二接口的信息對第一檢測報文重新封裝,得到第二封裝報文。在滿足報文發(fā)送條件時,通過第二鏈路發(fā)送第二封裝報文。也就是說,當(dāng)?shù)谝绘溌窛M足預(yù)設(shè)條件時,網(wǎng)絡(luò)設(shè)備之間的鏈路會從第一鏈路切換至第二鏈路。因此,應(yīng)用本發(fā)明實(shí)施例,當(dāng)鏈路發(fā)生切換時,能夠繼續(xù)檢測當(dāng)前切換后的鏈路,提高鏈路狀態(tài)檢測的穩(wěn)定性和準(zhǔn)確性。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單的介紹。顯而易見地,下面描述中的附圖僅僅是本申請的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為網(wǎng)絡(luò)設(shè)備之間鏈路連接的一種原理示意圖;
圖2為本發(fā)明實(shí)施例提供的檢測報文的發(fā)送方法的一種流程示意圖;
圖3為本發(fā)明實(shí)施例提供的檢測報文的發(fā)送方法的另一種流程示意圖;
圖4為本發(fā)明實(shí)施例提供的檢測報文的發(fā)送方法的再一種流程示意圖;
圖5為本發(fā)明實(shí)施例提供的檢測報文的發(fā)送裝置的一種結(jié)構(gòu)示意圖;
圖6為本發(fā)明實(shí)施例提供的檢測報文的發(fā)送裝置的另一種結(jié)構(gòu)示意圖;
圖7為本發(fā)明實(shí)施例提供的檢測報文的發(fā)送裝置的再一種結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整的描述。顯然,所描述的實(shí)施例僅僅是本發(fā)明的一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動的前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
本發(fā)明實(shí)施例提供了一種檢測報文的發(fā)送方法及裝置,當(dāng)鏈路發(fā)生切換時,能夠繼續(xù)檢測當(dāng)前啟用的鏈路,提高鏈路狀態(tài)檢測的穩(wěn)定性和準(zhǔn)確性。本發(fā)明實(shí)施例可以應(yīng)用于但不限于網(wǎng)絡(luò)設(shè)備,其中,網(wǎng)絡(luò)設(shè)備可以包括交換機(jī)、路由器等。
下面通過具體實(shí)施例,對本申請進(jìn)行詳細(xì)說明。
圖2為本發(fā)明實(shí)施例提供的檢測報文的發(fā)送方法的一種流程示意圖,第一檢測報文的第一封裝報文已經(jīng)根據(jù)第一鏈路的第一接口的信息預(yù)先封裝好。該方法包括如下步驟:
步驟S201:在報文發(fā)送時機(jī)到來之前,當(dāng)?shù)谝绘溌窛M足預(yù)設(shè)條件時,確定到達(dá)第一檢測報文的目的地址的第二鏈路。
具體的,本實(shí)施例可以由網(wǎng)絡(luò)設(shè)備來執(zhí)行。網(wǎng)絡(luò)設(shè)備可以包括檢測模塊、接口管理模塊和路由管理模塊。更具體的,本實(shí)施例可以由檢測模塊執(zhí)行。
需要說明的是,第一鏈路滿足預(yù)設(shè)條件可以包括多種情況,例如,第一鏈路的第一接口發(fā)生故障停用,或由于鏈路狀態(tài)發(fā)生變化,第一鏈路不再是最優(yōu)鏈路等都可能導(dǎo)致第一鏈路滿足預(yù)設(shè)條件。也就是說,不管第一鏈路是發(fā)生故障,還是鏈路狀態(tài)發(fā)生變化,都將導(dǎo)致網(wǎng)絡(luò)設(shè)備之間所啟用的鏈路發(fā)生切換。
具體的,檢測模塊可以預(yù)先向接口管理模塊注冊關(guān)心的接口down事件。當(dāng)檢測模塊關(guān)心的接口的狀態(tài)由up變?yōu)閐own時,接口管理模塊會通知檢測模塊down接口的索引。
檢測模塊也可以預(yù)先向路由管理模塊注冊關(guān)心的鏈路,當(dāng)該鏈路的從最優(yōu)鏈路變?yōu)榉亲顑?yōu)鏈路時,路由管理模塊向檢測模塊發(fā)送通知,這樣,檢測模塊就能夠確定哪條鏈路從最優(yōu)鏈路變?yōu)榉亲顑?yōu)鏈路。
具體的,上述第一檢測報文可以是BFD檢測報文,本申請并不對此進(jìn)行限定。第一接口的信息可以是下一跳的MAC(Media Access Control,媒體訪問控制)地址。
在實(shí)際應(yīng)用中,為了實(shí)現(xiàn)快速發(fā)送檢測報文,一般采用提前封裝報文的方式,將檢測報文封裝至鏈路層,當(dāng)報文發(fā)送時機(jī)到來時,直接調(diào)用底層的發(fā)送接口發(fā)送封裝好的報文。由于報文發(fā)送時少了添加用戶數(shù)據(jù)包協(xié)議UDP、IP、以太等鏈路信息的過程,因此可以達(dá)到快速發(fā)包的效果。
也就是說,當(dāng)?shù)谝环庋b報文封裝好之后,在報文發(fā)送時機(jī)到來之前,第一鏈路不滿足預(yù)設(shè)條件時,直接通過第一鏈路發(fā)送第一封裝報文。在下一個報文發(fā)送時機(jī)到來之前,如果第一鏈路仍然不滿足預(yù)設(shè)條件,仍舊直接通過第一鏈路發(fā)送第一封裝報文。
其中,報文發(fā)送時機(jī)可以是發(fā)送周期倒計時到來時。例如,發(fā)送周期為10ms,即每間隔一個10ms,向外發(fā)送一次封裝好的報文。
圖1為網(wǎng)絡(luò)設(shè)備之間鏈路連接的一種原理示意圖。其中,路由器A為作為執(zhí)行主體的當(dāng)前網(wǎng)絡(luò)設(shè)備,C為對端網(wǎng)絡(luò)設(shè)備。A與C之間有兩條等價鏈路L1—L3和L2—L3。假設(shè),A與C之間的第一鏈路是L1—L3,當(dāng)?shù)谝绘溌钒l(fā)生故障時,A與C之間的鏈路將切換至L2—L3。
在本實(shí)施例中,確定到達(dá)第一檢測報文的目的地址的第二鏈路可以包括:首先根據(jù)第一檢測報文獲取第一檢測報文的目的地址,然后根據(jù)該目的地址,確定到達(dá)該目的地址的第二鏈路。
其中,第一檢測報文的目的地址,可以是根據(jù)第一檢測報文對應(yīng)的會話獲取的,也可以是根據(jù)第一檢測報文的第一封裝報文中的目的地址獲取的。
在獲取目的地址之后,根據(jù)該目的地址,可以從轉(zhuǎn)發(fā)表FIB(Forwarding Information Base,也可以稱為轉(zhuǎn)發(fā)信息庫)中確定作為執(zhí)行主體的當(dāng)前網(wǎng)絡(luò)設(shè)備與對端網(wǎng)絡(luò)設(shè)備之間的鏈路。這些鏈路可能是一條,也可能是多條。根據(jù)預(yù)設(shè)規(guī)則,從確定的鏈路中選擇一條作為第二鏈路。例如,預(yù)設(shè)規(guī)則可以是跳數(shù)最少或開銷最小等。
需要說明的是,轉(zhuǎn)發(fā)表中保存了當(dāng)前網(wǎng)絡(luò)設(shè)備到達(dá)各個目的地址的所有最優(yōu)鏈路的下一跳網(wǎng)絡(luò)設(shè)備的MAC地址。
步驟S202:根據(jù)第二鏈路的第二接口的信息,對第一檢測報文重新封裝,得到第二封裝報文。
具體的,網(wǎng)絡(luò)設(shè)備可以根據(jù)目的地址、第二接口的信息將第一檢測報文重新封裝,得到第二封裝報文。其中,第二封裝報文是包括了鏈路層頭在內(nèi)的完整報文,當(dāng)滿足報文發(fā)送條件時,調(diào)用相應(yīng)的驅(qū)動接口將第二封裝報文發(fā)送出去即可。
步驟S203:在滿足報文發(fā)送條件時,通過第二鏈路發(fā)送第二封裝報文。
在實(shí)際應(yīng)用中,當(dāng)檢測模塊將第二封裝報文封裝好之后,檢測模塊還要負(fù)責(zé)將第二封裝報文周期性向外發(fā)送,即在發(fā)送周期倒計時結(jié)束時向外發(fā)送報文。
在發(fā)送周期倒計時結(jié)束,并且沒有接收到接口管理模塊發(fā)送的接口down事件或路由管理模塊發(fā)送的鏈路狀態(tài)變化事件時,檢測模塊認(rèn)為滿足報文發(fā)送條件,這時通過第二鏈路發(fā)送第二封裝報文。如果在發(fā)送周期倒計時結(jié)束之前,檢測模塊接收到接口管理模塊發(fā)送的接口down事件或路由管理模塊發(fā)送的鏈路狀態(tài)變化事件時,則認(rèn)為不滿足報文發(fā)送條件,這時說明第二鏈路不能用于發(fā)送報文,也就是無需再通過第二鏈路發(fā)送第二封裝報文。
具體的,為保證兩個網(wǎng)絡(luò)設(shè)備之間鏈路狀態(tài)檢測的準(zhǔn)確性,在本申請的一種實(shí)現(xiàn)方式中,可以根據(jù)第一檢測報文的目的地址,確定達(dá)到目的地址的第三鏈路,然后類似上述過程,根據(jù)第三鏈路的信息,對第一檢測報文再次進(jìn)行重新封裝,得到第三封裝報文,在滿足報文發(fā)送條件時,通過第三鏈路發(fā)送上述第三封裝報文。
由上述內(nèi)容可知,本實(shí)施例中,第一檢測報文的第一封裝報文已經(jīng)根據(jù)第一鏈路的第一接口的信息預(yù)先封裝好,在報文發(fā)送時機(jī)到來之前,當(dāng)?shù)谝绘溌窛M足預(yù)設(shè)條件時,確定到達(dá)第一檢測報文的目的地址的第二鏈路,根據(jù)第二鏈路的第二接口的信息對第一檢測報文重新封裝,得到第二封裝報文。在滿足報文發(fā)送條件時,通過第二鏈路發(fā)送第二封裝報文。
也就是說,當(dāng)?shù)谝绘溌窛M足預(yù)設(shè)條件時,網(wǎng)絡(luò)設(shè)備之間的鏈路會從第一鏈路切換至第二鏈路,此時,根據(jù)第二鏈路的第二接口信息對第一檢測報文重新封裝得到第二封裝報文,當(dāng)滿足報文發(fā)送條件時,通過第二鏈路發(fā)送第二封裝報文。而現(xiàn)有技術(shù)中,當(dāng)?shù)谝绘溌窛M足預(yù)設(shè)條件時,還是會將第一封裝報文通過第一鏈路發(fā)送至目的地,但是由于當(dāng)前網(wǎng)絡(luò)設(shè)備之間的鏈路已經(jīng)從第一鏈路切換至第二鏈路,故不能準(zhǔn)確檢測第二鏈路的狀態(tài)。因此,應(yīng)用本實(shí)施例,當(dāng)鏈路發(fā)生切換時,能夠繼續(xù)檢測當(dāng)前切換后的鏈路,提高鏈路狀態(tài)檢測的穩(wěn)定性和準(zhǔn)確性。
在圖2所示實(shí)施例中,由于第一鏈路滿足預(yù)設(shè)條件可能是由多種情況造成的,例如,第一鏈路的接口狀態(tài)從啟用狀態(tài)變?yōu)橥S脿顟B(tài),或者,第一鏈路從最優(yōu)鏈路變?yōu)榉亲顑?yōu)鏈路。因此,根據(jù)造成第一鏈路滿足預(yù)設(shè)條件的原因不同,可以對圖2所示實(shí)施例進(jìn)行不同的改進(jìn)。
在本申請的另一實(shí)施例中,當(dāng)?shù)谝绘溌返臓顟B(tài)變化是由接口狀態(tài)變化造成的時,圖2所示實(shí)施例的步驟S201,即當(dāng)所述第一鏈路滿足預(yù)設(shè)條件時,確定到達(dá)所述第一檢測報文的目的地址的第二鏈路可以按照圖3所示流程示意圖進(jìn)行,具體包括:
步驟S201A:當(dāng)檢測到所述第一接口為停用狀態(tài)時,判定所述第一鏈路滿足預(yù)設(shè)條件。
其中,第一接口可以理解為網(wǎng)絡(luò)設(shè)備上第一鏈路對應(yīng)的接口。例如,在圖1中,鏈路L1—L3對應(yīng)的接口為a。
當(dāng)本發(fā)明實(shí)施例的執(zhí)行主體是網(wǎng)絡(luò)設(shè)備中的檢測模塊時,作為本實(shí)施例的一種實(shí)施方式,步驟S201A具體可以包括:
步驟1:接收接口管理模塊發(fā)送的第一接口為停用狀態(tài)的第一通知。
其中,第一通知攜帶處于停用狀態(tài)的接口的索引。
步驟2:根據(jù)第一通知,判定所述第一鏈路滿足預(yù)設(shè)條件。
步驟S201B:根據(jù)已存儲的接口與會話的對應(yīng)關(guān)系,確定第一接口對應(yīng)的第一會話,根據(jù)第一會話,確定第一檢測報文的目的地址。
具體的,網(wǎng)絡(luò)設(shè)備中預(yù)先存儲有接口與會話的對應(yīng)關(guān)系。其中,會話可以由會話的本地標(biāo)識符(Local Discriminator,LD)表示,每個會話都分配有唯一能標(biāo)識該會話的LD。
步驟S201C:獲取所述目的地址對應(yīng)的所有轉(zhuǎn)發(fā)表項(xiàng)。
具體的,從存儲的轉(zhuǎn)發(fā)表FIB中獲取目的地址對應(yīng)的所有轉(zhuǎn)發(fā)表項(xiàng)。
步驟S201D:從接口不為第一接口的轉(zhuǎn)發(fā)表項(xiàng)對應(yīng)的鏈路中,選擇第二鏈路。
需要說明的是,由于處于停用狀態(tài)的第一接口對應(yīng)的轉(zhuǎn)發(fā)表項(xiàng)還存在于FIB中,因此,在選擇第二鏈路時,應(yīng)排除第一接口對應(yīng)的第一鏈路。第一鏈路和第二鏈路可以理解為到達(dá)目的地址的等價鏈路。
具體的,接口不為第一接口的轉(zhuǎn)發(fā)表項(xiàng)可能不止一個,其對應(yīng)的鏈路也可能不止一個,在從這些鏈路中選擇第二鏈路時,可以隨機(jī)選取,也可以根據(jù)預(yù)設(shè)規(guī)則選取。預(yù)設(shè)規(guī)則可以是跳數(shù)最少或鏈路開銷最小等。
在圖3所示實(shí)施例中,還可以包括:保存所述第二接口與所述第一會話的對應(yīng)關(guān)系。這樣,當(dāng)?shù)诙溌返牡诙涌谔幱赿own狀態(tài)時,可以根據(jù)鏈路與會話的對應(yīng)關(guān)系確定第一會話。
具體的,還可以將第一接口與第一會話的對應(yīng)關(guān)系更新為第二接口與第一會話的對應(yīng)關(guān)系。
在本申請的另一實(shí)施例中,當(dāng)?shù)谝绘溌窛M足預(yù)設(shè)條件是由其從最優(yōu)鏈路變?yōu)榉亲顑?yōu)鏈路造成的時,圖2所示實(shí)施例的步驟S201,即當(dāng)所述第一鏈路滿足預(yù)設(shè)條件時,確定到達(dá)所述第一檢測報文的目的地址的第二鏈路可以按照圖4所示流程示意圖進(jìn)行,具體包括:
步驟S201E:當(dāng)檢測到所述第一鏈路從最優(yōu)鏈路變?yōu)榉亲顑?yōu)鏈路時,從轉(zhuǎn)發(fā)表中刪除所述第一鏈路對應(yīng)的轉(zhuǎn)發(fā)表項(xiàng),并判定所述第一鏈路滿足預(yù)設(shè)條件。
在實(shí)際應(yīng)用中,網(wǎng)絡(luò)設(shè)備可以包括檢測模塊、接口管理模塊和路由管理模塊(RIB模塊)(Routing Information Base,路由表)。
當(dāng)鏈路狀態(tài)發(fā)生變化時,網(wǎng)絡(luò)設(shè)備中的路由管理模塊可以發(fā)現(xiàn)鏈路狀態(tài)變化,并重新優(yōu)選出最優(yōu)鏈路。檢測模塊可以預(yù)先向路由管理模塊注冊自身關(guān)心的達(dá)到目的地址的鏈路,以及該鏈路對應(yīng)的會話的會話標(biāo)識LD。當(dāng)路由管理模塊發(fā)現(xiàn)鏈路狀態(tài)變化時,向檢測模塊發(fā)送通知,這樣,檢測模塊就能夠檢測到第一鏈路從最優(yōu)鏈路變?yōu)榉亲顑?yōu)鏈路。
當(dāng)本發(fā)明實(shí)施例的執(zhí)行主體是網(wǎng)絡(luò)設(shè)備中的檢測模塊時,作為本實(shí)施例的一種實(shí)施方式,步驟S201E具體可以包括:
步驟1:接收路由管理模塊發(fā)送的第一鏈路從最優(yōu)鏈路變?yōu)榉亲顑?yōu)鏈路的第二通知。其中,第二通知中攜帶從最優(yōu)鏈路變?yōu)榉亲顑?yōu)鏈路的鏈路標(biāo)識。
步驟2:根據(jù)第二通知,從轉(zhuǎn)發(fā)表中刪除第一鏈路對應(yīng)的轉(zhuǎn)發(fā)表項(xiàng),并判定第一鏈路滿足預(yù)設(shè)條件。
具體的,從轉(zhuǎn)發(fā)表中刪除第一鏈路對應(yīng)的轉(zhuǎn)發(fā)表項(xiàng),可以直接由路由管理模塊執(zhí)行,也可以由檢測模塊通知路由管理模塊,以使路由管理模塊從轉(zhuǎn)發(fā)表中刪除第一鏈路對應(yīng)的轉(zhuǎn)發(fā)表項(xiàng)。判定第一鏈路滿足預(yù)設(shè)條件,是由檢測模塊執(zhí)行的。
步驟S201F:根據(jù)已存儲的鏈路與會話的對應(yīng)關(guān)系,確定第一鏈路對應(yīng)的第一會話;根據(jù)第一會話,確定第一檢測報文的目的地址。
具體的,網(wǎng)絡(luò)設(shè)備中可以預(yù)先存儲鏈路與會話的對應(yīng)關(guān)系。
當(dāng)本實(shí)施例的執(zhí)行主體是網(wǎng)絡(luò)設(shè)備中的檢測模塊時,也可以將鏈路與會話的對應(yīng)關(guān)系存儲在路由管理模塊中,當(dāng)路由管理模塊檢測到第一鏈路從最優(yōu)鏈路變?yōu)榉亲顑?yōu)鏈路時,根據(jù)已存儲的鏈路與會話的對應(yīng)關(guān)系,確定第一鏈路對應(yīng)的第一會話,并將第一鏈路和第一會話添加至第二通知中發(fā)送至檢測模塊。檢測模塊根據(jù)第二通知,確定第一鏈路對應(yīng)的第一會話。
步驟S201G:獲取所述目的地址對應(yīng)的所有轉(zhuǎn)發(fā)表項(xiàng)。
步驟S201H:從所獲取的轉(zhuǎn)發(fā)表項(xiàng)對應(yīng)的鏈路中選擇第二鏈路。
需要說明的是,由于轉(zhuǎn)發(fā)表中已經(jīng)刪除了第一鏈路對應(yīng)的轉(zhuǎn)發(fā)表項(xiàng),因此所獲取的轉(zhuǎn)發(fā)表項(xiàng)中不包含第一鏈路對應(yīng)的轉(zhuǎn)發(fā)表項(xiàng)。
在圖4所示實(shí)施例中,步驟S201F還可以包括:根據(jù)已存儲的鏈路與會話的對應(yīng)關(guān)系,確定第一鏈路對應(yīng)的第一會話,在根據(jù)第一會話,確定第一檢測報文的目的地址之前,判斷第一會話的狀態(tài)是否為啟用狀態(tài),如果是,則執(zhí)行根據(jù)第一會話,確定所述第一檢測報文的目的地址的步驟,否則,不予處理。
可以理解的是,當(dāng)?shù)谝粫挒閱⒂脿顟B(tài)時,將第一檢測報文進(jìn)行封裝,并等待發(fā)送。如果第一會話不為啟用狀態(tài),不對第一檢測報文進(jìn)行封裝。
在圖4所示實(shí)施例中,還可以包括:保存所述第二鏈路與第一會話的對應(yīng)關(guān)系。這樣,當(dāng)?shù)诙溌吩購淖顑?yōu)鏈路變?yōu)榉亲顑?yōu)鏈路時,可以根據(jù)鏈路與會話的對應(yīng)關(guān)系確定第一會話。
具體的,還可以將第一鏈路與第一會話的對應(yīng)關(guān)系更新為第二鏈路與第一會話的對應(yīng)關(guān)系。
下面以采用BFD檢測機(jī)制的網(wǎng)絡(luò)設(shè)備為例,再對本申請進(jìn)行詳細(xì)說明。
如圖1所示,源路由器A的地址為1.1.1.1,目的路由器C的地址為2.2.2.2。路由器A中包括檢測模塊(BFD模塊)、接口管理模塊和路由管理模塊(RIB模塊)。A與C之間建立了BFD鄰居關(guān)系,并且A與C之間存在兩條等價鏈路:第一鏈路L1-L3和第二鏈路L2-L3,這兩條鏈路對應(yīng)的接口分別為a和b。
路由器A中的BFD模塊啟動時,向接口管理模塊注冊接口事件,關(guān)心接口down事件。如果接口狀態(tài)由up變?yōu)閐own,接口管理模塊會通知BFD接口down事件,并告訴BFD模塊down接口的索引。
路由器A中的BFD模塊還要向RIB模塊訂閱關(guān)心路由狀態(tài)變化信息,關(guān)心路由的前綴為2.2.2.2/32,并將所關(guān)心的路由對應(yīng)的會話的本地標(biāo)識符LD的信息作為用戶數(shù)據(jù)傳給RIB模塊。也就是說,RIB模塊中保存關(guān)心路由的前綴與LD信息的對應(yīng)關(guān)系。當(dāng)然,BFD也可以在第一封裝報文得到后再向RIB模塊訂閱路由狀態(tài)變化信息,這樣對第一檢測報文重新封裝的時機(jī)會更精確,避免對第一檢測報文重新封裝得到第二封裝報文后,由于會話不為up狀態(tài)而無法發(fā)送第二封裝報文的情況。
在路由器A和C之間創(chuàng)建BFD會話,根據(jù)該會話得到第一檢測報文,并根據(jù)接口a對應(yīng)的第一鏈路將第一檢測報文封裝得到第一封裝報文。
在第一封裝報文發(fā)送之前,當(dāng)接口a從up狀態(tài)變?yōu)閐own狀態(tài)時,接口管理模塊通知BFD模塊接口a從up狀態(tài)變?yōu)閐own狀態(tài)。BFD模塊根據(jù)接口a確定第一鏈路從up狀態(tài)變?yōu)閐own狀態(tài)。然后,BFD模塊根據(jù)自身保存的接口與會話的標(biāo)識確定接口a對應(yīng)的第一會話。根據(jù)第一會話的目的地址2.2.2.2,從轉(zhuǎn)發(fā)表中獲取該目的地址對應(yīng)的所有轉(zhuǎn)發(fā)表項(xiàng),從中排除第一接口的轉(zhuǎn)發(fā)表項(xiàng)對應(yīng)的鏈路,并從排除后的轉(zhuǎn)發(fā)表項(xiàng)對應(yīng)的鏈路中選擇一條作為第二鏈路,即確定第二鏈路為L2-L3。
然后,根據(jù)第二鏈路的接口b的信息重新封裝第一檢測報文,得到第二封裝報文,在滿足發(fā)送條件時,通過第二鏈路發(fā)送第二封裝報文。
在第一封裝報文發(fā)送之前,如果BFD模塊接收到RIB模塊發(fā)送的路由變化通知,則根據(jù)該通知中攜帶的LD信息確定第一會話,根據(jù)該會話確定目的地址2.2.2.2。根據(jù)第一會話的目的地址2.2.2.2,從轉(zhuǎn)發(fā)表中獲取該目的地址對應(yīng)的所有轉(zhuǎn)發(fā)表項(xiàng)。由于RIB模塊在感知到以2.2.2.2為前綴的路由發(fā)生變化時,已經(jīng)將轉(zhuǎn)發(fā)表中第一鏈路對應(yīng)的轉(zhuǎn)發(fā)表項(xiàng)刪除,因此,直接在所獲取的轉(zhuǎn)發(fā)表項(xiàng)對應(yīng)的鏈路中選擇第二鏈路即可。
當(dāng)然,在實(shí)際應(yīng)用中,在通過第一鏈路發(fā)送第一檢測報文的第一封裝報文之前,第一鏈路的第一接口從啟用狀態(tài)變?yōu)橥S脿顟B(tài)和第一鏈路從最優(yōu)鏈路變?yōu)榉亲顑?yōu)鏈路,可能都會發(fā)生。根據(jù)具體情況對第一檢測報文重新封裝即可。
圖5為本發(fā)明實(shí)施例提供的檢測報文的發(fā)送裝置的一種流程示意圖,與圖1所示方法實(shí)施例相對應(yīng)。其中,第一檢測報文的第一封裝報文已經(jīng)根據(jù)第一鏈路的第一接口的信息預(yù)先封裝好。該裝置包括:
確定模塊501,用于在報文發(fā)送時機(jī)到來之前,當(dāng)所述第一鏈路滿足預(yù)設(shè)條件時,確定到達(dá)所述第一檢測報文的目的地址的第二鏈路;
封裝模塊502,用于根據(jù)所述第二鏈路的第二接口的信息,對所述第一檢測報文重新封裝,得到第二封裝報文;
發(fā)送模塊503,用于在滿足報文發(fā)送條件時,通過所述第二鏈路發(fā)送所述第二封裝報文。
在本申請的另一實(shí)施例中,圖5所示實(shí)施例中的確定模塊501,可以包括下述子模塊,這些子模塊可以如圖6所示:
第一判定子模塊601,用于當(dāng)檢測到所述第一接口為停用狀態(tài)時,判定所述第一鏈路滿足預(yù)設(shè)條件;
第一確定子模塊602,用于根據(jù)已存儲的接口與會話的對應(yīng)關(guān)系,確定所述第一接口對應(yīng)的第一會話;根據(jù)所述第一會話,確定所述第一檢測報文的目的地址;
第一獲取子模塊603,用于獲取所述目的地址對應(yīng)的所有轉(zhuǎn)發(fā)表項(xiàng);
第一選擇子模塊604,用于從接口不為所述第一接口的轉(zhuǎn)發(fā)表項(xiàng)對應(yīng)的鏈路中,選擇第二鏈路。
在圖6所示實(shí)施例中,第一判定子模塊601可以包括:
第一接收單元(圖中未示出),用于接收接口管理模塊發(fā)送的所述第一接口為停用狀態(tài)的第一通知;
第一判定單元(圖中未示出),用于根據(jù)所述第一通知,判定所述第一鏈路滿足預(yù)設(shè)條件。
在圖6所示實(shí)施例中,所述裝置還可以包括第二保存模塊(圖中未示出),用于:
保存所述第二接口與所述第一會話的對應(yīng)關(guān)系。
本實(shí)施例與圖3所示方法實(shí)施例相對應(yīng)。
在本申請的另一實(shí)施例中,圖5所示實(shí)施例中的確定模塊501,可以包括下述子模塊,這些子模塊可以如圖7所示:
第二判定子模塊701,用于當(dāng)檢測到所述第一鏈路從最優(yōu)鏈路變?yōu)榉亲顑?yōu)鏈路時,從轉(zhuǎn)發(fā)表中刪除所述第一鏈路對應(yīng)的轉(zhuǎn)發(fā)表項(xiàng),并判定所述第一鏈路滿足預(yù)設(shè)條件;
第二確定子模塊702,用于根據(jù)已存儲的鏈路與會話的對應(yīng)關(guān)系,確定所述第一鏈路對應(yīng)的第一會話;根據(jù)所述第一會話,確定所述第一檢測報文的目的地址;
第二獲取子模塊703,用于獲取所述目的地址對應(yīng)的所有轉(zhuǎn)發(fā)表項(xiàng);
第二選擇子模塊704,用于從所獲取的轉(zhuǎn)發(fā)表項(xiàng)對應(yīng)的鏈路中選擇第二鏈路。
本實(shí)施例與圖4所示方法實(shí)施例相對應(yīng)。
在圖7所示實(shí)施例中,該裝置還可以包括判斷模塊(圖中未示出),用于:
在所述根據(jù)所述第一會話,確定所述第一檢測報文的目的地址之前,判斷所述第一會話的狀態(tài)是否為啟用狀態(tài),如果是,則根據(jù)所述第一會話,確定所述第一檢測報文的目的地址。
在圖7所示實(shí)施例中,第二判定子模塊701具體可以包括:
第二接收單元(圖中未示出),用于接收路由管理模塊發(fā)送的所述第一鏈路從最優(yōu)鏈路變?yōu)榉亲顑?yōu)鏈路的第二通知;
第二判定單元(圖中未示出),用于根據(jù)所述第二通知,從轉(zhuǎn)發(fā)表中刪除所述第一鏈路對應(yīng)的轉(zhuǎn)發(fā)表項(xiàng),并判定所述第一鏈路滿足預(yù)設(shè)條件
在圖7所示實(shí)施例中,該裝置還可以包括第一保存模塊(圖中未示出),用于:
保存所述第二鏈路與第一會話的對應(yīng)關(guān)系。
由于上述裝置實(shí)施例是基于方法實(shí)施例得到的,與該方法具有相同的技術(shù)效果,因此裝置實(shí)施例的技術(shù)效果在此不再贅述。
對于裝置實(shí)施例而言,由于其基本相似于方法實(shí)施例,所以描述得比較簡單,相關(guān)之處參見方法實(shí)施例的部分說明即可。
需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個實(shí)體或者操作與另一個實(shí)體或操作區(qū)分開來,而不一定要求或者暗示這些實(shí)體或操作之間存在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。
本領(lǐng)域普通技術(shù)人員可以理解,上述實(shí)施方式中的全部或部分步驟是能夠通過程序指令相關(guān)的硬件來完成的,所述的程序可以存儲于計算機(jī)可讀取存儲介質(zhì)中。這里所稱存儲介質(zhì),是指ROM/RAM、磁碟、光盤等。
以上所述僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi)所做的任何修改、等同替換、改進(jìn)等,均包含在本發(fā)明的保護(hù)范圍內(nèi)。