ARP是Address Resolution Protocol的简写。翻译成中文就是:地址解析协议。
那么解析什么地址呢?本质上就是把IP解析成MAC的一种协议。
1.2 为什么需要把IP解析成MAC地址?看了ARP协议的内容,难免我们会有一个疑问,就是当前主题。
我们知道根据OSI模型,把网络工作分为七层,如下图所示(图片来自: 计算机网络-数据结构-MAC帧头-IP头-TCP头-UDP头 - 多情剑客无情剑; - 博客园 ):
以上图片右侧为:当前7层网络架构;左侧为:数据数据过程的头封装过程
最终由物理层将当前数据包发送出去时,需要将MAC头封装到最外层。
那么问题来了:应用层发送消息到对端时都是通过ip、port来发送的,那么如何获取到对端MAC地址呢?
答案就是:通过ARP协议。
下面一起来用wireshark实战下ARP协议的过程,先抓包体验下协议内容,后续再来具体分析。
2.wireshark抓包arp协议 2.1 环境准备笔者准备两台机器,采用ping的方式来进行通讯,ping之前启动好wireshark来进行相应ip抓包
2.2 wireshark抓包实战
在client端执行ping 192.168.3.18命令,并提前打开wireshark,抓包如下:
很简单的两条信息,1是发送一个广播信息(Broadcast)到子网中,
2是192.168.3.18这台机器接收到广播信息后,直接回复当前ip的Mac给client。
在这一问一答之间,arp协议就完成了ip到mac的转换。
2.3 ARP协议内容协议内容,我们可以先通过wireshark抓包到的内容先分析下
2.3.1 ARP 请求协议内容
Sender这两条就是发送方的信息
Target这两条就是接收方的信息(主要就是IP地址,MAC地址当前还未知)
2.3.2 ARP 响应协议内容
当子网中的192.168.3.18服务器接收到该广播信息,发现与自己的ip匹配,则将自己的MAC地址以arp响应的方式发送回去。
3.ARP协议报文格式从wireshark的角度来看arp协议的请求响应体,内容并不多,我们直接看下报文格式
ARP 报文总长度为 28 字节,MAC 地址长度为 6 字节,IP 地址长度为 4 字节。
其中,每个字段的含义如下。
硬件类型:指明了发送方想知道的硬件接口类型,以太网的值为 1。
协议类型:表示要映射的协议地址类型。它的值为 0x0800,表示 IP 地址。
硬件地址长度和协议长度:分别指出硬件地址和协议的长度,以字节为单位。对于以太网上 IP 地址的ARP请求或应答来说,它们的值分别为 6 和 4。
操作类型:用来表示这个报文的类型,ARP 请求为 1,ARP 响应为 2,RARP 请求为 3,RARP 响应为 4。
发送方 MAC 地址:发送方设备的硬件地址。
发送方 IP 地址:发送方设备的 IP 地址。
目标 MAC 地址:接收方设备的硬件地址。
目标 IP 地址:接收方设备的IP地址。
ARP 数据包分为请求包和响应包,对应报文中的某些字段值也有所不同。
ARP 请求包报文的操作类型(op)字段的值为 request(1),目标 MAC 地址字段的值为 Target 00:00:00_00:00:00(00:00:00:00:00:00)(广播地址)。
ARP 响应包报文中操作类型(op)字段的值为 reply(2),目标 MAC 地址字段的值为目标主机的硬件地址。
4.ARP缓存表在局域网中的任何一台机器,都有一个ARP缓存表。这个缓存表保存了多个ARP条目。每个ARP条目都由一个ip地址和一个mac地址组成。
在这里,我们先停一下,思考下为什么会有这个缓存表?如果没有的话会怎样?
4.1 ARP缓存表操作查看当前缓存表信息:
C:\WINDOWS\system32>arp -a
接口: 192.168.3.8 --- 0x9
Internet 地址 物理地址 类型
192.168.3.1 48-4c-86-16-50-f5 动态
192.168.3.3 c2-f4-aa-fd-de-61 动态
192.168.3.10 e0-eb-40-e9-b4-5c 动态
192.168.3.255 ff-ff-ff-ff-ff-ff 静态
224.0.0.22 01-00-5e-00-00-16 静态
224.0.0.251 01-00-5e-00-00-fb 静态
224.0.0.252 01-00-5e-00-00-fc 静态
228.140.111.3 01-00-5e-0c-6f-03 静态
236.102.255.2 01-00-5e-66-ff-02 静态
239.255.255.250 01-00-5e-7f-ff-fa 静态
255.255.255.255 ff-ff-ff-ff-ff-ff 静态
同时,arp命令还可以执行删除添加操作,这个非本文重点,读者可以自行学习
C:\WINDOWS\system32>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 表。
注意:笔者使用的是Windows机器操作的arp命令,可能会出现没有权限等问题,可以参考下 ARP项添加失败:请求的操作需要提升 && ARP项添加失败:拒绝访问_再睡一夏.的博客-CSDN博客_arp项添加失败,拒绝访问 处理。