计算机网络(六)——ARP协议

ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。

ARP协议是地址解析的通用协议,提供了网络层地址(IP地址)到物理地址(mac地址)之间的动态映射。其作用是在数据的传输过程中将已知IP地址转换为MAC地址

为什么需要通过IP地址获取MAC地址?

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

  • IPv4中,我们使用ARP地址解析协议来完成IP地址与物理地址的转化;
  • IPv6中,使用邻居发现协议(NDP协议)进行IP地址与物理地址的转化,它包含在ICMPv6中。 

ARP协议工作原理

发送之前先检索ARP缓存表中是否有对应目的主机,没有的话主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。

实际工作过程

主机A的IP地址为192.168.1.1,MAC地址为0A-11-22-33-44-01;
主机B的IP地址为192.168.1.2,MAC地址为0A-11-22-33-44-02;
主机A要与主机B通信,地址解析协议(ARP)可以将主机B的IP地址(192.168.1.2)解析成主机B的MAC地址,以下为工作流程:
1:根据主机A上的路由表内容,IP确定用于访问主机B的转发IP地址是192.168.1.2。然后A主机在自己的本地ARP缓存中检查主机B的匹配MAC地址。
2:如果主机A在ARP缓存中没有找到映射,它将询问192.168.1.2的硬件地址,从而将ARP请求帧广播到本地网络上的所有主机。源主机A的IP地址和MAC地址都包括在ARP请求中。本地网络上的每台主机都接收到ARP请求并且检查是否与自己的IP地址匹配。如果主机发现请求的IP地址与自己的IP地址不匹配,它将丢弃ARP请求。
3:如果主机发现请求的IP地址与自己的IP地址不匹配,它将丢弃ARP请求。而主机B确定ARP请求中的IP地址与自己的IP地址匹配,则将主机A的IP地址和MAC地址映射添加到本地ARP缓存中
4:主机B将包含其MAC地址的ARP回复消息直接发送回主机A
5:当主机A收到从主机B发来的ARP回复消息时,会用主机B的IP和MAC地址映射更新ARP缓存。本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。主机B的MAC地址一旦确定,主机A就能向主机B发送IP通信了。

ARP协议报文

Hardware Type—— 表示硬件地址类型,一般为以太网
Protocol Type  —— 表示三层协议地址类型,一般为IP
Hardware LengthProtocol Length —— 表示MAC地址和IP地址的长度,单位是字节
OPeration Code —— 制定了ARP报文的类型,包括ARP request 和ARP reply
Source Hardware Address —— 指的是发送ARP报文的设备MAC地址
Source Protocol Address —— 指的是发送ARP报文的设备IP地址
Destination Hardware Address —— 指的是接收者MAC地址,在ARPrequest报文中,该字段值为0
Destination Protocol Address —— 指的是接受者的IP地址

ARP 缓存

网络设备一般都有一个ARP缓存(ARP Cache),ARP缓存用来存放IP地址和MAC地址的关联信息

在发送数据前,设备会先查找ARP缓存表。

  • 如果缓存表中存在对方设备的MAC地址,则直接采用该MAC地址来封装帧,然后将帧发送出去。
  • 如果缓存表中不存在相应信息,则通过发送ARP Request报文来获得它。

学习到的IP地址和MAC地址的映射关系会被放入ARP缓存表中存放一段时间。在有效期内,设备可以直接从这个表中查找目的MAC地址来进行数据封装,而无需进行ARP查询。过了这段有效期,ARP表项会被自动删除。

如果目标设备位于其他网络,则源设备会在ARP缓存表中查找网关的MAC地址,然后将数据发送给网关,网关再把数据转发给目的设备。

ARP 请求

当主机需要找出这个网络中的另一个主机的物理地址时,它就可以发送一个ARP请求报文,这个报文包好了发送方的MAC地址和IP地址以及接收方的IP地址。

如图,主机A的ARP缓存表中不存在主机C的MAC地址,所以主机A会发送ARP Request来获取目的MAC地址。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报文。网关将会阻止该报文发送到其他网络上(ARP报文不能跨网段传播)。

ARP 响应

局域网中的每一台主机都会接受并处理这个ARP请求报文,然后进行验证,查看接收方的IP地址是不是自己的地址,只有验证成功的主机才会返回一个ARP响应报文。

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

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

ARP代理

当两台通信主机位于不同网络时,但由于主机A未设置网关,所以他将会以广播的形式发送ARP Request报文,请求B的MAC地址,但是广播报文无法被路由器转发,所以主机B无法收到主机A的请求报文。

在上述例子的组网中,主机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地址进行数据转发。

免费ARP

主机被分配了IP地址或者IP地址发生变更后,必须立刻检测其所分配的IP地址在网络上是否是唯一的,以避免地址冲突。主机通过发送ARP Request报文来进行地址冲突检测,这种操作被称为免费ARP。

主机A将ARP Request广播报文中的目的IP地址字段设置为自己的IP地址,且该网络中所有主机包括网关都会接收到此报文。当目的IP地址已经被某一个主机或网关使用时,该主机或网关就会回应ARP Reply报文。通过这种方式,主机A就能探测到IP地址冲突了。

网络设备在什么情况下会发送ARP Request?

源设备在发送数据给目的设备前,会首先查看自身的ARP缓存,查找ARP缓存中是否存在目的设备的IP地址和MAC地址的映射。如果存在则直接使用,如果不存在则会发送ARP Request。

网络设备什么时候会产生免费ARP?

当网络上的一个设备被分配了IP地址或者IP地址发生变更后,可以通过免费ARP来检查IP地址是否冲突。

posted @ 2021-09-04 16:18  两口猪头肉OVO  阅读(1747)  评论(0编辑  收藏  举报