我們可以看到的另一個ARP特性稱作免費ARP (gratuitous ARP)。它是指主機發送ARP查找自己的IP地址。通常,它發生在系統引導期間進行接口配置的時候。
在互聯網中,如果我們引導主機bsdi并在主機sun上運行tcpdump命令,可以看到如圖4-7所示的分組。

(我們用-n選項運行tcpdump命令,打印出點分十進制的地址,而不是主機名)。對于ARP請求中的各字段來說,發送端的協議地址和目的端的協議地址是一致的:即主機bsdi的地址140.252.13.35。另外,以太網報頭中的源地址0:0:c0:6f:2d:40,正如tcpdump命令顯示的那樣,等于發送端的硬件地址(見圖4-4)。
免費ARP可以有兩個方面的作用:
1) 一個主機可以通過它來確定另一個主機是否設置了相同的IP地址。主機bsdi并不希望對此請求有一個回答。但是,如果收到一個回答,那么就會在終端日志上產生一個錯誤消息“以太網地址: a:b:c:d:e:f發送來重復的IP地址”。這樣就可以警告系統管理員,某個系統有不正確的設置。
2) 如果發送免費ARP的主機正好改變了硬件地址(很可能是主機關機了,并換了一塊接口卡,然后重新啟動),那么這個分組就可以使其他主機高速緩存中舊的硬件地址進行相應的更新。一個比較著名的ARP協議事實[Plummer 1982]是,如果主機收到某個IP地址的ARP請求,而且它已經在接收者的高速緩存中,那么就要用ARP請求中的發送端硬件地址(如以太網地址)對高速緩存中相應的內容進行更新。主機接收到任何ARP請求都要完成這個操作(ARP請求是在網上廣播的,因此每次發送ARP請求時網絡上的所有主機都要這樣做)。
文獻[ Bhide、Elnozahy和Morgan 1991]中有一個應用例子,通過發送含有備份硬件地址和故障服務器的I P地址的免費ARP請求,使得備份文件服務器可以順利地接替故障服務器進行工作。這使得所有目的地為故障服務器的報文都被送到備份服務器那里,客戶程序不用關心原來的服務器是否出了故障。
不幸的是,作者卻反對這個做法,因為這取決于所有不同類型的客戶端都要有正確的ARP協議實現。他們顯然碰到過客戶端的ARP協議實現與規范不一致的情況。
通過檢查作者所在子網上的所有系統可以發現,SunOS 4.1.3和4.4BSD在引導時都發送免費ARP,但是SVR4卻沒有這樣做。
- 第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 小結