当一台主机把以太网数据帧发送到位于同一局域网上的另一台主机时,是根据48bit的以太网地址来确定目的接口的。ARP为IP地址到对应的硬件地址之间提供动态映射。
ARP发送一份称作ARP请求的以太网数据帧给以太网上的每个主,这个过程称为“广播”。ARP请求数据帧中包含目的主机的IP地址。如果你是这个IP地址的拥有者,请回答你的硬件地址。
目的主机的ARP层收到这份广播后,识别出自己的IP地址,于是发送一个ARP应答,这个应答包含IP死Hi和对应的硬件地址。收到ARP应答后,使ARP进行请求- 应答交换的IP数据报现在就可以传送了。
点对点链路不使用ARP。当设置这些链路时(一般在引导过程进行),必须告知内核链路每一端的IP地址。像以太网地址这样的硬件地址并不涉及。
4.3 ARP高速缓存
ARP高效运行的关键是由于每个主机上都有一个ARP高速缓存。这个高速缓存存放了最近Internet地址到硬件地址之间的映射记录。
arp 命令用来检查ARP高速缓存:
➜ arp -a
(192.168.100.1) at7c:8:d9:87:e5:85 on en0 ifscope [ethernet]
(192.168.100.255) at(incomplete) on en0 ifscope [ethernet]
4.4 ARP分组格式
目的地址为全1的特殊地址是广播地址。
4.6 ARP代理
如果ARP请求是从一个网络的主机发往另一个网络上的主机,那么连接这两个网络的路由器就可以回答该请求,这个过程称作委托 ARP或ARP代理(ProxyARP)。
ARP代理的其他用途:通过两个物理网络之间的路由器可以互相隐藏物理网络。
4.7 免费ARP
免费ARP:主机发送ARP查找自己的IP地址。这一般发生在系统引导期间。
免费ARP可以有两个方面的作用:
1) 一个主机可以通过它来确定另一个主机是否设置了相同的IP地址。
2) 如果发送ARP的主机正好改变了硬件地址,那么这个分组就可以使其他主机高速缓存中旧的硬件地址进行相应的更新。
无盘系统的RARP实现过程是从接口卡上读取唯一的硬件地址,然后发送一份RARP请求(一帧在网络上广播的数据),请求某个主机响应该无盘系统的IP地址(在RARP应答中)。
5.2 RARP的分组格式
RARP分组的格式与ARP分组基本一致。它们之间主要的差别是RARP请求或应答的帧类型代码为 0x8035,而且RARP请求的操作代码为 3,应答操作代码为4。
对应于ARP,RARP请求以广播方式传送,而RARP应答一般是单播(unicast)传送的 。
5.4 RARP服务器的设计
RARP服务器的功能由用户进程来提供,原因在于硬件地址和IP地址的映射保存在磁盘文件中,内核一般不读取和分析磁盘文件。
RARP请求是作为一个特殊类型的以太网数据帧发送的。
RARP服务器实现的一个复杂因素是 RARP请求是在硬件层上进行广播的,这意味着它们不经过路由器进行转发。