在数据链路层的以太网的协议中每一个数据包都有一个目的mac地址址。我们知道每一块以太网卡都有一个目的mac地址址这个地址是唯一的,那么IP包是如何知道这个目的mac地址址的这就是ARP协议的工作。
ARP(地址解析)协议是一种解析协议本来主机是完全不知道这个IP对应的是哪个主机的哪个接口,当主机要发送一个IP包的时候会首先查一下自己的ARP高速缓存表(最近数据传递更新的IP-目的mac地址址对应表),如果查询的IP-MAC值对不存在那么主机就向網络广播一个ARP请求包,这个包里面就有待查询的IP地址而直接收到这份广播的包的所有主机都会查询自己的IP地址,如果收到广播包的某一個主机发现自己符合条件那么就回应一个ARP应答包(将自己对应的IP-MAC对应地址发回主机),源主机拿到ARP应答包后会更新自己的ARP缓存表源主機根据新的ARP缓存表准备好数据链路层的的数据包发送工作。
命令arp -a查询ARP缓存表(缓存表是有时限的一般是20分钟)
ARP数据包如何更新IP-目的mac地址址抓包分析
上图是ARP请求、应答报文的格式。
对以太网首部来说:如果是请求ARP报文的话
以太网目的地址: 是(全1)的,是广播报目的是讓同一个局域网上所有主机都收到ARP请求包
以太网源地址: 就是发送端地址。
帧类型: 如果是ARP报文值为0x0806
硬件类型: 表明ARP协议实现在那种类型的网络上,它的值为1即表示以太网地址
协议类型:表示解析协议(上层协议),这里一般是0800即IP
硬件地址长度:也就是目的mac地址址长喥,即6个字节
协议地址长度:也就是IP地址长度即4个字节
操作类型:表示ARP协议数据报类型。1ARP表示请求包2ARP表示应答包,3表示RARP请求包4表示RARP應答包
发送端以太网地址:也就是源目的mac地址址
发送端IP地址:也就是源IP地址
目的端以太网地址:目标端目的mac地址址(如果是请求报文,是铨0)
目地端IP地址:也就是目地端的IP地址
如上图所示pc1给pc2发送ARP请求,此时使用Wireshark获取ARP抓包数据
既然都获取到ARP的数据那就分析ARP的数据。
先分析ARP請求数据报文:
选中57帧可以在wireshark中查看报的详细信息:
当PC1发送的ARP请求报文,以广播报的形式发送到局域网后当pc2检测到IP地址与自己的IP相同,就会发送给PC1响应报文也就是58帧
对于ARP响应包来说,源IP目地IP,源MAC目地MAC都是知道了的。