目录
ARP协议
引入
介绍
原理
arp请求/响应
特点
报文格式
硬件类型
协议类型
硬件/协议地址长度
op(操作码)
过程
发送请求并处理
返回响应并处理
总结
arp缓存
介绍
arp表项的有效时间
解释
arp欺骗
介绍
定向断网
基于arp的成为中间人的方式
多向欺骗
RARP
介绍
ARP协议
引入
跨网络通信时,通过不断更新mac帧,数据可以送达与目标主机相连的路由器设备上 -- 数据链路层(Mac帧,报头字段,局域网通信原理),MTU,MSS,ip报文的分包与组装(ip报头字段介绍,组装过程,判断是否被分片/收到全部分片)-CSDN博客
但是,这最后一跳没那么简单
- 因为我们只知道目标主机的ip地址(ip报头中的目的ip),而不知道mac地址
- 但是,局域网内的通信是需要mac地址的(因为要重新封装mac帧),如果硬件地址与本机不符,会直接在链路层丢弃
所以我们需要一个技术来解决 -- ARP协议
- 它来将目标主机的ip地址->mac地址
介绍
ARP(Address Resolution Protocol,地址解析协议),一个介于数据链路层和网络层之间(但归属于链路层)的协议
- 建立了主机 IP地址 和 MAC地址 的映射关系,以便数据包可以正确地发送到网络上的目标设备
原理
arp请求/响应
该路由器向目标主机所在局域网中广播一条消息(被称为ARP请求),询问具有特定ip地址的主机的mac地址
- 以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播
因为已知ip地址
- 所以目标主机可以收到,而其他主机会丢弃该条消息
目标主机收到后,会给源主机返回一条响应
- 里面带着它自己的Mac地址
特点
如果 收到多次同样的应答,会以最新的为准
- 如果在ARP缓存中已经存在了之前的应答记录,并且收到新的应答,ARP缓存会更新为最新的应答
报文格式
([下面的数字]单位是字节)
硬件类型
指示网络类型,比如以太网的值是1
- 它用于确定网络接口的硬件地址格式
协议类型
把哪种类型的地址->Mac地址
- 确定上层协议类型
- 通常是IPv4,其值为0x0800
硬件/协议地址长度
[前面字段填入的类型长度]对应的数字
- 在以太网中,MAC地址的长度为6字节
- 在IPv4中,IP地址的长度为4字节
op(操作码)
指示ARP消息的类型
- 1代表请求
- 2代表响应
剩下的两组就是地址转换的重点(在过程中介绍)
过程
发送请求并处理
假设我们路由器R准备发送给目标主机B:当 网络层发现 目标主机与当前设备直接相连时,会先发送 arp请求,也就是先交付到 ARP协议层(记得嗷,ARP协议在网络层和MAC层之间)
构建好请求报文后,再交付给 Mac帧协议层
- 封装好Mac帧报头后:
发送到局域网中,局域网内每台主机都能收到这个报文,每台主机收到后向上交付给Mac帧层,进行解包
- 因为目的Mac地址是广播地址,所以需要受理,继续向上交付(因为类型是0806,所以交给arp协议层)
ARP协议层收到后解包
- 先检查类型,发现是请求后,检查目的ip
- 若不是发给自己的,直接丢弃
返回响应并处理
这样可以只让特定主机处理arp请求,并构建arp应答:
并向下交付( MAC层):
- 因为此时源/目的mac地址已知,所以mac帧报头可以成功封装
封装好后,因为有确定的目的Mac地址,所以只有特定主机可以收到
- 目标主机收到后,识别类型是arp协议
交付给arp协议层:
- 先识别类型,确定是应答后,就知道是自己曾经请求的信息拿到了
- 接着就提取源mac地址和源ip地址,这样就可以建立ip->mac的映射关系
总结
这个过程中,哪台主机都可能收到arp报文,并且第一件事情就是 查看报文类型
- 如果是请求,那就查看目的ip
- 如果是应答,就查看源ip和源mac
也就是,类型决定了要关注哪个字段
这样一来一回,就可以拿到目标主机的mac地址了,也就可以完成最后一跳了
arp缓存
介绍
主机的ip和mac地址的映射关系,会被主机临时缓存起来
- 当缓存关系失效时,才会触发arp机制
- 它也不仅仅只在最后一跳被触发,任何时候两台相连主机之间通信时,只要不知道对方的mac地址,都可以触发
arp表项的有效时间
每台主机都维护一个ARP缓存表,可以用arp -a命令查看:
缓存表中的表项有过期时间(一般为20分钟)
- 如果一定时间内没有再次使用某个表项,则该表项失效
- 下次在与该主机通信时,需要发ARP请求来获得目的主机的硬件地址
解释
为什么要有缓存表?
- 减少了ARP请求的频率
- 通过直接查询缓存表,网络设备可以更快地完成数据包的转发和处理
为什么要有过期时间?
- 需要确保缓存表中的信息是最新的和有效的 (在网络中,设备的IP地址和MAC地址可能会变化。eg: 设备可能会断开连接、关闭、或者被重新分配IP地址 , 如果ARP缓存表中的表项一直有效,则可能导致发送到错误设备的情况发生)
- 过期时间可以帮助清理和刷新这些表项,确保缓存表只包含有效的映射信息 (如果没有过期时间,过时的或错误的映射信息可能会长时间存在,导致数据包无法正确传输)
- ARP缓存中的长期存在的错误或无效表项可能被攻击者利用,例如通过ARP欺骗攻击。定期过期和刷新ARP表项可以减少这种攻击的可能性
arp欺骗
介绍
是一种网络攻击方式,利用了ARP(地址解析协议)的工作机制,以欺骗网络中的设备
- 攻击者通过伪造ARP应答来干扰正常的网络通信,从而实现数据包拦截、修改或其他恶意行为
定向断网
如果某主机A直接向某主机B发送arp应答,构建虚假的ip->mac的映射关系
- 比如,将键值对中的mac地址修改成自己的mac地址,ip地址不变
那么以后B发出的消息都会推送给A
- 因为其他主机直接在链路层就丢弃了报文(mac地址是B的)
如果A也丢弃掉,就会造成B的消息无法成功发送
- 相当于断网了
基于arp的成为中间人的方式
还是上面的流程,但A不丢弃B发送给其他主机(假设是主机C)的报文,而是拦截下来并构建一条新的报文(源ip和源mac都修改成A的信息)
- 并发送给C,这样从主机C返回的应答也会是A收到
- 同理,A也构建新的应答给B(源ip和源mac都是C),B无法察觉到它和C之间还存在着A
- 这样相当于A成为了B和C的中间设备
这种攻击允许主机A监视、记录甚至篡改网络通信内容
多向欺骗
一台主机可以做到,多台主机也同理
- 将其他主机记录的映射关系中的mac地址都改成自己的mac地址,那么该局域网内所有主机的信息都一定会被自己接收
RARP
介绍
逆地址解析协议
- 也就是用mac->ip
过程更简单,可以定向发送(因为mac地址已知)应用场景少