一文读懂ARP协议,从IP获取对方MAC实操

什么是ARP协议?

一台主机要发送数据给另一台主机时,必须要知道目的主机的网络层地址(即IP地址)。IP数据报文必须封装成帧才能通过数据链路进行发送。因此数据帧必须要包含目的MAC地址,发送端必须获取到目的MAC地址。

那么如何获取对方的mac地址呢?

通过ARP(Address Resolution Protocol)协议可以根据IP地址获取对方的MAC地址。

如图所示:

主机A(ip为10.0.0.1)要和主机C(ip为10.0.0.3)通信,数据包经过主机A的封装后发给主机C,我们知道主机A封装数据时除了要知道对方的IP地址,还需要知道对方的MAC地址,这时候就需要借助ARP协议了。

下面我们看下ARP是如何获取主机C的MAC地址的?

ARP协议工作原理

1、ARP请求:

主机A首先会去检查ARP缓存表(ARP缓存用来存放IP地址和MAC地址的关联信息)中是否存在主机C的MAC地址。

本例中由于是第一次通信,主机A的ARP缓存表中没有主机C的MAC地址。

这时主机A会发送ARP request报文(广播报文)来获取主机C的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报文。网关将会阻止该报文发送到其他网络上。

本例中主机B和主机C都会收到主机A发送的ARP广播请求报文。

2、ARP应答:

主机B收到主机A发送的ARP广播请求报文,查看目的IP不是自己会丢弃,但是会在自己的ARP缓存表中记录主机A的IP和MAC的映射关系,在主机B上通过命令arp -a 可以查询到:

主机C发现目的IP是自己,会在自己的ARP缓存表中记录主机A的IP和MAC的映射关系,并会向主机A单播回应ARP Reply报文。

主机A收到主机C的回应报文后后会在自己的ARP缓存表中记录主机C的IP和MAC的映射关系,下次发送数据是就可以查询到主机C的MAC。

ARP Reply报文中的源协议地址是主机C自己的IP地址,目标协议地址是主机A的IP地址,目的MAC地址是主机A的MAC地址,源MAC地址是自己的MAC地址,同时Operation Code被设置为reply。

ARP Reply报文通过单播传送。

ARP报文格式

ARP的工作过程是通过ARP广播请求报文和ARP单播回应报文实现的,下面我们一起看下ARP报文的格式。

ARP报文中包含以下字段:

1、Hardware Type:表示硬件地址类型,一般为以太网;

2、Protocol Type:表示三层协议地址类型,一般为IP;

3、Hardware Length和Protocol Length:为MAC地址和IP地址的长度,单位是字节;

4、Operation Code:指定了ARP报文的类型,包括ARP request和ARP reply;

5、Source Hardware  Address:指的是发送ARP报文的设备MAC地址;

6、Source Protocol Address:指的是发送ARP报文的设备IP地址;

7、Destination Hardware Address:指的是接收者MAC地址,在ARP request报文中,该字段值为0;

8、Destination Protocol Address:指的是指接收者的IP地址。

实战

下面我们搭建拓扑,模拟下主机A和主机C的通信过程,在ensp模拟器下打开wireshark抓取下ARP请求和回应报文。

1、主机A上ping 主机C ip 10.0.0.3。

2、查看抓包结果:

可以看到:抓取到了主机A发送的ARP广播请求报文、主机C回应的单播报文,以及ping的ICMP报文;

3、报文分析:

ARP请求报文格式:

可以看到ARP请求报文中:

1、Hardware Type为以太网;

2、Protocol Type为IP;

3、MAC地址为6字节,IP地址的长度为4字节;

4、Operation Code指定了ARP报文的类型为ARP request;

5、发送ARP报文的设备MAC地址为54-89-98-1F-3A-EA;

6、发送ARP报文的设备IP地址为10.0.0.1;

7、接收者MAC地址为ff-ff-ff-ff-ff-ff;

8、接收者的IP地址为10.0.0.3。

ARP回应报文:

可以看到ARP回应报文中:

1、Hardware Type为以太网;

2、Protocol Type为IP;

3、MAC地址为6字节,IP地址的长度为4字节;

4、Operation Code指定了ARP报文的类型为ARP reply;

5、发送ARP报文的设备MAC地址为54-89-98-DB-33-4E;

6、发送ARP报文的设备IP地址为10.0.0.3;

7、接收者MAC地址为54-89-98-1F-3A-EA;

8、接收者的IP地址为10.0.0.1。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200604A08W6O00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券