当传送一个数据报的时候,会通过目的IP地址在IP路由表中进行选路,选择下一站的IP地址,但是在IP数据报中真正的目的IP地址不会变化,选出来的下一站IP地址只是会将数据报暂时的发送到这一站,而如何通过这个IP地址来发送数据呢。这就需要ARP地址解析协议了,通过ARP地址解析协议,就可以知道该IP地址对应的物理地址,这样就可以将IP数据报封装在一个以太网帧中,进而发送到下一站。

所以地址解析为这两种不同的地址形式提供映射:32bit的IP地址和数据链路层使用的任何类型的地址(物理地址)。ARP为IP地址到对应的硬件地址之间提供了动态映射。因为内核(以太网驱动程序)必须知道目的端的硬件地址才能发送数据。

ARP高速缓存

每个主机上都有一个ARP高速缓存,这个缓存存放了最近Internet地址到硬件地址之间的映射记录,每一项的生存时间一般是20分钟。执行arp -a查看所有的缓存记录:

1
2
? (192.168.1.1) at 6c:e8:73:ae:d0:1a on en0 ifscope [ethernet]
? (224.0.0.251) at 1:0:5e:0:0:fb on en0 ifscope permanent [ethernet]

ARP分组格式

  • 以太网目的地址:一般是全1,表示广播地址,电缆上的所有以太网接口都要接收广播的数据帧。
  • 以太网源地址:
  • 以太网帧类型:表示后面数据的类型,是ARP还是RARP
  • 硬件类型:表示硬件地址的类型,1表示以太网地址
  • 协议类型:表示要映射的协议地址类型,比如IP地址
  • 硬件地址长度:以太网地址是6
  • 协议地址长度:IP地址是4 字节
  • 操作字段:1 ARP, 2 ARP应答, 3 RARP, 4 RARP应答
  • 发送端以太网地址:
  • 发送端IP地址
  • 目的以太网地址:发送请求时该字段没有值,当发送ARP应答的时候,这里是ARP请求中的发送端以太网地址,而发送端就是本机的以太网地址
  • 目的IP地址

ARP代理

如果ARP请求是从一个网络的主机发送到另一个网络的主机,那么链接这两个网络的路由器就可以回答这个请求,这个过程称为委托ARP或者ARP代理,路由器的功能就相当于目的主机的代理,把分组从其他主机转发给它。

通过两个物理网络之间的路由器可以互相隐藏物理网络,在这种情况下,两个物理网络可以使用相同的网络号,只要把中间的路由器设置为一个ARP代理,以响应一个网络到另一个网络主机的ARP请求。

免费ARP

主机发送ARP查询自己的IP地址,发生在系统引导期间进行接口配置的时候。

两个作用:

  1. 可以通过它来确定另一个主机是否设置了相同的IP地址
  2. 如果发送免费ARP的主机正好改变了硬件地址,那么这样的ARP请求可以使得其他主机上的高速缓存得以更新。

RARP 逆地址解析协议

无盘系统的RAPR实现是从接口卡中读取硬件地址,然后发送一份RARP请求,请求某个RARP服务器来响应该无盘系统的IP地址。

RARP请求是以广播方式发送,RARP应答是以单播方式发送。在请求的时候表明发送端的硬件地址,以请求IP地址的响应。因为RARP使用的是链路层广播,所以阻止了大多数路由器转发RARP请求,只返回很少的信息,只是系统的IP地址。

RARP服务器

一个RARP服务器要为多个主机提供从硬件地址到IP地址的映射,映射一般存放在磁盘文件中,但是内核一般不读取和分析磁盘文件,因此RARP服务器的功能就由用户进程来实现,而不是作为内核的TCP/IP一部分。而且RARP请求是作为一个特殊类型的以太网数据帧来传送的,说明RARP服务器必须能够发送和接收这种类型的以太网数据帧。