1.1 ARP协议概述

ARP全称:Address Resolution Protocol

  • 网络设备有数据发送给另一台网络设备时,必须要知道对方的网络层地址(即IP地址)。IP地址由网络层来提供,但是仅有IP地址是不够的,因为IP数据报文必须封装成帧才能通过数据链路进行发送。数据帧必须要包含目的MAC地址,因此发送端还必须获取到目的的MAC地址。通过目的IP地址而获取目的MAC地址的过程是由ARP协议来实现的

1.2 ARP的作用

image.png

  • 由于发送数据时,必须封装二层帧头,而二层帧头中必须要封装对端的MAC地址,所以必须使用ARP协议来获取对端的MAC地址,封装在二层帧头中。所以,在通信过程中常常开始会丢失一个数据包,这个丢失数据包的时候,就是ARP在请求目的MAC地址的时候。

触发ARP的条件:

  • 目标IP地址对应的MAC地址在ARP的缓存表中不存在
    • 在ARP缓存表中存在,不会触发ARP请求

1.3 ARP数据包格式

image.png
网络设备通过ARP报文来发现目的MAC地址,ARP报文中包含以下字段:
1. Hardware Type表示硬件地址类型,一般为以太网;
2. Protocol Type表示三层协议地址类型,一般为IP;
3. Hardware Length和Protocol Length为MAC地址和IP地址的长度,单位是字节;
4. Operation Code指定了ARP报文的类型,包括ARP request和ARP reply;

  • 1——ARP请求
  • 2——ARP响应
  • 3——RARP请求
  • 4——RARP响应
  • 8——反向ARP请求
  • 9——反向ARP响应
  1. Source Hardware Address指的是发送ARP报文的设备MAC地址;
    6. Source Protocol Address指的是发送ARP报文的设备IP地址;
    7. Destination Hardware Address指的是接收者MAC地址,在ARP request报文中,该字段值为0;
    8. Destination Protocol Address指的是指接收者的IP地址

常见的硬件类型码

编号 硬件类型 编号 硬件类型
1 以太网 3 X.25
4 Proteon ProNET Token Ring 6 IEEE 802网络
7 ARCnet 11 Apple LocalTalk
14 SMDS 15 帧中继
16 异步传输模式(ATM) 17 高速数据链路控制(HDLC)
18 光纤信道 19 异步传输模式(ATM)
20 串行链路

1.4 ARP工作过程

image.png

  • 通过ARP协议,网络设备可以建立目标IP地址和MAC地址之间的映射。网络设备通过网络层获取到目的IP地址之后,还要判断目的MAC地址是否已知。

如何判断:

  1. 在ARP缓存表中,有没有,有就已知(不管对错),没有就未知
  2. 在未知的情况下,发送ARP Request报文

1.5 ARP请求

4.jpg

  • 首先想要与其它设备通信,要先发送一个ARP包来获取对端设备MAC地址,所以在封装的ARP的目的IP中,写入目的的IP地址,在目的MAC地址中,写入全0,ARP类型为Request,然后报文的类型是广播发送,所以交换机收到广播帧后会进行泛洪转发,所以主机B和主机C都会收到该ARP包。

1.6 ARP响应

A3D3A1A60894495791F6B462A90668E5.jpg
由于主机C收到了这份泛洪的广播ARP包,拆掉二层帧头,发现三层IP地址找的是自己,所以会进行应答,而ARP包中包含了主机A的IP地址和MAC地址,所以会把这些信息保存在ARP表中。
8DCD82CA2D2944D88E9546A5AC2D04A2.jpg
而主机C有了主机A的地址信息后,还需要返还自己的MAC地址,所以要进行回应,在返还的报文中,ARP的报文类型为Reply,这个报文是以单播发送的,因为主机C已经知道了主机A的MAC地址,而ARP包中插入自己的MAC地址,进行应答。
当主机A收到了主机B的ARP回应后,也会将主机B的MAC地址保存在自己的ARP表项中。

1.7 ARP缓存

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

1.8 ARP代理

image.png

  • 位于不同网络的网络设备在不配置网关的情况下,能够通过ARP代理实现相互通信。

在上述例子的组网中,主机A需要与主机B通信时,目的IP地址与本机的IP地址位于不同网络,但是由于主机A未配置网关,所以它将会以广播形式发送ARP Request报文,请求主机B的MAC地址。但是,广播报文无法被路由器转发,所以主机B无法收到主机A的ARP请求报文,当然也就无法应答。

在路由器上启用代理ARP功能,就可以解决这个问题。启用代理ARP后,路由器收到这样的请求,会查找路由器,如果存在主机B的路由表项,路由器将会使用自己的G0/0/0接口的MAC地址来回应该ARP Request。主机A收到ARP Reply后,将以路由器的G0/0/0接口MAC地址作为目的MAC地址进行数据转发。

1.9 免费ARP

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

  • 当设备接入网络中时,会自动发送3个ARP包,来检测IP地址是否冲突。
  • 免费ARP的作用:
    1. 验证IP地址是否冲突:正常情况下不会收到ARP回应,如果收到,则表明本网络中存在与自身IP地址重复的地址。
    2. 用于通告一个新的MAC地址:发送方更换了网卡,MAC地址变化了,为了能够在ARP表项老化前通告所有主机,发送方可以发送一个免费ARP。
    3. 在VRRP备份组中用来通告主备发生变换:发生主备变换后,MASTER路由器会在备份组中发送一个免费ARP报文来通告发生了主备变换。

1.10 RARP(反向ARP)

  • 代替映射硬件地址到已知IPV4地址,反向ARP(RARP)可以实现IPv4地址到已知硬件地址的映射。某些设备,如无盘工作站在启动时可能不知道自己启动时的IPv4地址。嵌入这些设备固件的RARP程序可以允许它们发送ARP请求,其中硬件地址为设备的硬件编入地址。RARP服务器将会向这些设备回复相应的IPv4地址。
  • RARP在很大程度上正在被动态主机配置协议(DHCP)和自举协议(BOOTP)的拓展协议所替代,不同于RARP,这两种协议都可以提供IPv4地址以外的更多信息,而且还可以跨越本地数据链路。