前言: 本文深入剖析内网通信原理与ARP协议工作机制,从网络分层协作(数据链路层寻址、网络层路由)到MAC地址与以太网帧的核心作用,系统讲解ARP协议的地址解析流程、缓存机制及安全风险,并通过Kali Linux下的arpspoof实验演示ARP欺骗攻击,最后提出绑定静态MAC地址等防御措施。期待本文能帮助您理解局域网通信本质,掌握协议分析及安全防护能力。
在网络通信过程中,当报文经过公网路由到达目标子网后,最终寻址问题就转化为局域网内的主机通信问题。这一过程由数据链路层协议实现,与网络层形成明确分工:
关键认识:数据传输是手段而非目的,完成业务交互才是最终目标。
局域网技术发展初期,各区域使用私有协议。随着网络互联需求增长,逐步统一为以太网、令牌环网等标准化协议。下文将以以太网为例解析通信机制。
MAC 地址用于标识计算机的唯一性,它以 48 比特位存储,被固化在计算机网卡中,全球唯一。

在局域网内,主机之间的通信处于数据链路层。例如,主机 A 给主机 E 发数据,这个过程所有主机都能接收到(这种现象叫泛洪),但只有目标 MAC 值与自身匹配的主机才会接收数据,其他主机就像“吃瓜群众”。若一个主机接收并非发给自己的数据,这个过程就叫抓包。
试想一下,如果很多台主机同时发数据会发生什么?
这就是网用的人越多就越卡的原因之一。以太网本质就是共享资源(临界资源),具有互斥属性。

任何协议主要解决两个问题:如何分离数据?如何分用数据?从上述格式可知,以太网帧是固定长度协议,去掉头部和尾部固定字节就能得到有效载荷,而类型字段解决了分用问题。
报文传到链路层,链路层会根据什么添加源 MAC 地址和目的 MAC 地址呢?它是根据目标 IP 来判断的,如果目标 IP 在该局域网内,就添加对应主机的 MAC 地址;如果不在该局域网内,就添加路由器的 MAC 地址,如下:

但问题是,如何通过目标 IP 得到它的 MAC 地址呢?
如果只知道对方 IP 地址,不知道 MAC 地址,就无法给对方发送数据帧,因此需要一种局域网协议,将 IP 地址转化为对应的 MAC 地址。这种技术称为 ARP 协议,即地址解析协议。
路由器会拿着目标 IP 进行 ARP 操作,在局域网内广播。目标主机收到后进行响应,给出自己的 MAC 地址。

注:以上四个字段基本都是固定的。
后面四个字段如上图所示,此处不做解释。
如上所述,以太网报头加上 ARP 请求/应答并不足 46 字节,数据帧太小会影响传递效率。在实际传输中,会在尾部添加一些垃圾数据,使报文达到 46 字节。
当报文到达链路层,但不知道对端 MAC 地址时,路由器会向局域网内所有主机广播一个 ARP 请求,所有主机都会接收该请求,然后在 ARP 层匹配 IP 是否为自己的。如果不是,就丢弃该请求。
如果匹配到 ARP 请求的目的 IP 是自己的,那么该主机会组织一个 ARP 应答,填充自己的 MAC 地址,发送给源 IP 主机(通常是路由器)。
主机拿到报文后,先看类型字段,如果是 0806,就交给 ARP 层处理。ARP 层先获取 OP 字段,如果是应答,就提取源 IP 和源 MAC 做映射关系。
路由器(或主机)会在一段时间内(2 - 20 分钟)记录下局域网中各 IP 对应的 MAC 地址。再次发送报文时,就不用进行 ARP 请求,直接填充目标 MAC 字段,从而提高效率。储存这个映射关系的叫 ARP 缓存表,每个主机都有。
我们可以在电脑上查看 ARP 缓存表(打开命令提示符,输入 arp -a 指令):
win + r,输入 cmd 回车。arp -a 回车,示例如下:C:\Users\xyk33>arp -a
接口: 192.168.43.189 --- 0x7
Internet 地址 物理地址 类型
192.168.43.1 42-8d-65-18-66-98 动态
192.168.43.255 ff-ff-ff-ff-ff-ff 静态
224.0.0.22 01-00-5e-00-00-16 静态
224.0.0.251 01-00-5e-00-00-fb 静态
224.0.0.252 01-00-5e-00-00-fc 静态
255.255.255.255 ff-ff-ff-ff-ff-ff 静态为什么不永久记录下来呢?因为 IP 可能随时变动,是动态分配的,MAC 也可能被用户更换。
在局域网中,任何主机都可能收到 ARP 请求或 ARP 应答。同一层级的路由器也属于一个局域网,它们之间也会进行 ARP 请求和应答,并有自己的ARP缓存表,包括国家之间的路由器。
正常 ARP 报传输:

任何局域网内的主机要上互联网,都必须先经过路由器,因此需要知道路由器的 MAC 地址,会向路由器发送 ARP 请求。
以 A 主机为例,如果有一个中间人(黑客)冒充路由器(伪造路由器 IP)向主机 A 发送 ARP 响应,填充的是中间人自己的 MAC 地址。那么主机 A 发送的报文就会都到达中间人手上,中间人可以把它们丢弃,导致主机 A 上不了网;或者进行篡改后再交给路由器通向互联网。
不仅如此,中间人还可以向路由器发送 ARP 响应,伪造主机 A 的 IP 地址,然后填充自己的 MAC 地址。这样,外网发给主机 A 的信息就会由路由器发给中间人。中间人同样可以对报文进行篡改或丢弃。

第二步:

arpspoof是 ARP 欺骗攻击工具(属于 dsniff 工具包),用于在局域网(LAN)中发起中间人攻击(MITM),通过伪造 ARP 响应包欺骗目标设备,使其网络流量经过攻击者的机器。
基本语法:

实验:使用虚拟机 Kali 系统断掉物理机(宿主机)的网。
注意:提前查看物理机是否能正常上网。
1.查看物理机的ip地址(打开命令提示符输入ipconfig指令):
如果是连接WiFi则查无线局域网适配器WLAN,如果是连线上网查以太网适配器,如下:

虚拟机查ip和mac地址:指令ifconfig。如下:

2.物理机查看网关mac地址(即查看arp缓存表)
如下:

3.使用arpspoof向网关(路由器)发送arp响应如下。
arpspoof -i eth0 -t 192.168.43.189 192.168.43.1如下:

让它一直运行,不要中断。
4.检验是否能上网,并使用arp -a再次查看arp缓存表的网关mac地址。
不出以外的话,你的物理机已经上不了网了,而且arp缓存表的网关mac地址也变成虚拟机的mac地址了。如下:

5.要恢复上网在虚拟机上Ctrl+c发送信号终止进程即可。
为什么停止攻击后就能立即恢复?因为上不了网(目标主机不可达)会触发ARP重查。
以上过程看似很复杂,事实上攻击过程很简单,只用了一行指令。看上去复杂的是因为我们做了详细的验证过程。
ARP 攻击的防御方法有很多种,最简单的就是绑定静态的网关 MAC 地址,其次可以使用 ARP 防火墙等。下面讲解静态绑定 MAC 地址的方法。
netsh i i show in 指令查看对应 WLAN 的索引,示例如下:
netsh -c i i add neighbors 索引值 网关IP地址 网关MAC地址如下:
netsh -c i i add neighbors 7 192.168.43.1 42-8d-65-15-66-98静态绑定后即使来了arp响应包也不会更新自己的arp缓存表,就无法被攻击。
非常感谢您能耐心读完这篇文章。倘若您从中有所收获,还望多多支持呀!