可以在我們的網絡上觀察到ICMP重定向的操作過程(見封二的圖)。盡管在拓撲圖中只畫出了三臺主機(aix,solaris和gemini)和兩臺路由器(gateway和netb),但是整個網絡有超過150臺主機和10臺另外的路由器。大多數的主機都把gateway指定為默認路由器,因為它提供了Internet的入口。
子網140.252.1上的主機是如何訪問作者所在子網(圖中底下的四臺主機)的呢?首先,如果在SLIP鏈路的一端只有一臺主機,那么就要使用代理ARP(4.6節)。這意味著位于拓撲圖頂部的子網(140.252.1)中的主機不需要其他特殊條件就可以訪問主機sun(140.252.1.29)。
位于netb上的代理ARP軟件處理這些事情。
但是,當網絡位于SLIP鏈路的另一端時,就要涉及到選路了。一個辦法是讓所有的主機和路由器都知道路由器netb是網絡140.252.13的網關。這可以在每個主機的路由表中設置靜態路由,或者在每個主機上運行守護程序來實現。另一個更簡單的辦法(也是實際采用的方法)是利用ICMP重定向報文來實現。
在位于網絡頂部的主機solaris上運行ping程序到主機bsdi(140.252.13.35)。由于子網號不相同,代理ARP不能使用。假定沒有安裝靜態路由,發送的第一個分組將采用到路由器gateway的默認路由。下面是我們運行ping程序之前的路由表:

(224.0.0.0所在的表項是IP廣播地址。我們將在第12章討論)。如果為ping程序指定-v選項,可以看到主機接收到的任何ICMP報文。我們需要指定該選項以觀察發送的重定向報文。

在收到ping程序的第一個響應之前,主機先收到一份來自默認路由器gateway發來的ICMP重定向報文。如果這時查看路由表,就會發現已經插入了一個到主機bsdi的新路由(該表項如以下黑體字所示)。

這是我們第一次看到D標志,表示該路由是被ICMP重定向報文創建的。G標志說明這是一份到達gateway(netb)的間接路由,H標志則說明這是一個主機路由(正如我們期望的那樣),而不是一個網絡路由。
由于這是一個被主機重定向報文增加的主機路由,因此它只處理到達主機bsdi的報文。
如果我們接著訪問主機svr4,那么就要產生另一個ICMP重定向報文,創建另一個主機路由。
類似地,訪問主機slip也創建另一個主機路由。位于子網上的三臺主機(bsdi,svr4和slip)還可以由一個指向路由器sun的網絡路由來進行處理。但是ICMP重定向報文創建的是主機路由,而不是網絡路由,這是因為在本例中,產生ICMP重定向報文的路由器并不知道位于140.252.13網絡上的子網信息。
- 第1章 概述
- 1.1 引言
- 1.2 分層
- 1.3 TCP/IP的分層
- 1.4 互聯網的地址
- 1.5 域名系統
- 1.6 封裝
- 1.7 分用
- 1.8 客戶-服務器模型
- 1.9 端口號
- 1.10 標準化過程
- 1.11 RFC
- 1.12 標準的簡單服務
- 1.13 互聯網
- 1.14 實現
- 1.15 應用編程接口
- 1.16 測試網絡
- 1.17 小結
- 第2章 鏈路層
- 2.1 引言
- 2.2 以太網和IEEE 802封裝
- 2.3 尾部封裝
- 2.4 SLIP:串行線路IP
- 2.5 壓縮的SLIP
- 2.6 PPP:點對點協議
- 2.7 環回接口
- 2.8 最大傳輸單元MTU
- 2.9 路徑MTU
- 2.10 串行線路吞吐量計算
- 2.11 小結
- 第3章 IP:網際協議
- 3.1 引言
- 3.2 IP首部
- 3.3 IP路由選擇
- 3.4 子網尋址
- 3.5 子網掩碼
- 3.6 特殊情況的IP地址
- 3.7 一個子網的例子
- 3.8 ifconfig命令
- 3.9 netstat命令
- 3.10 IP的未來
- 3.11 小結
- 第4章 ARP:地址解析協議
- 4.1 引言
- 4.2 一個例子
- 4.3 ARP高速緩存
- 4.4 ARP的分組格式
- 4.5 ARP舉例
- 4.5.1 一般的例子
- 4.5.2 對不存在主機的ARP請求
- 4.5.3 ARP高速緩存超時設置
- 4.6 ARP代理
- 4.7 免費ARP
- 4.8 arp命令
- 4.9 小結
- 第5章 RARP:逆地址解析協議
- 5.1 引言
- 5.2 RARP的分組格式
- 5.3 RARP舉例
- 5.4 RARP服務器的設計
- 5.4.1 作為用戶進程的RARP服務器
- 5.4.2 每個網絡有多個RARP服務器
- 5.5 小結
- 第6章 ICMP:Internet控制報文協議
- 6.1 引言
- 6.2 ICMP報文的類型
- 6.3 ICMP地址掩碼請求與應答
- 6.4 ICMP時間戳請求與應答
- 6.4.1 舉例
- 6.4.2 另一種方法
- 6.5 ICMP端口不可達差錯
- 6.6 ICMP報文的4.4BSD處理
- 6.7 小結
- 第7章 Ping程序
- 7.1 引言
- 7.2 Ping程序
- 7.2.1 LAN輸出
- 7.2.2 WAN輸出
- 7.2.3 線路SLIP鏈接
- 7.2.4 撥號SLIP鏈路
- 7.3 IP記錄路由選項
- 7.3.1 通常的例子
- 7.3.2 異常的輸出
- 7.4 IP時間戳選項
- 7.5 小結
- 第8章 Traceroute程序
- 8.1 引言
- 8.2 Traceroute程序的操作
- 8.3 局域網輸出
- 8.4 廣域網輸出
- 8.5 IP源站選路選項
- 8.5.1 寬松的源站選路的traceroute程序示例
- 8.5.2 嚴格的源站選路的traceroute程序示例
- 8.5.3 寬松的源站選路traceroute程序的往返路由
- 8.6 小結
- 第9章 IP選路
- 9.1 引言
- 9.2 選路的原理
- 9.2.1 簡單路由表
- 9.2.2 初始化路由表
- 9.2.3 較復雜的路由表
- 9.2.4 沒有到達目的地的路由
- 9.3 ICMP主機與網絡不可達差錯
- 9.4 轉發或不轉發
- 9.5 ICMP重定向差錯
- 9.5.1 一個例子
- 9.5.2 更多的細節
- 9.6 ICMP路由器發現報文
- 9.6.1 路由器操作
- 9.6.2 主機操作
- 9.6.3 實現
- 9.7 小結