【網工收藏必備】全網最全超詳細BGP協議文檔講解(中)

1. BGP的報文和狀態

1.1. BGP報文

1.1.1. BGP報文結構

BGP所有的報文都是單播

d296c7a2fe55136c03f5266d0d0462a8.jpeg

1.1.2. BGP報文類型

fd6aee478f8dc178fe8a93abbf38413c.jpeg

BGP報文由BGP報文頭和具體報文內容兩部分組成

消息最長爲4096字節,最短爲19字節(只包含報文頭)

BGP報文報頭

95cdd04ea97e0de18e45a77c6c76c535.jpeg

BGP報文頭包括三個部分,總長19字節

Marker(16字節):用於檢查BGP對等體的同步信息是否完整,以及用於BGP驗證的計算。不使用驗證時所有比特均爲1(十六進制則全“FF”)。

Length(2個字節):BGP消息總長度(包括報文頭在內),以字節爲單位。長度範圍是19~4096

Type(1個字節):BGP消息的類型。Type有5個可選值,表示BGP報文頭後面所接的5類報文(其中,前四種消息是在RFC4271中定義的,而Type5的消息則是在RFC2918中定義的)

2e5fb78774087f18c811668af0c30bc3.jpeg


8c533822d5a5232e403643d4a487bb45.jpeg

Open報文

如果BGP報文頭中的TYPE爲1,則該報文爲OPEN報文,OPEN報文用於建立BGP連接

3be4a76449b39d23c6305631ea3ea0d5.jpeg

version:表示協議的版本號,現在BGP的版本號爲4

My autonomous System:發送者自己的AS域號

Hold Time:用於協商BGP對等體間保持建立連接關係,發送Keeplive或Update等報文的時間間隔。BGP的狀態機必須在收到對等體的Open報文後,對發送和接收的Open報文的Hold time時間作比較,選擇較小的時間作爲協商結果。Hold Time的值可爲零(不發送Keeplive報文)或大於等於3,系統默認180

BGP Identifier:發送者的router id

Opt Parm Len:表示Optional Parameters(可選參數)的長度。如果此值爲0,表示沒有可選參數

Optional Paramters:此值爲BGP可選參數列表,每一個可選參數是一個TLV格式的單元(RFC3392)

f26b92499caacb0e16f0969bcd12e4b1.jpeg

Update報文

如果BGP報文頭中的TYPE爲2,則該報文爲UPDATE報文,UPDATE報文用於通告路由

d94843ac0d3cccc1c7a59bfbf203bc58.jpeg

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

Withdrawn Routes:包含要撤銷的路由列表,列表中的每個單元包含一字節的Length域和Prefix域

Total Path Attribute Length:表明Path Attributes部分的長度。其值爲零的時,表示沒有路由和路由屬性通告

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

fbb4acd70ac8771f01f35a0d42b40c58.jpeg

1. Attr.TYPE(2個字節):包括1字節的Flags和1字節的Type Code

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

998c8353e9862a86b7b71878777a2b91.png

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

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

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

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

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

Attr.Type Code:(1個字節),表示屬性的類型號

2. Attr.Length:長度字節

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

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

952640799b066301143ea864f223631b.jpeg



Notification報文

如果BGP報文頭中的TYPE爲3,則該報文爲NOTIFICATION報文,NOTIFICATION報文用於處理BGP進程中的各種錯誤

aa4b87cf72419613ec2ca0f63e4b4142.png

Error code(1個字節):定義錯誤的類型,非特定的錯誤類型用零表示

Error subcode(1個字節):指定錯誤細節編號,非特定的錯誤細節編號用零表示

Data:指定錯誤數據內容

9b16550e26e8fa36f4591c094999fe60.jpeg

Keeplive報文

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

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

100e9228aaa350ae6d33a86f1de01b40.jpeg

Route-refresh報文

如果BGP報文頭中的TYPE爲5,則該報文爲REFRESH報文,REFRESH報文用於動態的請求BGP路由發佈者重新發布UPDATE報文,進行路由更新

4de633010a61c4a17bf7fe60b33ec311.jpeg85e4beaf9b5338574964d4fe2c05b9a5.pngf9764bed0a17a590646ce37959a0c470.jpeg

1.2. BGP狀態

1.2.1. BGP狀態類型

47b04ec0feeb7c91e33891b861fa451f.jpeg


Idle狀態:即空閒狀態,不接受任何BGP連接,等待Start事件的產生。如果有Start事件的產生,系統開啓ConnectRetry定時器,向BGP鄰居發起TCP連接,並將狀態變爲Connect

Connect狀態:即連接狀態,系統會等待TCP連接建立完成。

若TCP建立完成,則拆除ConnectRetry定時器,併發送Open消息,將狀態置爲Open-Sent狀態;

若TCP建立失敗,則會重置ConnectRetry定時器(定時器的時間會依次翻倍)並轉爲Active狀態

Active狀態:即活躍狀態,表示TCP建立失敗,會重新建立連接,建立成功後變爲Open-sent

Open-Sent:即發送狀態,該狀態中系統和已經向鄰居發送了Open報文,等待鄰居的Open消息。如果沒有錯誤發送,收到鄰居的Open消息後,進入Open-confirm狀態

Open-confirm:即確認狀態,該狀態表明系統已經發送了Keeplive報文,等待對方的keeplive。

Open-confirm:即確認狀態,該狀態表明系統已經發送了Keeplive報文,等待對方的keeplive。

如果keeplive定時器超時,則重置Holdtime定時器

如果收到notification報文,則斷開連接

Established狀態:即連接建立狀態,說明BGP連接建立可以完成了,可以發送Update消息交換路由信息。

1.2.2. BGP鄰居關係建立

2c051a5955f472b6104882dec045d295.jpeg

1.2.3. BGP狀態機

9c51fe1547ae58556a02314f33d087b1.jpeg


1.2.4. BGP活躍狀態驗證

活躍(Active):路由器進行TCP連接,等待響應

狀態可能在活躍和連接之間不斷循環

由於以下原因,鄰居可能不知道如何返回到該路由器

1. 指定鄰居的地址和源地址不一樣

2. 鄰居與錯誤的地址建立對等體關係

3. 不存在該路由器的鄰居聲明

4. AS號配置錯誤

2. BGP路由宣告

2.1. BGP數據庫

20d0a493c10e8be954115ba35a96e443.jpeg


f362bf146af1a15efb2d54b296f4cb20.jpeg


2.2. BGP路由宣告原則

缺省條件下,BGP不發佈任何本地路由

只有明確宣告的網絡纔會發送給鄰居

宣告的網絡必須能精確地在路由表中找到

收到多條路由時,只選最優的給自己使用

只把自己使用的最優路由宣告給鄰居

從EBGP學習到的路由會宣告給所有鄰居

從IBGP學習到的路由不會宣告給IBGP

從IBGP學習到的路由會宣告給EBGP

57d4a2900e3df210fca13578275e1312.jpeg

2.3. BGP路由宣告方法

本地宣告(Network)

Network命令是逐條將IP路由表中已存在的路由引入到BGP路由表中

0f60f6ce930c04fde359de1fdb3d6367.jpeg


引入宣告(Import)

Import命令是根據運行的路由協議(RIP,OSPF,ISIS等)將路由引入到BGP路由表中,同時import命令開可以

2fbe26d30e28a588a513e6af7518e386.jpeg0d6917e291d80d0823e6880759ec5e5d.jpeg


2.4. BGP下一跳

BGP在給鄰居傳遞路由時的下一跳=等於更新源

在EBGP間傳遞時會修改下一跳爲自己的更新源

在IBGP間傳遞時不會修改下一跳爲自己的更新源

58dac319cabe21b46dc8546efb6f8472.png


27175f86a5aa0319c408bdbd92200b90.jpeg54b0e43c8d3e2c34fb9de70726c84922.jpeg


dbd6bf6a90665954c976e08721822bd4.jpeg




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章