我们可以看到的另一个ARP特性称作免费ARP(gratuitousARP)。它是指主机发送ARP查找自己的ip地址。通常,它发生在系统引导期间进行接口配置的时候。在互联网中,假如我们引导主机bsdi并在主机sun上运行tcpdump命令,可以看到如图4-7所示的分组。
图4-7免费ARP的例子
(我们用-n选项运行t c p d u m p命令,打印出点分十进制的地址,而不是主机名)。对于A R P请求中的各字段来说,发送端的协议地址和目的端的协议地址是一致的:即主机b s d i的地址1 4 0 . 2 5 2 . 1 3 . 3 5。另外,以太网报头中的源地址0 : 0 : c 0 : 6 f : 2 d : 4 0,正如t c p d u m p命令显示的那样,等于发送端的硬件地址(见图4 - 4)。
免费A R P可以有两个方面的作用:
1) 一个主机可以通过它来确定另一个主机是否设置了相同的I P地址。主机b s d i并不希望对此请求有一个回答。但是,假如收到一个回答,那么就会在终端日志上产生一个错误消息“以太网地址:a : b : c : d : e : f发送来重复的I P地址”。这样就可以警告系统治理员,某个系统有不正确的设置。
2) 假如发送免费A R P的主机正好改变了硬件地址(很可能是主机关机了,并换了一块接口卡,然后重新启动),那么这个分组就可以使其他主机高速缓存中旧的硬件地址进行相应的更新。一个比较闻名的A R P协议事实[Plummer 1982]是,假如主机收到某个I P地址的A R P请求,而且它已经在接收者的高速缓存中,那么就要用A R P请求中的发送端硬件地址(如以太网地址)对高速缓存中相应的内容进行更新。主机接收到任何A R P请求都要完成这个操作(A R P 请求是在网上广播的,因此每次发送A R P请求时网络上的所有主机都要这样做)。
文献[ B h i d e、E l n o z a h y和M o rgan 1991] 中有一个应用例子,通过发送含有备份硬件地址和故障服务器的I P地址的免费A R P请求,使得备份文件服务器可以顺利地接替故障服务器进行工作。这使得所有目的地为故障服务器的报文都被送到备份服务器那里,客户程序不用关心原来的服务器是否出了故障。
不幸的是,作者却反对这个做法,因为这取决于所有不同类型的客户端都要有正确的ARP协议实现。他们显然碰到过客户端的ARP协议实现与规范不一致的情况。通过检查作者所在子网上的所有系统可以发现,SunOS 4.1.3和4 . 4 B S D在引导时都发送免费ARP,但是SVR4却没有这样做。