互聯網路由架構

大家覺得有意義和幫助記得及時關注和點贊!!!

本書致力于解決實際問題,書中包含大量的架構圖、拓撲圖和真實場景示例,內容全面 且易于上手,是不可多得的良心之作。本書目的是使讀者成為將自有網絡集成到全球互聯網?領域的專家。

以下是筆記內容。


  • 引言
    • 目標
    • 目標讀者
  • I: 當代互聯網(The Contemporary Internet)
  • 1 互聯網的演進
    • 1.1 互聯網:起源及近史
      • ARPANET
      • NSFNET
      • The Internet Today
  • 2 ISP 服務和特點
    • 2.1 ISP Services
  • 3 IP 尋址和分配
    • 3.1 History of Internet Addressing
    • 3.2 IP Address Space Depletion
      • 將自己聚合的路由指向黑洞
  • II: 路由協議基礎(Routing Protocol Basics)
  • 4 域間路由基礎
    • 4.1 路由器和路由(Routers and Routing)
    • 4.2 路由協議
      • 距離矢量算法
      • 鏈路狀態算法
    • 4.3 將互聯網分割為自治系統(AS)
      • Autonomous Systems
      • 三種 AS 類型
    • 4.5 FAQ
      • Domain 和 AS 有什么區別?
      • BGP 是用于 AS 之間的。那用于 AS 內的 BGP 又是什么?
  • 5 邊界網關協議第 4 版(BGP-4)
    • 5.1 BGP 工作原理
      • BGP 消息頭格式
    • 5.2 BGP 功能協商
      • UPDATE Message and Routing Information
    • 5.3 多協議擴展(Multiprotocol Extensions for BGP, MP-BGP)
    • 5.4 TCP MD5 Signature Option
    • 5.5 Looking Ahead
    • 5.6 Frequently Asked Questions
      • BGP 是否像 RIP 一樣定期發布路由更新消息?
      • ASN 在 BGP 消息中的什么地方?
  • III: Effective Internet Routing Designs
  • 6 BGP Capabilities 調優
    • 6.1 Building Peer Sessions
      • 物理和邏輯連接
      • Synchronization Within an AS
    • 6.2 路由更新方式
      • BGP 動態注入
      • BGP 靜態注入
      • 靜態路由和動態路由例子:移動網絡
    • 6.3 重疊的協議:后門(Overlapping Protocols: Backdoors)
    • 6.4 BGP 路由過程
      • BGP 路由:通告和存儲
      • BGP 決策過程總結
    • 6.5 Controlling BGP Routes
      • ORIGIN(type code 1)
      • AS_PATH
      • NEXT_HOP
    • 6.6 Route Filtering and Attribute Manipulation
    • 6.7 BGP-4 Aggregation
    • 6.8 Looking Ahead
    • 6.9 Frequently Asked Questions
      • 是否應該將 BGP 路由注入 IGP?
    • 6.1 References
  • 7 冗余、對稱和負載均衡
    • 7.1 冗余
      • 設置默認路由
        • 動態學習默認路由
        • 靜態配置默認路由
    • 7.2 對稱
    • 7.3 非對稱路由
    • 7.4 不同場景下對三者的權衡
    • 7.5 Looking Ahead
    • 7.6 Frequently Asked Questions
  • 8 AS 內部路由控制
    • 8.1 非 BGP 路由器和 BGP 路由器的交互
      • 8.1.1 BGP 注入 IGP
      • 8.1.2 靜態配置默認路由
    • 8.2 BGP Policies Conflicting with Internal Defaults
      • 8.2.1 例子:主備 BGP 策略和 IGP 默認行為沖突導致環路
        • 方案 1: 修改 IGP Metric
        • 方案 2: 直連 RTC 和 RTD
        • 方案 3: Transit Routers 都跑 BGP
        • 方案 4: 控制默認路由自動注入
      • 8.2.2 Defaults Inside the AS: Other BGP Policies
    • 8.3 策略路由(Policy Routing)
    • 8.4 Looking Ahead
    • 8.5 Frequently Asked Questions
  • 9 大型 AS 控制管理
  • 9.1 路由反射器(Route Reflectors)
    • 9.1.1 沒有 RR 的拓撲:full-mesh
    • 9.1.2 有 RR 的拓撲
    • 9.1.3 路由反射原則
    • 9.1.4 RR 高可用
    • 9.1.5 RR 拓撲
  • 10 設計穩定的因特網
    • 10.1 因特網路由的不穩定性
    • 10.2 BGP Stability Features
  • IV: Internet Routing Device Configuration

引言

互聯網(Internet)起源于 20 世紀 60 年代(1960s)的一個學術實驗。

一些人驚訝于網絡會發生故障,另外一些人則驚訝于網絡竟然會長時間良好地運行

目標

本書致力于使讀者成為將自有網絡集成到全球互聯網(integrating your network into the global Internet)領域的專家。

本書致力于解決實際問題,書中包含大量的架構圖、拓撲圖和真實場景示例,內容全面而且 易于上手(comprehensive and accessible)。

目標讀者

需要將自有網絡接入互聯網的公司的網絡管理員、集成者、架構師。

不需要太多 TCP/IP 基礎。

I: 當代互聯網(The Contemporary Internet)

路由問題和解決方案(routing problems and solutions)的復雜性和當代互聯網的增長與 演進密切相關。

因此,在深入到路由協議細節之前,先了解互聯網的發展歷史,會對理解問題非常有幫助。

1 互聯網的演進

介紹互聯網的發展歷史,主要組件,理解互聯網現在面臨的挑戰,以及如何構建可擴展互連網絡(internetworks)。

1.1 互聯網:起源及近史

ARPANET

1969 年 12 月,四個節點、通過?56kbps?電路連接的試驗網絡 ARPANET。

這項技術大獲成功,隨后幾千個大型組織和政府機構將他們的私有網絡連接到了 ARPANET。

圖 1-1 ARPANET Architecture, 1969-12

圖 1-2 ARPANET Architecture, 1976-07

這就是互聯網(Internet)的前身

ARPANET?禁止用于商業目的,不過大量的接入還是導致了擴展性和鏈路擁塞問題, 因此 NSF 開始研究 NSFNET。

NSFNET

NSFNET 是為了解決 ARPANET 的擁塞問題。設計:

  1. 多個區域網絡(regional networks)和對等網絡(peer networks),
  2. 骨干網(backbone):NSFNET 的核心
  3. regional networks 和 peer networks 都接入骨干網
  4. 帶寬升級到 T1(1.544 Mbps,1988),后來又到 T3(45 Mbps,1991)

圖 1-3 The NSFNET-Based Internet Environment

  • 1990 年左右,NSFNET 仍然是用于科研和學術目的。之后,開始出現 ISP 產業。
  • 1990 年之后,這張網絡開始連接到歐洲和亞洲。
  • 1995 年,這張網絡完成了自己的歷史使命

The Internet Today

今天的互聯網是從一個核心網絡(core network,也就是 NSFNET) 轉變成的由商業提供商運營的分布式網絡,這些供應商網絡通過主要的 網絡交換節點或直連而連接到一起。

圖 1-4 The General Structure of Today's Internet

ISP 在多個 region 都提供連接接入點,稱為?POP(Points of Presence)。

2 ISP 服務和特點

2.1 ISP Services

想了解更多關于交換機、VLAN、廣播域等知識,推薦下面的書:

  • Interconnections: Bridges, Routers, Switches, and Internetworking Protocols, Second Edition (Addison-Wesley, 1999) by Radia Perlman
  • Cisco LAN Switching?(Cisco Press, 1999) by Kennedy Clark and Kevin Hamilton.

3 IP 尋址和分配

3.1 History of Internet Addressing

3.2 IP Address Space Depletion

CIDR: Classless Inter-domain Routing

路由條目越多,所需的處理能力和內存空間就越多。

路由表規模在 1991~1995 年期間每 10 個月就翻一番

圖 3-9 The Growth of Internet Routing Tables

CIDR?相比于之前的有類別 IP 地址(classful IP addresses),是革命性的一步。 通過 prefix 做路由聚合,大大減小路由表的規模

圖 3-11 Classful Addressing Versus CIDR-Based Addressing

按照最長前綴匹配算法(LPM)選擇路由。

圖 3-12 Longest Match

如圖 3-12,如果因為一些原因 path 1 路由失效了,那會用到下一個最長匹配,在圖中就 是 path 2。

將自己聚合的路由指向黑洞

每個路由器會對外通告自己聚合的路由,表明自己到這些路由是可達的。

但是,為避免出現路由環路,每個路由器在內部,要將自己聚合的路由指向黑洞,即 ,在路由器內部,丟棄所有到自己聚合的路由的包。來看個具體的例子。

圖 3-13 Following Less-Specific Routes of a Network's Own Aggregate Causes Loops

ISP1 的配置:

  1. 默認路由指向 ISP2
  2. ISP1 到 Foonet 網絡 198.32.1.0/24 可達
  3. ISP1 經過路由聚合,對外通告自己到 198.32.0.0/13 可達

則,當 ISP1 和 Foonet 的網絡發生故障之后,目的是 198.32.1.1 的流量從 ISP2 到達 ISP1 時,會匹配到默認路由,流量會繞回 ISP2,形成環路。

解決辦法是:在 ISP1 的路由表內添加一條到 198.32.0.0/13 的 null 路由,將所有流量 丟棄。這樣網絡正常時,流量會匹配 198.32.1.0/24 這條路由;網絡異常導致這條路由失 效后,流量匹配到 198.32.0.0/13,丟棄所有流量。

II: 路由協議基礎(Routing Protocol Basics)

本書主要介紹外部網關協議(exterior gateway protocols),即?不同自治系統(AS)之間的路由。但先了解一下內部網關協議(internal gateway protocols) 會非常有幫助。

4 域間路由基礎

互聯網是由自治系統(AS)組成的,這些 AS 由不同組織?(organization)管理,擁有不同的路由策略

4.1 路由器和路由(Routers and Routing)

內部網關協議(IGP)是為企業網(enterprise)設計的,?不適用于大型網絡,例如上千個節點、有上萬條路由的網絡。 因此引入了外部網關協議(EGP),例如邊界網關協議(BGP)。

本章介紹 IGP 基礎。

4.2 路由協議

大部分路由協議都可以歸為兩類分布式路由算法:

  1. 鏈路-狀態(link-state)
  2. 距離矢量(distance vector):跳數

距離矢量算法

為每條路由維護一個距離矢量(vector of distances),其中“距離”用跳數(hops)或類似指標衡量。

每個節點獨立計算最短路徑,因此是分布式算法。

每個節點向鄰居通告自己已知的最短路徑,鄰居根據收到的消息判斷是否有更短路徑, 如果有就更新自己的路由信息,然后再次對外通告最短路徑。如此反復,直到整個網絡收斂到一致狀態。

早期 IGP 代表:RIP(Routing Information Protocol)

早期 IGP 缺點:

  1. 早期協議(RIP-1)只計算跳數(相當于每跳權重一樣),沒有優先級和權重,而跳數最少的路徑不一定最優
  2. 早期協議(RIP-1)規定了最大跳數(一般是 15),因此限制了網絡的規模(但解決了 count to infinity 問題)
  3. 早期協議(RIP-1)靠定時器觸發路由通告(沒有事件觸發機制),因此路由發生變動時,收斂比較慢
  4. 第一代協議不支持 CIDR

新 IGP 解決了以上問題,協議代表:

  1. RIP-2
  2. EIGRP

距離矢量協議的優點

  1. 簡單
  2. 成熟

BGP 也是距離矢量協議,但它是通過引入路徑矢量(path vector)解決 count to infinity 問題。path vector 包含了路徑上的 ASN,相同 ASN 的路徑只會接受一條, 因此消除了路由環路。BGP 還支持基于域的策略(domain-based policies)。后面會詳細介紹 BGP。

鏈路狀態算法

  • 距離矢量算法:交換路由表信息
  • 鏈路狀態算法:交換鄰居的鏈路狀態信息,比距離矢量算法復雜

分布式數據庫(replicated distributed database),存儲鏈路狀態(link state)。

代表:

  1. OSFP
  2. IS-IS

路由可擴展性和收斂速度都有改善,可以支持更大的網絡,但仍然?只適用于域內路由(interior routing)。

大部分大型服務供應商在域內(intra-domain)都使用 link-state 協議,主要是看中它的?快速收斂特性。

4.3 將互聯網分割為自治系統(AS)

外部路由協議(Exterior routing protocol)的提出是為了解決兩個問題

  1. 控制路由表的膨脹
  2. 提供結構化的互聯網視圖

將路由域劃分為獨立的管理單元,稱為自治系統(autonomous systems,AS)。 每個 AS 有自己獨立的路由策略和 IGP

當前域間路由的事實標準:BGP-4

intra-domain 和 inter-domain routing 的主要區別

  • intra-domain 主要解決技術需求
  • inter-domain 主要反映網絡和公司的政治與商業關系
Autonomous Systems

一個?AS 是擁有如下特點的一組路由器

  1. 共享相同的路由策略
  2. 被作為一個整體進行管理
  3. 通常路由器之間運行同一種 IGP 協議

每個 AS 有一個編號,稱為 ASN。AS 之間通過 BGP 交換路由。

圖 4-2 AS 之間的路由交換

三種 AS 類型

  1. stub AS:末梢 AS,只有一條默認出口,因此不需要同步路由信息
  2. non-transient AS:只通告自己的路由,不傳播學習到的路由
  3. transit AS:既通告自己的路由,又傳播學習到的路由

圖 4-3 Single-Homed (Stub) AS

圖 4-5 Multihomed Nontransit AS Example

圖 4-6 Multihomed Transit AS Using BGP Internally and Externally

4.5 FAQ

Domain 和 AS 有什么區別?

兩者都是指滿足某些條件的一組路由器

  • Domain 一般指運行相同路由協議的一組路由器,例如一個 RIP domain 或一個 OSFP domain。
  • AS 是管理概念作為整體統一管理的、有相同路由策略的一組路由器是一個 AS。?一個 AS 可能包含一個或多個 domain

BGP 是用于 AS 之間的。那用于 AS 內的 BGP 又是什么?

AS 內的 BGP 是 iBGP。

如果 AS 是 transit AS,那 iBGP 可以保護這個 AS 內的 nontransit routers, 不會被大量的 AS 外路由撐爆路由表。另外,即使不是 transit AS,iBGP 也可以提供更強的控制能力, 例如本書后面會看到的選擇 exit and entrance points。

5 邊界網關協議第 4 版(BGP-4)

BGP-4?1993?年開始部署,是第一個支持路由聚合的 BGP 版本。

5.1 BGP 工作原理

BGP 是一種路徑矢量協議(path vector protocol)。

Path vector?是一條路由(network prefix)經過的所有 AS 組成的路徑。 目的是防止出現路由環路

  • BGP 使用?TCP?協議,運行在?179?端口。
  • peer 之間建立連接之后交換全部路由,之后只交換更新的路由(增量更新
  • 交換路由是?UPDATE?消息
  • 維護路由表的版本號,每次路由表有更新,版本號都會遞增
  • 通過 UPDATE 消息通告和撤回路由

BGP 消息頭格式

圖 5-6 BGP Message Header Format

字段:

  1. Marker:16 字節,用于 BGP 消息認證及檢測 peer 是否同步
  2. Length: 2 字節,BGP 消息總長度,包括 header。總長度在 19~4096 字節之間。
  3. Type: 2 字節,四種類型:
    • OPEN
    • UPDATE
    • NOTIFICATION
    • KEEPALIVE

5.2 BGP 功能協商

檢測到錯誤時會發送 NOTIFICATION 消息,然后關閉 peer 連接。

UPDATE Message and Routing Information

UPDATE 消息:

  • Network Layer Reachability Information (NLRI)
  • Path Attributes
  • Unfeasible Routes

圖 5-10 BGP UPDATE Message

圖 5-11 BGP Routing Update Example

5.3 多協議擴展(Multiprotocol Extensions for BGP, MP-BGP)

對 BGP-4 的兼容性擴展,支持除了 IPv4 之外的其他協議(所以叫多協議),例如 IPv6。

5.4 TCP MD5 Signature Option

5.5 Looking Ahead

5.6 Frequently Asked Questions

BGP 是否像 RIP 一樣定期發布路由更新消息?

不是。只有路由有變動時,才會通告,而且只通告變動的路由。

ASN 在 BGP 消息中的什么地方?

UPDATE 消息的 AS_PATH 屬性中。

III: Effective Internet Routing Designs

接下來用前面學到的知識解決實際問題。

6 BGP Capabilities 調優

從本章開始,內容從理論轉向 BGP 實現。

6.1 Building Peer Sessions

雖然 BGP 大部分情況都是用于 AS 之間,但是,它也可以用在 AS 內部,為 AS 內部的路 由器提供外部路由可達信息(external destination reachability information)。

AS 內部的 BGP 稱為 iBGP;AS 之間的 BGP 稱為 eBGP。

圖 6-1 iBGP 和 eBGP

鄰居之間建立連接,然后通過 OPEN 消息進行協商,在這個過程中,peer routers 之間會 比較 ASN 來判斷他們是否屬于同一個 AS。

iBGP 和 eBGP 的區別

  1. 對收到的 UPDATE 消息的處理不同
  2. 消息攜帶的屬性不同

物理和邏輯連接

eBGP 要求鄰居之間必須是物理直連的,但是有些情況下兩個 AS 之間的 BGP peer 無法滿足直連的要求, 例如經過了一些非 BGP 路由器。這種情況下,需要對 BGP 做特殊配置。

圖 6-2 External BGP Multihop Environment

iBGP 對于 peer 之間是否直連沒有要求,只要 peer 之間 IP 通即可。

Synchronization Within an AS

BGP 的默認行為是,只有 iBGP 收斂之后,才將 AS 內部的路由通告給其他 AS。

否則,會出現問題。來看個例子。

圖 6-4 BGP Route Synchronization

ISP3 里面只有 RTA 和 RTC 運行 BGP 協議。當 ISP1 將 192.213.1.0/24 通告給 ISP3 的 RTA 之后,RTA 進一步將消息通告給 RTC。RTC 再通告給 ISP2。當 ISP2 向這個路由發送 流量時,RTC 會將流量轉發給 RTB,而 RTB 沒有這個路由信息,會將流量丟棄。

因此,BGP 規定,從 iBGP 鄰居學習到的路由不應該通告給其他 AS,除非這條路由通告 IGP 也能訪問到(The BGP rule states that a BGP router should not advertise to external neighbors destinations learned from IBGP neighbors unless those destinations are also known via an IGP.)。這就是所謂的同步。如果 IGP 可達,那說 明這條路由在 AS 內部是可達的。

將 BGP 路由注入 IGP 路由是有代價的。

首先,這會給 IGP 節點帶來額外的計算開銷。前面已經提到,IGP 并不是為處理大規 模路由設計的(IGPs are not designed to handle that many routes)。

其次,沒有必要將所有外部路由都同步到所有內部節點。更簡單的方式通常是,AS 內 分成 non-BGP 路由器和 BGP 路由器,non-BGP 路由器的默認路由指向 BGP 路由器。這樣可 能會導致路徑并不是最優的,但是跟在 AS 內維護上千條外部路由相比,代價要小的多。

除了 BGP+IGP 方式之外,解決這個問題的另一個辦法是,AS 內部的非邊界路由器之間做 iBGP full-mesh,這樣路由可以通過 iBGP 保證同步。向 IGP 內部插入成千上萬條路 由太恐怖了。

因此,一些 BGP 的實現里允許關掉同步,例如 Cisco 的?no synchronization?命令,這 是當前的常見配置(disable BGP synchronization and rely on a full mesh of IBGP routers)。

6.2 路由更新方式

對于像互聯網這樣復雜的網絡來說,路由穩定性(route stability)是一個很大的問題。 這和鏈路的穩定性,以及路由的注入方式(動態/靜態)有關系。

BGP 動態注入

可以進一步分為:

  • 純動態注入:所有從 IGP 學習到的路由都注入到 BGP(通過?redistribute?命令)
  • 半動態注入:部分從 IGP 學習到的路由注入到 BGP(通過?network?命令)

動態注入:

  • 優點
    • 配置簡單,IGP 路由自動注入 BGP,不管是具體哪種 IGP 類型(RIP、OSPF、IS-IS 等等)
  • 缺點
    • 可能會泄露內網路由到公網,造成安全問題
    • IGP 路由抖動會影響到 BGP,想象一下幾百個 AS 同時有 IGP 路由抖動給 BGP 造成 的影響

為了防止因特網的路由抖動,提出了一些技術,第十章會介紹到,一個叫 route dampening 的進程會對抖動的路由進行懲罰,抑制它進入 BGP 的時間。

保證路由穩定性是一項很難的工作,因為很多因素都是不受控的,例如硬件故障。減少路由 不穩定的一種方式是路由聚合,可以在 AS 邊界做,也可以在因特網邊界做。

最后,另一種解決路由不穩定的方式是靜態注入路由。

BGP 靜態注入

靜態注入的路由會一直存在于路由表,一直會被通告。

可以解決路由不穩定的問題,但是會導致失效的路由無法自動從路由表刪除,而且靜態配置 相當繁瑣,配置不當還容易產生環路。因此只在特定的場景下使用。

靜態路由和動態路由例子:移動網絡

移動網絡中分配 IP 地址的問題。

移動設備希望在從一個 AS 移動到另一個 AS 的過程中,需要切換 IP 地址。因此,靜態路 由的方式不合適,只能通過動態注入 BGP 的方式。具體到實現,一種方式就是將 IGP 注入 BGP。這會帶來一些問題,前面已經分析過,例如需要對路由做過濾。

另一種實現方式是通過?network?命令,在所有位置的邊界路由器定義這些網絡。

6.3 重疊的協議:后門(Overlapping Protocols: Backdoors)

路由可以通過多種協議學習,選擇不同的協議會影響流量的路徑。例如,如果選擇一條 RIP 路由,可能會走某鏈路;而選擇一條 eBGP 路由,則可能會走另一條鏈路。

后門鏈路(backdoor link)提供了一種 IGP 路徑的備選方式,可以用來替代 eBGP 路徑。 可以通過后門鏈路到達的 IGP 路由稱作后門路由。

有了這種后門路由,就需要一種機制,能夠使得一種協議的優先級比另一種更高。例如, Cisco 提供的?administrative distance?就是這個功能。

通過設置不同協議的路由的優先級,使得后門路由被選中作為最優路由。 或者,前面介紹過,通過?distance?BGP 命令也可以設置優先級。

6.4 BGP 路由過程

簡要查看完整的 BGP 路由處理過程。

BGP 是一種相當簡單的協議,這也是它為什么這么靈活的原因。BGP peer 之間通過 UPDATE 消息交換路由。BGP 路由器收到 UPDATE 消息后,運行一些策略或者對消息進行過濾, 然后將路由轉發給其他 BGP peers。

BGP 實現需要維護一張 BGP 路由表,這張表獨立于 IP 路由表的。 如果到同一目的地有多條路由,BGP 并不會將所有這些路由都轉發給 peer;而是選出最優路由, 然后將最優路由轉發給 peer。除了傳遞從 peer 來的 eBGP 路由,或從路由反射器客戶端(RR client) 來的 iBGP 路由之外,BGP 路由器還可以主動發起路由更新,通告它所在 AS 內的內部網絡。

來源是本 AS 的合法的本地路由,以及從 BGP peer 學習到的最優路由,會被添加到 IP 路由表。IP 路由表是最終的路由決策表,用于操控轉發表。

圖 6-8 Routing Process Overview

BGP 路由:通告和存儲

根據 RFC 1771,BGP 協議中路由(route)的定義是:一條路由是一個目標及其到達這個目 標的一條路徑的屬性組成的信息單元(a route is defined as a unit of information that pairs a destination with the attributes of a path to that destination)。

路由在 BGP peer 之間通過 UPDATE 消息進行通告:目標是 NLRI 字段,路徑是 path 屬性 字段。

路由存儲在 RIB(Routing Information Bases)。

BGP speaker 選擇通告一條路由的時候,可能會修改路由的 path 屬性。

圖 6-9 BGP 路由表的邏輯表示

  • 一個 Adj-RIB-In 邏輯上對應一個 peer,存儲從 peer 學習到的路由
  • Loc-RIB 存儲最優路由
  • 一個 Adj-RIB-Out 邏輯上對應一個 peer,存儲準備從這個路由器發送給對應 peer 的路由

這里的邏輯圖是將過程分成了三部分,每部分都有自己的存儲,但實現不一定這樣,事實上 大部分實現都是共享一份路由表,以節省內存。

圖 6-10 Sample Routing Environment

BGP 決策過程總結

  1. 如果下一跳不可達,則忽略此路由(這就是為什么有一條 IGP 路由作為下一跳如此重要 的原因)
  2. 選擇權重最大的一條路徑
  3. 如果權重相同,選擇本地偏向(local preference)最大的一條路由
  4. 如果沒有源自本地的路由(locally originated routes),并且 local preference 相 同,則選擇 AS_PATH 最短的路由
  5. 如果 AS_PATH 相同,選擇 origin type 最低(IGP < EGP < INCOMPLETE)的路由
  6. 如果 origin type 相同,選擇 MED 最低的,如果這些路由都是從同一個 AS 收到的
  7. 如果 MED 相同,優先選擇 eBGP(相比于 iBGP)
  8. 如果前面所有條件都相同,選擇經過最近的 IGP 鄰居的路由——也就是選擇 AS 內部最短 的到達目的的路徑
  9. 如果內部路徑也相同,那就依靠 BGP ROUTE_ID 來選擇了。選擇從 RID 最小的 BGP 路 由器來的路由。對 Cisco 路由器來說,RID 就是路由器的 loopback 地址。

6.5 Controlling BGP Routes

介紹路由的每個屬性。

ORIGIN(type code 1)

  • 0:?IGP, NLRI that is inteior to the originating AS
  • 1:?EGP, NLRI learned via EGP
  • 2:?INCOMPLETE, NLRI learned by some means

AS_PATH

BGP 依靠這個字段實現路由無環路。里面存儲了路徑上的 ASN。

圖 6-11 Sample Loop Condition Addressed by the AS_PATH Attribute

NEXT_HOP

圖 6-12 BGP NEXT_HOP Example

6.6 Route Filtering and Attribute Manipulation

6.7 BGP-4 Aggregation

6.8 Looking Ahead

6.9 Frequently Asked Questions

是否應該將 BGP 路由注入 IGP?

不。不推薦將 BGP 路由注入 IGP。應該關閉 BGP synchronization。

6.1 References

7 冗余、對稱和負載均衡

  • 冗余:發生鏈路故障時,有備用路由
  • 對稱:流量在相同的點進出 AS(enters and exits an AS at the same point)
  • 負載均衡:在多條鏈路之間均衡地分發流量

7.1 冗余

冗余和對稱這兩個目標是有沖突的:一個網絡提供的冗余越多,?對稱性越難保證

冗余最終會以路由的形式落到路由表。為了避免路由表過于復雜,通常的冗余實現方式 就是默認路由(default routing)。

設置默認路由

默認路由是優先級最低的路由,因此是最后的選擇(gateway of the last resort)。分為兩種:

  • 動態學習
  • 靜態配置
動態學習默認路由

0.0.0.0/0.0.0.0?是全網約定的默認路由,并且可以動態通告給其他路由器。 通告此路由的系統表示它可以作為其他系統最后嘗試的網關(represents itself as a gateway of last resort for other systems)。

動態默認路由可以通過 BGP 或 IGP 學習。出于冗余目的,應該設置允許從多個源學習默認 路由。在 BGP 中,可以通過設置?local reference?給默認路由設置優先級。如果高優先 級的默認路由發生故障,低優先級的可以補上。

靜態配置默認路由

動態學習到的默認路由可能不是我們想要的,因此一些管理員會選擇靜態配置默認路由。

靜態默認路由也可以設置多條,用優先級區分。

7.2 對稱

流量從 AS 的哪個點出去的,也通過哪個點進來。

大部分情況下都應該是對稱的,但是特定的一些場景下也會有非對稱的情況,與設計有關。

實際上非對稱路由在現實中并不少見(more often than not),而且也沒有造成太大問 題。

7.3 非對稱路由

流量要根據 inbound 和 outbound 分開考慮。 例如,如果網絡和 ISP1 之間的帶寬被打爆了,那你肯定是先問:是 inbound 還是 outbound 被打爆了?

路由行為影響因素:

  • inbound traffic?受本 AS 通告出去的路由的影響
  • outbound traffic?受本 AS 從其他 AS 學習到的路由的影響

因此,要調整 inbound 流量,就需要調整從本 AS 通告出去的路由;而要調整 outbound, 就需要控制本 AS 如何學習鄰居通告的路由。

7.4 不同場景下對三者的權衡

可以看出,冗余、對稱和負載均衡之間是有聯系的,并且存在一些沖突。

第六章介紹的路由屬性(routing attributes)是實現這三個目標的工具。

7.5 Looking Ahead

7.6 Frequently Asked Questions

BGP 本身不考慮鏈路速度和流量特性,因此需要管理員通過策略配置達到所期望的目的。

8 AS 內部路由控制

8.1 非 BGP 路由器和 BGP 路由器的交互

非 BGP 路由器如何連接到外部網絡:

  1. 將 BGP 注入到 IGP(即,將外部路由注入到 AS 內部)
  2. 靜態配置 AS 內的默認路由到外網

8.1.1 BGP 注入 IGP

不推薦將全部 BGP 路由注入到 IGP,這會給 IGP 路由增加很大的負擔。IGP 路由是針 對 AS 內路由和很小的網絡設計的,不適用于大規模網絡。但可以將部分 BGP 路由注入 IGP。

需要考慮的因素:

  1. 計算路徑和處理路由更新所需的內存、CPU
  2. link utilization from routing control traffic
  3. 對收斂的影響
  4. IGP 的限制
  5. 網絡拓撲
  6. 其他

缺點:

  1. 如果 IGP 非常老,例如 RIP-1,不支持 CIDR,那 BGP 過來的 CIDR 路由都會丟失
  2. BGP 路由的抖動會引起 IGP 的抖動,很多 IGP 掛掉都是這個原因

8.1.2 靜態配置默認路由

在每個 AS 的邊界路由器上添加一條默認路由。

8.2 BGP Policies Conflicting with Internal Defaults

BGP 路由策略和 IGP 的默認行為有沖突會導致出現路由環路,來看 圖 8-2 這個例子 。

8.2.1 例子:主備 BGP 策略和 IGP 默認行為沖突導致環路

考慮圖 8-2。RTC 和 RTD 和外面的 AS 運行 eBGP;在 AS 內部,它們兩個之間運行 iBGP 。但是,他們不是直連的,要經過 RTA 和 RTB 兩個非 BGP 路由器。RTA 和 RTB 會和 AS 內的所有路由器運行 IGP 協議,因此它們看不到所有的外部路由(BGP 路由)。

如果 BGP 策略是 RTD 做主,RTC 做備,那 RTC 收到流量時,會轉發給 RTD,但因為 RTC 和 RTD 不是直連的,因此它會先轉發給 RTA。RTA 根據 IGP 學習到的默認路由是 RTC,因 此它又會將流量轉發回 RTC,形成了路由環路。

RTC 和 RTD 之間出現環路:

圖 8-2 Following Defaults: Loop Situation

解決這個問題的辦法有如下幾種。

方案 1: 修改 IGP Metric

將 RTA 的默認路由從指向 RTC 改為指向 RTD

具體地,將 RTC 的默認路由 0/0 的 metric 設置的非常大。這樣 RTD 的路徑相比之下很 短,RTA 就會將 RTA-RTB-RTD 作為最優路徑。

方案 2: 直連 RTC 和 RTD

直連 RTC 和 RTD,使得二者之間的最優路徑不需要經過 RTA。

RTC-RTD 是 iBGP 路徑,RTC-RTA-RTB-RTD 是 IGP 路徑。

方案 3: Transit Routers 都跑 BGP

Transit routers 都跑 BGP,在圖 8-2 中就是 RTA 和 RTB。

方案 4: 控制默認路由自動注入

RTD 和 RTC 只有一個注入默認路由,另一個不注入。

缺點:在對 primary/backup 模式有用,而且 primary 掛掉之后,backup 用不了,因為它 沒有注入默認路由。

8.2.2 Defaults Inside the AS: Other BGP Policies

IGP 默認配置和 BGP policy 沖突產生的環路。

8.3 策略路由(Policy Routing)

通常所說的路由,都是根據目的地址做轉發。

而策略路由是根據源地址,或源地址+目的地址做轉發。可以做更高級的路由控制。

8.4 Looking Ahead

8.5 Frequently Asked Questions

9 大型 AS 控制管理

網絡節點超過幾百個之后,會帶來很大的管理問題。

9.1 路由反射器(Route Reflectors)

BGP 之間通過 full-mesh 做 peering,當節點多了之后,BGP mesh 非常復雜。

引入路由反射器(Route Reflector,RR)。RR 帶來的好處:

  1. 向多個 peer 發送 UPDATE 時效率更高
  2. 路由器只需要和 local RR 做 peer,大大減少 BGP session 的數量

只有 BGP mesh 比較大之后才推薦 RR。因為?RR 也是有代價的

  1. 增加額外計算開銷
  2. 如果配置不正常會引起路由環路和路由不穩定

9.1.1 沒有 RR 的拓撲:full-mesh

圖 9-1 Internal Peers in a Normal Full-Mesh Environment

沒有 RR 的情況下,同一 AS 內的 BGP speaker 之間形成一個?logical?full-mesh。 如圖 9-1 所示,雖然 RTA-RTC 之間沒有物理鏈路,但仍然有一條邏輯 peer 鏈路。

RTB 從 RTA 收到的 UPDATE 消息并不會發送給 RTC,因為:

  1. RTC 是內部節點(同一個 AS)
  2. 這條 UPDATE 消息也是從內部節點發來的(RTA)

因此,如果 RTA-RTC 之間沒有做 peer,RTC 就收不到 RTA 的消息;所以沒有 RR 的情況 下必須得用 full-mesh。

9.1.2 有 RR 的拓撲

再來看有 RR 的情況,如圖 9-2 所示。

圖 9-2 Internal Peers Using a Route Reflector

引入 RR 之后,其他路由器稱為客戶端。客戶端和 RR 之間做 peer,RR 再將消息轉發給其 他 IBGP 或 eBGP peers。

RR 大大減少了 BGP session 數量,使得網絡更具擴展性。

9.1.3 路由反射原則

所有設備分為三類:

  1. 路由反射器
  2. 路由反射器的客戶端,簡稱客戶端
  3. 非路由反射器的客戶端,簡稱非客戶端

圖 9-3 Route Reflection Process Components

路由反射原則

  1. 從 nonclient peer 來的路由,只反射給 clients(無須反射給 nonclients 是因為 nonclients 之間有 full-mesh)
  2. 從 client peer 來的路由,反射給 clients 及 nonclients
  3. 從 eBGP peer 來的路由,反射給 clients 及 nonclients

RR 只用于 AS 內部,因此 AS 邊界的外部路由節點(eBGP)也當作 nonclients 對待。

9.1.4 RR 高可用

RR 是集中式節點,因此非常重要,需要做冗余。

但是,如果本身物理拓撲就沒有冗余,那 RR 做冗余也是無用的,如下圖。

圖 9-4 Comparison of Logical and Physical Redundancy Solutions

9.1.5 RR 拓撲

RR 拓撲主要取決于物理網絡拓撲,事實上每個路由器都可以配置成 RR。

圖 9-5 Complex Multiple Route Reflector Environment

RR 不會修改路由消息的屬性(UPDATE attributes,例如 NEXT_HOP),但是一些實現 會允許 RR 做一些過濾工作。

圖 9-7 Typical BGP Route Reflection Topology

圖 9-8 Full-Mesh BGP Topology

10 設計穩定的因特網

10.1 因特網路由的不穩定性

最常見的現象:路由抖動(flapping),BGP 頻繁 UPDATE 和 WITHDRAWN 路由。

一些影響因特網路由穩定性的因素:

  1. IGP 不穩定
  2. 硬件錯誤
  3. 軟件問題
  4. CPU、內存等資源不足
  5. 網絡升級和例行維護
  6. 人為錯誤
  7. 鏈路擁塞

10.2 BGP Stability Features

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/64263.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/64263.shtml
英文地址,請注明出處:http://en.pswp.cn/web/64263.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Flutter_Web】Flutter編譯Web第三篇(網絡請求篇):dio如何改造方法,變成web之后數據如何處理

前言 Flutter端在處理網絡請求的時候&#xff0c;最常用的庫當然是Dio了&#xff0c;那么在改造成web端的時候&#xff0c;最先處理的必然是網絡請求&#xff0c;否則沒有數據去處理驅動實圖渲染。 官方鏈接 pub https://pub.dev/packages/diogithub https://github.com/c…

Spring Boot @Conditional注解

在Spring Boot中&#xff0c;Conditional 注解用于條件性地注冊bean。這意味著它可以根據某些條件來決定是否應該創建一個特定的bean。這個注解可以放在配置類或方法上&#xff0c;并且它會根據提供的一組條件來判斷是否應該實例化對應的組件。 要使用 Conditional注解時&#…

項目上傳到gitcode

首先需要在個人設置里面找到令牌 記住自己的賬號和訪問令牌&#xff08;一長串&#xff09;&#xff0c;后面git要輸入這個&#xff0c; 賬號是下面這個 來到自己的倉庫 #查看遠程倉庫&#xff0c;是不是自己的云倉庫 git remote -v # 創建新分支 git checkout -b llf # 三步…

【Rust自學】6.4. 簡單的控制流-if let

喜歡的話別忘了點贊、收藏加關注哦&#xff0c;對接下來的教程有興趣的可以關注專欄。謝謝喵&#xff01;(&#xff65;ω&#xff65;) 6.4.1. 什么是if let if let語法允許將if和let組合成一種不太冗長的方式來處理與一種模式匹配的值&#xff0c;同時忽略其余模式。 可以…

【Git學習】windows系統下git init后沒有看到生成的.git文件夾

[問題] git init 命令后看不到.git文件夾 [原因] 文件夾設置隱藏 [解決辦法] Win11 win10

vscode添加全局宏定義

利用vscode編輯代碼時&#xff0c;設置了禁用非活動區域著色后&#xff0c;在一些編譯腳本中配置的宏又識別不了 遇到#ifdef包住的代碼就會變暗色&#xff0c;想查看代碼不是很方便。如下圖&#xff1a; 一 解決&#xff1a; 在vscode中添加全局宏定義。 二 步驟&#xff1a…

【服務器主板】定制化:基于Intel至強平臺的全新解決方案

隨著數據處理需求不斷增長&#xff0c;服務器硬件的發展也在持續推進。在這一背景下&#xff0c;為用戶定制了一款全新的基于Intel至強平臺的服務器主板&#xff0c;旨在提供強大的計算能力、優異的內存支持以及高速存儲擴展能力。適用于需要高性能計算、大規模數據處理和高可用…

php怎么去除數點后面的0

在PHP中&#xff0c;我們可以使用幾種方法來去除數字小數點后的0。 方法一&#xff1a;使用intval函數 intval函數可以將一個數字轉化為整數&#xff0c;另外&#xff0c;它也可以去除小數點后面的0。 “php $number 123.4500; $number intval($number); echo $number; // 輸…

數字后端培訓項目Floorplan常見問題系列專題續集1

今天繼續給大家分享下數字IC后端設計實現floorplan階段常見問題系列專題。這些問題都是來自于咱們社區IC后端訓練營學員提問的問題庫。目前這部分問題庫已經積累了4年了&#xff0c;后面會陸續分享這方面的問題。 希望對大家的數字后端學習和工作有所幫助。 數字后端項目Floor…

【遞歸,搜索與回溯算法 綜合練習】深入理解暴搜決策樹:遞歸,搜索與回溯算法綜合小專題(二)

優美的排列 題目解析 算法原理 解法 &#xff1a;暴搜 決策樹 紅色剪枝&#xff1a;用于剪去該節點的值在對應分支中&#xff0c;已經被使用的情況&#xff0c;可以定義一個 check[ ] 紫色剪枝&#xff1a;perm[i] 不能夠被 i 整除&#xff0c;i 不能夠被 per…

Java中各種數組復制方式的效率對比

在 Java 中&#xff0c;數組復制是一個常見的操作&#xff0c;尤其是在處理動態數組&#xff08;如 ArrayList&#xff09;時。Java 提供了多種數組復制的方式&#xff0c;每種方式在性能和使用場景上都有所不同。以下是對幾種主要數組復制方式的比較&#xff0c;包括 System.a…

視頻會議是如何實現屏幕標注功能的?

現在主流的視頻會議軟件都有屏幕標注功能&#xff0c;屏幕標注功能給屏幕分享者講解分享內容時提供了極大的方便。那我們以傲瑞視頻會議&#xff08;OrayMeeting&#xff09;為例&#xff0c;來講解屏幕標注是如何實現的。 傲瑞會議的PC端&#xff08;Windows、信創Linux、銀河…

Framework開發入門(一)之源碼下載

一、使用Linux操作系統的小伙伴可以跳轉到官網鏈接按提示操作 官網源碼地址&#xff1a;下載源代碼 | Android Open Source Project 1.創建一個空目錄來存放您的工作文件。為其指定一個您喜歡的任意名稱&#xff1a; mkdir WORKING_DIRECTORYcdWORKING_DIRECTORY …

改進爬山算法之四:概率爬山法(Probabilistic Hill Climbing,PHC)

概率爬山法(Probabilistic Hill Climbing,PHC)是一種局部搜索算法,它結合了隨機性和貪婪搜索的特點,是對爬山算法(Hill Climbing Algorithm)的一種變體或擴展。與傳統的爬山法不同,PHC不是總是選擇最優的鄰居作為下一步的移動,而是以一定的概率選擇最優鄰居,同時以一…

Unity中實現人物殘影效果

今天火柴人聯盟3公測了&#xff0c;看到一個殘影的效果&#xff0c;很有意思&#xff0c;上網查詢了一下實現方式&#xff0c; 實現思路&#xff1a; 將角色的網格復制出來&#xff0c;然后放置到新建的物體的MeshFilter組件上&#xff0c;每隔幾十毫秒在玩家的位置生成一個&a…

C#實現調用DLL 套殼讀卡程序(桌面程序開發)

背景 正常業務已經支持 讀三代卡了&#xff0c;前端調用醫保封裝好的服務就可以了&#xff0c;但是長護要讀卡&#xff0c;就需要去訪問萬達&#xff0c;他們又搞了一套讀卡的動態庫&#xff0c;為了能夠掉萬達的接口&#xff0c;就需要去想辦法調用它們提供的動態庫方法&…

自動擋有什么優勢

自動擋汽車相比手動擋汽車具有多方面的優勢&#xff0c;以下是對這些優勢的詳細闡述&#xff1a; 一、操作簡便性 無需手動換擋&#xff1a;自動擋汽車不需要駕駛員手動操作離合器和換擋桿&#xff0c;只需通過油門和剎車踏板來控制車速&#xff0c;大大降低了駕駛難度。這使…

菜鳥帶新鳥——基于EPlan2022的部件庫制作(3D)

設備邏輯的概念&#xff1a; 可在布局空間 中和其它對象上放置對象。可將其它對象放置在 3D 對象上。已放置的對象分到組件的邏輯結構中。 將此屬性的整體標識為設備邏輯。可使用不同的功能創建和編輯設備邏輯。 設備的邏輯定義 定義 / 旋轉 / 移動 / 翻轉&#xff1a;組…

小程序基礎 —— 07 創建小程序項目

創建小程序項目 打開微信開發者工具&#xff0c;左側選擇小程序&#xff0c;點擊 號即可新建項目&#xff1a; 在彈出的新頁面&#xff0c;填寫項目信息&#xff08;后端服務選擇不使用云服務&#xff0c;開發模式為小程序&#xff0c;模板選擇為不使用模板&#xff09;&…

Android Java 版本的 MSAA OpenGL ES 多重采樣

最近多次被小伙伴問到 OpenGL 多重采樣&#xff0c;其實前面文章里多次講過了&#xff0c;就是構建2個緩沖區&#xff0c;多重采樣緩沖區和目標解析緩沖區。 代碼流程 // Framebuffer IDs private int msaaFBO; private int msaaColorBuffer; private int msaaDepthBuffer;pr…