BGP報文格式


BGP報文頭基本格式(RFC4271)

報文格式

BGP報文由BGP報文頭和具體報文內容兩部分組成。(RFC4271)

BGP的運行是通過消息驅動的,共有5種消息類型,這些消息有相同的報文頭。這些消息通過TCP協議進行傳播(端口號是179)。消息最長為4096字節,最短為19字節(只包含報文頭)。

BGP報文頭包括三的部分,總長19字節。各個部分的格式和功能如下:(RFC4271)

圖1 BGP報文頭格式

 

 

  • Marker占16字節,用於檢查BGP對等體的同步信息是否完整,以及用於BGP驗證的計算。不使用驗證時所有比特均為1(十六進制則全“FF”)。
  • Length占2個字節(無符號位),BGP消息總長度(包括報文頭在內),以字節為單位。長度范圍是19~4096。
  • Type占1個字節(無符號位),BGP消息的類型。Type有5個可選值,表示BGP報文頭后面所接的5類報文(其中,前四種消息是在RFC4271中定義的,而Type5的消息則是在RFC2918中定義的):

 

TYPE

報文類型

1

OPEN

2

UPDATE

3

NOTIFICATION

4

KEEPALIVE

5

REFRESH(RFC2918)

 

BGP OPEN報文格式

報文格式

如果BGP報文頭中的TYPE為1,則該報文為OPEN報文。報文頭后面所接的報文內容如下,OPEN報文用於建立BGP連接:

圖1 OPEN報文格式

字段

長度

含義

Version

1個字節(無符號位)

表示協議的版本號,現在BGP的版本號為4。

My Autonomous System

2個字節(無符號位)

發送者自己的AS域號

Hold Time

2個字節(無符號位)

發送者自己設定的hold time值(單位:秒),用於協商BGP對等體間保持建立連接關系,發送KEEPALIVE或UPDATE等報文的時間間隔。BGP的狀態機必須在收到對等體的OPEN報文后,對發出的OPEN報文和收到的OPEN報文兩者的hold time時間作比較,選擇較小的時間作為協商結果。Hold Time的值可為零(不發KEEPALIVE報文)或大於等於3,我們系統的默認為180。

BGP Identifier

4個字節(無符號位)

發送者的router id。

Opt Parm Len

1個字節(無符號位)

表示Optional Parameters(可選參數)的長度。如果此值為0,表示沒有可選參數。

Optional Parameters

 

此值為BGP可選參數列表,每一個可選參數是一個TLV格式的單元(RFC3392)。

0                   1

0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...

|  Parm. Type   | Parm. Length  |  Parameter Value (variable)

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...

  • Parm. Type占1個字節(無符號位),為可選參數類型。我們現在的實現中,只在type值為2時有意義,表示攜帶的參數為協商能力。
  • Parm. Length占1個字節(無符號位),為Parameter Value的長度。
  • Parameter. Value根據Parm.Type的不同值填寫不同的參數內容,在Parm.Type為2表示協商能力時,Parameter.Value是表示所支持的各種協商能力的列表,列表中的每一個單元是如下的一個TLV三元組:
  • +------------------------------+
  • | Capability Code (1 octet)    |
  • +------------------------------+
  • | Capability Length (1 octet)  |
  • +------------------------------+
  • | Capability Value (variable)  |
  • +------------------------------+
    • Capability Code:所支持的能力編號,占1個字節。Code為1時,表示支持的地址族能力;Code為2時,表示支持REFRESH能力。
    • Capability Length:表示Capability Value的長度,占1個字節。
    • Capability Value:根據Code值的不同其內容與長度也不同。

Capability Code為1:

Capability Value值是一個TLV三元組,共占4個字節:

0       7      15      23      31

+-------+-------+-------+-------+

|      AFI      | Res.  | SAFI  |

+-------+-------+-------+-------+

AFI地址族標識(Address Family Identifier),占2個字節,能力所支持地址族標識信息,用以和SAFI一同確定網絡層協議和IP地址間的關系,編碼方式與多協議擴展中的規定相同。其值按照RFC1700中ADDRESS FAMILY NUMBERS的定義;

Res保留位,占1個字節,發送者應將其設置為零,在接受的時候忽略;

SAFI子地址族標識(Address Family Identifier),占1個字節,能力所支持的子地址族標識信息,用以和AFI一同確定網絡層協議和IP地址間的關系,編碼方式與多協議擴展中的規定相同。其值按照RFC1700中ADDRESS FAMILY NUMBERS的定義。

Capability Code為2(RFC2918)

表示支持路由刷新能力,即Route Refresh Capability。此能力的code為2,length為零,無value部分。

需要說明的是,只有在能力協商中使能了支持Route Refresh Capability,路由器才能處理REFRESH報文。我們的實現是默認情況下,支持IPv4單播能力與路由刷新能力,其他能力需要另外設定。

 

表1 AFI及SAFI編碼說明

 

AFI編碼

AFI說明

SAFI編碼

SAFI說明

說明

 

1

IPv4地址族

1

單播

IPv4單播

 

2

組播

IPv4組播

 

128

VPN

IPv4的L3VPN

 

2

IPv6地址族

1

單播

IPv6單播

 

2

組播

IPv6組播

 

128

VPN

IPv6的L3VPN

 

196

二層

128

VPN

L2VPN的Kompella方式

           

 

BGP UPDATE報文格式

如果BGP報文頭中的TYPE為2,則該報文為UPDATE報文。報文頭后面所接的報文內容如下(RFC 4271),UPDATE報文用於通告路由。

報文格式

圖1 UPDATE報文格式

 

字段

長度

含義

Withdrawn Routes Length

2個字節(無符號位)

標明Withdrawn Routes部分的長度。其值為零時,表示沒有撤銷的路由。

Withdrawn Routes

變長

包含要撤銷的路由列表,列表中的每個單元包含1字節的Length域和可變長度的Prefix域。

  • Length待撤銷路由的掩碼。其值為零時,表示匹配所有的路由。
  • Prefix傳送的IP地址前綴必須用整字節表示。例如:假定待撤銷的路由為200.200.200.200,其編碼用16進制表示可如下:

Mask掩碼(十進制) Length Prefix

32 20 C8 C8 C8 C8

25 19 C8 C8 C8 80

20 14 C8 C8 C0

15 0F C8 C8

Total Path Attribute Length

2個字節(無符號位)

標明Path Attributes部分和Network Layer Reachability Information兩部分的長度。其值為零時,表示沒有路由及其路由屬性要通告。

Path Attributes

變長

包含要更新的路由屬性列表,按其類型號從小到大的順序排序,填寫更新的路由的所有屬性。每一個屬性單元包括屬性類型,屬性長度,屬性值三部分。其編碼采用TLV格式。如下所示。

圖2 BGP路徑屬性TLV格式

其中,Attr.TYPE占2個字節(無符號位),包括1字節的Flags(無符號位)和1字節的Type Code(無符號位)。

圖3 TLV結構-Type

Attr.Flags占1個字節(8個bit),表示屬性的標記,其每個bit位的意義如下顯示:

O: Optional bit, 屬性的可選性。決定屬性是否為必攜帶屬性。帶可選屬性(optional)設為1,公認屬性(well-known)設為零。

T: Transitive bit 屬性的可傳遞性。對於可選屬性,是可傳遞的設為1,非可傳遞的設為0。對於公認屬性必須設為1。

P: Partial bit 屬性的局部性。對於可傳遞的可選屬性是局部的設為1,是完全的設為零。對於非可傳遞的的可選屬性和公認屬性,必須設為零。

E: Extended Length bit 決定該屬性的長度的字段(即Attr. Length)是否需要擴展。不需要擴展則設為零,Attr. Length占1個字節;需要擴展則設為1,Attr. Length占2個字節。

U: Unused bits 低4位沒有使用,發送時必須全部設為零,並且在接收時被忽略。

Attr.Type Code占1個字節(無符號位),表示屬性的類型號。設置如下表2。

Attr.Value根據不同屬性的類型填寫不同內容。

Network Layer Reachability Information(NLRI)

變長

包含要更新的地址前綴列表,每一個地址前綴單元由一個LV二元組(prefix length, the prefix of the reachable route)組成,其編碼填寫方法與Withdrawn Routes的填寫方法相同。

 

表1 路由屬性的類型號列表

 

屬性類型

屬性值

 

1:Origin

IGP

 

EGP

 

Incomplete

 

2:As_Path

AS_SET

 

AS_SEQUENCE

 

AS_CONFED_SET

 

AS_CONFED_SEQUENCE

 

3:Next_Hop

下一跳的IP地址

 

4:Multi_Exit_Disc

MED用於判斷流量進入AS時的最佳路由

 

5:Local_Pref

Local_Pref用於判斷流量離開AS時的最佳路由

 

6:Atomic_Aggregate

BGP Speaker選擇聚合后的路由,而非具體的路由

 

7:Aggregator

發起聚合的路由器ID和AS號

 

8:Community

團體屬性

 

9:Originator_ID

反射路由發起者的Router ID

 

10:Cluster_List

反射路由經過的反射器列表

 

14:MP_REACH_NLRI

多協議可達NLRI

 

15:MP_UNREACH_NLRI

多協議不可達NLRI

 

16:Extended Communtities

擴展團體屬性

 

BGP的NOTIFICATION報文格式

如果BGP報文頭中的TYPE為3,則該報文為NOTIFICATION報文。報文頭后面所接的報文內容如下(RFC 4271),NOTIFICATION報文用於處理BGP進程中的各種錯誤。

圖1 NOTIFICATION報文格式

各字段解釋如下:

  • Error code占1個字節(無符號位),定義錯誤的類型,非特定的錯誤類型用零表示。
  • Error subcode占1個字節(無符號位),指定錯誤細節編號,非特定的錯誤細節編號用零表示。
  • Data指定錯誤數據內容。

 

錯誤碼

錯誤子碼

1:消息頭錯誤

1:連接未同步

2:錯誤的消息長度

3:錯誤的消息類型

2:Open消息錯誤

1:不支持的版本號

2:錯誤的對等AS

3:錯誤的BGP標識符

4:不支持的可選參數

5:認證失敗

6:不可接受的保持時間

7:不支持的能力

3:Update消息錯誤

1:畸形屬性列表

2:不可識別的公認屬性

3:缺少公認屬性

4:屬性標志錯誤

5:屬性長度錯誤

6:無效Origin屬性

7:AS路由環路

8:無效Next_Hop屬性

9:可選屬性錯誤

10:無效網絡字段

11:畸形AS_Path

4:Hold Timer溢出

0:沒有特別的錯誤子碼定義。

5:有限狀態機錯誤

0:沒有特別的錯誤子碼定義。

6:終止

1:前綴超過最大值。

2:管理關閉

3:刪除鄰居

4:管理重置

5:連接失敗

6:其他配置改變

7:連接沖突

8:資源短缺

9:BFD斷開連接

Error Code

Error Subcode

1: Message header error

1: connection not synchronized

2: error message length

3: error message type

2: Open message error

1: unsupported version number

2: error peer AS

3: error BGP identifier

4: unsupported optional parameter

5: authentication failed

6: unacceptable Holdtime

7: unsupported capability

3: Update message error

1: malformed attribute list

2: unrecognized well-known attribute

3: well-known attribute is missing

4: attribute flags error

5: attribute length error

6: invalid origin attribute

7: AS routing loop

8: invalid Next-Hop attribute

9: error optional attribute

10: invalid network field

11: abnormal AS-Path

4: Hold timer expired

0: no special definition of the error subcode

5: Finite state machine error

0: no special definition of the error subcode

6: Cease

1: maximum number of prefixes reached

2: administrative shutdown

3: peer de-configured

4: administrative reset

5: connection rejected

6: other configuration change

7: connection collision resolution

8: out of resources

9: BFD session Down

 

BGP KEEPALIVE報文格式

報文格式

如果BGP報文頭中的TYPE為4,則該報文為KEEPALIVE報文。KEEPALIVE報文用於保持BGP連接。

KEEPALIVE報文只有BGP報文頭,沒有具體內容,故其報文長度應固定為19個字節。

 

BGP的REFRESH報文格式

如果BGP報文頭中的TYPE為5,則該報文為REFRESH報文。報文頭后面所接的報文內容如下(RFC 2918),REFRESH報文用於動態的請求BGP路由發布者重新發布UPDATE報文,進行路由更新。

報文格式

圖1 REFRESH報文格式

 

 

Field字段

Length長度

Description描述

AFI

2字節(無符號位)

表示地址族id,與UPDATE報文中的定義相同。

Res.

1字節(無符號位)

所有為應全為零,在接收報文時,此位被忽略。

SAFI

1字節(無符號位)

與UPDATE報文中的定義相同。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM