ARP
2024年2月17日大约 6 分钟
介绍
地址解析协议(Address Resolution Protocol, ARP) 是 IPV4 中重要的协议,主要用于通过 IP 地址确定目标设备的 MAC 地址,以保证数据的正确送达。
MAC 地址
媒体访问控制地址 (Media Access Control Address, MAC) 又称为硬件地址,用来唯一标识网络设备,如网卡、路由器等。MAC 地址长度为 48 位,3 - 24 位由 IEEE 管理,后 24 位由硬件厂商管理。和 IP 的动态分配不同, MAC 地址一般会写入固件或硬件中,是不可修改的。
MAC:
FF-FF-FF-FF-FF-FF
是预留的广播地址
MAC 地址的构成
位数 | 含义 |
---|---|
第1位 | 单播地址(0)/多播地址(1) |
第2位 | 全局地址(0)/本地地址(1) |
第3-24位 | 由 IEEE 管理并保证不重复 |
第25-48位 | 由厂商管理并保证不重复 |
ARP 报文
长度(位) | 48 | 48 | 16 | 16 | 16 | 8 | 8 | 16 | 48 | 32 | 48 | 32 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
数据类型 | 目标以太网地址 | 源以太网地址 | 帧类型 | 硬件类型 | 协议类型 | 硬件地址长度 | 协议地址长度 | 操作码 | 源硬件地址 | 源协议地址 | 目标硬件地址 | 目标协议地址 |
组成 | 14字节 以太网首部 | 28字节 ARP请求/应答 |
提示
字段 | 长度 | 描述 |
---|---|---|
以太网目标 MAC 地址 | 48 位 | 以太网目标 MAC 地址。在 ARP 请求报文中,该字段为广播地址 0xffff-ffff-ffff |
以太网源 MAC 地址 | 48 位 | 以太网源 MAC 地址 |
帧类型 | 16 位 | 数据类型。该字段的值在 ARP 请求或应答报文中为 0x0806 |
硬件类型 | 16 位 | 硬件地址类型。该字段的值在以太网中为 1 |
协议类型 | 16 位 | 要映射到发送方的协议地址类型。该字段的值为 IP 地址时为 0x0800 |
硬件地址长度 | 8 位 | 硬件地址长度。该字段的值在 ARP 请求或应答报文中为 6 |
协议地址长度 | 8 位 | 协议地址长度。该字段的值在 ARP 请求或应答报文中为 4 |
操作码 | 16 位 | 操作类型。值如下:1: ARP 请求报文 2: ARP 应答报文 |
源 MAC 地址 | 48 位 | 源 MAC 地址。该字段的值与以太网帧头中的以太网源 MAC 地址相同 |
源 IP 地址 | 32 位 | 源 IP 地址 |
目标 MAC 地址 | 48 位 | 目标 MAC 地址。在 ARP 请求报文中,该字段为 0x0000-0000-0000 |
目标 IP 地址 | 32 位 | 目标 IP 地址 |
工作原理
在支持 TCP/IP 协议的网络设备中会各自维护一张 ARP 缓存表,缓存表中存储了 IP 地址的映射关系,格式为 IP -MAC地址-存活时间(TTL)
, TTL
默认值为 20 分钟。
例子
假设局域网中存在以下设备:
主机名称 | IP地址 | MAC地址 |
---|---|---|
A | 192.168.50.00 | 00-AA-00-10-A2-00 |
B | 192.168.50.01 | 00-BB-00-10-B2-00 |
C | 192.168.50.02 | 00-CC-00-10-C2-00 |
D | 192.168.50.03 | 00-DD-00-10-D2-00 |
E | 192.168.50.04 | 00-EE-00-10-E2-00 |
如果 A (192.168.50.00) 向 D (192.168.50.03) 发送数据,将会执行以下步骤:
- 若
A
主机的ARP
缓存表中存在D
主机的IP
地址,则直接从缓存表中获取D
主机的MAC
地址,将MAC
地址写入数据帧中发送即可。 - 若
A
主机的ARP
缓存表中不存在D
主机的IP
地址,则会在网络中发送广播,地址为广播地址。所有网络中的主机都会收到该广播。 D
主机在收到广播后会回应A
主机,使用单播告诉A
主机自己的MAC
地址。其他主机在收到广播后不会回应。A
主机在收到回应后即可向D
主机发送消息,并更新自己的缓存表。
若主机不在同一个局域网怎么办?
若 A
主机和 D
主机不在一个局域网下,通过两个路由器连接,则 A
所在的路由器会根据目标 IP
获取到目标子网路由器的 IP
和 MAC
地址。步骤如下:
A
主机首先会判断D
主机是否处于同一个网段,若不在同一个网段,则 A 主机会尝试获取默认网关(通常为本地路由器)的 MAC 地址。A
主机向路由器发送数据,数据将被路由器转发。- 路由器转发数据前通过
ARP
协议获取目标路由器的MAC
地址。 - 路由器发送数据到目标路由器,模板路由器再通过
ARP
缓存将数据发送给目标子网的主机。
什么是反向地址解析协议和代理地址解析协议?
- 反向地址解析协议 (Reverse ARP, RARP)
反向地址解析协议主要用于通过设备的 MAC 地址获取到设备的 IP 地址,网络设备通过 RARP 协议将自身的 MAC 地址广播给服务器,服务器收到请求,分配 IP 地址给网络设备。
- 代理地址解析协议 (Proxy ARP)
代理地址解析协议主要用于共用路由器 IP 的不同网段的子设备能够解析 MAC 地址,发送方只需要发送数据给路由器,路由器再通过代理地址解析协议转发数据到目标设备。
常见的 ARP 攻击方式
名称 | 攻击方式 | 如何防范 |
---|---|---|
ARP泛洪攻击 (Denial of Service, DoS) | 1. 一般网络设备的 ARP 表有大小限制,攻击者通过伪造大量 IP 地址变化的 ARP 报文使得 ARP 表无法新增条目从而使正常通信无法进行 2. 攻击者通过使用工具扫描网段主机或者跨网段扫描时会向设备发送大量目标 IP 不能解析的报文,导致频繁触发 ARP Miss 错误,并生成大量临时表项,同时广播大量 ARP 请求报文请求解析 IP,导致 CPU 占用过高 | 1. ARP报文限速 在网关部署ARP报文限速功能,可以统计一段时间内的 ARP 报文数量,若超过了阈值则丢弃,从而减少设备负荷。 2. ARP Miss消息限速 和 ARP 报文限速类似,限制 ARP Miss 消息 3. ARP表项严格学习 ARP表项严格学习功能是指设备仅学习自己发送的 ARP 请求的应答,不接受其他设备发送的 ARP 请求。 4. ARP表项限制 限制 ARP 表动态表项的数目,若超过则不再学习新的表项。 |
ARP欺骗攻击 | 攻击者通过发送伪造的 ARP 报文,恶意修改网络设备的 ARP 表项,从而造成通信异常 | 1. ARP表项固化 在第一次收到 ARP 报文后不允许修改 ARP 表项,从而防止被恶意修改。 2. 免费 ARP (Free ARP) 网关通过主动向主机发送自己的 IP 地址为目标地址的 ARP 报文,定时更新主机的 ARP 表中的 MAC 地址,从而避免用户的消息传到不正确的网关。 |