参考博客链接:https://blog.csdn.net/xiaoxiaoxiexies/article/details/120211303
什么是ARP?
ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。
ARP的作用
在以太网环境中,数据的传输所依懒的是MAC地址而非IP地址,而将已知IP地址转换为MAC地址的工作是由ARP协议来完成的。
在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。在以太网中,一个主机和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。
所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。
ARP实现过程
假设主机A和B在同一个网段,主机A要向主机B发送信息,具体的地址解析过程如下:
- 主机A首先查看自己的ARP表,确定其中是否包含有主机B对应的ARP表项。如果找到了对应的MAC地址,则主机A直接利用ARP表中的MAC地址,对IP数据包进行帧封装,并将数据包发送给主机B。
- 如果主机A在ARP表中找不到对应的MAC地址,则将缓存该数据报文,然后以广播方式发送一个ARP请求报文。
 ARP请求报文中的发送端IP地址和发送端MAC地址为主机A的IP地址和MAC地址,目标IP地址和目标MAC地址为主机B的IP地址和全0的MAC地址。
 由于ARP请求报文以广播方式发送,该网段上的所有主机都可以接收到该请求,但只有被请求的主机(即主机B)会对该请求进行处理。
- 主机B比较自己IP地址和ARP请求报文中的 目标IP 地址,当两者相同时进行如下处理:将ARP请求报文中的发送端(即主机A)的IP地址和MAC地址存入自己的ARP表中。
 之后以单播方式发送ARP响应报文给主机A,其中包含了自己的MAC地址。
- 主机A收到ARP响应报文后,将主机B的MAC地址加入到自己的ARP表中以用于后续报文的转发,同时将IP数据包进行封装后发送出去。
现在给出一个实例:
在每台安装有TCP/IP协议的电脑或路由器里都有一个ARP缓存表,表里的IP地址与MAC地址是一一对应的,如下表所示:
IP与MAC对应表
| 主机名称 | IP地址 | MAC地址 | 
| A | 192.168.38.10 | 00-AA-00-62-D2-02 | 
| B | 192.168.38.11 | 00-BB-00-62-C2-02 | 
| C | 192.168.38.12 | 00-CC-00-62-C2-02 | 
| D | 192.168.38.13 | 00-DD-00-62-C2-02 | 
| E | 192.168.38.14 | 00-EE-00-62-C2-02 | 
以主机A(192.168.38.10)向主机B(192.168.38.11)发送数据为例。
- 当发送数据时,主机A会在自己的ARP缓存表中寻找是否有目标IP地址。如果找到就知道目标MAC地址为(00-BB-00-62-C2-02),直接把目标MAC地址写入帧里面发送就可。
- 如果在ARP缓存表中没有找到相对应的IP地址,主机A就会在本地网络上广播发送一个ARP请求(ARP request),目标MAC地址是“FF.FF.FF.FF.FF.FF”,这表示向同一网段内的所有主机发出这样的询问:“192.168.38.11的MAC地址是什么?”
- 网络上其他主机并不响应ARP询问,只有主机B接收到这个帧时,才向主机A做出这样的应答(ARP response):“192.168.38.11的MAC地址是00-BB-00-62-C2-02”,此应答以单播方式进行。这样,主机A就知道主机B的MAC地址,它就可以向主机B发送信息。同时它还更新自己的ARP缓存(ARP cache),下次再向主机B发送信息时,直接从ARP缓存表里查找就可。
本文章使用limfx的vscode插件快速发布