我们可以看到的另一个ARP特性称作免费ARP (gratuitous ARP)。它是指主机发送ARP查找自己的IP地址。通常,它发生在系统引导期间进行接口配置的时候。
在互联网中,如果我们引导主机bsdi并在主机sun上运行tcpdump命令,可以看到如图4-7所示的分组。
![](https://box.kancloud.cn/2016-04-12_570cbf89148b2.png)
(我们用-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 小结