選路是IP最重要的功能之一。圖1是IP層處理過程的簡單流程。需要進行選路的數據報
可以由本地主機產生,也可以由其他主機產生。在后一種情況下,主機必須配置成一個路由
器,否則通過網絡接口接收到的數據報,如果目的地址不是本機就要被丟棄。
圖1:IP層工作流程
圖1中的路由表經常被IP訪問(在一個繁忙的主機上,一秒鐘內可能要訪問幾百次),
但是它被路由守護程序等更新的頻度卻要低得多(可能大約30秒一次)。
選路的原理
IP搜索路由表的幾個步驟:
1) 搜索匹配的主機地址;
2) 搜索匹配的網絡地址;
3) 搜索默認表項(默認表項一般在路由表中被指定為一個網絡表項,其網絡號為0)。
匹配主機地址步驟始終發生在匹配網絡地址步驟之前。
IP層進行的選路實際上是一種選路機制,它搜索路由表并決定向哪個網絡接口發送分組。這區別于選路策略,它只是一組決定把哪些路由放入路由表的規則。IP執行選路機制,而路由守護程序則一般提供選路策略。
ICMP主機與網絡不可達差錯
當路由器收到一份IP數據報但又不能轉發時,就要發送一份ICMP“主機不可達”差錯報
文(見第六章)。
ICMP重定向差錯
當IP數據報應該被發送到另一個路由器時,收到數據報的路由器就要發送ICMP重定向差
錯報文給IP數據報的發送端。這在概念上是很簡單的,正如圖2所示的那樣。只有當主機可以選擇路由器發送分組的情況下,我們才可能看到ICMP重定向報文。
圖2:ICMP重定向例子
1) 我們假定主機發送一份IP數據報給R1。這種選路決策經常發生,因為R 1是該主機的默認路由。
2) R1收到數據報并且檢查它的路由表,發現R2是發送該數據報的下一站。當它把數據報
發送給R2時,R1檢測到它正在發送的接口與數據報到達接口是相同的(即主機和兩個路由器
所在的LAN)。這樣就給路由器發送重定向報文給原始發送端提供了線索。
3) R1發送一份ICMP重定向報文給主機,告訴它以后把數據報發送給R2而不是R1。
重定向一般用來讓具有很少選路信息的主機逐漸建立更完善的路由表。主機啟動時路由
表中可以只有一個默認表項(在圖2所示的例子中,為R1或R2)。一旦默認路由發生差錯,
默認路由器將通知它進行重定向,并允許主機對路由表作相應的改動。ICMP重定向允許
TCP/IP主機在進行選路時不需要具備智能特性,而把所有的智能特性放在路由器端。顯然,
在我們的例子中,R1和R2必須知道有關相連網絡的更多拓撲結構的信息,但是連在LAN上的
所有主機在啟動時只需一個默認路由,通過接收重定向報文來逐步學習。
ICMP重定向報文格式
ICMP重定向報文的格式如圖3所示。
圖3:ICMP重定向報文格式
有四種不同類型的重定向報文,有不同的代碼值,如圖4所示。
圖4:ICMP重定向報文的不同代碼值
ICMP重定向報文的接收者必須查看三個IP地址:
( 1 )導致重定向的IP地址(即ICMP重定向報文的數據,位于IP數據報的首部);
( 2 )發送重定向報文的路由器的IP地址(包含重定向信息的IP數據報中的源地址;
( 3 )應該采用的路由器IP地址(在ICMP報文中的4 ~ 7字節)。
關于ICMP重定向報文有很多規則。首先,重定向報文只能由路由器生成,而不能由主機
生成。另外,重定向報文是為主機而不是為路由器使用的。
ICMP路由器發現報文
初始化路由表的方法,可以在配置文件中指定靜態路由。這種方法經常用來設置默認路由。另一種新的方法是利用ICMP路由器通告和請求報文。
一般認為,主機在引導以后要廣播或多播傳送一份路由器請求報文。一臺或更多臺路由
器響應一份路由器通告報文。另外,路由器定期地廣播或多播傳送它們的路由器通告報文,允許每個正在監聽的主機相應地更新它們的路由表。