ICMP重定向報文的格式如圖9-4所示。

有四種不同類型的重定向報文,有不同的代碼值,如圖9-5所示。
ICMP重定向報文的接收者必須查看三個IP地址:
(1)導致重定向的IP地址(即ICMP重定向報文的數據位于IP數據報的首部);
(2)發送重定向報文的路由器的IP地址(包含重定向信息的IP數據報中的源地址;
(3)應該采用的路由器IP地址(在ICMP報文中的4 ~ 7字節)。
關于ICMP重定向報文有很多規則。首先,重定向報文只能由路由器生成,而不能由主機生成。另外,重定向報文是為主機而不是為路由器使用的。假定路由器和其他一些路由器共同參與某一種選路協議,則該協議就能消除重定向的需要(這意味著在圖9-1中的路由表應該消除或者能被選路守護程序修改,或者能被重定向報文修改,但不能同時被二者修改)。

在4.4BSD系統中,當主機作為路由器使用時,要進行下列檢查。在生成ICMP重定向報文之前這些條件都要滿足。
1) 出接口必須等于入接口。
2) 用于向外傳送數據報的路由不能被ICMP重定向報文創建或修改過,而且不能是路由器的默認路由。
3) 數據報不能用源站選路來轉發。
4) 內核必須配置成可以發送重定向報文。
內核變量取名為ipsendredirects或其他類似的名字(參見附錄E)。大多數當前的系統(例如BSD、SunOS 4.1.x、Solaris 2.x 及AIX 3.2.2)在默認條件下都設置該變量,使系統可以發送重定向報文。其他系統如SVR4則關閉了該項功能。
另外,一臺4.4BSD主機收到ICMP重定向報文后,在修改路由表之前要作一些檢查。這是為了防止路由器或主機的誤操作,以及惡意用戶的破壞,導致錯誤地修改系統路由表。
1) 新的路由器必須直接與網絡相連接。
2) 重定向報文必須來自當前到目的地所選擇的路由器。
3) 重定向報文不能讓主機本身作為路由器。
4) 被修改的路由必須是一個間接路由。
關于重定向最后要指出的是,路由器應該發送的只是對主機的重定向(代碼1或3,如圖9-5所示),而不是對網絡的重定向。子網的存在使得難于準確指明何時應發送對網絡的重定向而不是對主機的重定向。只當路由器發送了錯誤的類型時,一些主機才把收到的對網絡的重定向當作對主機的重定向來處理。
- 第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 小結