什么是ARP协议
ARP(A ddress R esolution P rotocol)— 地址解析协议 ,用于将IP地址解析为MAC地址。复杂来说,ARP用于32位IPv4地址和以太网的48位MAC地址之间的映射。
与ARP相反功能的协议称为 RARP(Reverse Address Resolution Protocol)逆地址解析协议 。用于将MAC地址转换为IP地址。一般用于无盘系统中。
一个基本的例子
PC1 访问 网关(switch0,192.168.1.1)
网络拓扑结构如下图:
环境
-
PC1 没有ARP缓存
-
PC1 ,PC2,Switch0 在同一个网段同一个Vlan
PC1 执行如下命令,并且监听并捕获e0/0 和 e0/1 两个端口(只捕获ARP协议)
VPCS> ping 192.168.1.1
捕获结果
e0/0
e0/1
捕获分析
-
No.773帧,PC1 向 Switch0 发送一个帧,Switch 0在本Vlan广播 ,查找谁的IP是192.168.1.1
-
No770,Switch广播帧到网段,向e0/1 发送广播帧,PC2接受但没有回复。
-
No774,Switch0 答复了PC1。表明192.168.1.1 对应的MAC地址是我的
NO.773 帧:
需要注意的是
-
目标地址是一个广播地址(MAC全为1的),用来对全网进行广播。
-
opcode 字段为 1,是一个ARP请求
NO.774
需要注意:
-
opcode 字段值为2,为ARP应答
-
发送方MAC和IP为Switch0 的映射
-
目标MAC为PC1 的MAC地址,这里目标IP没有,是直接交付的帧。
简单来说就是这样:
结论
解析IP分为以下几个步骤:
-
发送帧查找局域网中有无对应的MAC地址
-
有则回复,如果局域网中没有这个对应MAC,ARP会有一个规定时间,超过这个时间则认为没有。
需要注意以下几点:
-
ARP不是广播回复,是直接应答原始请求的发送方。
-
接受到回复的主机将映射存储在本地的缓存中以供下次使用。
ARP缓存
ARP 缓存用来记录每个接口从网络层地址(IP地址)到硬件地址的最新映射 (MAC地址)。
其正常到期时间是条目创建开始后的20分钟[RFC1122]
查看ARP缓存
通过使用命令
> arp -a
windows平台下的显示结果:
类型字段指明了映射关系是通过动态获取还是静态获取
ARP帧
下图显示了ARP帧的格式:
字段解释:
以太网帧头部
- DST:目的地址
- SRC : 源地址
- 长度或类型:多数情况用于确定后面的协议类型,在ARP帧中,这个值是0x0806
固定大小:
- 硬件类型:指出硬件地址的类型。对以太网来说该值为1
- 协议类型:指出映射的协议地址类型。位于IPv4地址,该值为0x0800
- 硬件大小,协议大小:
分别指出硬件地址和协议地址的字节数
对于以太网使用IPv4地址的ARP请求或应答,它们的值分别为6和4
- op:指出操作的类型,这个值是必须的(?由于ARP请求和ARP应答的长度/类型字段相同)
ARP请求(值为1)
ARP应答(2)
RARP请求(3)
RARP应答(4)
可变大小:
- 发送方硬件地址
- 发送方协议地址
- 目的硬件地址
- 目的协议地址
- FSC:用于校验
ARP帧的示例
下图是一个ARP帧的示例,1.2 主机查找1.5主机的ARP请求帧:
其中 :
以太网帧部分
-
前导码和SFD占了8个bit
-
目的地址为FFFF.FFFF.FFFF(全1的广播地址),同网段同vlan的所有主机将接受到这个帧
-
type(类型)字段为0x0806,用来表示这是一个ARP帧
ARP帧部分:
- HARDWARE TYPE(硬件类型):在以太网中该值为1
- PROTOCAL TYPE(协议类型):0x0800,对于IPv4地址,该值为0x0800
- 硬件大小(HLEN)和协议大小(PLEN)
这里分别是0x06和0x04 ,表示MAC 6字节,IPv4地址4字节
- OP(OPCODE):操作码,这里表示ARP请求(值为1)
可变大小:
-
发送方的硬件地址(SOURCE MAC)
-
发送方的协议地址(SOURCE IP):这里是一个IPv4地址
-
目的硬件地址(TARGET MAC)
-
目的协议地址(TARGET IP)
ARP缓存超时
刷新缓存,来保证映射条目是最新的。
防止出现不完整条目,比如说IP和MAC对应不上(出现这种情况可能是主机IP设置改变,网卡改变)
完整条目的超时为20分钟,不完整条目的超时为3分钟
代理ARP
代理ARP用来隐匿发送端和接收端。
代理ARP使一个系统可回答不同主机的ARP请求
这样做有两个常见原因:
-
有些系统无法进行子网划分
-
有些系统使用比较旧的广播地址(全零的主机ID ,而不是全1的主机ID)
免费ARP和地址冲突检测
Gratuitous ARP ,被翻译为“免费ARP”,也被称为“无故ARP”。相比“免费”这个翻译,“无故”这个更易理解:“在没有人问自己的情况下,无缘无故自问自答”,即免费ARP是设备发送的一个发送端IP地址和目标IP地址都是本设备IP地址的ARP request/reply报文
一个免费ARP的例子
PC3 的IP地址与PC1的冲突
网络拓扑结构图如下:
环境
-
只捕获ARP帧
-
PC3 的IP地址没有设置
-
PC3的ARP缓存表是空的
分析
e0/2 端口
e0/0 端口
e0/1 端口
通过上述包分析得知:
-
首先PC3 先发送一个探测帧,探测是否有无相同的映射关系。
-
PC1 回复了PC3 ,表示这个IP有人用了,用这个IP的人是我。
-
PC2 没有回复PC3,因为没有检测到冲突。
ACD的三次探测
什么是ACD
ARP并没有为IP和MAC的映射冲突提供解决方式,而是由[RFC5277]描述IPv4地址冲突检测(ACD)
ACD 定义了ARP探测分组和ARP通告分组。探测分组是一个ARP请求分组,ARP通告与ARP探测相同,除了发送方协议地址和目的协议地址字段被填充为候选IPv4地址外。它用于通告发送方使用候选IPv4地址的意图
如下是ACD的三次通告:
- time列中,每次间隔一秒发送,用来防止接口拥塞,网络流量激增。
ACD 被认为是一个持续的过程
这是它与免费ARP的区别
当一个主机通告它正在使用的地州,它会继续检查输入的ARP流量(请求和应答),查看自己的地址与之冲突(自己的协议地址是否出现在发送方的协议地址字段中,也就是IP地址相同),如果IP地址相同,代表发生冲突了,ACD提供了三种可能的解决方案:
-
停止使用这个地址
-
保留这个地址。 但发送一个“防御性”ARP通告,如果冲突继续,则停止使用
-
不理会冲突,继续使用。
与ARP有关的攻击
最为典型的中间人攻击
如下图所示:
引用/参考/使用的工具
参考书籍与网站:
https://zhiliao.h3c.com/Theme/details/27896
TCP/IP 详解 卷一
工具:
EVE-NG
Packet tracer