網絡協議 6 - 路由協議:敢問路在何方?

    前面例子中,咱們都是在一個局域網內折騰。今天就讓咱們擴大範圍,在多個局域網甚至到廣闊的互聯網世界中遨遊,看看這中間會發生什麼。html

    這個過程當中,跨網關訪問是咱們要了解的第一個內容。算法

跨網關訪問

    當咱們要了解跨網關訪問時,就牽扯到 MAC 地址和 IP 地址的變化,所以,咱們先來看下 MAC 頭和 IP 頭的細節。服務器

MAC 頭和IP 頭的細節

    如圖,在 MAC 頭裏,先是目標 MAC 地址,而後是源 MAC 地址,最後是協議類型。網絡

    在 IP 頭裏,最重要的就是源 IP 地址和目標 IP 地址。除此以外,還有版本號,也就是咱們常說的 IPv4 和 IPv六、服務類型 TOS(表示數據包優先級)、TTL(數據包生存週期)以及標識協議(TCP 和 UDP)負載均衡

    當咱們訪問博客園時,通過的第一個網關應該就是咱們配置的默認網關。當本機訪問默認網關時,仍是走局域網內部訪問的步驟:cdn

  1. 將源地址和目標 IP 地址放入 IP 頭;
  2. 經過 ARP 協議得到網關的 MAC 地址;
  3. 將源 MAC 地址和網關的 MAC 地址放入 MAC 頭中,發送給網關。

    而咱們的網關,通常就是指家裏的路由器,是一個三層轉發的設備。它會把 MAC 頭和 IP 頭都取下來,而後根據裏面的內容,看看接下來把數據包轉發到哪裏。htm

    不少狀況下,人們把網關叫作路由器。其實並不許備,用這個比喻應該更爲恰當些:blog

路由器是一臺設備,它有五個網口或者網卡,至關於有五隻手,分別連着五個局域網。每隻手的 IP 地址都和局域網的 IP 地址有着相同的網段,每隻手都是它握住的那個局域網的網關。路由

    任何一個想發往其餘局域網的包,都會到達其中一隻手,被拿進來,拿下 MAC 頭和 IP 頭,而後根據本身的路由算法,選擇另外一隻手,加上 IP 頭和 MAC 頭,而後扔出去。get

    注意,在上面這個過程當中,有出現路由算法。接下來,咱們就來認識下它。

路由算法

    路由算法,又名選路算法,是提升路由協議功能,儘可能減小路由時所帶來的開銷的算法。

    路由算法能夠根據多個特性來加以區分,找到到達目的地的最佳路由。

路由算法的區分點有不少,有

  • 靜態與動態
  • 單路徑與多路徑
  • 平坦與分層
  • 主機智能與路由器智能
  • 域內與域間
  • 連接狀態與距離向量

    這裏主要介紹靜態與動態路由算法。

靜態路由

    靜態路由算法,實質上是由網關配置好的映射表。

    咱們家裏的路由器,可能會有這樣的路由配置

訪問博客園,從 2 號口出去,下一跳是 IP2; 訪問百度,從 3 號口出去,下一跳是 IP3。

    相似上述這樣的規則就是靜態路由,按照必定的語法保存在路由器裏。

    每當要選擇從哪一個口拋出去的時候,就一條一條的匹配規則,找到符合的規則,就按規則辦事,從指定口拋出去,找下一跳 IP。

過網關的「變」與「不變」

    以前咱們瞭解到,MAC 地址是一個局域網內纔有效的地址。所以,MAC 地址只要過網關,就確定會改變。而 IP 地址在過網關後 ,就不必定會改變了。

    通過網關 A 後,若是IP 地址沒有改變,那 A 就是轉發網關,不然,就是NAT網關

轉發網關

    如上圖,服務器 A 要訪問服務器 B,要通過過程:

1)服務器 A 到 網關 A

  1. 檢查 B 的網段,發現不在同一個網段,所以發給網關
  2. 因爲網關的 IP 地址是已經配置好了,所以發送 ARP 獲取網關的 MAC 地址
  3. 發送包

而最後發送包的內容主要有:

  • 源 MAC:服務器 A 的 MAC
  • 模板 MAC:192.168.1.1 網關的 MAC
  • 源 IP:192.168.1.101
  • 目標 IP:192.168.4.101

    數據包到達 192.168.1.1 這個網口後,網口發現 MAC 地址是它的,就將包收進來,而後開始「思考」往哪裏轉發。

    這時候,路由器 A 中配置了規則 A1:

要訪問 192.168.4.0/24,就從 192.168.56.1 這個網口出去,下一跳是 192.168.56.2

2)網關 A 到 網關 B

    因而,路由器 A 匹配了 A1,要從 192.168.56.1 這個口發出去,發給 192.168.56.2。因而,又開始了這個過程:

  1. 檢查 B 的網段,發如今同一個網段, ARP 獲取 MAC 地址
  2. 發送包

數據包的內容是:

  • 源 MAC:192.168.56.1 的 MAC
  • 模板 MAC:192.168.56.2 的 MAC
  • 源 IP:192.168.1.101
  • 目標 IP:192.168.4.101

    數據包到達 192 .168.56.2 網口,網口發現 MAC 地址是它的,就將包收進來,而後去檢查路由規則。

    路由器 B 配置如下規則 B1:

想訪問 192.168.4.0/24,就從 192.168.4.1

    而路由器 B 發現,它的右網口就是目標地址網段的,所以就沒有下一跳了。

3)網關 B 到 服務器 B

路由器 B 匹配上 B1。從 192.168.4.1 出口,發給 192.168.4.101。數據包內容:

  • 源 MAC:192.168.4.1 的 MAC
  • 模板 MAC:192.168.4.101 的 MAC
  • 源 IP:192.168.1.101
  • 目標 IP:192.168.4.101

    服務器 B 收到數據包,發現 MAC 地址是它的,就把包收進來。

    經過上面的過程能夠看出,每到一個新的局域網, MAC 地址都是要變的,而 IP 地址則都不變。在 IP 頭裏面,不會保存任何網關的 IP 地址。

    而咱們說的下一跳,就是某個 IP 要將這個 IP 地址轉換爲 MAC 放入 MAC 頭

NAT 網關

    NAT 網關,也就是 Network Address Translation。

    因爲各個局域網都有各自的網段,很容易出現 IP 衝突的狀況。如上圖,美國服務器 A 的 IP 地址和 法國服務器 B 的 IP 地址都是 192.168.1.101/24,從 IP 上看,好像是本身訪問本身,但實際上從美國的 192.168.1.101 訪問法國的 192.168.1.101。

    如何解決這個問題呢?既然局域網之間沒有商量好 IP 分配,各管各的,那到國際上,也就是中間的局域網裏面,就須要使用另外的地址,就像出國後,咱們要改用護照同樣。

    首先,目標服務器 B 在國際上要有一個國際的身份,咱們給它一個 190.168.56.2.在網關 B 上,咱們記下來,國際身份 192.168.56.2 對應國內身份 192.168.1.101.凡是要訪問 192.168.56.2 的,網關都要轉成 192.168.1.101。

    因而,源服務器 A 要訪問目標服務器 B,目標地址就變成國際 IP 地址 192.168.56.2。過程以下:

1)源服務器 A 發數據包到網關 A

  1. 檢查服務器 B IP,不在同一網段
  2. ARP 獲取網關 MAC 地址
  3. 發送包

數據包的內容是這樣的:

  • 源 MAC:服務器 A 的 MAC
  • 目標 MAC:192.168.1.1 這個網口的 MAC
  • 源 IP:192.168.1.101
  • 目標 IP:192.168.56.2

    路由器 A 中 192.168.1.1 這個網口收到數據包後,檢查 MAC 地址一致,將包收進來。

    在路由器 A 中配置了規則:

想訪問 192.168.56.2/24,就從 192.168.56.1 網口發出去,發給 192.168.56.2,沒有下一跳。

    因爲路由器的右網口(192.168.56.1) IP 地址和目標 IP 地址在同一網段,所以沒有下一跳。

2)網關 A 到網關 B 當網絡包發送到中間的局域網時,服務器 A 也須要有個國際身份。所以,源 IP 地址 192.168.1.101 要改爲 192.168.56.1,因此數據包的內容是:

  • 源 MAC:192.168.56.1 的 MAC
  • 目標 MAC:192.168.56.2 的 MAC
  • 源 IP:192.168.56.1
  • 目標 IP:192.168.56.2

    包到達 192.168.56.2 這個網口後,發現 MAC 一致,就將包收進來。

    而路由器 B 是 NAT 網關,它上面配置了,國際身份 192.168.56.2 對應國內的 192.168.1.101,因而目標地址改成 192.168.1.101。

    一樣的,路由器 B 中配置了規則:

想訪問 192.168.1.101,就從 192.168.1.1 網口出去,沒有下一跳。

    因而,數據包就從 192.168.1.1 這個網口發給 192.168.1.101。

3)網關 B 到服務器 B 數據包從 192.168.1.1 網口發出後,一樣通過這些步驟:

  1. 檢查服務器 B 的 IP,在同一網段
  2. ARP 獲取服務器 B 的 MAC 地址
  3. 發送包

這時的數據包就變成了:

  • 源 MAC:192.168.1.1 的 MAC
  • 目標 MAC:192.168.1.101 的 MAC
  • 源 IP:192.168.56.1
  • 目標 IP:192.168.1.101

    服務器收到包後,檢查 MAC 地址一致,就將數據包收進來。

    從服務器 B 接收的數據包能夠看出,源 IP 爲 服務器 A 的國際身份,於是發送返回包的時候,也發給這個國際身份,由路由器 A 作 NAT,轉換爲國內身份。

動態路由

動態路由算法
距離矢量路由算法

1)基本思路

基於Bellman-Ford 算法。每一個路由器都保存一個路由表,包含多行,每行對應網絡中的一個路由器,每一行包含兩部分信息,一個是要到目標路由器,從哪條線出去,另外一個是到目標路由器的距離

2)存在問題

a. 好消息傳得塊,壞消息傳的慢

新加入的路由器可以很快的新路由器信息廣播出去。可是若是一個路由器掛了,掛的消息沒有廣播。每一個通過這個宕機節點的路由器,沒法得知該節點一宕機,而是試圖經過其餘的路徑訪問,直到試過了全部的路徑,才發現這個路由器已經宕機了。

示例:

b. 每次發送消息,要發送整個全局路由表

    上面的兩個問題,限制了***距離矢量路由***的網絡規模,僅適用於小型網絡(小於 15 跳)。

鏈路狀態路由算法

1)基本思路

基於Dijkstra 算法。當一個路由器加入網絡是,首先是發現鄰居,給鄰居說 hello,鄰居都回復。而後計算和鄰居的距離,發送一個 echo,要求立刻返回,除以 2 就是距離。接着將本身和鄰居之間的鏈路狀態包廣播出去,發送到整個網絡的每一個路由器。

    這種算法中,每一個路由器都能在本身本地構建一個完整的圖,而後針對這個圖使用 Dijkstra 算法,找到兩點之間的最短路徑。

    不像距離矢量路由協議那樣,更新時發送整個路由表。鏈路狀態路由協議只廣播更新的或改變的網絡拓撲,這使得更新信息更小,節省了寬帶和 CPU 利用率。並且一旦一個路由器掛了,它的鄰居都會廣播這個消息,可使得壞消息迅速收斂。

動態路由協議
基於鏈路狀態路由算法的 OSPF

OSPF(Open Shortest Path First, 開放式最短路徑優先)協議,普遍應用在***數據中心***的協議。因爲主要用在數據中心內部,用於路由決策,所以稱爲***內部網關協議(Interior Gateway Protocol,簡稱 IGP)***

    內部網關協議的重點就是***找到最短路徑***。當存在多個最短路徑時,能夠在這多個路徑中進行負載均衡,這經常被稱爲***等價路由***。

    等價路由不只能夠用來分攤流量,還能夠提升容錯率,當一條路徑不通時,還能夠經過另一條路到達目的地。

基於距離矢量路由算法的 BGP

針對網絡之間的路由協議,稱爲***外網路由協議(Border Gateway Protocol,簡稱 BGP)***

    每一個數據中心都有本身的路由配置。例如,哪些外部 IP 可讓內部知曉,哪些內部 IP 可讓外部知曉,哪些能夠經過,哪些不能經過。

    所以,在各個數據中心進行交互時,須要一種協議,經過這種協議,能夠知道相鄰數據中心的路由配置,從而找到數據中心之間最好的路由。

    BGP 協議就是這樣的協議。它不着眼於發現和計算路由,而在於控制路由的傳播和選擇最好的路由。

總結

  • 數據包要離開本局域網,就要通過網關,網關就是路由器的一個網口;
  • 路由器是一個三層設備,理由有如何尋找下一跳的規則;
  • 通過路由器以後的 MAC 頭確定會變。若是 IP 不變,就是 轉發網關,不然就是 NAT網關
  • 路由分靜態路由和動態路由,動態路由能夠配置複雜的策略路由,控制轉發策略;
  • 動態路由主流算法有兩種,距離矢量算法和鏈路狀態算法。基於兩種算法產生兩種協議,BGP 協議和 OSPF 協議。

原文地址:www.cnblogs.com/BeiGuo-Feng…

相關文章
相關標籤/搜索