一、BGP的消息類型:
1:open(打開消息)
2:keepalive(存活消息)
3:update(更新消息)
4:notification(報錯消息)
1.1 open
當BGPspoken peer之間建立了tcp三次握手之後,便開始發送open消息,那麼這個open消息用來幹嘛,那麼先來看看open消息格式,便能理解它的作用
1、Marker、length、type 是bgp報文的固定格式
2、version:表明BGP的版本
3、My AS:表明發送方的AS系統號
4、hold time:表明發送方keepalive報文過期時間
5、BGP identifier: 在一個AS內保證BGP進程不同,類似OSPF的router-id
6、optional parmeters:可選的參數,比如要做認證,則必須要事先協商
總體這個報文應該沒有什麼問題,學過OSPF的對hello報文作用很清楚吧,這個open跟hello基本差不多,但是hello報文的第二個特性就完全不一樣了,hello報文第二個特性是保活,而BGP使用接下來介紹的keepalive報文進行BGP peer之間的保活作用,當然這也突出了BGP的增量更新作用。
2、keepalive報文
這個報文沒什麼講的,60s週期發送,上圖大家可以看看它的格式,當然你們也可以自己抓包看看。
3、update
當BGP的peer互相發送了open報文,而且協商過了,便建立連接,這個跟IGP的特性很像,那麼現在我們想知道,update到底發送什麼內容,先看看報文格式吧!
1、Unfeasible routes length 這個是可選的,意思是,當一臺BGPspoken路由器發現某網段不可達,因此它會主動(這個主動發現當然是鏈路層發現機制)爲這條網段發送一份更新報文,目地是撤銷這個路由條目在鄰接BGP表,爲什麼要主動發送撤銷呢?當然還是BGP的特性,增量更新。
2、path attributes BGP路由協議跟IGP最大的區別:它是根據各種屬性從而決定如何選擇最佳路由 每條路由條目有很多屬性,這些屬性有公認的,可選的,強制的,自由決定的等,每個屬性都是由三部分組成,第一部分是屬性類型,主要是說明這個屬性是公認的,可選的,還是其它,第二部分是屬性長度,表明這個屬性佔多少字節有一字節的和2個字節的,第三部分是屬性值,這個就是具體的屬性了,有AS路徑屬性、下一跳屬性、源頭等,詳細的大家可以查看相應的文檔說明。
3、NLRI 網絡層可達信息,這個是路由條目前綴。
(需要注意的地方是,一條更新報文只能攜帶一個NLRI,當然如果幾個NLRI的路徑屬性完全一樣,可以用一條更新報文去通告給peer)。
4、 notification報文
這個報文主要用來報錯的,比如兩個BGP spoken建立連接需要互相指neighbor和對應的AS號,如果指錯了,BGP鄰接關係是建立不起來的,會使用notification報文去報錯,給出相應的代碼類型,這個就有點類型icmp報文的機制。
下面上圖notification的報文格式