【Linux网络】ARP协议
ARP协议
虽然我们在这里介绍 ARP 协议,但是需要强调,ARP 不是一个单纯的数据链路层的协议,而是一个介于数据链路层和网络层之间的协议。
ARP数据报的格式
字段 | 长度(字节) | 说明 |
---|---|---|
硬件类型 | 2 | 网络类型(如以太网为1) |
协议类型 | 2 | 上层协议(如IP为0x0800) |
硬件地址长度 | 1 | MAC地址长度(以太网为6) |
协议地址长度 | 1 | IP地址长度(IPv4为4) |
操作码 | 2 | 1=请求,2=响应,3=反向请求(RARP),4=反向响应 |
发送方MAC地址 | 6 | 发送方物理地址 |
发送方IP地址 | 4 | 发送方IP地址 |
目标MAC地址 | 6 | 目标物理地址(请求时为全0或广播,响应时为目标主机MAC) |
目标IP地址 | 4 | 目标IP地址 |
- 注意到源 MAC 地址、目的 MAC 地址在以太网首部和 ARP 请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的;
- 硬件类型指链路层网络类型,1 为以太网;
- 协议类型指要转换的地址类型,0x0800 为 IP 地址;
- 硬件地址长度对于以太网地址为 6 字节;
- 协议地址长度对于和 IP 地址为 4 字节;
- op 字段为 1 表示 ARP 请求,op 字段为 2 表示 ARP 应答。
ARP协议的作用
ARP 协议建立了主机 IP 地址和 MAC 地址的映射关系。
- 在网络通讯时,源主机的应用程序知道目的主机的 IP 地址和端口号,却不知道目的主机的硬件地址;
- 数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃;
- 因此在通讯前必须获得目的主机的硬件地址。
ARP协议的工作流程
1. 发送ARP请求(广播阶段)
- 触发条件:当主机A需要向主机B发送数据时,先检查自己的ARP缓存表(存储IP-MAC映射关系):
- 若存在主机B的IP-MAC映射 → 直接使用MAC地址封装数据帧。
- 若不存在映射 → 发起ARP请求。
- 具体步骤:
- 构造ARP请求报文:
- 硬件类型:标识网络类型(如以太网为1)。
- 协议类型:标识上层协议(如IP为0x0800)。
- 发送方MAC地址:主机A的MAC地址(源物理地址)。
- 发送方IP地址:主机A的IP地址(源IP)。
- 目标MAC地址:全0(或FF-FF-FF-FF-FF-FF,广播地址)。
- 目标IP地址:主机B的IP地址(待解析的IP)。
- OP:设置为1
- 广播发送:主机A将ARP请求以广播帧形式发送到局域网,所有主机均可接收。
- 构造ARP请求报文:
2. 接收ARP请求并响应(单播阶段)
- 首先判断OP字段,是否为请求MAC帧
- 主机B的处理:
- 收到广播请求后,检查报文中的“目标IP地址”是否为自己的IP:
- 若是 → 确认主机A的IP-MAC映射,将其存入自己的ARP缓存表。
- 构造ARP响应报文(单播),包含自身的MAC地址,发送给主机A。
- 收到广播请求后,检查报文中的“目标IP地址”是否为自己的IP:
- 其他主机的处理:
- 若目标IP不是自己的IP → 忽略该请求,不做响应。
3. 主机A更新ARP缓存表
- 主机A收到主机B的单播响应后,解析出主机B的MAC地址,存入ARP缓存表,后续通信直接使用该MAC地址封装数据帧。
总结:
- 源主机发出 ARP 请求,询问“IP 地址是 192.168.0.1 的主机的硬件地址是多少”,并将这个请求广播到本地网段(以太网帧首部的硬件地址填 FF:FF:FF:FF:FF:FF 表示广播);
- 目的主机接收到广播的 ARP 请求,发现其中的 IP 地址与本机相符,则发送一个 ARP 应答数据包给源主机,将自己的硬件地址填写在应答包中;
- 每台主机都维护一个 ARP 缓存表,可以用
arp -a
命令查看。缓存表中的表项有过期时间(一般为 20 分钟),如果 20 分钟内没有再次使用某个表项,则该表项失效,下次还要发 ARP 请求来获得目的主机的硬件地址。
$ arp -a
_gateway (10.2.8.1) at fe:ee:7e:91:aa:82 [ether] on eth0
为什么要有缓存表?
- 提高效率
- 加快响应速度
为什么表项要有过期时间而不是一直有效?
- 网络环境变化:网络中的设备可能会发生变动,如更换网卡、修改 IP 地址或更换设备等。
- 安全性考虑:ARP 协议存在被攻击的风险,如 ARP 欺骗。
ARP缓存表的管理
- 作用:存储IP地址与MAC地址的映射关系,避免重复发送ARP请求,提高通信效率。
- 特性:
- 时效性:表项有生存周期(通常为几分钟,可通过
arp -s
手动设置),超时后自动删除,确保映射关系更新。 - 手动操作:
arp -a
:查看本地ARP缓存表。arp -d <IP>
:删除指定IP的缓存项。arp -s <IP> <MAC>
:手动添加静态映射(用于网关或关键设备,避免动态解析失败)。
- 时效性:表项有生存周期(通常为几分钟,可通过
ARP协议的扩展与变种
1. 免费ARP(Gratuitous ARP)
- 场景:主机主动发送ARP请求(即使不需要通信),用于:
- 宣告自身存在(如服务器启动后)。
- 检测IP地址冲突(主机发送自己IP的ARP请求,若收到响应则说明IP被占用)。
2. ARP代理(Proxy ARP)
- 场景:当主机位于不同子网,但未配置路由器时,由中间设备(如路由器)代替目标主机回应ARP请求,使主机误以为对方在同一子网。
- 风险:可能导致路由混乱,通常用于老旧网络环境。
3. ARP欺骗(ARP Poisoning)
- 攻击原理:恶意主机伪造ARP响应,将错误的MAC地址注入其他主机的缓存表,导致数据流向攻击者而非目标主机(用于中间人攻击)。
- 防御措施:
- 静态绑定关键设备的IP-MAC映射(如网关)。
- 使用ARP检测工具(如
arpwatch
)监控异常ARP流量。 - 启用交换机的端口安全或DHCP Snooping功能。
ARP协议与RARP的区别
- ARP:已知IP地址,求MAC地址(正向解析)。
- RARP(反向地址解析协议):已知MAC地址,求IP地址(已逐渐被DHCP取代)。
通过以上过程,ARP协议实现了IP地址到MAC地址的动态解析,是局域网通信的基础。理解其工作原理有助于排查网络连通性问题(如“arp -a”检查缓存是否正确),并防范ARP欺骗等安全威胁。
ARP欺骗原理
ARP欺骗的本质
ARP欺骗通过伪造ARP报文,篡改局域网内设备的ARP表,使目标设备错误地将数据包发送到攻击者控制的MAC地址,从而实现中间人攻击、流量窃取或阻断通信。
ARP欺骗的常见类型与原理
1. 单向欺骗(欺骗目标主机)
- 攻击方式:
攻击者(主机X)伪造ARP响应报文,向目标主机(如主机A)发送虚假的“IP地址Y对应的MAC地址是X的MAC”。 - 结果:
主机A的ARP表被篡改,误以为主机Y的MAC地址是攻击者的MAC。当主机A向主机Y发送数据时,数据包会先发给攻击者,而非真实主机Y。
2. 双向欺骗(欺骗目标主机和网关)
- 攻击方式:
- 攻击者向目标主机发送伪造的“网关IP对应的MAC是攻击者MAC”的ARP报文。
- 同时向网关发送伪造的“目标主机IP对应的MAC是攻击者MAC”的ARP报文。
- 结果:
- 目标主机与网关之间的流量全部经过攻击者中转,形成中间人攻击。
- 攻击者可窃取、篡改或阻断双方通信数据。
3. 泛洪攻击(ARP缓存污染)
- 攻击方式:
攻击者向局域网内大量发送伪造的ARP报文,使所有主机的ARP表被无效的IP-MAC映射填满。 - 结果:
设备无法建立正确的ARP表,导致网络瘫痪或通信中断。
四、ARP欺骗的攻击步骤(以双向欺骗为例)
- 获取目标信息:
攻击者通过扫描工具获取局域网内目标主机的IP地址和网关IP。 - 伪造ARP报文:
使用工具(如arpspoof
)向目标主机和网关发送伪造的ARP响应,篡改双方的ARP表。 - 中转流量:
攻击者开启IP转发功能,使目标主机与网关的流量通过自己的设备中转,同时窃取或修改数据。 - 维持欺骗:
定期发送伪造ARP报文,防止目标设备因ARP缓存超时恢复正常映射。
五、ARP欺骗的危害
- 数据窃取:攻击者可捕获明文传输的账号密码、聊天内容等敏感信息。
- 流量篡改:篡改网页内容、植入恶意代码(如钓鱼页面)。
- 拒绝服务(DoS):通过ARP泛洪攻击导致网络瘫痪。
- 隐蔽攻击跳板:利用欺骗建立的中间人通道,进一步渗透内网其他设备。