当一台主机把以太网数据帧发送到位于同一局域网上的另一台主机时,是根据48bit的以太网地址来确定目的接口的。设备驱动程序从不检查IP数据报中的目的IP地址。
地址解析为这两种不同的地址形式提供映射32bit的IP地址和数据链路层使用的任何类型的地址
ARP的功能是在32bit的IP地址和采用不同网络技术的硬件地址之间提供动态映射。
ARP协议干的事就是通过IP找MAC
ARP高效运行的关键是由于每个主机上都有一个ARP高速缓存。这个高速缓存存放了最近Internet地址到硬件地址之间的映射记录。高速缓存中每一项的生存时间一般为20分钟,起始时间从被创建时开始算起。而对于不完整的表项设置超时值为3分钟。(即以太网上对一个不存在的主机发出ARP请求),当这些表项再次使用时,这些实现一般都把超时时间重新设为20分钟。
ARP的分组格式
- 两个字节长的以太网帧类型表示后面数据的类型。对于ARP请求或应答来说,该字段的值为0x0806
- 硬件类型字段表示硬件地址的类型。它的值为1即表示以太网地址,协议类型字段表示要映射的协议地址类型。它的值为0x0800即表示IP地址。它的值与包含IP数据报的以太网数据帧中的类型字段的值相同。
- 两个1字节的字段,硬件地址长度和协议地址长度分别指出硬件地址和协议地址的长度,以字节为单位。对于以太网上IP地址的ARP请求或应答来说,它们的值分别为6和4
- 操作字段指出四种操作类型,它们是ARP请求(值为1 )、ARP应答(值为2)、RARP请求(值为3)和RARP应答(值为4)。这个字段是必需的,因为ARP请求和应答帧类型字段值是相同的。
- 接下来的四个字段是发送端的硬件地址(在本例中是以太网地址)、发送端的协议地址(IP地址)、目的端的硬件地址和目的端的协议地址。注意:这里有重复信息,在以太网的数据帧报头中和ARP请求数据帧中都有发送端的硬件地址。
对于一个ARP请求来说,除目的端硬件地址外的所有其他字段都有填充值。当系统收到一份目的端为本机的ARP请求报文后,它就把硬件地址填进去,然后用两个目的端地址分别替换两个发送端地址,并把操作字段置为2 ,最后把它发送回去。
ARP的请求是广播的,ARP的应答是直接送到请求端主机的,是单播的。
如果查询的主机已关机或不存在会发生什么事情?为此我们指定一个并不存在的Internet地址——根据网络号和子网号所对应的网络确实存在,但是不存在所指定的主机号。
tcpdump命令输出的超时限制为29.5秒
ARP代理
如果ARP请求是从一个网络的主机发往另一个网络上的主机,那么连接这两个网络的路由器就可以回答该请求,这个过程称为委托ARP或ARP代理(Proxy ARP)。这样可以欺骗发起ARP请求的发送端,使它误以为路由器就是目的主机,而事实上目的主机是在路由器的“另一边”。路由器的功能相当于目的主机的代理,把分组从其他主机转发给它。
ARP代理也称作混合ARP(promiscuousARP)或ARP出租(ARP hack)这些名字来自于ARP代理的其他用途:通过两个物理网络之间的路由器可以互相隐藏物理网络。在这种情况下,两个物理网络可以使用相同的网络号,只要把中间的路由器设置成一个ARP代理,以响应一个网络到另一个网络主机的ARP请求。
的主机号。
免费ARP
ARP的另一个特性称作免费ARP(gratuitous ARP),它是指主机发送ARP查找自己的IP地址。通常,它发生在系统引导期间进行接口配置的时候。