計算機網絡學習(十) 網絡層 Ⅲ

1.路由選擇算法

1.1 路由算法

  • 之前主要研究了網絡層的轉發功能,當分組到達一臺路由器時,該路由器索引其轉發表並決定該分組被指向的鏈路接口
  • 網絡層還有至關重要的路由選擇功能,不管網絡層提供的是數據報服務(此時在給定源和目的地址之間的不同分組可能採用不同的路由) ,還是虛電路服務此時在給定源和目的地址之間的所有分組將採用相同路徑) ,網絡層都必須爲分組選擇一條最佳路徑
  • 主機通常直接與一臺路由器相連接,該路由器即爲該主機的默認路由器 (default router) , 又稱爲該主機的第一跳路由器 (first- hop router)
  • 將源主機的默認路由器稱作源路由器( source router) ,把目的主機的默認路由器稱作目的路由器 (destination router)
  • 可以用圖、邊、節點(離散數學)來形式化描述路由選擇問題。
  • 路由算法的分類一
    • 全局式路由選擇算法 (global routing algorithm)
      • 所有的路由器掌握完整的網絡拓撲和鏈路費用信息
      • 實踐中,具有全局狀態信息的算法常被稱作鏈路狀態 (Link State , LS) 算法,因爲該算法必須知道網絡中每條鏈路的費用
    • 分散式路由選擇算法 (decentralized routing algorithm)
      • 路由器只掌握物理相連的鄰居及鏈路費用
      • 以迭代、分佈式的方式計算出最低費用路徑
      • 例如,距離向量( Distance- Vector, DV) 算法
  • 路由算法的分類二
    • 靜態路由選擇算法 (Static routing algorithm)
      • 人工干預進行調整(如人爲手工編輯一臺路由器的轉發表)
    • 動態路由選擇算法 (Dynamic routing algorithm)
      • 能夠當網絡流量負載或拓撲發生變化時動態改變路由選擇路徑
  • 路由算法的分類三
    • 負載敏感算法 ( load-sensitive algorithm)
      • 鏈路費用會動態地變化以反映出底層鏈路的當前擁塞水平
      • 早期的 ARPAnet 路由選擇算法就是負載敏感的
    • 當今的因特網路由選擇算法都是負載遲鈍的 (load-insensitive) ,因爲某條鏈路的費用不明思地反映其當前(或最近)的擁塞水平。

1.2 鏈路狀態路由算法

  • 在鏈路狀態算法中,網絡拓撲和所有的鏈路費用都是已知的,也就是說可用作 LS 算法的輸入
  • 實踐中這是通過讓每個結點向網絡中所有其他結點廣播鏈路狀態分組來完成的,其中每個鏈路狀態分組包含它所連接的鏈路的特徵和費用
  • 鏈路狀態路由選擇算法叫做 Dijkstra 算法(數據結構與算法,具體略)
  • 複雜性:n 個節點需要 n(n+1)/2 次比較,O(n^2)
  • 存在震盪可能

1.3 距離向量路由算法

  • 距離向量算法是一種迭代的、異步的和分佈式的算法
    • 分佈式:每個結點都要從一個或多個直接相連鄰居接收某些信息,執行計算,將其計算結果分發給鄰居
    • 迭代:此過程一直要持續到鄰居之間無更多信息要交換爲止
    • 異步:不要求所有結點相互之間步伐一致地操作。
  • 採用Bellman-Ford 算法(算法數據結構與算法,具體略)
  • 無窮計數問題:採用毒性逆轉技術或定義最大度量

1.4 LS vs DV ?

  • 注:N 是結點(路由器)的集合,而 E 是邊(鏈路)的集合
  • DV 和 LS 算法採用互補的方法來解決路由選擇計算問題
    • 在 DV 算法中
      • 每個結點僅與它的直接相連的鄰居交談
      • 它爲其鄰居提供了從它自己到網絡中(它所知道的)所有其他結點的最低費用估計
    • 在 LS 算法中
      • 每個結點(經廣播)與所有其他結點交談
      • 它僅告訴它們與它直接相連鏈路的費用
  • 報文複雜性
    • DV 算法
      • 要求在每次選代時,在兩個直接相連鄰 居之間交換報文
      • 當鏈路費用改變時, DV 算法僅當在新的鏈路費用導致與該鏈路相連結點的最低費用路徑發生改變時,才傳播己改變的鏈路費用
    • LS 算法
      • 要求每個結點都知道網絡中每條鏈路的費用,這就要求要發送 O(NE)個報文
      • 無論何時一條鏈路的費用改變時,必須向所有結點發送新的鏈路費用
  • 收斂速度
    • LS 算法的實現是一個要求O(NE) 個報文的 O( N^2 ) 算法。 DV 算法收斂較慢,且在收斂時會遇到路由選擇環路,還有無窮計數的問題
  • 健壯性: 如果一臺路由器發生故障、行爲錯亂或受到破壞時情況會怎樣呢?
    • DV 算法
      • 一個結點可向任意或所有目的結點通告其不正確的最低費用路徑
      • 更一般地,每次迭代時,在 DV 算法中一個結點的計算會傳遞給它的鄰居,然後在下次迭代時再間接地傳遞給鄰居的鄰居,一個不正確的結點計算值會擴散到整個網絡
    • LS 算法
      • 對於 LS 算法,路由器能夠向其連接的一條鏈路廣播不正確費用(但是沒有其他鏈路)
      • 一個結點也可損壞或丟棄它收到的任何 LS 廣播分組
      • 但是一個 LS結點僅計算自己的轉發表,這就意味着在 LS 算法下,路由計算在某種程度上是分離的,提供了一定程度的健壯性
  • 總之,兩個算法沒有一個是明顯的贏家,它們的確都在因特網中得到了應用

1.5 層次路由選擇

  • 將任意規模的網絡抽象成圖計算路由——過於理想化和簡單化,原因如下:
    • 規模。隨着路由器數目變大,涉及路由選擇信息的計算、存儲及通信的開銷將高得不可實現。
    • 管理自治。每個網絡的管理可能都期望自主控制其內網的路由,還要能將其網絡與其他外部網絡相連接。
  • 這兩個問題都可以通過將路由器組織進自治系統 (Autonomous System, AS) 來解決
    • 在相同的 AS 中的路由器都全部運行同樣的路由選擇算法,且擁有彼此的信息,就像理想化那樣。
    • 在一個自治系統內運行的路由選擇算法叫做自治系統內部路由選擇協議( intra- autonomous system routing protocol)
    • 不同自治系統內的路由器可以運行不同的AS內部路由協議
    • 將 AS 彼此互聯是必需的,因此在一個 AS 內的某些路由器還將負責向在本 AS 之外的目的地轉發分組,這些路由器位於AS的 “邊緣”,被稱爲網關路由器 (gateway router) 。
  • 一個例子
    在這裏插入圖片描述
    • AS1具有4臺路由器,1a、1b、1c 和 1d,這4臺路由器的每一臺都知道如何沿着優化路徑轉發到 AS1 內任何目的地的分組地,自治系統 AS2 和 AS3 類似
    • 路由器 1b、1c、2a 和 3a 都是網關路由器
    • 某些 AS 中的路由器,怎樣知道該如何將分組路由選擇到位於該 AS 外部的目的地呢?
      • 如果 AS 僅有一個網關路由器連接唯一一個其他 AS 的話,回答這個問題是容易的。因爲該 AS 內部的 AS 路由選擇協議已經決定了從內部路由器到網關路由器的最低費用路徑,網關路由器一旦接收到分組,將分組向通向外部 AS 的一條鏈路轉發。之後由該鏈路另一端的 AS 負責將該分組向其最終目的地路由選擇。
      • 如果源 AS 具有兩條或更多條鏈路(通過一臺或更多臺網關路由器)通向外部 AS ,如何解決這個問題?
        • 考慮在 AS1 中的一臺路由器,它接收了 一個目的地在該 AS 外部的分組。路由器顯然應當向它的兩個網關路由器之一(1b 或 1c) 轉發該分組
        • 爲解決選擇哪個網關,AS1 需要:①知道經 AS2 和 AS3 分別可達哪些目的地;②向 AS1 中的所有路由器傳播這些可達性信息
        • 以上兩個任務是由自治系統間路由選擇協議( Inter- autonomous system routing protocol) 處理的。事實上,因特網中的所有 AS 都運行相同的 AS 間路由選擇協議,該協議稱爲 BGP4
        • 因此每臺路由器能夠配置它的轉發表以處理外部 AS 目的地
    • 假如 AS1 從 AS 間路由選擇協議知道了子網 x 是可通過多個網關到達。如何選擇?
      • 熱土豆路由選擇 (hot potato routing):發送分組的路由器通過 AS 內部路由協議確定自己到達每個網關的最小路徑,在這些路徑中選擇最小的一條,即選擇離自己最近的網關發送。

2.因特網中的路由選擇

學習了因特網編址與 IP 協議以後,我們現在將注意力轉到因特網路由選擇協議上來,,因特網的路由選擇協議包含了許多我們在本章前面學過的原理:LS、DV、自制系統

2.1自治系統間內的路由選擇

  • 因特網採用層次路由
  • AS 內部路由選擇協議又稱爲內部網關協議 (interior gateway protocol,IGP)
  • 常見的 AS 內部路由協議:
    • 路由選擇信息協議 (Routing Information Protocol , RIP)
    • 開放最短路優先 (Open Shortest Path First , OSPF)

2.1.1 RIP

  • 路由選擇信息協議 (Routing Information Protocol , RIP)
  • RIP 是最早的 AS 內部因特網路由選擇協議之一,且目前仍在廣泛使用。
  • RIP 是一種距離向量協議,其運行方式很像理想化的 DV 協議
    • 使用跳數作爲其費用測度,即每條鏈路的費用爲 1
    • 一條路徑的最大費用被限制爲 15
    • 路由選擇更新信息在鄰居之間通過使用一種 RIP 響應報文( RIP response message) 來交換,又被稱作 RIP 通告( RIP advertisement) ,每 30 秒交換一次。
    • 響應報文包含了一個該 AS 內的最多 25 個目的子網的列表
    • 路由器維護一張稱爲路由選擇表( routing table) 的 RIP 表(該路由器的距離向量和該路由器的轉發表),轉發表有三列:目的子網、下一臺路由器、到目的地的總跳數
  • 例子:
    在這裏插入圖片描述
  • RIP 的鏈路失效與恢復
    • 超過 180 秒沒有從鄰居聽到報文,則該鄰居是不可達的:鄰居死機了或者連接的鏈路中斷了
    • 當這種情況發生時, RlP修改本地路由選擇表,然後向相鄰路由器(那些仍然可達的路由器)發送通告來傳播該信息
    • 鄰居再依次向外發送通告(如果轉發表改變)
  • RIP 路由表的處理
    • RIP 路由表是利用一個稱爲 route-d(daemon)的應用層進程進行管理
    • 通告報文週期性地通告 UDP 數據報發送
      在這裏插入圖片描述

2.1.2 OSPF

  • 開放最短路優先 (Open Shortest Path First , OSPF)
  • 就像 RIP 一樣, OSPF 路由選擇也被廣泛用於因特網的 AS 內部路由選擇
  • 採用鏈路狀態路由算法
    • 每當一條鏈路的狀態發生變化時(如費用的變化或連接/中斷狀態的變化),路由器就會向自治系統內所有其他路由器廣播鏈路狀態信息
    • 即使鏈路狀態未發生變化,它也要週期性地 (至少每隔 30 分鐘一次)廣播鏈路狀態。
    • 每個路由器構造完整的網絡(AS)拓撲圖
    • 路由器在本地運行 Dijkstra 算法,確定以自身爲根結點的到所有子網的最短路徑樹
    • 各條鏈路費用是由網絡管理員配置的
    • OSPF 通告包含在 OSPF 報文中,該 OSPF 報文直接由 IP 承載
  • OSPF 的優點(RIP 不具備)
    • 安全。所有的 OSPF 報文都可以被認證,防止惡意入侵
    • 允許使用多條相同費用的路徑。這就是說,當多條相等費用的路徑存在時,無需僅選擇單一的路徑來承載所有的流量
    • 對單播與多播路由選擇的綜合支持。多播 OSPF(MOSPF)與 OSPF 利用相同的網絡拓撲數據
    • 支持對大規模 AS 分層
  • 分層的 OSPF
    • 兩層分級:局部區(Area)、主幹區(Backbone)
    • 每個區域都運行自己的 OSPF 鏈路狀態路由選擇算法,鏈路狀態的通告僅限於區域內,每個路由器掌握所在區的詳細拓撲
    • 在一個 Area 內,一臺或多臺區域邊界路由器 (area border router) 負責爲流向該區域以外的分組提供路由選擇
    • 主幹區域的主要作用是爲 AS 內其他區域之間的流量提供路由選擇
    • 主幹總是包含了 AS 內的所有區域邊界路由器,並且可能還包含了一些非邊界路由器
    • AS 內的區域間的路由選擇要求分組首先路由到區域邊界路由器,再通過主幹路由到位於目的區域的區域邊界路由器,然後再路由到最終目的地。

2.2自治系統間的路由選擇

  • 跨越多個 AS 的源和目的對之間是如何確定路徑的?—— 邊界網關協議 (Border Gateway Protocol , BGP) 版本 4 是當今因特網中域間路由選擇協議事實上的標準。
  • BGP 爲每個 AS 提供了進行以下工作的手段:
    • 從相鄰 AS 處獲得子網可達性信息
    • 向本 AS 內部的所有路由器傳播這些可達性信息
    • 基於可達性信息和 AS 策略,決定到達子網的"好"路由
  • BGP 使得每個子網向因特網的其餘部分通告它的存在,BGP 確保了在因特網中的所有 AS 知道該子網以及如何到達那裏

2.2.1 BGP 基礎

  • BGP 極其複雜,而且許多問題仍沒有得到很好理解,但我們至少需要獲得該協議工作原理的初步知識。
  • 在 BGP 中,路由器對通過使用 179 端口的半永久 TCP 連接來交換路由選擇信息
  • 對於每條 TCP 連接,位於該連接端點的兩臺路由器稱爲 BGP 對等方 (BGP peers),沿着該連接發送所有 BGP 報文的 TCP 連接稱爲 BGP 會話( BGP session)
  • 跨越兩個 AS 的 BGP 會話稱爲外部 BGP 會話 (external BGP session,eBGP) ,在同一個AS 中的兩臺路由器之間的 BGP 會話稱爲內部 BGP會話( inlemal BGP session,iBGP)
    在這裏插入圖片描述
  • BGP 使得每個 AS 知道經過其相鄰 AS 可達哪些目的地。 在 BGP 中,目的地不是主機而是 CDIR 化的前綴 (prefix) ,每個前綴表示一個子網或一個子網的集合。
  • 如上圖,在網關路由器 3a 和 1c 之間使用 eBGP 會話, AS3 與 AS1 相互交換可達的前綴列表; AS 中的網關路由器接收到 eBGP 學習到的前綴後,使用 iBGP 會話來向該 AS 中的其他路由器發佈這些前綴
  • 當一臺路由器得知一個新前綴時,它爲該前綴在其轉發表中創建一個項

2.2.2 路徑屬性和 BGP 路由

  • 在 BGP 中,一個自治系統由其全局唯一的自治系統號 (Autonomous System Numher, ASN)
  • 當一臺路由器通過 BGP 會話通告一個前綴時,它在前綴中包括一些 BGP 屬性 (BGP attribute) 。 用 BGP 術語來說,帶有屬性的前綴被稱爲一條路由 (route)
  • 其中兩個重要屬性:
    • AS-PATH(AS 路徑):包含前綴通告已經經過的AS序列,如 AS 67,AS 17。
      • 當一個前綴傳送到一個 AS 時,該 AS 將它的 ASN 增加到 AS-PATH 屬性中
      • 路由器使用該 AS-PATH 屬性來檢測和防止循環通告;
      • 如果一臺路由器看到它的 AS 被包括在該路徑列表巾,它將拒絕此通告
      • 路由器也使用 AS-PATH 屬性在多條路徑中選擇相同的前綴。
    • NEXT-HOP(下一跳):開始一個 AS-PATH 的路由接口,指向下一跳 AS,可能從當前 AS 到下一跳 AS 存在多條鏈路。總而言之,路由器使用 NEXT-HOP 屬性正確地配置它們的轉發表。
  • 當一臺網關路由器接收到一臺路由器通告時,它使用其輸入策略 ( import policy) 來決定是否接收或過濾該路由、是否設置某種屬性
    • 設置某種屬性如路由器偏好程度
    • 濾掉一條路由,因爲該 AS 可能不希望通過在該路由的 AS-PATH 中的某個 AS 發送流量

2.2.3 BGP 路由選擇

  • BGP 使用 eBGP 和 iBGP 向在 AS 中的所有路由器發佈路由。根據這種發佈,路由器可能知道到達任何一條前綴的多條路由,在這種情況下路由器必須在可能的路由中選擇一條。,BGP 順序地調用下列消除規則,直到留下 一條路由:
    • 本地偏好(preference)值屬性:
      • 路由被指派一個本地偏好值作爲它們的屬性之一
      • 本地偏好可能由該路由器設置或可能由在相同 AS 中的另一臺路由器學習到
      • 這是一條由 AS 的網絡 管理員決定的決策,具有最高本地 偏好值的路由將被選擇
    • 最短 AS-PATH:
      • 在餘下的路由中 (所有都具有相同的本地偏好值) ,具有最短 AS-PATH 的路由將被選擇
      • 如果該規則是路由選擇的唯一規則的話,則 BGP 將使用一種距離向量算法來決定路徑,其中距離測度使用 AS 跳的數目而不是路由器跳的數目
    • 最近 NEXT-HOP 路由器:
      • 在餘下的路由中(所有者都具有相同的本地偏好和相同的 AS-PATH 長度),將選擇具有最靠近 NEXT-HOP 路由器的路由
      • 最靠近是指具有最低費用路徑的費用的路由器,它由 AS 內部算法來決定,該進程經常被稱爲熱土豆路由選擇。
    • 如果仍留下多條路由,該路由器使用 BGP 標識符來選擇路由

2.2.4 路由選擇策略

一個簡單的例子說明 BGP 路由選擇策略的某些基本概念。
在這裏插入圖片描述

  • A、B、C 是提供商網絡 / AS(provider network / AS),X、W、Y 是客戶網絡 / AS(customer network / AS)
  • W、Y 是樁網絡(stub network / AS):只與一個其他 AS 相連。 所有進入樁網絡的流量必定是去往該網絡,所有離開樁網絡的流量必定源於該網 絡
  • X 是多宿樁網絡(multi -homed stub network):鏈接兩個其他 AS,就像 W 和 Y 一樣, X 自身必定是進人/離開 X 的所有流量的源/目的地。
  • 這種樁網絡的行爲是如何被實現和強制實現的呢? X 如何防止轉發 B 與 C 之間的流量呢?—— 控制 BGP 路由的通告方式:
    • X 不期望經過他路由 B 到 C 的流量,因此 X 不會向 B 通告任何一條到達 C 的路由。
    • X 如果(向其鄰居 B 和 C) 通告它沒有通向 (除自身以外)任何其他目的地的路徑,那麼它將起到一個樁網絡的作用
    • 這個簡單的例子說明了如何使用一條選擇的路由通告策略來實現客戶/提供商關係。
  • A 向 B 通告一條路徑:AW
  • B 向 X 通告一條路徑:BAW
  • B 不會向 C 通告路徑 BAW ,因爲 W 和 C 均不是 B 的客戶,B 路由 CBAW 沒有任何收益
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章