這篇文章是 網絡層介紹上篇的後續部分。
爲了更有效地轉發 IP 數據報和提升交付成功的機會,在網際層使用了網際控制報文協議 ICMP (Internet Control Message Protocol)。
ICMP 容許主機或路由器報告差錯狀況和提供有關異常狀況的報告。算法
雖然ICMP 報文是裝在 IP 數據報中,做爲其中的數據部分,可是ICMP仍然是IP層的協議,而非高層協議。
ICMP 報文的種類有兩種,即ICMP差錯報告報文和ICMP詢問報文。
ICMP 報文的前 4 個字節是統一的格式,共有三個字段:即類型、代碼和檢驗和。接着的 4 個字節的內容與 ICMP 的類型有關。數據庫
詳細的ICMP報文的分類可見 維基百科
ICMP差錯報告報文可分爲如下幾種類型segmentfault
咱們先以「終點不可達」報文爲例對於ICMP差錯報告報文的組成有一個比較直觀的瞭解。
網絡
ICMP詢問報文可分爲如下幾種類型session
PING (Packet InterNet Groper)用來測試兩個主機之間的連通性。使用了 ICMP 回送請求與回送回答報文。
PING 是應用層直接使用網絡層 ICMP 的例子,它沒有經過運輸層的 TCP 或UDP。分佈式
咱們打開電腦的終端,即可以Ping本身想要訪問的主機IP地址(域名),測試一下連通性。
好比,咱們能夠ping一下segmentfault.com
工具
Traceroute用來跟蹤一個分組從源點到終點的路徑。
它利用 IP 數據報中的 TTL 字段和 ICMP 時間超過差錯報告報文實現對從源點到終點的路徑的跟蹤。佈局
咱們一樣能夠在終端測試:
測試
互聯網採用分層次的路由選擇協議。緣由是:spa
定義:在單一的技術管理下的一組路由器,而這些路由器使用一種 AS 內部的路由選擇協議和共同的度量以肯定分組在該 AS 內的路由,同時還使用一種 AS 之間的路由選擇協議用以肯定分組在 AS之間的路由。
儘管一個 AS 使用了多種內部路由選擇協議和度量,但重要的是一個 AS 對其餘 AS 表現出的是一個單一的和一致的路由選擇策略。
「路由器」和「網關」在這裏能夠視做同義詞。
內部網關協議 IGP (Interior Gateway Protocol)
外部網關協議 EGP (External Gateway Protocol)
路由信息協議 RIP (Routing Information Protocol) 是內部網關協議 IGP 中最早獲得普遍使用的協議。
RIP 是一種分佈式的、基於距離向量的路由選擇協議。
RIP 協議中的「距離」也稱爲「跳數」(hop count),由於每通過一個路由器,跳數就加 1。(這裏的「距離」實際上就是指「最短距離」)
RIP 容許一條路徑最多隻能包含 15 個路由器。「距離」的最大值爲 16 時即至關於不可達。
以目前普遍使用的RIP version2爲例,簡單瞭解一下RIP報文的組成:
距離向量算法
路由器收到相鄰路由器(其地址爲 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(Open Shortest Path First),如上所述,是爲克服 RIP 的缺點在 1989 年開發出來的。
發送的信息就是與本路由器相鄰的全部路由器的鏈路狀態,但這只是路由器所知道的部分信息
因爲各路由器之間頻繁地交換鏈路狀態信息,所以全部的路由器最終都能創建一個鏈路狀態數據庫。
這個數據庫實際上就是全網的拓撲結構圖,它在全網範圍內是一致的(這稱爲鏈路狀態數據庫的同步)。
同時,爲了使 OSPF 可以用於規模很大的網絡,OSPF 將一個自治系統再劃分爲若干個更小的範圍,叫作區域。
劃分區域後,利用洪泛法交換鏈路狀態信息的範圍侷限於每個區域而不是整個的自治系統。
在一個區域內部的路由器只知道本區域的完整網絡拓撲,而不知道其餘區域的網絡拓撲的狀況。
OSPF 使用層次結構的區域劃分。在上層的區域叫作主幹區域 (backbone area)。
主幹區域的標識符規定爲0.0.0.0,用來連通其餘在下層的區域。
OSPF還有一點與RIP不一樣,即OSPF 不用 UDP 而是直接用 IP 數據報傳送。
OSPF 構成的數據報很短,這樣作可減小路由信息的通訊量。
OSPF有五種分組類型
下圖簡單說明了OSPF的五種分組類型以及它們所能完成的操做
BGP 是不一樣自治系統的路由器之間交換路由信息的協議。 默認爲當前較新的版本BGP-4。
互聯網的規模太大,使得自治系統之間路由選擇很是困難。對於自治系統之間的路由選擇,要尋找最佳路由是很不現實的。
所以,邊界網關協議BGP只能是力求尋找一條可以到達目的網絡且比較好的路由(不能兜圈子),而並不是要尋找一條最佳路由。
每個自治系統的管理員要選擇至少一個路由器做爲該自治系統的「 BGP 發言人」 (BGP speaker)。經過它與其餘自治系統(中的 BGP 發言人)交換路由信息。
一個 BGP 發言人與其餘自治系統中的 BGP 發言人要交換路由信息,就要先創建 TCP 鏈接,而後在此鏈接上交換 BGP 報文以創建 BGP 會話(session),利用 BGP 會話交換路由信息。
使用 TCP 鏈接交換路由信息的兩個 BGP 發言人,彼此成爲對方的鄰站(neighbor)或對等站(peer)。
BGP所交換的網絡可達性的信息就是要到達某個網絡所要通過的一系列 AS。
當BGP發言人互相交換了網絡可達性的信息後,各BGP發言人就根據所採用的策略從收到的路由信息中找出到達各 AS 的較好路由。
在衆多路由選擇協議中,BGP是爲數很少的 使用TCP做爲傳輸協議的路由選擇協議。
BGP有四種分組類型
路由器你們確定已經不陌生了,在概論部分便提到它是實現「分組交換」的重要工具;本章前面也花了大篇幅討論路由路徑的選擇。
簡而言之,路由器的工做就是將某個輸入端口收到的分組,按照分組要去的目的地(即目的網絡),把該分組從路由器的某個合適的輸出端口轉發給下一跳路由器。 也就是咱們所說的「轉發分組」。
整個的路由器結構可劃分爲兩大部分:
由三部分組成:
「轉發」(forwarding)與「路由選擇」(routing)的區別
「 轉發」(forwarding) 就是路由器 根據轉發表將用戶的 IP 數據報 從合適的端口轉發出去。
「 路由選擇」(routing) 則是 按照分佈式算法,根據從各相鄰路由器獲得的關於網絡拓撲的變化狀況, 動態地改變所選擇的路由。
路輸入端口裏面裝有物理層、數據鏈路層和網絡層的處理模塊。
數據鏈路層剝去幀首部和尾部後,將分組送到網絡層的隊列中排隊等待處理。這會產生必定的時延。
輸入端口中的查找和轉發功能在路由器的交換功能中是最重要的。
輸出端口裏面裝有物理層、數據鏈路層和網絡層的處理模塊。
在網絡層的處理模塊中設有一個緩衝區(隊列)。當交換結構傳送過來的分組的速率超過輸出鏈路的發送速率時,來不及發送的分組就必須暫時存放在這個隊列中。
數據鏈路層處理模塊將分組加上鍊路層的首部和尾部,交給物理層後發送到外部線路。
交換結構負責把分組從一個輸入端口轉移到某個合適的輸出端口。
有三種經常使用的交換方法
下一節會介紹IPv6和虛擬專用網等相關知識,later~