6 分鐘看完 BGP 協議。

之前我們聊 RIP 、OSPF 協議都是基於 AS 即自治系統內的協議,可以把它們認爲是域內路由協議;而下面我們要聊的就是 AS 之間的協議了,這也叫做域間路由協議,或者叫做外部網關協議,其最著名的一個協議就是 BGP 協議,目前使用最多的協議版本就是 BGP 的第四個版本 BGP - 4,簡稱爲 BGP (Border Gateway Protocol)。

在 RIP 和 OSPF 這些協議中,是由 IP 的網絡地址進行路由控制,而 BGP 協議則需要通過整個互聯網進行路由控制,範圍要大很多。

BGP 的環境與 RIP、OSPF 的環境不一樣,主要在於互聯網的規模過於龐大, 使得自治系統之間的路由選擇比較困難。互聯網上的路由器對任何 IP 地址都能通過路由表找到它的目的網絡。這是一個非常龐大的集合,如果使用鏈路狀態協議 RIP 和 OSPF 的話,必須要維護一個非常大的了路由集合,一方面路由表檢索起來效率很低,而且如此龐大的數據項也不方便維護。還有一點是每個路由器的 metric 不一樣,有可能這個 metric 是經過了 100 個路由,而那個鏈路到達 100 個路由可能就直接報錯了。

而且自治系統間的路由選擇必須考慮策略問題,這些策略需要把政治、地緣、安全或者經濟方面考慮在內。

由於上面這些特殊情況的存在,BGP 協議只是滿足選擇一條到達目的網絡比較好的路由,而非選擇一條最佳路由,BGP 採用了路徑向量路由選擇協議,它與 RIP 和 OSPF 有很大的差別。

在 BGP 協議中,每個 AS 自治系統內部都有許多 BGP 邊界路由器,這個 BGP 邊界路由器就相當是自治系統內部的發言人。不同 AS 之間的 BGP 邊界路由器如果要交換路由信息的話,就需要先建立 TCP 連接,然後在此連接上交換  BGP 報文以建立 BGP 會話,通過 TCP 能夠提供可靠的服務。兩個交換報文的 BGP 邊界路由器都被稱爲彼此的臨站(天使)或者對等站。

下圖是一個使用了 BGP 邊界路由器和 AS 的關係示意圖:

BGP 所交換的網絡可達性信息就是要到達某個網絡所要經過的一系列的路由。當各個 BGP 邊界路由器一旦交換了可達性信息之後,就會選擇出來一條到達各個 AS 比較好的路由路徑。

BGP 支持無分類域間路由選擇 CIDR,因此 BGP 的路由表也就應當包括當前目的網絡前綴、下一跳路由器,以及到達目的網絡所經過的 AS 。

在 BGP 剛剛運行時,BGP 的臨站是交換整個 BGP 路由表,以後只要在發生變化時更新有新變化的部分即可。這樣對節省網絡帶寬和減少路由器開銷有很大好處,這個特性和 OSPF 非常相似。

BGP - 4 主要有下面幾類報文類型:

如果兩個臨站屬於兩個不同的自治系統,而且其中一個臨站打算和其他臨站進行路由交換的時候,這時候應當有一個路由商量的過程。商量的過程包括臨站路由器是否還能夠接受額外的路由信息。因此一開始進行商談的時候應該要先發送 OPEN 報文,如果臨站可以接受這種關係,就用 KEEPALIVE 報文響應。響應完成後,兩個臨站就算是建立關係了。

關係建立之後,是需要相互維持的,這就和情侶之間確定關係之後,你作爲老爺們總不能三天兩頭不搭理人家吧?俗話說的好,感情是需要維持的,那麼這個路由關係也是需要維持的。通信雙方中的每一方都需要確信對方是否已經存在,因此兩個 BGP 邊界路由器需要定期交換 KEEPALIVE 報文,一般這個定期的時間就是 30 s。

BGP 邊界路由器可以使用 UPDATE 報文來更新路由:包括撤掉以前通知過的路由和增加新的路由。撤銷路由時一次可以撤銷多條,但是新增路由一個 UPDATE 報文只能增加一條。

當然在 BGP 中不存在 "好消息傳播快壞消息傳播慢" 的問題 (感覺 RIP 的這個問題被玩出梗了)。因爲 BGP 邊界路由器不只有一個,而且當某個路由器或者鏈路出現故障時,由於 BGP 邊界路由器可以不止從一個臨站獲得路由信息,因此很容易選出新的路由。

下面是 BGP 的報文格式:

上面介紹的四種報文類型它們具有通用的報文首部,首部爲 19 字節,通用首部主要分爲三個字段。

OPEN 報文共有 6 個字段,如下圖抓包所示

前三個字段是 BGP 通用報文首部,下面的幾個字段依次是 Version 版本 (1 字節,值爲 4), My AS 本自治系統號 ( 2 字節,使用的是全球唯一的 16 位系統號 ) , Hold Time 保持時間 ( 2 字節,以秒計算的保持爲臨站關係的時間 ),BGP Identifier BGP 標識符 ( 4 字節,路由器的 IP 地址 ),下面是可選長度和可選參數。

KEEPALIVE 報文只有 BGP 19 字節的通用首部。

UPDATE 報文有五個字段,如下圖所示

報文中的 Unfeasible routes length 表示不可行路由長度,後面有個字段報文沒有列出來,就是 Withdrawn Routes ,要撤銷的路由列表,後面的 Total Path Attribute Length 表示路徑屬性總長度,後面的 Path attributes 就表示路徑屬性,最後的 NLRI 標識發出這個報文的網絡。

NOTIFICATION 報文有三個字段,如下圖所示

主要包括差錯代碼 (1 字節),差錯子代碼 ( 1 字節 ) ,後面還有差錯數據。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/_at7GNWecSxnGTQwj3w2qg