ARP 为IP地址到对应的硬件地址之间提供动态映射

RARP是那些没有驱动器的系统使用,一般是无盘工作站或x终端,需要系统管理员进行手工设置

ARP 是一个广播请求

目的主机的ARP层收到ARP报文之后,识别出这事发送端再问它的ip地址,于是发送一个ARP应答。这个ARP应答包含IP地址以及对应的硬件地址

ARP背后的基本概念

网络接口有一个硬件地址(一个48bit的值,标识不同的以太网或令牌环网络接口),在硬件层次上进行的数据帧交换必须有正确的接口地址,但是TCP/IP 有自己的地址:32bit的ip地址,主机的ip地址并不能让内核发送一帧数据给主机,内核(以太网驱动程序)必须知道目的端的硬件地址才能发送数据,ARP的功能是在32bit的IP地址和采用不同网络技术的硬件地址之间提供动态映射

点对点链路不使用ARP

ARP 高效运行的关键是由于每个主机上都有一个ARP高速缓存。这个高速缓存存放了最近Internet地址到硬件地址之间的映射记录 高速缓存中每一项的生存事件一般为20分钟

我们可以通过arp -a 来查看我们本地的缓存

 zhaofan@zhaofandeMacBook-Pro  ~  arp -a
xiaoqiang (192.168.31.1) at f0:b4:29:1d:c9:a9 on en0 ifscope [ethernet]
? (192.168.31.226) at f4:83:cd:c6:ce:7a on en0 ifscope [ethernet]
? (224.0.0.251) at 1:0:5e:0:0:fb on en0 ifscope permanent [ethernet]
? (239.255.255.250) at 1:0:5e:7f:ff:fa on en0 ifscope permanent [ethernet]

ARP的分组格式

以太网的前两个字段:以太网的源地址和目的地址 目的地址是你全1的特殊地址,即广播地址。

两个字节长度的以太网帧类型,表示后面数据的类型,对于==ARP请求或者应答来说,该字段的值为0x806==

hardware 和prtocol 用来描述ARP分组中的各个字段,如一个ARP 请求分组询问协议地址(这里是IP地址)对应的硬件地址(这里是以太网地址)

硬件类型字段表示硬件地址的类型,==它的值为1即表示以太网==。协议类型字段表示要映射的协议地址类型,它的值为0x800即表示IP地址。它的值与包含IP数据报的以太网数据帧中的类型字段的值相同

硬件地址长度和协议地址长度分别指出硬件地址和协议地址的长度,以字节为单位。==对于以太网上IP地址和ARP请求或应答来说,它们的值分别为6和4.==

操作字段指出四种操作类型,它们是ARP请求值为1, ARP应答值为2,RARP请求值为3,RARP应答值为4 ==需要注意:ARP请求和ARP应答的帧类型字段的值是相同的,而通过这个字段我们就可以很好的区分是ARP请求还是ARP应答==

最后的四个字段:发送端的硬件地址,发送端的协议地址,目的端的硬件地址和目的端的协议地址

==对于一个ARP请求来说,除目的端的硬件地址外的所有其他字段都是填充值,当系统收到一份目的端为本机的ARP请求报文后,它就把硬件地址填进去,然后用两个目的的端地址分别替换两个发送端地址。并把操作字段设置为2,最后发送出去==

在ARP高速缓存中的表项一般都要设置超时时间,通常对于完整的表项设置超时值为20分钟,对于不完整表项设置超时值为3分钟

ARP代理也称为混合ARP 或者ARP出租

arp -a 显示高速缓存中的所有内容 arp -d 删除arp缓存中某项内容