欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > ARP协议

ARP协议

2025/4/5 15:13:59 来源:https://blog.csdn.net/weixin_74006549/article/details/146980818  浏览:    关键词:ARP协议

ARP协议

ARP协议的作用

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

在这里插入图片描述

ARP协议的位置

ARP协议工作在网络层和数据链路层之间(ARP协议和RARP协议属于MAC帧的上层协议),通常被认为是一个跨两层的协议

在这里插入图片描述

与之类似的,网络层当中的ICMP协议和IGMP协议,这两个协议虽然与IP协议都属于网络层,但这两个协议属于IP的上层协议

ARP协议的数据格式

在这里插入图片描述

  • 硬件类型指链路层的网络类型,1为以太网
  • 协议类型指要转换的地址类型,0x0800为IP地址
  • 硬件地址长度对于以太网地址为6字节,因为MAC地址是48位的
  • 协议地址长度对于IP地址为4字节,因为IP地址是32位的
  • op字段为1表示ARP请求,op字段为2表示ARP应答

从ARP的数据格式也可以看出,ARP是MAC帧协议的上层协议,ARP数据格式中的前3个字段和最后一个字段对应的就是以太网首部,但由于ARP数据包的长度不足46字节,因此ARP数据包在封装成为MAC帧时还需要补上18字节的填充字段

ARP协议的工作流程

在这里插入图片描述

例如,路由器D要将数据转发给同一局域网当中的主机B,前提是路由器D必须知道主机B的MAC地址,而现在路由器D只知道主机B的IP地址,因此路由器D现在需要向主机B发起ARP请求,然后等待主机B发送ARP应答得知主机B的MAC地址

ARP请求的过程

路由器D首先需要先构建ARP请求

  • 首先,因为路由器D构建的是ARP请求,因此ARP请求当中的op字段设置为1

  • ARP请求当中的硬件类型字段设置为1,因为当前使用的是以太网通信

  • ARP请求当中的协议类型设置为0800,因为路由器是要根据主机B的IP地址来获取主机B的MAC地址

  • ARP请求当中的硬件地址长度和协议地址长度分别设置为6和4,因为MAC地址的长度是48位,IP地址的长度是32位

  • ARP请求当中的发送端以太网地址和发送端IP地址,对应就是路由器D的MAC地址和IP地址

  • ARP请求当中的目的以太网地址和目的IP地址,对应就是主机B的MAC地址和IP地址,但由于路由器D不知道主机B的MAC地址,因此将目的以太网地址的二进制序列设置为全1,表示在局域网中进行广播

此时ARP请求构建完成,如下:
在这里插入图片描述

ARP请求构建完成后,为了能将ARP请求发送到以太网当中,还需要将ARP数据包向下交付给MAC帧协议,封装成MAC帧

  • 封装MAC帧报头时,以太网目的地址和以太网源地址,对应分别是主机B和路由器D的MAC地址,但由于路由器D不知道主机B的MAC地址,因此MAC帧报头当中的以太网目的地址的二进制序列也只能设置为全1,表示在局域网中进行广播
  • 因为这里封装的是一个ARP请求数据包,因此MAC帧当中的帧类型字段设置为0806
  • 由于ARP请求数据包的长度只有28字节,不足46字节,因此还需要在MAC帧的有效载荷当中补上18字节的填充字段,最后再对MAC帧进行CRC校验即可

此时ARP请求就被封装成MAC帧了,如下:
在这里插入图片描述

MAC帧封装完毕后,路由器D就可以将封装好的MAC帧以广播的方式发送到局域网当中了。

  • 因为这个MAC帧是以广播的方式发出的,因此局域网当中的每台主机收到这个MAC帧后,都会对该MAC帧进行解包。当这些主机识别到MAC帧当中的帧类型字段为0806后,便知道这是一个ARP的请求或应答的数据包,于是会将MAC帧的有效载荷向上交付给ARP层

  • 当ARP层收到这个数据包后,发现ARP数据包当中的op字段为1,于是判定这是一个ARP请求,然后再提取出ARP数据包当中的目的IP地址字段,虽然局域网当中的所有主机都会将该数据包交给自己的ARP层,但最终只有主机B发现ARP数据包当中的目的IP地址与自己相同,因此只有主机B会对该ARP请求进行应答,而局域网当中的其他主机在识别到ARP数据包当中的目的IP地址与自己不匹配后,就会直接将这个ARP请求报文丢弃

需要注意的是,局域网当中其他不相干的主机在收到这个ARP请求报文后,不是在MAC帧层丢弃的,而是在ARP层发现该ARP数据包的目的IP与自己的IP不匹配后丢弃的。

ARP应答的过程

主机B在应答时首先需要构建ARP应答

  • 首先,因为主机B构建的是ARP应答,因此ARP应答当中的op字段设置为2

  • ARP应答当中的硬件类型、协议类型、硬件地址长度、协议地址长度的值与ARP请求当中设置的值相同

  • ARP应答当中的发送端以太网地址和发送端IP地址,对应就是主机B的MAC地址和IP地址

  • ARP应答当中的目的以太网地址和目的IP地址,对应就是路由器D的MAC地址和IP地址,因为路由器D发来的ARP请求当中告知了主机B它的MAC地址和IP地址,因此主机B是知道的

此时ARP应答构建完成,如下:
在这里插入图片描述

ARP应答构建完成后,为了能将ARP应答发送到以太网当中,也需要将ARP数据包向下交付给MAC帧协议,封装成MAC帧

  • 封装MAC帧报头时,以太网目的地址和以太网源地址,对应分别是路由器D和主机B的MAC地址

  • 因为这里封装的是一个ARP应答数据包,因此MAC帧当中的帧类型字段设置为0806

  • 由于ARP应答数据包的长度也只有28字节,不足46字节,因此也需要在MAC帧的有效载荷当中补上18字节的填充字段,最后再对MAC帧进行CRC校验

此时ARP应答就被封装成MAC帧了,如下:
在这里插入图片描述

MAC帧封装完毕后,主机B就可以将封装好的MAC帧发送到局域网当中了。

  • 此时局域网当中的每台主机在底层都能收到这个MAC帧,但局域网当中的不相干的主机,在发现该MAC帧对应的以太网目的地址与自己不同后,就会将该MAC帧丢弃,而不会交付给上层ARP层,最终只有路由器D会将解包后MAC帧的有效载荷向上交付给自己的ARP层

  • 当路由器D的ARP层收到这个数据包后,发现ARP数据包当中的op字段为2,于是判定这是一个ARP应答,然后就会提取出ARP数据包当中的发送端以太网的地址和发送端IP地址,此时路由器D就拿到了主机B的MAC地址

需要注意的是,局域网当中其他不相干的主机在收到这个ARP应答报文后,直接在MAC帧层就丢弃了,并没有将其交付给自己的ARP层

ARP缓存

实际不是每次要获取对方的MAC地址时都需要发起ARP请求,每次发起ARP请求后都会建立对应主机IP地址和MAC地址的映射关系,每台主机都维护了一个ARP缓存表,我们可以用arp -a命令进行查看

在这里插入图片描述
需要注意的是,缓存表中的表项有过期时间,这个时间一般为20分钟,如果20分钟内没有再次使用某个表项,那么该表项就会失效,下次使用时就需要重新发起ARP请求来获得目的主机的硬件地址

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词