路由協議和架構/邊界閘道器協議
邊界閘道器協議 (BGP) 是網際網路中常用的域間路由協議。
- 概述
- 它使用 路徑向量 (PV) 演算法 來記錄路徑上的 AS 序列,而不會出現路由環路的風險:
#路徑向量演算法; - 路由器可以 聚合 收到的路由資訊,然後再進行傳播:
#路由聚合; - 它不會自動發現新鄰居路由器的存在,而是需要 手動配置對等會話:
#對等會話; - 它使用 可靠的 TCP 連線 來交換路由更新:
#TCP; - 由於屬性的 型別-長度-值 (TLV) 格式,它是一個可擴充套件的協議:
#路徑屬性; - 它支援 路由策略:
#決策過程.
BGP 交換有關外部路由的域間路由資訊,這些路由的格式為網路地址/字首長度(而不是網路掩碼)。
由於路由策略是基於路徑定義的,因此 BGP 不能基於 DV 演算法,因為僅知道它們的成本是不夠的。BGP 選擇採用 路徑向量 (PV) 演算法:每個 AS 構成一個單獨的節點,由 2(或 4)位元組的數字標識,附加的資訊是\ul{穿越的 AS 列表}。
PV 演算法更穩定,因為它很容易檢測環路
- 如果路由器收到一個已經包含其 AS 號的 PV,它會丟棄該 PV 而不進行傳播,因為將要開始一個路由環路;
- 否則,路由器將自己的 AS 號輸入到 PV 中,然後將其傳播給它的鄰居。
BGP 不支援顯式的成本度量:與每條路由相關的成本僅僅等於列表中 穿越的 AS 數量 → 最低成本路由可能不是實際最佳路由
- AS 可能有不同的要求,因此它們可能採用彼此不同的度量(例如頻寬、傳輸延遲)→ 很難為所有 AS 計算一致的成本;
- 公佈的成本可能與實際網路拓撲不匹配,因為出於經濟原因,ISP 可能希望向競爭對手隱藏有關其自身網路的實際資訊:
B4. 域間路由:網際網路中的對等和中轉#管理要求.
當邊界路由器傳播有關接收到的路由的資訊時,可以手動配置它以在它的通告訊息中包含聚合路由,以減小它們的尺寸:兩個路由可以聚合成一條具有它們的網路字首公共部分的路由。
然而,並非所有已合併到聚合路由中的路由都具有相同的穿越 AS 序列,而可能存在一條更具體的路由,它遵循另一條路徑
- 重疊路由:特定路由,以及它不同的穿越 AS 列表,也與聚合路由一起通告 → 資訊是完整的,並且“最長字首匹配”演算法將在路由表中選擇更具體的路由;
- 不精確路由:僅通告聚合路由 → 資訊是近似的,因為穿越 AS 列表與該地址範圍內所有目標地址實際遵循的路徑不匹配。
兩個交換 BGP 訊息的邊界路由器被稱為對等體,TCP 會話被稱為對等會話。
與其他路由協議相比,一個關鍵的區別是,對等體無法自動發現彼此:需要網路管理員進行 手動配置,因為對等體可能不是透過直接連線而是透過其他路由器連線的,而對於這些路由器,BGP 更新是對它們進行轉發至目標地址的普通資料包。
路由資訊的傳輸是 可靠的,因為兩個對等體透過建立一個TCP 連線來建立對等會話,透過該連線交換所有 BGP 訊息
- 重用現有元件,而不是重新定義另一個協議特定的機制;
- BGP 不需要直接處理重傳、丟失訊息等。
使用 TCP 作為傳輸協議可以避免定期傳送更新:僅在 需要時 傳送更新,僅包括已更改的路由,並且僅當訊息丟失時才重新發送 → 傳送路由所消耗的頻寬減少了。
由於通告不是週期性的,因此路由 永遠不會過期 → 需要顯式通知以前通告的路由已不可達,以便在路由不再有效時撤回路由(類似於 路由毒化 在 DV 演算法中)。
但是,TCP 剝奪了應用程式對 時間安排 的控制,因為控制包可能會因 TCP 機制本身而延遲:在發生擁塞的情況下,TCP 會降低傳輸速率,從而阻止其及時傳輸 → 可以對 AS 內部的內部路由器配置服務質量,以便優先考慮 BGP 包,因為它們是允許網路操作的服務包。
TCP 協議不提供有關遠端對等點是否仍然可達的任何資訊 → 需要由 BGP 本身管理的**顯式保活機制**。此外,保活訊息依賴於 TCP 機制 → 對等點消失或鏈路故障的反應能力有限,但考慮到這些事件很少發生(例如,邊界路由器之間的鏈路具有很強的冗餘性),因此仍然可以接受。
I-BGP 和 E-BGP
[edit | edit source]當兩個邊界路由器之間建立對等會話時,每個路由器都會透過 OPEN 訊息向對方通訊其 AS 號,以確定子協議的型別。
- **外部 BGP** (E-BGP):對等點是屬於兩個不同 AS 的邊界路由器,通常透過直接鏈路連線;
- **內部 BGP** (I-BGP):對等點是屬於同一個 AS 的邊界路由器,通常透過一系列內部路由器連線。
BGP 訊息的處理以及對等會話上通告的路由可能根據對等點所屬的 AS 不同而有所不同。
- E-BGP:當邊界路由器將 PV 傳播到 E-BGP 對等點時,它會在每個已穿越 AS 列表前加上當前 AS 號。
- 外部路由:它們被傳播到其他 E-BGP 對等點,但對等點的 AS 位於到達這些目的地的最佳路徑上;
- 內部路由:它們被傳播到其他 E-BGP 對等點;
- I-BGP:當邊界路由器將 PV 傳播到 I-BGP 對等點時,它會原樣傳輸該列表,因為 AS 號保持不變。
- 外部路由:它們根據各種方式傳播到其他 I-BGP 對等點;
- 內部路由:它們永遠不會傳播到其他 I-BGP 對等點,但每個邊界路由器都透過獨立的重新分配過程學習它們。
I-BGP 會話用於交換外部路由。
- 獨立於由內部協議交換的路由:對等點之間的直接連線避免了當外部路由的變化不需要重新計算內部路由時,打擾 IGP 協議 → 無瞬態,處理量減少;
- 獨立於內部協議:如果邊界路由器在從 E-BGP 學習外部路由時,只限於將它們重新分配到 IGP 協議,讓 IGP 協議自然地將它們重新分配到其他邊界路由器,則 BGP 所需的一些重要資訊將會丟失 → 需要特定的 BGP 訊息,稱為 UPDATE,在它們的屬性中包含這些資訊。
IGP-BGP 同步
[edit | edit source]
中轉 AS 中的 BGP 路由器透過 I-BGP 從其他 BGP 路由器學習外部目的地,但跨 AS 的資料包轉發(朝向出口 BGP 路由器)依賴於內部路由器,它們的路由表由 IGP 協議填充,而不是由 BGP 填充 → 只有在它們也由 IGP 協議通告之後,外部目的地才能通告到其他 AS 中的邊界路由器。
在側圖示例中,路由器 R4 透過 E-BGP 學習目的地 D,並透過 I-BGP 向路由器 R3 通告,但 R3 不能反過來透過 E-BGP 向路由器 R5 通告,直到目的地從 IGP 協議重新分配到 R3,否則如果 R5 嘗試傳送一個數據包到 D,R3 將把它轉發到 AS 內部,內部路由器將丟棄它。
在以下情況下停用同步可能是有益的
- AS 不是中轉 AS;
- AS 中的所有路由器都使用 BGP。
路由迴圈
[edit | edit source]
當邊界路由器屬於同一個 AS 時,缺乏有關已穿越邊界路由器的資訊可能是導致路由迴圈的原因:邊界路由器不再能夠依靠已穿越 AS 列表來檢測經過同一個邊界路由器兩次的路徑。
在側圖示例中,在通告中建立了一個迴圈
- 路由器 R4 學習到目的地 D 的外部路由;
- R4 將 D 傳播到對等點 R3;
- R3 將 D 傳播到對等點 R2;
- R2 將 D 傳播到對等點 R4,它是最初學習和通告 D 的路由器。
因此,它建立了一種類似於在距離向量演算法中觸發無窮計數的狀況:R4 不能確定 R2 是否可以透過 R4 本身到達 D,或者是否存在一條真正可行的替代路徑 → 如果 R4 和 D 所在 AS 的邊界路由器之間發生鏈路故障,R4 將認為仍然可以透過 R2 訪問 D。
可以以各種方式將外部路由通告到 I-BGP 對等點:全網狀,路由反射器,AS 聯盟。
全網狀
[edit | edit source]
每個邊界路由器都與 AS 中的每個其他邊界路由器建立 I-BGP 對等會話。
當邊界路由器從 E-BGP 學習到外部路由時,它會將它傳播到所有其他邊界路由器,而其他邊界路由器反過來會將它傳播到所有邊界路由器,依此類推。
在存在兩個以上邊界路由器的情況下,由於通告中的迴圈,可能會形成路由迴圈,如側圖所示。
這種解決方案缺乏靈活性,因為所有對等會話都必須手動配置,儘管對等會話隨著時間的推移變化不大,因為邊界路由器相當固定且容錯能力強。
路由反射器
[edit | edit source]
邊界路由器中有一個被選為**路由反射器** (RR),所有其他邊界路由器只與它建立對等會話,而不會建立封閉路徑。
當邊界路由器從 E-BGP 學習到外部路由時,它只將它傳播到 RR,RR 負責反過來將路由傳播到其他邊界路由器,避免路由迴圈。
路由反射器構成一個單點故障。
AS 聯盟
[edit | edit source]
邊界路由器具有 I-BGP 對等會話的全網狀(如第一種方式),但 AS 被分成多個迷你 AS,每個迷你 AS 都有一個私有的 AS 號,當邊界路由器傳播 PV 時,它會在列表中新增自己的私有 AS 號。
當收到通告時,邊界路由器可以檢視自己的私有 AS 號是否已經在列表中,以便在檢測到路由迴圈時丟棄資料包。
路徑屬性
[edit | edit source]BGP 關於通告路由的資訊(例如已穿越 AS 列表)包含在 UPDATE 資料包中的**路徑屬性**中。
所有屬性都使用**型別-長度-值** (TLV) **格式**編碼 → BGP 是一個**可擴充套件協議**:擴充套件 RFC 可以定義新的屬性,而不會破壞與現有世界的相容性,如果路由器不支援該屬性(無法識別的型別程式碼),它可以忽略它並跳到下一個屬性(由於其長度資訊)。
BGP 屬性可以是
- 眾所周知:它必須被所有實現理解,並且永遠不能跳過。
- 必需:它必須存在於所有訊息中;
- 可選:它可能不存在於所有訊息中;
- 可選:它可能不被所有實現理解,如果它不被支援,可以跳過它。
- 可傳遞:如果路由器不支援該屬性,它必須無論如何傳播它,並設定標誌 P;
- 不可傳遞:如果路由器不支援該屬性,它不能傳播它。
每個屬性都具有以下 TLV 格式
| 1 | 2 | 3 | 4 | 8 | 16 | 24/32 | |
| O | T | P | E | 0 | 型別 | 長度 | 值 |
其中欄位是
- 可選 (O) 標誌 (1 位):它指定屬性是可選的還是眾所周知的;
- 可傳遞 (T) 標誌 (1 位):它指定屬性是可傳遞的還是不可傳遞的;
- 部分 (P) 標誌 (1 位):它指定路徑上的至少一個路由器是否遇到了不支援的可選可傳遞屬性;
- 擴充套件長度 (E) 標誌 (1 位):它指定“長度”欄位是使用一個位元組還是兩個位元組編碼的;
- 型別 欄位 (1 位元組):它包含標識屬性的型別程式碼 → 路由器可以在解析其值之前確定它是否支援該屬性;
- 長度 欄位 (1 或 2 位元組):它包含屬性值的長度 → 路由器可以透過將該欄位指示的位元組數向前移動,跳過不支援的屬性並跳到下一個屬性;
- 值 欄位 (可變長度):它包含屬性值。
- ORIGIN 屬性(型別 1,必選):它定義了路徑資訊的來源
- IGP:該路由是手動指定的靜態路由(bgp network命令);
- EGP:該路由是由 EGP 協議學習到的[1];
- INCOMPLETE:該路由是透過重新分發過程從 IGP 協議學習到的(bgp redistribute命令);
- AS_PATH 屬性(型別 2,必選):它包含跨越的 AS 列表,分為路徑段
- AS_SEQUENCE:路徑段中的 AS 號碼按遍歷順序排列,如果資料包中的第一個段按順序排列,則必須在該段的開頭新增一個新的 AS 號碼;
- AS_SET:路徑段中的 AS 號碼不按遍歷順序排列,如果資料包中的第一個段不按順序排列,則必須在該段之前新增一個新的按順序排列的段,其中必須插入新的 AS 號碼;
- NEXT_HOP 屬性(型別 3,必選):當多個路由器屬於同一個 LAN 但屬於兩個不同的 AS 時,它最佳化路由,因此從一個 AS 到另一個 AS 的流量將始終穿過邊界路由器→邊界路由器可以宣佈將流量傳送到另一個 AS 中的下一個跳路由器

- LOCAL_PREF 屬性(型別 5,可選):在 I-BGP 中,當外部目的地可以透過兩個出口邊界路由器到達時,首選具有最高 LOCAL_PREF 的路由;
- ATOMIC_AGGREGATE 屬性(型別 6,可選):它表示所宣佈的路由是不精確的聚合路由。
- MULTI_EXIT_DISC (MED) 屬性(型別 4,非傳遞):在 E-BGP 中,當兩個 AS 透過多個鏈路連線時,首選 MED 最低的鏈路,而 MED 較高的鏈路被視為備份鏈路;
- AGGREGATOR 屬性(型別 7,傳遞):它包含生成不精確路由的路由器的 AS 號碼和 IP 地址;
- COMMUNITIES 屬性(型別 8,傳遞):它指示該路由必須向哪個對等方組宣佈(例如,向整個網際網路,僅在當前 AS 內,不向任何人);
- MP_UNREACH_NLRI 屬性(型別 15,非傳遞):它通知先前宣佈的路由已變得不可到達(路由永遠不會過期)。

在每個邊界路由器上執行的決策過程負責
- 選擇哪些路由向其他 BGP 對等方公佈;
- 選擇邊界路由器本地使用的路由;
- 聚合路由以減少資訊。
BGP 必須處理的資料庫是
- 路由資訊庫 (RIB):它由三個不同的部分組成
- 相鄰 RIB 進入 (Adj-RIB-In):它包含從某個對等方收到的廣告中學習到的所有路由;
- 本地 RIB (Loc-RIB):它包含決策過程選擇的路由,以及它們的優先順序;
- 相鄰 RIB 外出 (Adj-RIB-Out):它包含將在廣告中傳播到某個對等方的路由;
- 策略資訊庫 (PIB):它包含透過手動配置定義的路由策略;
- 路由表:它包含資料包轉發過程使用的路由。
非常複雜的 路由策略 可以被強加以影響決策過程
- 一個特定的函式透過應用在屬性上定義的策略,返回該路由的優先順序,應用於 Adj-RIBs-In 中的每個路由。
策略僅根據當前路由的屬性定義:優先順序的計算不受其他路由的存在、不存在或屬性的影響; - 對於每個目的地,選擇優先順序最高的路由並將其插入 Loc-RIB;
- 其他策略決定從 Loc-RIB 中選擇哪些路由插入 Adj-RIBs-Out。