ARP(Address Resolution Protocol,地址解析协议)可以在以太网上,根据已知的IP地址查找主机的硬件地址。
我们以以太网的工作环境作为背景来探讨这一协议(串行链路由于是点到点链路,故而不需要ARP)。在以太网的工作环境中,当主机需要向一个IP地址发送数据时,它需要将目标的物理地址(也就是MAC地址,也有文献称其为硬件地址)写在数据帧的目的MAC地址字段位置上,而这一动作的前提是,网络层已经知道了这一地址并且将其与逻辑目的地址建立了一个映射关系。这就好比在手机上存了一个电话号码并备注上了一个联系人一样,当需要打电话时,只需要查找该联系人的姓名即可,手机会帮我们自动选择他的电话号码拨过去。
当我们并不知道一台主机的IP地址与物理地址的映射关系的时候,就需要用到ARP。
我们用一个简单的比喻来形容ARP的工作过程。当你只知道你跟张三是同班同学却不知道他的具体座位时,你站起来大喊了一声:“我是王二,谁是张三?”于是张三说:”我是张三。“这样,你就知道了张三的具体位置,同时张三也知道了你的位置和姓名。
如下图所示为一个ARP请求报文的示例。
当一台主机需要访问一个与自己在同一个网络的IP地址但不知道目的主机的物理地址时,它就会发送一个ARP请求报文。
由于我们并不知道目标物理地址是什么,该报文的目标物理地址(即MAC地址)在数据帧的头部用二层广播地址FFFF.FFFF.FFFF来填充。
一个二层目的地址为广播地址的数据帧是会被发送给广播域内所有的成员的,如果网络规划正确,那么这其中一定会包含真正的接收者。
当真正的接收者收到该数据帧之后,会转交给自身的ARP程序,经过比对,发现其中的目的IP地址正是其所拥有的,就会对发送者做出回应,在回应报文中会将自身的物理地址写在发送者MAC地址的位置。
这样,目的主机根据发送者ARP请求报文中的MAC地址和IP地址获得了发送者的物理地址和逻辑地址,并且将会以明确的MAC地址和IP地址给发送者发送回应报文。
一次美妙的陌生人之间的互相介绍就这样完成了。看起来是不是很简单呢?
在一般情况下,只能为主机分配一个默认网关。如果需要互通的主机处在相同的网段却不在同一物理网络,并且连接主机的网关设备具有不同的网关地址,在这种场景中,如果发生网络故障,我们该如何防止业务中断呢?在这种场景中,需要代理ARP,其工作过程如下图所示。
可以看出,实际上,代理ARP只是一种服务,它并不是一种协议。并且,服务提供者对用户进行了“欺骗”,只是将自身的MAC地址回应给了用户,以此来达到代替用户转发数据的目的。
在默认情况下,在华为的设备上,这一功能是关闭掉的。
ARP 协议包(ARP 报文)主要分为 ARP 请求包和 ARP 响应包,本节将介绍 ARP 协议包的格式。
ARP 协议是通过报文进行工作的,ARP 报文格式如图所示。
ARP 报文总长度为 28 字节,MAC 地址长度为 6 字节,IP 地址长度为 4 字节。
其中,每个字段的含义如下。
ARP 数据包分为请求包和响应包,对应报文中的某些字段值也有所不同。
免费 ARP(Gratuitous ARP)包是一种特殊的 ARP 请求,它并非期待得到 IP 对应的 MAC 地址,而是当主机启动的时候,发送一个 Gratuitous ARP 请求,即请求自己的 IP 地址的 MAC 地址。
本节将介绍免费 ARP 包的结构、作用,以及如何发送免费 ARP 包。
免费 ARP 包的结构
免费 ARP 报文与普通 ARP 请求报文的区别在于报文中的目标 IP 地址。普通 ARP 报文中的目标 IP 地址是其他主机的 IP 地址;而免费 ARP 的请求报文中,目标 IP 地址是自己的 IP 地址。
对于ARP,它是通过以太网二层广播以及已知单播回复的方式来获取物理地址(MAC地址)和逻辑地址(IP地址)之间的映射关系的。