計算機網絡 - 網絡層(中)

計算機網絡 - 網絡層(中)

這篇文章是 網絡層介紹上篇的後續部分。

網際控制報文協議 ICMP

爲了更有效地轉發 IP 數據報和提升交付成功的機會,在網際層使用了網際控制報文協議 ICMP (Internet Control Message Protocol)
ICMP 容許主機或路由器報告差錯狀況和提供有關異常狀況的報告。算法

雖然ICMP 報文是裝在 IP 數據報中,做爲其中的數據部分,可是ICMP仍然是IP層的協議,而非高層協議。

ICMP報文格式

ICMP 報文的種類有兩種,即ICMP差錯報告報文和ICMP詢問報文
ICMP 報文的前 4 個字節是統一的格式,共有三個字段:即類型、代碼和檢驗和。接着的 4 個字節的內容與 ICMP 的類型有關。數據庫

詳細的ICMP報文的分類可見 維基百科

ICMP差錯報告報文

ICMP差錯報告報文可分爲如下幾種類型segmentfault

  • 終點不可達 (Destination Unreachable)
  • 時間超過 (Time Exceeded)
  • 參數問題
  • 改變路由(重定向)(Redirect)

咱們先以「終點不可達」報文爲例對於ICMP差錯報告報文的組成有一個比較直觀的瞭解。
ICMP終點不可達報文網絡

ICMP詢問報文

ICMP詢問報文可分爲如下幾種類型session

  • 回送請求和回答報文
  • 時間戳請求和回答報文

ICMP的應用舉例

PING

PING (Packet InterNet Groper)用來測試兩個主機之間的連通性。使用了 ICMP 回送請求與回送回答報文。
PING 是應用層直接使用網絡層 ICMP 的例子,它沒有經過運輸層的 TCP 或UDP。分佈式

咱們打開電腦的終端,即可以Ping本身想要訪問的主機IP地址(域名),測試一下連通性。
好比,咱們能夠ping一下segmentfault.com
ping工具

Traceroute

Traceroute用來跟蹤一個分組從源點到終點的路徑。
它利用 IP 數據報中的 TTL 字段和 ICMP 時間超過差錯報告報文實現對從源點到終點的路徑的跟蹤。佈局

traceroute的原理示意

咱們一樣能夠在終端測試:
traceroot測試

互連網的路由選擇協議

分層次的路由選擇協議

互聯網採用分層次的路由選擇協議。緣由是:spa

  • 互聯網的規模很是大。若是讓全部的路由器知道全部的網絡應怎樣到達,則這種路由表將很是大,處理起來也太花時間。
  • 許多單位不肯意外界瞭解本身單位網絡的佈局細節和本部門所採用的路由選擇協議(這屬於本部門內部的事情),但同時還但願鏈接到互聯網上。

自治系統 AS (Autonomous System)

定義:在單一的技術管理下的一組路由器,而這些路由器使用一種 AS 內部的路由選擇協議和共同的度量以肯定分組在該 AS 內的路由,同時還使用一種 AS 之間的路由選擇協議用以肯定分組在 AS之間的路由。
儘管一個 AS 使用了多種內部路由選擇協議和度量,但重要的是一個 AS 對其餘 AS 表現出的是一個單一的和一致的路由選擇策略。
自治系統

兩大類路由選擇協議

「路由器」和「網關」在這裏能夠視做同義詞。

內部網關協議 IGP (Interior Gateway Protocol)

  • 在一個自治系統內部使用的路由選擇協議
  • 具體的協議有多種,如接下來會介紹的RIP和OSPF

外部網關協議 EGP (External Gateway Protocol)

  • 用於將路由選擇信息傳遞到另外一個自治系統中
  • 目前使用的最多的是 BGP-4

內部網關協議 RIP

路由信息協議 RIP (Routing Information Protocol) 是內部網關協議 IGP 中最早獲得普遍使用的協議。
RIP 是一種分佈式的、基於距離向量的路由選擇協議。

RIP 協議中的「距離」也稱爲「跳數」(hop count),由於每通過一個路由器,跳數就加 1。(這裏的「距離」實際上就是指「最短距離」)

RIP 容許一條路徑最多隻能包含 15 個路由器。「距離」的最大值爲 16 時即至關於不可達。

RIP協議的特色

  • 僅和相鄰路由器交換信息
  • 交換的信息是當前本路由器所知道的所有信息,即本身的路由表
  • 按固定的時間間隔交換路由信息
  • *「好消息傳播得快,壞消息傳播得慢

RIP報文

以目前普遍使用的RIP version2爲例,簡單瞭解一下RIP報文的組成:
RIPv2報文

  • RIP2 報文由首部和路由部分組成。
  • RIP2 報文中的路由部分由若干個路由信息組成。每一個路由信息須要用 20 個字節。地址族標識符(Address Family Identifier)字段用來標誌所使用的地址協議。
  • 路由標記(Route Tag)填入自治系統的號碼,這是考慮使 RIP 有可能收到本自治系統之外的路由選擇信息。
  • 再後面指出某個網絡地址(IP Address)、該網絡的子網掩碼(Subnet Mask)、下一跳路由器地址(Next Hop)以及到此網絡的距離(Metric)。
  • 一個 RIP 報文最多可包括 25 個路由。

路由表的創建與更新

距離向量算法

路由器收到相鄰路由器(其地址爲 X)的一個 RIP 報文:
(1) 先修改此 RIP 報文中的全部項目:把「下一跳」字段中的地址都改成 X,並把全部的「距離」字段的值加 1。
(2) 對修改後的 RIP 報文中的每個項目,重複如下步驟:

若項目中的目的網絡不在路由表中,則把該項目加到路由表中。
    不然
        若下一跳字段給出的路由器地址是一樣的,則把收到的項目替換原路由表中的項目。
           不然 
               若收到項目中的距離小於路由表中的距離,則進行更新,
         不然,什麼也不作。

(3) 若 3 分鐘尚未收到相鄰路由器的更新路由表,則把此相鄰路由器記爲不可達路由器,即將距離置爲 16(表示不可達)。
(4) 返回。

文字敘述看着有點累,不過理解了「不一樣路徑選短的,一樣路徑選新的」的思路就會很容易。

路由表的更新

RIP只與相鄰路由交換信息不可避免會帶來路由更新的一類延遲,即以前提到的「好消息傳得快,壞消息傳得慢」。

好消息傳得快,壞消息傳得慢」其實是信息傳送延遲形成路由器的「誤判」
例如:
R1本來直接鏈接NET-A(可直接交付),但NET-A忽然出故障,變爲不可達。
R1中關於NET-A不可達的更新尚未傳遞給鏈接着R1的路由R2,此時R2仍覺得能夠經過R1達到NET-A,便向R1發送<NET-A,2,R2>的路由表;
R1收到後覺得R2能夠到達NET-A(其實已經不行了),便更新本身的路由表爲<NET-A,3,R2>,並將更新發送出去;
R2收到更新後將本身的路由表更新爲<NET-A,4,R1>,並將更新發送出去;
如此來來回回直到兩個路由器的路由表跳數都更新至16才肯定了NET-A不可達。

爲了克服RIP的缺點,咱們便開發出了OSPF協議。

內部網關協議 OSPF

開放最短路徑優先協議,即OSPF(Open Shortest Path First),如上所述,是爲克服 RIP 的缺點在 1989 年開發出來的。

OSPF協議的特色

  • 向本自治系統中全部路由器發送信息,這裏使用的方法是洪泛法
  • 發送的信息就是與本路由器相鄰的全部路由器的鏈路狀態,但這只是路由器所知道的部分信息

    • 「鏈路狀態」就是說明本路由器都和哪些路由器相鄰,以及該鏈路的「度量」(metric)。
  • 只有當鏈路狀態發生變化時,路由器才用洪泛法向全部路由器發送此信息
  • OSPF 的更新過程收斂得快,這是它很是重要的一個優勢,也是它彌補RIP不足的關鍵。

鏈路狀態數據庫(link-state database)

因爲各路由器之間頻繁地交換鏈路狀態信息,所以全部的路由器最終都能創建一個鏈路狀態數據庫。
這個數據庫實際上就是全網的拓撲結構圖,它在全網範圍內是一致的(這稱爲鏈路狀態數據庫的同步)。

同時,爲了使 OSPF 可以用於規模很大的網絡,OSPF 將一個自治系統再劃分爲若干個更小的範圍,叫作區域

劃分區域

劃分區域後,利用洪泛法交換鏈路狀態信息的範圍侷限於每個區域而不是整個的自治系統。
在一個區域內部的路由器只知道本區域的完整網絡拓撲,而不知道其餘區域的網絡拓撲的狀況。
OSPF 使用層次結構的區域劃分。在上層的區域叫作主幹區域 (backbone area)。
主幹區域的標識符規定爲0.0.0.0,用來連通其餘在下層的區域。

OSPF還有一點與RIP不一樣,即OSPF 不用 UDP 而是直接用 IP 數據報傳送
OSPF 構成的數據報很短,這樣作可減小路由信息的通訊量。
OSPF分組結構

OSPF有五種分組類型
下圖簡單說明了OSPF的五種分組類型以及它們所能完成的操做
OSPF的五種分組類型

外部網關協議 BGP

BGP 是不一樣自治系統的路由器之間交換路由信息的協議。 默認爲當前較新的版本BGP-4。

互聯網的規模太大,使得自治系統之間路由選擇很是困難。對於自治系統之間的路由選擇,要尋找最佳路由是很不現實的。
所以,邊界網關協議BGP只能是力求尋找一條可以到達目的網絡且比較好的路由(不能兜圈子),而並不是要尋找一條最佳路由

BGP發言人

每個自治系統的管理員要選擇至少一個路由器做爲該自治系統的「 BGP 發言人」 (BGP speaker)。經過它與其餘自治系統(中的 BGP 發言人)交換路由信息。

BGP交換路由信息

一個 BGP 發言人與其餘自治系統中的 BGP 發言人要交換路由信息,就要先創建 TCP 鏈接,而後在此鏈接上交換 BGP 報文以創建 BGP 會話(session),利用 BGP 會話交換路由信息。
使用 TCP 鏈接交換路由信息的兩個 BGP 發言人,彼此成爲對方的鄰站(neighbor)或對等站(peer)。

BGP所交換的網絡可達性的信息就是要到達某個網絡所要通過的一系列 AS
當BGP發言人互相交換了網絡可達性的信息後,各BGP發言人就根據所採用的策略從收到的路由信息中找出到達各 AS 的較好路由

在衆多路由選擇協議中,BGP是爲數很少的 使用TCP做爲傳輸協議的路由選擇協議。

BGP有四種分組類型

  • 打開 (OPEN) 報文,用來與相鄰的另外一個BGP發言人創建關係。
  • 更新 (UPDATE) 報文,用來發送某一路由的信息,以及列出要撤消的多條路由。
  • 保活 (KEEPALIVE) 報文,用來確認打開報文和週期性地證明鄰站關係。
  • 通知 (NOTIFICATION) 報文,用來發送檢測到的差錯。

路由器的構成

路由器你們確定已經不陌生了,在概論部分便提到它是實現「分組交換」的重要工具;本章前面也花了大篇幅討論路由路徑的選擇。
簡而言之,路由器的工做就是將某個輸入端口收到的分組,按照分組要去的目的地(即目的網絡),把該分組從路由器的某個合適的輸出端口轉發給下一跳路由器。 也就是咱們所說的「轉發分組」。
路由器的結構

整個的路由器結構可劃分爲兩大部分:

  • 路由選擇部分
  • 分組轉發部分

路由選擇部分

  • 也叫作控制部分,其核心構件是路由選擇處理機
  • 路由選擇處理機的任務是根據所選定的路由選擇協議(即上面提到的各類網關協議)構造出路由表,同時常常或按期地和相鄰路由器交換路由信息而不斷地更新和維護路由表。

分組轉發部分

由三部分組成:

  • 交換結構 (switching fabric):又稱爲交換組織,其做用是根據轉發表 (forwarding table) 對分組進行處理
  • 輸入端口
  • 輸出端口
「轉發」(forwarding)與「路由選擇」(routing)的區別
轉發」(forwarding) 就是路由器 根據轉發表將用戶的 IP 數據報 從合適的端口轉發出去
路由選擇」(routing) 則是 按照分佈式算法,根據從各相鄰路由器獲得的關於網絡拓撲的變化狀況, 動態地改變所選擇的路由

輸入端口

路輸入端口裏面裝有物理層、數據鏈路層和網絡層的處理模塊。
數據鏈路層剝去幀首部和尾部後,將分組送到網絡層的隊列中排隊等待處理。這會產生必定的時延。
輸入端口中的查找和轉發功能在路由器的交換功能中是最重要的。

輸出端口

輸出端口裏面裝有物理層、數據鏈路層和網絡層的處理模塊。
在網絡層的處理模塊中設有一個緩衝區(隊列)。當交換結構傳送過來的分組的速率超過輸出鏈路的發送速率時,來不及發送的分組就必須暫時存放在這個隊列中。
數據鏈路層處理模塊將分組加上鍊路層的首部和尾部,交給物理層後發送到外部線路。

交換結構

交換結構負責把分組從一個輸入端口轉移到某個合適的輸出端口。

有三種經常使用的交換方法

  • 經過存儲器
  • 經過總線
  • 經過縱橫交換結構(互聯網絡)

三種交換方法

下一節會介紹IPv6和虛擬專用網等相關知識,later~
相關文章
相關標籤/搜索