0%

ARP协议简要记录

地址解析协议(英语: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请求后,代替主机A20.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报文中各字段的含义如下:


参考资料

36 张图详解 ARP :网络世界没有我,你哪也别想去

代理ARP - Cisco

一文详解 ARP 协议