【6】TCP/IP協議族詳解-IP路由表

聲明:本博客參考自《TCP/IP詳解卷一:協議》

1.概述

選路是IP最重要的功能之一,需要選路的數據報可以是本機產生也可是其它主機產生,後一種情況下主機需要配置成一個路由器,否則在網口接收到其它主機發送的數據,如果目的主機不是本機的話,會直接被丟棄。

由上圖可以看出路由守護程序,route命令和ICMP重定向報文都可以更新路由表,注意路由守護程序是內核的程序,在操作系統運行期間會一直執行。

2.選路的原理

IP搜索路由表分爲以下幾個步驟

①搜索匹配的主機地址。

②搜索匹配的網絡地址。

③搜索默認表項(默認表項一般在路由表中被指定爲一個網絡表項,其網絡號爲0)

IP層進行的選路實際上是一種選路機制,它搜索路由表並決定向哪個網絡發送分組。這區別於選路策略,它只是決定把哪些路由放入路由表的規則。IP執行選路機制,而路由守護程序則提供選路策略。

2.1 簡單路由表

所有網絡前面的網絡號140.252在上圖中均沒表示出來。

對於一個給定的路由,Flags的選項一共有下面5種:

①U-該路由可以使用

②G-該路由是到一個網關(路由器)。如果沒有設置該標誌,說明目的地址是直接相連的。

③H-該路由是到一個主機,也就是說,目的地址是一個完整的主機地址。如果沒有設置該標誌,說明路由是一個網絡,而目的地址是一個網絡地址:一個網絡號,或者網絡號與子網號的組合。

④D-該路由是由重定向報文創建的。

⑤M-該路由已被重定向報文修改。

標誌G區分了間接路由(設置G)和直接路由,發往直接路由的分組中不但具有指明目的端的IP地址,還具有其鏈路層地址。發往間接路由的分組,IP地址指明的是最終的目的地址,但是鏈路層地址指明的是網關(即下一站路由)。

H標誌表明目的地址是一個完整的主機地址。沒有設置H表明目的地址是一個網絡地址(主機號全爲0)。當爲某個目的IP地址搜素路由表時,主機地址必須是與目的地址完全匹配,而網絡地址項只需要匹配目的地址的網絡號和子網絡號就可以了。

svr4主機的路由表中的"Refcnt"列出正在使用路由的進程數目。"use"列顯示通過該路由發送的分組數。"interface"列是本地接口的名字。

第一行說明,如果目的地是140.252.13.65,那麼將把分組轉發到140.252.13.35。

第二行輸出的是環回地址,它的名字始終是lo0。沒有設置標誌G,說明該路由不是一個網關。設置標誌H,說明目的地址是一個主機地址。

第三行是默認路由。每個主機都有一個或多個默認路由。這一項表明,如果在表中沒有找到指定路由,就將分組發送到路由器140.252.13.33(sun主機)。

第四行的輸出是所在的以太網。H標誌沒有設置,說明目的地址(140.252.13.32)是一個網絡地址,其主機部分爲0,也揭示出該網絡的子網掩碼。由於沒有設置G標誌,網關列指出的IP地址是外出地址。

2.2 初始化路由表

每當初始化一個接口時,就爲接口自動創建一個直接路由。如果到達主機或網絡的路由不是直接相連的,那麼必須加入路由表。一個常用的方法是在系統引導的初始化文件中運行route命令,這是一種配置靜態路由的方式。還可以使用路由守護程序和路由器發現協議初始化路由表。

3. ICMP與IP路由

3.1 ICMP主機與網絡不可達差錯

當路由器收到一份IP數據報但又不能轉發時,就要發送一份ICMP"主機不可達"差錯報文。

在上圖中如果我們把左側的SLIP斷開在svr4上面ping主機gemini會出現以下情況:

採用抓包的結果:

3.2 ICMP重定向差錯

IP數據報應該被髮送到另一個路由器時,收到數據報的路由器要發送ICMP重定向差錯報文給IP數據報的發送端。下圖演示了ICMP重定向報文的工作機制。

①假定主機發送一份IP數據報給R1,其中R1是默認路由。

②R1收到數據發送給R2,發現R2的接收接口和現在它正在發送的接口相同。它就發送一份ICMP重定向報文給主機,告訴主機以後直接發送數據給R2。

③主機以後發送給R2的數據都是直接發送了。

ICMP重定向報文一般用來讓路由信息很少的主機來完善路由表。

ICMP重定向報文的格式如下:

重定向報文的類型如下表:

ICMP重定向報文的接收者必須查看三個IP地址:(1)導致重定向的IP地址(即ICMP重定向報文的數據位於IP數據報的首部)(2)發送重定向報文的路由器的IP地址(包含重定向信息的IP數據報中的源地址)(3)應該採用的路由器IP地址(在ICMP報文中的4~7字節)。

關於ICMP重定向報文的注意事項:(1)重定向報文只能由路由器產生。(2)重定向報文是爲主機而不是路由器使用的。

3.3 ICMP路由器發現報文

利用ICMP路由器通告和請求報文也是一種初始化路由表的方法。一般系統實現中,主機在引導以後要廣播或多播傳送一份路由器請求報文。一臺或多臺路由器響應一份路由器通告報文。另外路由器也會定期地廣播或多播傳送它們的路由器通告報文,允許每個正在監聽的主機相應地更新它們的路由表。下圖分別顯示了ICMP路由器請求報文和通告報文的格式:

ICMP路由器通告報文中可以通告多個地址。地址數指的是報文中所含的地址數。地址項大小指的是每個路由器地址 32 bit字的數目,始終爲 2。生存期指的是通告地址有效的時間(秒數)。接下來是一對或多對 I P地址和優先級。 I P地址必須是發送路由器的某個地址。優先級是一個有符號的32 bit整數,指出該I P地址作爲默認路由器地址的優先等級,這是與子網上的其他路由器相比較而言的。值越大說明優先級越高。優先級爲 0 x 8 0 0 0 0 0 0 0說明對應的地址不能作爲默認路由器地址使用,儘管它也包含中通告報文中。優先級的默認值一般爲 0。

路由器發現報文一般由用戶進程(守護程序)創建和處理。

4. 總結

IP路由是TCP/IP的基本操作。路由表的匹配一般是從主機路由、網絡路由、默認路由從大到小的優先級進行匹配的。路由可以被route指令,ICMP重定向報文,路由守護程序進行修改。

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章