BGP協議原理-報文詳解

2. BGP報文分類

BGP對等體間通過以下5種報文進行交互,其中Keepalive報文為週期性發送,其餘報文為觸發式發送:

  • Open報文:用於建立BGP對等體連接。
  • Update報文:用於在對等體之間交換路由信息。
  • Notification報文:用於中斷BGP連接。
  • Keepalive報文:用於保持BGP連接。
  • Route-refresh報文:用於在改變路由策略後請求對等體重新發送路由信息。只有支持路由刷新(Route-refresh)能力的BGP設備會發送和響應此報文。

2.1 BGP 報文頭

BGP協議原理-報文詳解

Marker(標記):16字節,固定為1。

Length(長度):兩字節無符號整數。指定了消息的全長,包括頭部。

Type(類型):1 字節,指示報文類型,如OPEN、UPDATE報文等 。

1 – OPEN

2 – UPDATE

3 – NOTIFICATION

4 – KEEPALIVE

5 – ROUTE-REFRESH

2.2 BGP Open報文

BGP協議原理-報文詳解

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消息的交換。

BGP協議原理-報文詳解

2.3 BGP Keepalive報文

BGP協議原理-報文詳解

KeepAlive報文主要用於對等體路由器間的運行狀態以及鏈路的可用性確認。KeepAlive 報文的組成只包括一個BGP數據報頭。 KeepAlive 消息在對等體之間的交換頻率以保證對方保持定時器不超時為限。

當一臺路由器與其鄰居建立BGP連接之後,將以Keepalive-interval設定的時間間隔週期性地向對等體發送KeepAlive 報文,表明該連接是否還可保持。

缺省情況下,發送KeepAlive 的時間間隔為 60 秒,Hold Time是180秒。每次從鄰居處接收到KeepAlive 報文將重置Hold Time定時器,如果Hold Time定時器超時,就認為對等體Down掉。

BGP協議原理-報文詳解

2.4 BGP UPDATE報文

BGP協議原理-報文詳解

UPDATE消息被用作在BGP對等體之間傳遞路由信息。多條可達路由信息可以被通告到相應的對等體上,或者多條不可達路由信息被撤消。UPDATE消息由以下五個部分組成:

Withdrawn Routes Length :(2字節無符號整數) 不可達路由長度,表示Withdrawn Routes字段的數據長度。如果Withdrawn Routes Length字段數值為0,則表示Withdrawn Routes字段沒有任何數據,在UPDATE消息中不會被顯示。

Withdrawn Routes :(變長) 撤銷路由。該字段包括一系列的IP地址前綴信息,以的格式來表示,比如<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 :(變長) 路徑屬性。每個路徑屬性都是由三元組所組成:。

Network Layer Reachability Information :(變長) 網絡可達信息。包括一系列的IP地址前綴。格式與撤消路由字段一樣。

最小UPDATE消息的長度為23個字節(19字節的報文頭+2字節的撤消路由長度+2字節的路徑屬性長度)。這樣的UPDATE消息被稱之為End-of-RIB,用於BGP GR。

一條UPDATE消息可以發佈多條具有相同路由屬性的可達路由,這些路由可共享一組路由屬性。所有包含在一個給定的Update消息裡的路由屬性適用於該Update消息中的NLRI字段裡的所有目的地(用IP前綴表示)。

一條UPDATE消息可以撤銷多條不可達路由。每一個路由通過目的地(用IP前綴表示),清楚的定義了BGP Speaker之間先前通告過的路由。

一條UPDATE消息可以只用於撤銷路由,這樣就不需要包括路徑屬性或者網絡可達信息。相反,也可以只用於通告可達路由,就不需要攜帶Withdrawn Routes了。

BGP協議原理-報文詳解

BGP協議原理-報文詳解

BGP協議原理-報文詳解

2.5 BGP NOTIFICATION報文

BGP協議原理-報文詳解

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個字節,其中已經包括消息頭。)

BGP協議原理-報文詳解

BGP協議原理-報文詳解

2.6 BGP NOTIFICATION報文

BGP協議原理-報文詳解

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路由表進行動態刷新,並應用新的路由策略。

BGP協議原理-報文詳解

BGP協議原理-報文詳解


分享到:


相關文章: