一、ARP 技术背景

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

1.2、

ARP 报文格式 

主要参数 

  • 硬件类型:2字节,值为1表示以太网地址
  • 协议类型:2字节,0x0800表示IP地址
  • 硬件地址长度:1字节,数值为6
  • 协议地址长度:1字节,数值为4
  • 操作代码:2字节,1表示请求报文,2表示应答报文
  • 源MAC地址:6字节
  • 源IP地址:4节字
  • 目的MAC地址:6字节
  • 目的IP地址:4节字

1.3、ARP 报文的以太网封装格式 

ARP是个独立的三层协议,并不需要IP协议封装,而是直接生成自己的报文,到达数据链路层后,由数据链路层协议进行封装,一般是以太网协议。封装的过程,就是在ARP报文的前面加上以太网帧头,再加上4字节的冗余校验码结尾,校验码用于检验数据传输是否出现损坏。

以太网帧头一共14个字节,包含目的MAC地址、源MAC地址、帧类型三个字段,如下所示:

主要参数 

  • 以太网目的地址:6字节,如果是ARP请求报文,该字段为广播MAC地址
  • 以太网源地址:6字节
  • 帧类型:2字节,0x0806表示是ARP协议
  • 帧校验:4字节

1.4、以太网帧最小长度是64个字节,最长1518个字节。封装后的ARP帧,实际就是一个最小以太网帧,包含14个字节的以太网帧头,28个字节的ARP报文,4个字节的以太网帧尾,一共是46个字节,其余18个字节用0来填充,共计64个字节。

二、ARP 原理

2.1、ARP 工作过程:主机A要发送一个数据包给主机C之前,先要获取主机C的MAC地址

2.2、ARP 请求

主机A在ARP表中找不到对应的MAC地址,则将缓存该数据报文,然后以广播方式发送一个ARP请求报文。ARP请求报文中的发送端IP地址和发送端MAC地址为主机A的IP地址和MAC地址,目标IP地址和目标MAC地址为主机C的IP地址和全0的MAC地址。由于ARP请求报文以广播方式发送,该网段上的所有主机都可以接收到该请求,但只有被请求的主机(即主机C)会对该请求进行处理

目的IP源IP目的MAC源MAC类型
10.0.0.310.0.0.100-00-00-00-00-0000-01-02-03-04-AARequest

抓包 

2.3、ARP 响应

主机C比较自己的IP地址和ARP请求报文中的目标IP地址,当两者相同时进行如下处理:将ARP请求报文中的发送端(即主机A)的IP地址和MAC地址存入自己的ARP表中。之后以单播方式发送ARP响应报文给主机A,其中包含了自己的MAC地址。

目的IP源IP目的MAC源MAC类型
10.0.0.110.0.0.300-01-02-03-04-AA00-01-02-03-04-CCReply

抓包 

2.4、ARP 缓存

为了避免重复发送ARP请求,产生大量的广播包,每台主机都有一个ARP缓存列表,当源主机得到 ARP 响应后,将目标主机的 IP 地址和物理地址存入本机 ARP 缓存中,并保留一定时间。下次请求 MAC 地址时,直接查询 ARP 缓存,而无须再发送 ARP 请求,从而节约了网络资源。当缓存生存期结束后,才会再次发送ARP请求报文。

主机A>arp -a

Internet Address    Physical Address    Type
10.0.0.3            00-01-02-03-04-CC   dynamic


主机C>arp -a

Internet Address    Physical Address    Type
10.0.0.1            00-01-02-03-04-AA   dynamic


主机B>arp -a

Internet Address    Physical Address    Type
10.0.0.1            00-01-02-03-04-AA   dynamic

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐