一、环境准备
两台虚拟机,一台 Windows 10 安装了 WireShark,另一台随意(同一局域网内)
二、命令提示符基础
C:\Users\ydd33>arp /?
显示和修改地址解析协议(ARP)使用的“IP 到物理”地址转换表。
ARP -s inet_addr eth_addr [if_addr]
ARP -d inet_addr [if_addr]
ARP -a [inet_addr] [-N if_addr] [-v]
-a 通过询问当前协议数据,显示当前 ARP 项。
如果指定 inet_addr,则只显示指定计算机
的 IP 地址和物理地址。如果不止一个网络
接口使用 ARP,则显示每个 ARP 表的项。
-g 与 -a 相同。
-v 在详细模式下显示当前 ARP 项。所有无效项
和环回接口上的项都将显示。
inet_addr 指定 Internet 地址。
-N if_addr 显示 if_addr 指定的网络接口的 ARP 项。
-d 删除 inet_addr 指定的主机。inet_addr 可
以是通配符 *,以删除所有主机。
-s 添加主机并且将 Internet 地址 inet_addr
与物理地址 eth_addr 相关联。物理地址是用
连字符分隔的 6 个十六进制字节。该项是永久的。
eth_addr 指定物理地址。
if_addr 如果存在,此项指定地址转换表应修改的接口
的 Internet 地址。如果不存在,则使用第一
个适用的接口。
示例:
> arp -s 157.55.85.212 00-aa-00-62-c6-09.... 添加静态项。
> arp -a .... 显示 ARP 表。
C:\Users\ydd33>
三、ARP 协议
ARP(Address Resolution Protocol)是一种用于将网络层地址(例如IP地址)解析为物理地址(例如MAC地址)的协议。它通常用于IPv4网络中,IPv6网络使用Neighbor Discovery Protocol(NDP)来执行类似的功能。
下面是ARP协议的详细解析:
-
工作原理:
- 当主机A知道目标主机B的IP地址,但不知道其MAC地址时,它会发送一个ARP请求广播以获取目标主机B的MAC地址。
- ARP请求广播包含了源主机A的IP地址和MAC地址,以及目标主机B的IP地址。
- 网络上的所有主机都会收到这个ARP请求广播,但只有目标主机B会响应。
- 目标主机B收到ARP请求后,会将自己的MAC地址作为响应发送给源主机A。
- 源主机A接收到ARP响应后,将目标主机B的IP地址和MAC地址的映射关系存储在其ARP缓存中。
-
数据结构:
- ARP协议定义了两种数据结构:ARP请求和ARP响应。
- ARP请求中包含了源IP地址、源MAC地址、目标IP地址。
- ARP响应中包含了目标IP地址、目标MAC地址、源IP地址、源MAC地址。
-
工作环境:
- ARP协议在局域网中使用,通常在同一个子网内才能正常工作。
- 路由器通常不会转发ARP请求广播,因为它们只在子网间进行路由转发。
-
缓存:
- 主机在收到ARP响应后,会将目标主机的IP地址和MAC地址的映射关系存储在本地的ARP缓存中,以便以后快速查找。
-
缺点:
- ARP是一种不安全的协议,容易受到ARP欺骗(ARP Spoofing)攻击。
- ARP请求和响应广播会增加网络流量,可能会导致网络拥堵。
总的来说,ARP是一种简单而有效的协议,用于解决IP地址到MAC地址的映射问题,但同时也存在一些安全和性能方面的考虑。
四、数据包结构
地址解析协议 | |||||
偏移位 | 八位组 | 0 | 1 | 3 | 4 |
八位组 | 位 | 0~7 | 8~15 | 0~7 | 8~15 |
0 | 0 | 硬件类型 | 协议类型 | ||
4 | 32 | 硬件地址长度 | 协议地址长度 | 操作 | |
8 | 64 | 发送方硬件地址 | |||
12 | 96 | 发送方硬件地址 | 发送方协议地址 | ||
16 | 128 | 发送方协议地址 | 目标硬件地址 | ||
20 | 160 | 目标硬件地址 | |||
24+ | 192+ | 目标协议地址 |
- 偏移位(Offset):指的是每个字段在数据包中的偏移量,以字节为单位。偏移位表示字段从数据包的起始位置开始的位置。
- 八位组:指的是字节(Byte)的位(Bit)组成,即8个二进制位。通常以十六进制表示。
- 硬件类型(Hardware Type):2个字节,表示硬件地址的类型,例如以太网
- 协议类型(Protocol Type):2个字节,表示协议地址的类型,例如IPv4
- 硬件地址长度(Hardware Address Length):1个字节,表示硬件地址的长度,以字节为单位
- 协议地址长度(Protocol Address Length):1个字节,表示协议地址的长度,以字节为单位
- 操作(Operation):2个字节,表示ARP数据包的类型,如请求或响应
- 发送方硬件地址(Sender Hardware Address):长度由硬件地址长度字段指定,表示发送ARP数据包的设备的MAC地址
- 发送方协议地址(Sender Protocol Address):长度由协议地址长度字段指定,表示发送ARP数据包的设备的IP地址
- 目标硬件地址(Target Hardware Address):长度由硬件地址长度字段指定,表示ARP请求或响应的目标设备的MAC地址
- 目标协议地址(Target Protocol Address):长度由协议地址长度字段指定,表示ARP请求或响应的目标设备的IP地址
五、实验模拟
本地输入 arp -a 查看 arp 表
开启抓包后 Ping 另一台主机的 IP 地址
Wireshark 中输入 arp 过滤其他协议后点击一个分析
六、ARP 请求分析
可以发现这个数据包的目的地址是虚拟机的广播地址,源地址(发送方)是本机自己。这里咱们可以查看本机 MAC 地址确认
下方的地址解析协议(请求)也证明了这一点,操作为 1 对应请求包,目标 IP 地址为 192.168.134.129
七、ARP 响应分析
点击第二个包进行分析
可以发现目的地址变成了咱,源地址是另一台主机(查看另一台主机地址验证)
下方的操作为 2 对应响应,即咱已经获得了目标主机的 MAC 地址,现在再来查看 ARP 表
八、免费 ARP 分析
免费ARP包,也被称为Gratuitous ARP或无故ARP,是一种特殊的ARP请求。与一般的ARP请求不同,免费ARP包并非期待得到IP对应的MAC地址,而是设备使用自己的IP地址作为目的IP地址来发送ARP请求,即请求自己的IP地址对应的MAC地址。在发送免费ARP包时,Sender IP和Target IP字段是相同的。
免费ARP包主要有以下几个应用场景和作用:
- 宣告作用:当主机或系统启动时,或者进行网口/接口配置时,会发送免费ARP包来宣告其存在,确保网络中IP的唯一性,并检查是否有IP冲突。
- MAC地址变更通知:当主机更换网卡或MAC地址发生变化时,为了避免ARP表项老化前其他设备仍然使用旧的MAC地址,会发送免费ARP包来通知其他设备其MAC地址已经变更。
- VRRP备份组状态变化通知:在VRRP备份组中,当主备状态发生变化时,会发送免费ARP包来通知同一网段的其他设备其状态已经变化。
免费ARP包是广播发送的,其目标MAC地址是全F。当设备接收到免费ARP包后,如果发现地址存在冲突,会发送一个免费ARP包来告知其他设备地址冲突的情况;如果地址不冲突,则会根据接收到的ARP包中携带的IP、MAC等信息进行维护。
需要注意的是,发送免费ARP的主机或设备往往并不希望收到ARP应答,因为若是收到了,说明网络上有人使用相同的IP,这会造成IP冲突。因此,免费ARP包的主要作用是用于宣告和通知,而不是用于获取MAC地址信息。
免费 ARP 报文与普通 ARP 请求报文的区别在于报文中的目标 IP 地址。普通 ARP 报文中的目标 IP 地址是其他主机的 IP 地址;而免费 ARP 的请求报文中,目标 IP 地址是自己的 IP 地址