BGP對等體間通過以下5種報文進行交互,其中Keepalive報文為周期性發送,其餘報文為觸發式發送:
Marker(标記):16字節,固定為1。
Length(長度):兩字節無符号整數。指定了消息的全長,包括頭部。
Type(類型):1 字節,指示報文類型,如OPEN、UPDATE報文等 。
1 – OPEN
2 – UPDATE
3 – NOTIFICATION
4 – KEEPALIVE
5 – ROUTE-REFRESH
2.2 BGP Open報文
Version:BGP的版本号。對于BGPv4來說,其值為4。
My Autonomous System:本地AS編号。通過比較兩端的AS編号可以确定是EBGP連接還是IBGP連接。
Hold Time:在建立對等體關系時兩端要協商Hold time,并保持一緻。如果兩端所配置的Hold time時間不同,則BGP會選擇較小的值作為協商的結果。如果在這個時間内未收到對端發來的Keepalive消息,則認為BGP連接中斷。
BGP Identifier:BGP路由器的Router ID,以IP地址的形式表示,用來識别BGP路由器。如果沒有通過命令router id進行配置,則按照如下規則進行選擇:優選Loopback接口地址中最大的地址作為Router ID,如果沒有Loopback接口配置了IP地址,則從其它配置了IP地址的物理接口中選擇一個最大IP地址的作為Router ID。
Opt Parm Len(Optional Parameters Length):可選參數的長度。如果為0則沒有可選參數。
Optional Parameters:是一個可選參數用于BGP驗證或多協議擴展(Multiprotocol Extensions)等功能。每一個參數為一個(Parameter Type-Parameter Length-Parameter Value)三元組。
對等體在接收到Open消息後,将發送Keepalive消息确認并保持連接的有效性。确認後,對等體間可以進行Update、Notification、Keepalive和Route-refresh消息的交換。
2.3 BGP Keepalive報文
KeepAlive報文主要用于對等體路由器間的運行狀态以及鍊路的可用性确認。KeepAlive 報文的組成隻包括一個BGP數據報頭。 KeepAlive 消息在對等體之間的交換頻率以保證對方保持定時器不超時為限。
當一台路由器與其鄰居建立BGP連接之後,将以Keepalive-interval設定的時間間隔周期性地向對等體發送KeepAlive 報文,表明該連接是否還可保持。
缺省情況下,發送KeepAlive 的時間間隔為 60 秒,Hold Time是180秒。每次從鄰居處接收到KeepAlive 報文将重置Hold Time定時器,如果Hold Time定時器超時,就認為對等體Down掉。
2.4 BGP UPDATE報文
UPDATE消息被用作在BGP對等體之間傳遞路由信息。多條可達路由信息可以被通告到相應的對等體上,或者多條不可達路由信息被撤消。UPDATE消息由以下五個部分組成:
Withdrawn Routes Length :(2字節無符号整數) 不可達路由長度,表示Withdrawn Routes字段的數據長度。如果Withdrawn Routes Length字段數值為0,則表示Withdrawn Routes字段沒有任何數據,在UPDATE消息中不會被顯示。
Withdrawn Routes :(變長) 撤銷路由。該字段包括一系列的IP地址前綴信息,以<length, prefix>的格式來表示,比如<19,198.18.160.0>表示一個198.18.160.0 255.255.224.0的網絡。
Path Attribute Length :(2字節無符号整數) 路由屬性長度,表示Path Attribute字段的數據長度。如果Path Attribute Length數值為0,則表示Path Attribute字段沒有任何數據,在UPDATE消息中不會被顯示。
Path Attributes :(變長) 路徑屬性。每個路徑屬性都是由三元組所組成:<attribute type, attribute length, attribute value>。
Network Layer Reachability Information :(變長) 網絡可達信息。包括一系列的IP地址前綴。格式與撤消路由字段一樣<length, prefix>。
最小UPDATE消息的長度為23個字節(19字節的報文頭 2字節的撤消路由長度 2字節的路徑屬性長度)。這樣的UPDATE消息被稱之為End-of-RIB,用于BGP GR。
一條UPDATE消息可以發布多條具有相同路由屬性的可達路由,這些路由可共享一組路由屬性。所有包含在一個給定的Update消息裡的路由屬性适用于該Update消息中的NLRI字段裡的所有目的地(用IP前綴表示)。
一條UPDATE消息可以撤銷多條不可達路由。每一個路由通過目的地(用IP前綴表示),清楚的定義了BGP Speaker之間先前通告過的路由。
一條UPDATE消息可以隻用于撤銷路由,這樣就不需要包括路徑屬性或者網絡可達信息。相反,也可以隻用于通告可達路由,就不需要攜帶Withdrawn Routes了。
2.5 BGP NOTIFICATION報文
Notification報文主要在發生錯誤或對等體連接被關閉的情況下使用,該消息攜帶各種錯誤碼(如定時器超時等),以及錯誤子碼和錯誤信息。
Errorcode:錯誤碼。1字節長的字段。每個不同的錯誤都使用唯一的代碼表示,而每一個錯誤碼都可以擁有一個或多個錯誤子碼,但如果某些錯誤碼并不存在錯誤子碼的話,則該錯誤子碼字段以全0表示。
Errsubcode:錯誤子碼。
消息頭錯誤子碼:
1 – 連接非同步
2 – 錯誤的消息長度
3 – 錯誤的消息類型
OPEN消息錯誤子碼:
1 – 不支持的版本号
2 – 錯誤的對等體AS号
3 – 錯誤的BGP ID
4 – 不支持的可選參數
5 – RFC1771裡被定義為認證失敗,RFC4271裡則對此表示反對。具體請參考RFC1771/RFC4271
6 – 不可接受的保持時間(Hold Time)
UPDATE消息錯誤子碼:
1 – 畸形的屬性列表
2 – 無法識别的公認屬性
3 – 缺少的公認屬性
4 – 屬性标志位錯誤
5 – 屬性長度錯誤
6 – 無效的ORIGIN屬性
7 – RFC1771裡被定義為AS路由環路,RFC4271裡對此表示反對。具體請參考RFC1771/RFC4271
8 – 無效的下一跳屬性
9 – 可選屬性錯誤
10 – 無效的網絡字段
11 – 畸形的AS_PATH
Data:依賴于不同的錯誤碼和錯誤子碼,用于标識錯誤原因。是一個可變長的字段,被NOTIFICATION用作診斷錯誤的原因。注:Data字段的長度可以由以下公式來決定:消息長度=21+Data長度 (NOTIFICATION消息最小長度為21個字節,其中已經包括消息頭。)
2.6 BGP NOTIFICATION報文
AFI(Address Family Identifier):地址族标識符(2字節)。
Res.(Reserved field):保留區域(1字節),發送方應将其設置為0,接收方應當忽略該區域的信息。
SAFI(Subsequent Address Family Identifier):子地址族标識符(8字節)。
在所有BGP路由器使能Route-refresh能力的情況下,如果BGP的入口路由策略發生了變化,本地BGP路由器會向對等體發布Route-refresh消息,收到此消息的對等體會将其路由信息重新發給本地BGP路由器。這樣,可以在不中斷BGP連接的情況下,對BGP路由表進行動态刷新,并應用新的路由策略。
,
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!