1.5 ARP 协议(网络层)

1、ARP

ARP:Address Resolution Protocol,地址解析协议。
当一个网络设备有数据要发送给另一台网络设备时,必须要知道对方的网络层地址,即 IP 地址。但是只有 IP 地址是不够的,因为 IP 数据报文必须封装成帧才能通过数据链路进行发送,而数据帧必须要包含目的 MAC 地址,因此发送端还必须获取到目的 MAC 地址。通过目的 IP 地址来获取目的 MAC 地址的过程是由 ARP 协议来实现的。
ARP 报文属于网络层报文。ARP 报文不能穿越路由器,不能被转发到其它广播域。

2、ARP 数据包格式

1.5 ARP 协议(网络层)

Hardware Type:硬件类型。一般为以太网。
Protocol Type:协议类型。一般为 IP 协议。
Hareware Length:硬件长度。MAC 地址长度,单位字节。
Protocol Length:协议长度。IP 地址长度,单位字节。
Operation Code:操作代码。指定 ARP 报文的类型,包括 ARP Request 和 ARP Reply。
Source Hareware Address:源 MAC 地址。
Source Protocol Address:源 IP 地址。
Destination Hardware Address:目的 MAC 地址。在 ARP Request 报文中,该字段值为 0。
Destination Protocol Address:目的 IP 地址。

3、ARP 工作过程

1.5 ARP 协议(网络层)

主机 A 发送一个数据包给主机 C 之前,首先要获取主机 C 的 MAC 地址。
通过 ARP 协议,网络设备可以建立目标 IP 地址与 MAC 地址之间的映射。网络设备通过网络层获取到目的 IP 地址之后,还要判断目的 MAC 地址是否已知。

4、ARP 缓存

1.5 ARP 协议(网络层)

网络设备一般都有一个 ARP 缓存(ARP Cache),ARP 缓存用来存放 IP 地址和 MAC 地址的关联信息。在发送数据前,设备会查找 ARP 缓存表。如果缓存表中存在对方设备的 MAC 地址,则直接采用该 MAC 地址来封装帧,然后将帧发送出去。如果缓存表中不存在相应信息,则通过发送 ARP Request 报文来获取它。学习到的 IP 地址和 MAC 地址的映射关系会被放入 ARP 缓存表中存放一段时间。在有效期内,设备可以直接从这个表中查找目的 MAC 地址来进行数据封装,而无需进行 ARP 查询。过了这段有效期,ARP 表项会被自动删除。ARP 缓存表有 20 分钟的时间限制。
如果目标设备位于其它位置,则源设备会在 ARP 缓存表中查找网关的 MAC 地址,然后将数据发送给网关,网关再把数据转发给目的设备。

5、ARP 请求(ARP Request)

1.5 ARP 协议(网络层)

主机 A 的 ARP 缓存表中不存在目的 MAC 地址,所以主机 A 会向网络发送 ARP Request 报文。ARP Request 报文封装在以太帧里,帧头中的源 MAC 地址为发送端主机 A 的 MAC 地址。此时,由于主机 A 不知道主机 C 的 MAC 地址,所以目的 MAC 地址为广播地址 FF-FF-FF-FF-FF-FF。ARP Request 报文中包含源 IP 地址、目的 IP 地址、源 MAC 地址、目的 MAC 地址,其中目的 MAC 地址的值为 0。ARP Request 报文会在整个网络上传播,该网络中所有主机包括网关都会接收到此 ARP Request 报文。网关将会阻止该报文发送到其它网络上。

6、ARP 响应(ARP Reply)

1.5 ARP 协议(网络层)

所有的主机接收到该 ARP Request 报文后,都会检查它的目的协议地址字段与自身的 IP 地址是否匹配。如果不匹配,则该主机将不会响应该 ARP Request 报文。如果匹配,则该主机会将 ARP 报文中的源 MAC 地址和源 IP 地址记录到自己的 ARP 缓存表中,然后通过 ARP Reply 报文进行响应。

1.5 ARP 协议(网络层)

主机 C 会向主机 A 回应 ARP Reply 报文。ARP Reply 报文中的源协议地址是主机 C 自己的 IP 地址,目标协议地址是主机 A 的 IP 地址,目的 MAC 地址是主机 A 的 MAC 地址,源 MAC 地址是自己的 MAC 地址,同时 Operation Code 被设置为 Reply。ARP Reply 报文通过单播传送。

7、ARP 缓存

1.5 ARP 协议(网络层)

主机 A 收到 ARP Reply 后,会检查 ARP 报文中目的 MAC 地址是否与自己的 MAC 匹配。如果匹配,ARP 报文中的源 MAC 地址和源 IP 地址会被记录到主机 A 的 ARP 缓存表中,后续即可直接将报文发送给主机 C。

8、ARP 代理

1.5 ARP 协议(网络层)

主机 A 需要与主机 B 通信时,目的 IP 地址与本机的 IP 地址在同一个网段,所以 A 将会以广播形式发送 ARP Request 报文,请求主机 B 的 MAC 地址。但是,广播报文无法被路由器转发,所以主机 B 无法收到主机 A 的 ARP 请求报文,当然也就无法应答。
在路由器上启动代理 ARP 功能,就可以解决这个问题。启用 ARP 代理之后,路由器收到这样的请求,会查找路由表,如果存在主机 B 的路由表项,路由器将会使用自己的 GigabyteEthernet 0/0/0 接口的 MAC 地址来回应该 ARP Request。主机 A 收到 ARP Reply 后,将以路由器的 GigabyteEthernet 0/0/0 接口的 MAC 地址作为目的 MAC 地址进行数据转发。

9、免费 ARP

1.5 ARP 协议(网络层)

免费 ARP 可以用来探测 IP 地址是否有冲突。
主机被分配了 IP 地址或者 IP 地址发生变更后,必须立刻检测其所分配的 IP 地址在网络上是否是唯一的,以避免地址冲突。主机通过发送 ARP Request 报文来进行地址冲突检测。
主机 A 将 ARP Request 广播报文中的目的 IP 地址字段设置为自己的 IP 地址,且该网络中所有主机包括网关都会接收到此报文。当目的 IP 地址已经被某一个主机或网关使用时,该主机或网关非主流会回应 ARP Reply 报文。通过这种方式,主机 A 就能探测到 IP 地址冲突了。

分享