禁止碼迷,布布扣,豌豆代理,碼農教程,愛碼網等第三方爬蟲網站爬取!
BGP 協議
BGP 的作用
上一篇博客談了 OSPF 協議,該協議是 AS 內部路由選擇協議,但是當分組需要跨越多個 AS 進行路由時,涉及到了多個 AS 之間的協調,就需要自治系統間的路由選擇協議。在因特網中,所有的 AS 運行相同的路由選擇協議——邊界網關協議(BGP)。BGP 協議和 IP 協議在所有的互聯網中,都是極其重要的協議,因為 BGP 協議能夠將因特網數以千計的 ISP 粘合起來。
BGP 協議起到了什么作用呢?對於一個 AS 和 AS 內的某一個路由器,在路由器中有一個轉發表,用於選擇和確定分組在路由器的輸出鏈路。對於分組需要發送到 AS 之外時,BGP 提供的並不是特定的目的地址,而是提供了一個通過 CIDR 得到的網絡前綴,這個網絡前綴能夠標志一個子網或一個子網的集合。概括起來,BGP 的作用是:容許子網向路由器其余部分通告它的存在。
BGP 的任務
BGP 對於每一台路由器來說,需要完成 2 個任務:
- 從臨近的 AS 獲得前綴可達性信息:BGP 允許每個子網向因特網的其他部分告知自己的存在,同時 BGP 確保在因特網中所有的 AS 都知道該子網;
- 確定到達子網的最佳路由:路由器將在本地允許 BGP 路由選擇過程,此時 BGP 協議需要基於網絡前綴的可達性信息,向路由器提供最佳路由。
BGP 路由信息
現在我們的問題是:轉發表需要 AS 內部路由算法與 AS 間路由算法共同配置,則不同的自治系統之間如何通信?首先考慮簡單的情況,將整個 AS 看做一個整體,假設現在需要向所有路由器通告 3d 的可達性信息。首先 AS3 向 AS2 發送 BGP 報文,告知 3d 為與 AS3 中,接着 AS2 向 AS1 發送 BGP 報文告知 AS1 可以通過 AS2 訪問 3d。通過這種我們熟悉的交互方式,就可以使所有 AS 知曉 3d 的存在並得到路徑。
下面就來看看這個功能具體怎么實現,首先我們需要引入一些說法。對於每個 AS,每台路由器只有 2 種情況,即內部路由器或網關路由器,其中內部路由器僅鏈接在 AS 中的主機和路由器。網關路由器位於 AS 邊緣,通過鏈路連接其他的 AS 的網關路由器。在 BGP 中,沒對路由器都是使用 179 端口的半永久 TCP 連接交換路由信息,每條連接及其通過連接的報文被稱之為 BGP 連接。由於 BGP 連接可能是 AS 內的,也可能存在於 AS 間,因此我們把跨越 2 個 AS 的 BGP 連接稱之為外部 BGP(eBGP),相同 AS 中的兩台路由器間的 BGP 連接稱之為內部 BGP(iBGP)連接。
如圖就給出了網關路由器、eBGP 和 iBGP 的示意,注意 iBGP 連接並不一定要與物理鏈路對應。
這里再提一下什么是 BGP 會話,就是兩個 BGP 路由器交換 BGP 報文,通告去往不同目的前綴的路徑。此時為了傳播可達性信息,就可以通過 eBGP 和 iBGP 會話,還是剛才的例子,如圖我們就可以看出可達性信息的實際傳播流程。當路由器獲得了新的前綴可達性信息時,就在其轉發表中增加官員該前綴的入口。
實際情況往往會更為復雜,例如從某一路由器到某一目的地可能存在多條路徑,通過了不同的 AS。此時 BGP 也允許 2 條路徑同時存在,並且都有相關的路由信息被記錄。
路由選擇
如上文所述,從一個路由器到達一個目的子網可能存在多條路徑,BGP 是怎么在這些路徑中選擇路徑呢?
BGP 屬性
BGP 連接通告前綴時,前綴及其屬性被稱之為路由,前綴中包含一些稱之為“屬性”的信息。我們着重關注 2 個重要的屬性:
- AS-PATH:包含前綴通告所經過的 AS 序列,例如在上文中的 “AS2 AS3”。同時這個屬性還可以用於檢測和防止通告環路,尤其是路由器在該屬性中發現包含了自己所在的 AS,這種通告會被直接拒絕;
- NEXT-HOP:即下一跳,這個屬性表示的是 AS-PATH 起始路由器接口的 IP 地址。
有了這 2 個屬性,對於一條 BGP 路由就包含了 3 個重要的組件:AS-PATH、NEXT-HOP 和目的前綴。
熱土豆路由選擇
對於 AS 間的路由選擇,路由器要如何學習到那些網絡可供轉發?BGP 路由選擇的原理是熱土豆路由選擇,即從所有路由中選擇到開始該路由的 NEXT-HOP 路由器具有的最小開銷作為學習的信息。通過熱土豆路由選擇添加 AS 外前綴的步驟如圖所示,當 路由表學習可達性信息時,BGP 協議和 AS 內路由選擇協議(OSPF 協議)需要協同工作。
熱土豆路由選擇的思想是:將分組發給最近的網關路由器,用盡可能最低開銷將分組送出其所在 AS。之所以稱之為熱土豆,就是當分組被類比為“熱土豆”時,由於燙手,所以我們要盡可能快地把“熱土豆”扔給下一個人。因此熱土豆路由選擇是一種自私的算法,它只考慮到減小自己 AS 內傳輸分組的開銷,但是忽略了 AS 外端到端的其他開銷。
路由選擇算法
BGP 路由選擇的原理是熱土豆路由選擇,下面就看一下 BGP 實際使用的路由選擇算法。首先如果只有一條路由,則 BGP 只能選擇這條路由進行傳輸。當存在多條路由時,按照下面的消除規則,直到剩下一條路由:
- 比較本地偏好:路由會擁有一個本地偏好屬性,該屬性的值是一種策略性決定,它取決於 AS 的網絡管理員。本地偏好信息可能從該路由器設置,或者相同 AS 中的其他路由器學習到,擁有較高本地偏好的路由會被選擇;
- 選擇最短 AS-PATH:值得一提的是若 BGP 只使用這個規則來選擇路由的話, BGP 會使用 DV 算法來決定路徑,此時度量路徑的是 AS 的跳數;
- 使用熱土豆路由選擇:選擇具有最靠近 NEXT-HOP 路由器的路由;
- 如果仍然剩下多條路由,參考 BGP 標識符選擇。
通過這種算法,BGP 的路由選擇可以考慮到盡可能低的開銷,而不是自私的路由選擇。
路由選擇策略
情景模擬
我們可以看到在路由選擇算法中,首先是根據本地偏好來選擇路由,本地偏好將由本地 AS 策略來決定。為了理解本地偏好起到的作用,我們來看一個情景。其中 A、B、C 是提供商網絡,X、W、Y 是客戶網絡,其中 W、Y 由於只和一個 AS 相連接被稱之為樁網絡,X 連接 2 個 AS 被稱之為雙宿網絡。
雙宿網絡
首先我們關注雙宿網絡 X。由於提供商網絡會提供 AS 間的路由服務,因此它們會交互彼此之間知道的路由信息。由於 B->C 的路由有 2 條,可以是 B->X->C,但是 x 作為一個客戶只想要享受服務,而不願意轉發 B->C 的流量。此時 X 將不會通告 B 或 C 關於存在 B->X->C 路徑的事實,規避轉發 B->C 流量。
提供商網絡
接下來關注提供商網絡 B、C。由於提供商網絡會提供 AS 間的路由服務,因此 A 會向 B 通告路徑 A->W,而 X 是 B 的客戶,B 會向 X 通告路徑 B->A->W。
此時 B 會向 C 通告 B->A->W 路徑嗎?絕對不會,因為 W 和 C 都不是 B 的客戶,B 轉發非客戶的數據報不會產生任何收益,B 希望強制 C 向 W 轉發數據報時不通過 B。
雖然沒有強制主干 ISP 之間的路由選擇標准,但是商業運行的 ISP 們擁有約定俗成的規則——任何穿越 ISP 主干網的流量必須是源或目的位於該 ISP 的某個客戶網絡中。通俗的說,就是 ISP 僅為自己的客戶提供服務,否則會出現蹭網絡的“白嫖”行為。具體的協定,由 ISP 雙方自行磋商,而且往往是對外保密的。
BGP 報文
BGP-4 共使用四種報文:
- 打開 (OPEN) 報文,用來與相鄰的另一個網關路由器建立關系。
- 更新 (UPDATE) 報文,用來發送某一路由的信息,以及列出要撤消的多條路由。
- 保活 (KEEPALIVE) 報文,用來確認打開報文和周期性地證實鄰站關系。
- 通知 (NOTIFICATION) 報文,用來發送檢測到的差錯。
通用首部如下:
為什么有 AS 內/間路由選擇協議?
最后我們解決一個問題:為什么所使用的的 AS 間和 AS 內路由選擇協議是不同的?對於這個問題,我們從以下 3 個方面展開。
策略
在 AS 之間,策略會起到主導作用。一個給定的 AS 產生的流量不能穿過另一個特點的 AS,一個給定的 AS 也許會向控制它承載的其他 AS 之間穿越的流量。在一個 AS 內部,一切都是在相同的管理控制下進行的。
規模
通過層次路由可以節省路由表的大小,減少路由產生的流量。通過將單個較大的 ISP 分成多個 AS,可以適應大規模的互聯網。
性能
AS 間路由選擇是面向策略的,因此路由的性能問題往往不是首要的。但是在一個 AS 內部就可以忽視策略問題,把重心放在選擇性能更好的路由上。
參考資料
《計算機網絡(第七版)》 謝希仁 著,電子工業出版社
《計算機網絡 自頂向下方法》 [美] James F.Kurose,Keith W.Ross 著,陳鳴 譯,機械工業出版社