地址解析协议(英语:Address Resolution Protocol,缩写:ARP)是一个通过解析网络层地址(IP地址)来找寻数据链路层地址(MAC地址)的网络传输协议;ARP协议是以IP地址为线索,定位下一个应接收数据包的主机MAC地址,若目标主机不在同一链路上,则会查找下一跳路由器的MAC地址。ARP协议在IPv4中极其重要,只适用于IPv4,而IPv6使用邻居发现协议(英语:Neighbor Discovery Protocol简称:NDP或ND)。
ARP的工作机制
假设主机A
向同一网段上的主机B
发送数据。主机A
的IP地址为10.0.0.1
,主机B
的IP地址为10.0.0.2
,主机C
的IP地址为10.0.0.3
。三台主机均不知道对方的MAC地址。ARP地址解析过程如下:
主机A
首先检查自己的ARP缓存表,确定是否有主机B
的IP地址对应表项。如果有,则直接使用表项中的MAC地址进行封装,封装成帧后发送给主机B
。
若主机A
的ARP缓存表没有对应的表项,就广播发送一个ARP请求报文,源IP地址和源MAC地址是主机A
,目的IP地址是主机B
,目的MAC地址是广播MAC地址,即FFFF-FFFF-FFFF
。
当主机B
发现ARP请求报文中的目的IP地址是自己时,主机B
发送ARP响应报文给主机A
,源IP地址和源MAC地址是主机B
,目的IP地址和目的MAC地址是主机A
;同时,主机B
的ARP缓存表记录主机A
的IP地址和MAC地址的对应关系。
主机C
也收到了ARP请求报文,但目的IP地址不是自己,所以不会进行响应。但主机C
会将主机A
的映射关系添加到自己的ARP缓存表中,并丢弃ARP请求报文。
主机A
收到ARP响应报文后,添加主机B
的映射关系,同时用主机B
的MAC地址作为目的MAC地址封装成帧,并发送给主机B
。
ARP缓存表中的表项在老化时间(aging time)内是有效的,若老化时间内未被使用,表项就会被删除。
ARP表项分为动态ARP表项和静态ARP表项:
- 动态ARP表项由ARP动态获取,若老化时间内未被使用,表项就会被自动删除;
- 静态ARP表项是手动配置,不会老化,优先级高于动态ARP表项,可以将相应的动态ARP表项覆盖。
代理ARP
ARP广播报文会被路由器隔离,没有默认网关、网段不同的主机互相通信时,连接这两个网络的路由器可以响应这个ARP请求,该过程叫做代理ARP
(Proxy ARP)。
主机A
与另一网段的主机B
通信,主机A
直接发送ARP请求,解析主机B
的MAC地址。运行了代理ARP的路由器收到ARP请求后,代替主机A
在20.0.0.0
网段发出ARP请求,解析主机B
的地址。
主机B收到路由器发出的ARP请求后,返回ARP响应报文,告知自己的MAC地址是2222-2222-2222
。路由器收到ARP响应后,也向主机A
返回ARP响应报文,但目的MAC地址是与10.0.0.0
网段连接的端口MAC地址1010-1010-1010
。主机A
收到报文后,在ARP缓存表中添加IP地址20.0.0.1
和MAC地址1010-1010-1010
的映射表项。
优点
- 主机不用了解网络的物理详情,可以假定是一个平面网络,只需通过发送ARP请求就能达到目标;
- 屏蔽了分离的网络,主机不用修改IP地址和子网掩码就可以与现有的网络互通。
缺点
- 增加了网段中的ARP流量,不适合用于大规模网络;
- 主机需要更大的ARP缓存表才能处理IP地址和MAC地址的映射;
- 安全性降低。
免费ARP
免费ARP是一种特殊的ARP请求,当主机启动的时候,通过发送一个免费ARP请求来请求自己的IP地址的MAC地址。
普通ARP报文中的目的IP地址是其它主机的IP地址;而免费ARP报文中的目的IP地址是自己的IP地址。
作用
- 起到一个宣告作用。免费ARP将数据包广播发送,不需要回应,只为告知其它主机自己的IP地址和MAC地址。
- 检测IP地址冲突。当一台主机发送了免费ARP请求报文后,若收到ARP响应报文,则说明网络内已存在使用该IP地址的主机。
- 更新其它主机的ARP缓存表。若某主机因某些原因导致MAC地址变更,而其它主机的ARP缓存表仍保留着该主机原来的MAC地址,则可以通过免费ARP来更新其它主机的ARP缓存表。
ARP报文
ARP报文分为ARP请求报文和ARP响应报文,它们的报文格式相同,但各字段的取值不同。
ARP报文中各字段的含义如下:
参考资料: