前面已提到過一種初始化路由表的方法,即在配置文件中指定靜態路由。這種方法經常用來設置默認路由。另一種新的方法是利用ICMP路由器通告和請求報文。
一般認為,主機在引導以后要廣播或多播傳送一份路由器請求報文。一臺或更多臺路由器響應一份路由器通告報文。另外,路由器定期地廣播或多播傳送它們的路由器通告報文,允許每個正在監聽的主機相應地更新它們的路由表。
RFC1256[Deering1991]確定了這兩種ICMP報文的格式。ICMP路由器請求報文的格式如圖9-6所示。ICMP路由器通告報文的格式如圖9-7所示。
路由器操作
當路由器啟動時,它定期在所有廣播或多播傳送接口上發送通告報文。準確地說,這些通告報文不是定期發送的,而是隨機傳送的,以減小與子網上其他路由器發生沖突的概率。一般每兩次通告間隔450秒和600秒。一份給定的通告報文默認生命周期是30分鐘。
使用生命周期域的另一個時機是當路由器上的某個接口被關閉時。在這種情況下,路由器可以在該接口上發送最后一份通告報文,并把生命周期值設為0。除了定期發送主動提供的通告報文以外,路由器還要監聽來自主機的請求報文,并發送路由器通告報文以響應這些請求報文。如果子網上有多臺路由器,由系統管理員為每個路由器設置優先等級。例如,主默認路由器就要比備份路由器具有更高的優先級。
主機操作
主機在引導期間一般發送三份路由器請求報文,每三秒鐘發送一次。一旦接收到一個有效的通告報文,就停止發送請求報文。主機也監聽來自相鄰路由器的請求報文。這些通告報文可以改變主機的默認路由器。另外,如果沒有接收到來自當前默認路由器的通告報文,那么默認路由器會超時。只要有一般的默認路由器,該路由器就會每隔10分鐘發送通告報文,報文的生命周期是30分鐘。這說明主機的默認表項是不會超時的,即使錯過一份或兩份通告報文。
實現
路由器發現報文一般由用戶進程(守護程序)創建和處理。這樣,在圖9-1中就有另一個修改路由表的程序,盡管它只增加或刪除默認表項。守護程序必須把它配置成一臺路由器或主機來使用。
這兩種ICMP報文是新加的,不是所有的系統都支持它們。在我們的網絡中,只有Solaris2.x支持這兩種報文(in.rdisc守護程序)。盡管RFC建議盡可能用IP多播傳送,但是路由器發現還可以利用廣播報文來實現。
路由器在一份報文中可以通告多個地址。地址數指的是報文中所含的地址數。地址項大小指的是每個路由器地址32bit字的數目,始終為2。生存期指的是通告地址有效的時間(秒數)。