【计算机网络】深入理解ARP协议:工作原理、报文格式与安全防护
前言
ARP 协议是在局域网中获取对应当前局域网中 IP 地址的 MAC 地址的协议。
举一个生活中的例子。
现在我们的信件来到了小区(一个局域网)门口(路由器“网关”),现在小区中的每一个家庭都有一个门牌号(IP地址),这个门牌号是小区中唯一的。但是送信的人知道把信封送到哪一个门牌号,但是不知道具体的物理地址(MAC地址)在哪里,于是就在整个小区中大喊一声(广播):“谁是门牌号xxxx(IP)”,这个时候对应的家庭(对应的目的 IP 地址)听到了这个请求(ARP请求),于是就回复道:“我是xxx,地址在yyy(物理 MAC 地址)”,于是送信的人听到了这个回复(ARP 回复),就知道往哪一个家庭送信封了。
上面的这个生活中的例子解释了大致的 ARP 协议的流程,下面我们正式来认识 ARP 协议。
1. ARP 协议简介
-
ARP:
ARP(Address Resolution Protocol,地址解析协议)是一个位于 TCP/IP 协议栈中的网络层和数据链路层之间的一层协议,主要用于:通过 IP 地址来发现对应设备的 MAC 地址的协议。
┌─────────────────────┐
│ 应用层 │
├─────────────────────┤
│ 传输层 (TCP/UDP) │
├─────────────────────┤
│ 网络层 (IP) │ ← 传统意义上的"网络层"
├─────────────────────┤
│ ARP协议模块 │ ← 跨越两层的"服务层"
├─────────────────────┤
│ 数据链路层 (以太网) │
├─────────────────────┤
│ 物理层 │
└─────────────────────┘
-
为什么需要 ARP 协议?
当我们的数据在一个局域网中传输的时候,路由器准备下一跳的时候,拿到的地址是目标主机的 IP 地址。但是下层进行网络通信的时候,并不是直接使用 IP 地址而是使用 MAC 地址(因为数据最后在局域网中的寻址方式是通过 MAC 地址来进行寻址的)。所以在进行数据传输的时候,本主机是不得知吓一跳的 MAC 地址的。即在网络通信的时候,源主机知道目标主机的 IP 地址,但是不知道目标主机的硬件地址。
而 ARP 协议建立了主机 IP 地址和 MAC 地址的关系。其核心作用:在同一个局域网内,数据包最终如何被传递到目标设备的问题。。
2. ARP 报文格式
注意:这个协议不需要将数据传递给上层协议,甚至不携带任何上层数据。
-
如下图:

下面我们来介绍一下各个字段:
-
硬件类型:
指明发送方想要知道的物理网络类型。例如:以太网(1)、令牌环网(6)、帧中继(15)……
-
协议类型:
指明发送方要映射的高层协议地址类型。例如:IPv4(0x0800)、IPv6(不适用 ARP)
-
硬件地址长度:
指明 MAC 地址的长度(单位字节)。例如:以太网的 MAC(6)
-
协议地址长度:
指明协议地址(IP 地址)的长度(单位字节)。例如:IPv4(4)
-
op(操作类型):
指明当前的 ARP 是一个请求还是应答。例如:ARP 请求(1),ARP应答(2)、RARP 请求(3,已被淘汰)、RARP(4)
-
发送端 MAC 地址:
指明发送方的物理地址。
-
发送端的 IP 地址:
指明发送端的 IP 地址。
-
目的 MAC 地址:
接收方的物理地址。在 ARP 请求中,这个字段被设置为全1(FF:FF:FF:FF:FF:FF),因为发送方还不知道目标的 MAC 地址,这正是我们需要得到的;在 ARP 响应中,这个字段被设置为请求方的 MAC 地址。
-
目标 IP 地址:
指明接受方的 IP 地址。这个字段可用于上层 ARP 协议层能够解析是否这个 ARP 请求/响应 发给自己的。
ARP 工作流程
下面我们结合一个示例(数据都是假设的),来说明 ARP 协议的工作:
-
主机A(也可以是路由器):IP 地址 192.168.1.50/24;MAC 地址 AA:AA:AA:AA:AA:AA
-
主机B:IP 地址 192.168.1.52/24;MAC 地址 BB:BB:BB:BB:BB:BB
假设主机A给主机B发送数据。两台主机在一个局域网中
-
主机A检测 ARP 缓存。主机A接受到数据之后,在主机A的网络层决定要发送IP数据包时,在将其递交给数据链路层之前,先检测对应的 ARP 缓存表中有没有对应目标 IP 地址的 MAC 地址。如果有则直接交付给下层数据链路层进行数据帧的封装;否则进入下一步。
-
主机A构建 ARP 广播。主机A会暂停数据包的发送环节,开始构建一个 ARP 请求(所以 ARP 是不携带数据的)进行当前局域网的 ARP 请求广播(目标 MAC 地址填充全1)。(字段的填写这里就省略)然后进行数据链路层的封装成数据帧,交付到网络中。
-
局域网其余主机进行匹配,匹配成功构建 ARP 应答。局域网中所有的主机都会从网络中得到收到来自主机A的 ARP 请求,都会通过底层设备(网卡)读取交付到上层协议。上层协议在解析 ARP 请求的时候,发现当前的目标 IP 地址并不是自己的地址,那么就会直接丢失这个 ARP 请求。如果匹配成功,例如 主机B收到了主机A的 ARP 请求,这个时候匹配 IP 地址成功,主机B也会将主机A的 MAC 和 IP 信息加入自己的缓存中,于是主机B就构建 ARP 应答,此时的应答具有单播功能,直接可以发送给主机A。
-
主机A收到 ARP 应答,获取 MAC 地址,更新 ARP 缓存表,发送数据。主机A在收到来自主机B的 ARP 应答之后就能获取到主机B的 MAC 地址,同时更新 ARP 缓存表,然后就可以将之前的数据包进行数据链路层的封装进行发送了。
3. ARP 攻击
在上述的过程中,我们发现:
- ARP 只会傻乎乎地收到响应之后进行 ARP 缓存的更新。基于这样一个特性,我们的 ARP 缓存表就可能收到外部的攻击!
ARP 攻击:
- 攻击者通过伪造的 ARP 报文,恶意篡改受害者 ARP 缓存表的性行为。其核心目的就是冒充其它设备的身份。
场景:
我们引入一个攻击者M:
- M:IP = 192.168.1.99/24,MAC = MM:MM:MM:MM:MM:MM
-
对主机A进行欺骗:攻击者M主动向主机A发送一个伪造的 ARP 应答包(注意:这里甚至不需要主机A主动发起 ARP 响应包)。这个包指明了当前的 IP 地址是“192.168.1.52/24”(主机B),MAC 地址是“MM:MM:MM:MM:MM:MM”(攻击者M的MAC 地址)。于是由于 ARP 协议无条件的信任,那么主机A会将自己的 ARP 缓存表中的原本 192.168.1.52 <=> BB:BB:BB:BB:BB:BB 的映射改为:192.168.1.52 <=> MM:MM:MM:MM:MM:MM。
-
对主机B进行欺骗:与A同理。
-
后果:从此之后主机A、B发送给对方的数据都发送到了攻击者M这里,他就成为A、B之间的中间人。它可以进行一系列的操作:窃听、篡改、挟持……
解决方案:
- 静态绑定 ARP
- ARP 防护软件
- 交换机安全功能
- 网络分段
- ……
大家有兴趣可以自行了解。
总结
-
ARP 协议定位:主要解决了在网络中传输数据而不清楚目标主机的实际物理地址的问题。(主要解决什么问题)
-
ARP 协议报文格式:

-
ARP 协议的工作流程
-
ARP 协议的漏洞、ARP 攻击。
原文地址:https://blog.csdn.net/2403_88316985/article/details/153685418
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!
