ARP-地址解析协议(Address Resolution Protocol)

一、ARP请求
在一个小型局域网内,某源终端不知道目的终端的MAC地址,则发送ARP请求报文,在改网段内广播,第一个报文如下:目标MAC为广播MAC地址,其后为正常的目的MAC地址

源终端IP

目标终端IP

源终端MAC

FFFF.FFFF.FFFF

二、ARP应答
在接收到ARP请求报文后,会发送ARP应答报文,含有源终端所需要的MAC地址并且封装发送给源终端,报文如下:

目标终端IP

源终端IP

目标终端MAC

源终端MAC

三、正常通信
当源终端接收到ARP应答报文后,即可进行正常通信。

四、ARP表

  1. ARP高效运行的关键
    每一个主机都有一个ARP高速缓存,即ARP表;
    ARP表记录了最近的映射记录。
  2. ARP表的关键
  • UNIX实现中完整表项的生存时间为20分钟,不完整表项的生存时间为3分钟
    所谓的不完整表项就是在以太网上对一个不存在的主机发出ARP请求时,在本地保留的一个只有IP地址没有MAC地址的表项。
  • Windows实现中没有被使用的ARP表项老化时间2分钟,正在使用的ARP表项老化时间10分钟。
    在表项正在使用时,超时值就应该启动,但是大多数的从伯克利系统演变而来的系统没有这样做—它们每次都是在访问表项进重设超时值。
  • 路由器ARP老化时间可以设置,时间范围一般是1-1440分钟之间,缺省为20分钟
    注:没有UNIX中的完整表项和不完整表项的概念,也不存在Windows中区分ARP表项是否被上层协议所正在使用,只是固定一个老化时间,时间到了,表项就老化,正在使用的表项也一样被老化。

五、ARP帧的格式

以太网目的地址

以太网源地址

帧类型

硬件地址类型

协议类型

硬件地址长度

协议地址长度

OP

发送端以太网地址

发送到IP地址

目的以太网地址

目的IP地址

6

6

2

2

2

1

1

2

6

4

6

4

  • 前14字节以太网首部
  • 指定后四个字段的类型和长度
  • 最后28字节ARP请求/应答

具体解释:

  1. 硬件地址类型:本地网络的硬件类型,例如10Mb的Ethernet是以0001为代码;
  2. 协议类型:表示ARP提供解析的协议类型,常为IP协议,IP是以0080为代码;
  3. 硬件地址长度:表示该类型的硬件地址长度,例如Ethernet和Token Ring为06,而Frame Relay为02;
  4. 协议地址长度:通常表示IP地址的长度,IPv4为04;

六、ARP代理
当主机A想要访问主机D,但是主机A不知道网关地址,这时候该如何完成?
主机A将网关设置成自己的IP地址,在访问非本网段目的地址时,也会发生ARP请求(当PC不知道网关地址或者网关地址经常发生变化时,常常将网关设置为自己的IP地址)
如果ARP请求是从一个网络的主机发往另一个网络上的主机,那么连接这两个网络的路由器就可以回答该请求,这个过程成为ARP代理(ARP Proxy)
ARP代理—检查自己是否具有请求的目的地址的路由,如果有,则回应ARP请求(此时填充的是路由器的接口MAC地址)

七、无故ARP(免费ARP)

  1. 为什么要免费ARP?
  2. 什么是免费ARP?
  3. 当一个主机配置的IP地址与你一样,怎么办?
  4. 我如果改变了自己的IP地址,别人是怎么知道的呢?

其实很简单,当某设备更改自己的IP地址时,会向网络中广播一个ARP报文来告诉别人更改了IP地址,要求对ARP表进行更新,并且查看ARP表是否具有相同的IP地址。