1.BGP程序重新開機時的操作
在預設情況下,當對等體的BGP程序重新開機時,對等體關系将立即中斷,從該對等體接收到的更新被删除
進一步,這将導緻目前裝置向其它對等體回收通告的相關更新
一旦與該對等體再次建立對等體關系後,目前裝置又将再次通告BGP更新
這種BGP程序重新開機而造成的更新回收、再通告的過程為稱為route flapping
2.NSF概述
2.1 别稱
NSF(Non-Stop Forwarding),又被稱為Graceful Restart
2.2 作用
當BGP程序重新開機時,允許在一段時間内,重建立立BGP會話的過程中繼續維持原有的BGP路由資訊繼續轉發資料——會話中斷而路由不中斷
注意:
如果因為受到NOTIFICATION而重建立立BGP會話,NSF是不工作的
3.實作
3.1 概念
(1)End-of-RIB marker
①定義
a.End-of-RIB marker實際上是一個特殊的BGP Update message
b.Update message中withdrawnNLRI及PATH Attributes部分為空,無NLRI部分

②作用
目前裝置從對等體收到End-of-RIB marker之後,表明該對等體所有需要通告的更新已經發送完畢
雖然End-of-RIB marker是NSF中引入的概念,但是并不限制僅在實作NSF時才應用End-of-RIB marker
事實上在Cisco的BGP實作中,預設情況下對等體關系建立後,一旦更新發送完畢,也會附帶發送End-of-RIB marker以通告對等體目前裝置的更新已經發送完畢
而在HUAWEI的實作中,至少從eNSP模拟器中的裝置來看,通常情況下并不會發送End-of-RIB marker
(2)Gracful Restart Capability
是一個新的BGP Capability,在發送Open message中與對等體進行協商
a.聲明目前裝置在BGP重新開機時依然能夠維持轉發能力
b.聲明目前裝置在初始的update發送完畢後能産生End-of-RIB marker
③格式
字段解釋:
a.Restart Flags
共4 bit,組成結構如下
最高比特位表示Restart State,其作用是防止對等體雙方同時重新開機而互相等待End-of-RIB marker,但是又互不發送更新,進而造成死鎖
若該比特位置位,表明目前裝置重新開機BGP程序,其對等體必須先發送路由更新以及End-of-RIB marker
後3個比特位保留置0
b.Restart Time
是一個可配置的值,用于通告對等體目前裝置在重新開機後重建對等體關系的最大時間,如果在該時間内對等體關系未成功建立,其對等體便将目前裝置的BGP路由删除
restart time的取值應當小于等于BGP hold time
c.AFI & SAFI
用于表明目前BGP程序中,哪個AF工作在NSF中
如果Graceful Capability中無AFI及SAFI部分,表明目前裝置在BGP程序重新開機期間,無法維持BGP轉發表路由,但是可以協助NSF工作(如Cisco的3640、7200等裝置,無法實作該特性,隻有支援dCEF的可以完全分離控制平台與資料平台的裝置平台可以實作,如Cisco 12000)
d.Flags for AF
隻有最高比特位(Forwarding State)被使用,其它置為0
該bit置1表示目前裝置在重新開機BGP程序時依然能夠轉發使用者資料
3.2 工作流程
說明:
①Restaring Speaker——重新開機BGP程序的裝置
②Receiving Speaker——檢測到對等體重新開機,協助實作NSF的裝置
(1)Restarting Speaker restarts BGP process
①restarting speaker重新開機BGP程序時,并不删除Loc_RIB中的路由,而是将其狀态标記為Stale
②标記為Stale的路由依然維持轉發能力
(2)Receiving Speaker detects restart &verifies Restarting Speaker
①receiving speaker通過收到顯性的TCP連接配接重建消息或是Openmessage偵測到對等體重新開機了BGP程序,此時receiving speaker将檢測是否需要為該對等體維持路由
②對等體必須同時滿足如下條件時,receiving speaker才會為該對等體通告的某個AF的路由維持轉發資訊而不删除:
a.在之前建立對等體關系時,restartingspeaker發送的Open message中有Graceful Restart Capability
b.Graceful Restart Capability中有相關的AF
c.AF中的ForwardingState bit被置位
③一旦滿足條件,receiving speaker将相關的路由狀态置為stale,依然維持轉發能力
(3)Rebuilding BGP Session
①restarting speaker發送的Open message中,RestartState bit必須置1,防止死鎖;Restart Time通告了最大重建對等體關系的時間
②除非receiving speaker也重新開機了BGP程序,否則此時receivingspeaker發送的Open message中的Restart State bit必須置0
③如果receiving speaker通過BFD或二層資訊了解到restartingspeaker不可達,将立即删除與其相關的路由
④如果restart time逾時而未建立對等體關系,receiving speaker将立即删除與其相關的路由
(4)Receiving Speaker sends Initial Updates& End-of-RIB marker
①receiving speaker在建立BGP會話後,發送本地更新,并在更新發送完畢後通告End-of-RIB marker,表示更新發送完畢
②即便receiving speaker本地沒有待通告的更新,也必須發送End-of-RIB marker
(5)Restarting Speaker waits for all End-of-RIBmarker & Update routes
①除了如下兩類對等體外,restarting speaker必須收到所有其它對等體發送的End-of-RIB marker後才能開始選擇最佳路徑
a.其Open message未聲明Graceful Restart Capability——不支援該特性表明可能沒有能力發送End-of-RIB marker
b.Graceful Restart Capability中的Restart State bit被置1——該裝置也重新開機了BGP程序等待End-of-RIB marker
②如果一直沒有收到必須的全部End-of-RIB marker,restarting speaker本地應當使用一個Selection_Deferral_Timer(選舉延遲計時器),逾時後開始選擇最佳路徑
③在選擇最佳路徑之前,目前裝置無法通告更新,其之前的轉發狀态也無法被更新
(6)Restarting Speaker selects Best Path &sends Initial Updates、End-of-RIB marker
①在收到所有必須的End-of-RIB marker後,目前裝置運作Decision Process,選擇最佳路徑,通告必要的更新給其對等體
②在最佳路徑選擇完畢後,Restarting Speaker将更新其BGP轉發表,之前标記的Stale flag被移除
③産生必要的更新發送給對等體,無論是否有更新需要通告,RestartingSpeaker必須發送End-of-RIB marker
(7)Receiving Speaker updates routes
①收到restarting speaker發送的更新後,相關路由的Stale flag必須被移除
②當收到restarting speaker發送的End-of-RIB marker後,依然為stale的路由将被移除
③對于本地标記為stale的路由,建議設定一個可配置的最大保持時間,防止stale路由一直存在于本地BGP轉發表中
4.相關配置
4.1 Cisco
Router(config-router)#bgpgraceful-restart
Router(config-router)#bgpgraceful-restart restart-time <1-3600>
Router(config-router)#bgpgraceful-restart stalepath-time <1-3600>
4.2 HUAWEI
[Huawei-bgp]graceful-restart
[Huawei-bgp]graceful-restart peer-reset //如果不配置該關鍵字,重新開機BGP會話将導緻NOTIFICATION發送,GR不會生效
[Huawei-bgp]graceful-restart timer restart <3-600> //設定最大BGP會話重建時間
[Huawei-bgp]graceful-restart timer wait-for-rib <3-3000> //設定等待End-of-RIB的時間
<Huawei>reset bgp <peer>/all graceful //如果不添加graceful将導緻NOTIFICATION消息的發送
5.實驗案例
5.1 實驗環境描述
如上圖所示,将Cisco裝置與HUAWEI裝置相接
Cisco裝置處于AS 1中,建立iBGP對等體關系,R2對R1做next-hop-self
HUAWEI裝置處于AS 2中,建立iBGP對等體關系,R1對R2做next-hop-local
AS 1 R1将環回口網絡宣告進BGP程序,并最終被AS 2 R2正常學習;AS 2 R2的換回口路由同理
最終,AS 1 R1能夠用環回口ping通AS 2 R2
5.2 配置GR
由于這裡的Cisco裝置隻能協助實作GR,而HUAWEI裝置可以真正實作GR,是以重新開機BGP程序的裝置确定為AS 2 R1
為了支援GR,AS 1 R2以及AS 2 R1、R2都需要進行GR相關配置
AS 1 R2:
R2(config-router)#bgp graceful-restart
AS 1 R1:
[R1-bgp]graceful-restart
[R1-bgp]graceful-restartpeer-reset
5.3 測試
AS 1 R1持續ping AS 2R2
在整個測試過程中,BGP路由并未中斷
AS 2 R1重新開機BGP程序
AS 2R1現象
AS 1 R2現象
路由更新
31.31.1.2(AS 1 R2)首先發送Update message,其中包含NLRI
31.31.1.1(AS 2 R1)此時直接發送Update message,連發了2個消息,第一個為包含NLRI的更新,第二個為End-of-RIBmarker
可見,在HUAWEI的BGP實作中,GR并沒有嚴格按照标準進行
31.31.1.2(AS 1 R2)發送Update message,該消息為End-of-RIB marker