wireshaek实战中理解ARP协议

  • ARP协议概述:
  • MAC 地址 与 IP地址
  • 获取目的端的MAC地址(在一个以太网中)步骤如下:
  • ARP协议工作原理
  • wireshark实验观察ARP过程
  • 一、ARP表中已有缓存
  • 二.arp表为空的情况,目的地址为本网段


ARP协议概述:

网络层以上的协议用IP地址来标识网络接口,但以太数据帧传输时,以物理地址来标识网络接口。因此我们需要进行IP地址与物理地址之间的转化。

对于IPv4来说,我们使用ARP地址解析协议来完成IP地址与物理地址的转化(IPv6使用邻居发现协议进行IP地址与物理地址的转化,它包含在ICMPv6中)。

ARP协议提供了网络层地址(IP地址)到物理地址(mac地址)之间的动态映射。 ARP协议 是地址解析的通用协议

注意:ARP只为同一个子网上的主机和路由器接口解析IP地址。

MAC 地址 与 IP地址

  • Mac地址由设备制造商定义/分配,每一个硬件设备都有一个链路层主地址(MAC地址),保存在设备的永久内存中。设备的mac地址不会改变(现在可以进行mac地址伪装)
  • IP地址由用户配置给网络接口, 网络接口的IP地址是可以发生变化的(通过DHCP获取IP,变化速度比较快)

获取目的端的MAC地址(在一个以太网中)步骤如下:

  • 1.发送ARP请求的以太网数据帧给以太网上的每个主机,即广播(以太网源地址填全1)。ARP请求帧中包含了目的主机的IP地址。
  • 2.目的主机收到了该ARP请求之后,会发送一个ARP应答,里面包含了目的主机的MAC地址。

ARP协议工作原理

  1. 每个主机都会在自己的 ARP 缓冲区中建立一个 ARP 列表,以表示 IP 地址和 MAC 地址之间的对应关系。
  2. 主机(网络接口)新加入网络时(也可能只是mac地址发生变化,接口重启等), 会发送免费ARP报文把自己IP地址与Mac地址的映射关系广播给其他主机。
  3. 网络上的主机接收到免费ARP报文时,会更新自己的ARP缓冲区。将新的映射关系更新到自己的ARP表中。
  4. 某个主机需要发送报文时,首先检查 ARP 列表中是否有对应 IP 地址的目的主机的 MAC
    地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送 ARP 数据包,该数据包包括的内容有:源主机 IP 地址,源主机
    MAC 地址,目的主机的 IP 地址等。
  5. 当本网络的所有主机收到该 ARP 数据包时:
(A)首先检查数据包中的 IP 地址是否是自己的 IP 地址,如果不是,则忽略该数据包。

(B)如果是,则首先从数据包中取出源主机的 IP 和 MAC 地址写入到 ARP 列表中,如果已经存在,则覆盖。

(C) 然后将自己的 MAC 地址写入 ARP 响应包中,告诉源主机自己是它想要找的 MAC 地址。
  1. 源主机收到 ARP 响应包后。将目的主机的 IP 和 MAC 地址写入 ARP 列表,并利用此信息发送数据。如果源主机一直没有收到 ARP 响应数据包,表示 ARP 查询失败。

wireshark实验观察ARP过程

通过ping指令来观察,ping指令中需要ARP去获得mac地址。

ping指令:
简单来说,「ping」是用来探测本机与网络中另一主机之间是否可达的命令,如果两台主机之间ping不通,则表明这两台主机不能建立起连接。ping是定位网络通不通的一个重要手段。
详细了解ping:《每天都在用的Ping命令,它到底是什么?》https://zhuanlan.zhihu.com/p/45110873

实验环境:
Windows10操作系统
WireShark

一、ARP表中已有缓存

  1. 使用cmd命令arp -a查看ARP表 ,已有ip 192.168.1.107的缓存

利用WireShark分析ARP协议 ip.addr wireshark arp_mac地址

  1. wiresahrk 开始捕获,ping190.168.1.107

wireshark捕获到arp请求:

arp一次请求由广播的请求报文和单播的应答报文组成,所以这一组报文的源MAC地址和目的MAC地址是对调的。

可以看一下Info的信息很有意思,请求报文广播说“谁有192.168.1.107的mac地址?告诉192.168.1.105吧!”;

响应的报文对请求的地址单播说“192.168.1.107的mac地址是xx.xx.xx.xx”。

利用WireShark分析ARP协议 ip.addr wireshark arp_缓存_02

  1. 先看arp请求(1),发送方是192.168.1.1,源地址和目的地址的mac地址都存在,因为arp表中已有缓存!

利用WireShark分析ARP协议 ip.addr wireshark arp_缓存_03

  1. 查看应答包(2)

执行流程:

本机首先查看自己的ARP表,确定其中包含有主机对应的ARP表项。找到了对应的MAC地址,直接利用ARP表中的MAC地址,对IP数据包进行帧封装,并将数据包发送给主机B。当主机B收到此请求时,进行响应。

二.arp表为空的情况,目的地址为本网段

  1. 用“arp”命令清空本机的缓存:arp-d 如果提示失败的话,是用管理员身份打开cmd。
  2. wiresahrk 开始捕获,ping190.168.1.105
  3. 利用WireShark分析ARP协议 ip.addr wireshark arp_利用WireShark分析ARP协议_04

  4. wireshark捕获到arp请求:

arp一次请求由广播的请求报文和单播的应答报文组成,所以这一组报文的源MAC地址和目的MAC地址是对调的。

可以看一下Info的信息很有意思,请求报文广播说“谁有192.168.1.105的mac地址?告诉192.168.1.1吧!”;

响应的报文对请求的地址单播说“192.168.1.105的mac地址是xx.xx.xx.xx”。

利用WireShark分析ARP协议 ip.addr wireshark arp_wireshark_05

先看arp请求(1),发送方是192.168.1.1,接收方只有ip地址,没有mac地址,需要接收方在arp应答中回复!

利用WireShark分析ARP协议 ip.addr wireshark arp_IP_06

查看arp应答(2),此时发送方成了192.168.1.105,并且携带了mac地址!

利用WireShark分析ARP协议 ip.addr wireshark arp_利用WireShark分析ARP协议_07

流程分析:

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