速讀原著-TCP/IP(ICMP路由器發現報文)

第9章 IP選路

9.6 ICMP路由器發現報文

在本章前面已提到過一種初始化路由表的方法,即在配置文件中指定靜態路由。這種方法經常用來設置默認路由。另一種新的方法是利用 I C M P路由器通告和請求報文。

一般認為,主機在引導以後要廣播或多播傳送一份路由器請求報文。一台或更多台路由器響應一份路由器通告報文。另外,路由器定期地廣播或多播傳送它們的路由器通告報文,允許每個正在監聽的主機相應地更新它們的路由表。

RFC 1256 [Deering 1991]確定了這兩種I C M P報文的格式。I C M P路由器請求報文的格式如圖9 – 6所示。I C M P路由器通告報文的格式如圖 9 – 7所示。

路由器在一份報文中可以通告多個地址。地址數指的是報文中所含的地址數。地址項大小指的是每個路由器地址 32 bit字的數目,始終為 2。生存期指的是通告地址有效的時間(秒數)。

接下來是一對或多對 I P地址和優先順序。 I P地址必須是發送路由器的某個地址。優先順序是一個有符號的32 bit整數,指出該I P地址作為默認路由器地址的優先等級,這是與子網上的其他路由器相比較而言的。值越大說明優先順序越高。優先順序為 0 x 8 0 0 0 0 0 0 0說明對應的地址不能作為默認路由器地址使用,儘管它也包含中通告報文中。優先順序的默認值一般為 0。

9.6.1 路由器操作

當路由器啟動時,它定期在所有廣播或多播傳送介面上發送通告報文。準確地說,這些通告報文不是定期發送的,而是隨機傳送的,以減小與子網上其他路由器發生衝突的概率。

一般每兩次通告間隔4 5 0秒和6 0 0秒。一份給定的通告報文默認生命周期是 3 0分鐘。使用生命周期域的另一個時機是當路由器上的某個介面被關閉時。在這種情況下,路由器可以在該介面上發送最後一份通告報文,並把生命周期值設為 0。

除了定期發送主動提供的通告報文以外,路由器還要監聽來自主機的請求報文,並發送路由器通告報文以響應這些請求報文。 如果子網上有多台路由器,由系統管理員為每個路由器設置優先等級。例如,主默認路由器就要比備份路由器具有更高的優先順序。

9.6.2 主機操作

主機在引導期間一般發送三份路由器請求報文,每三秒鐘發送一次。一旦接收到一個有效的通告報文,就停止發送請求報文。 主機也監聽來自相鄰路由器的請求報文。這些通告報文可以改變主機的默認路由器。另外,如果沒有接收到來自當前默認路由器的通告報文,那麼默認路由器會超時。

只要有一般的默認路由器,該路由器就會每隔 1 0分鐘發送通告報文,報文的生命周期是3 0分鐘。這說明主機的默認表項是不會超時的,即使錯過一份或兩份通告報文。

9.6.3 實現

路由器發現報文一般由用戶進程(守護程式)創建和處理。這樣,在圖 9 – 1中就有另一個修改路由表的程式,儘管它只增加或刪除默認表項。守護程式必須把它配置成一台路由器或主機來使用。

這兩種I C M P報文是新加的,不是所有的系統都支援它們。在我們的網路中,只有Solaris 2.x支援這兩種報文(i n . r d i s c守護程式)。儘管RFC建議儘可能用IP多播傳送,但是路由器發現還可以利用廣播報文來實現。