ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

补—数据链路层

2026/8/13 23:37:37 拓冰建站 浏览量
补—数据链路层

六、ARP协议

6.1 定义

ARP地址解析协议)是一个比较特殊的协议——它介于数据链路层和网络层之间,既不是纯粹的数据链路层协议,也不是纯粹的网络层协议。

ARP的作用:建立主机IP地址和MAC地址的映射关系

为什么需要ARP?

  • 网络通信时,源主机知道目的主机的IP地址和端口号,但不知道目的主机的硬件地址

  • 数据包是先被网卡硬件接收,再交给上层协议处理的

  • 因此,在通信之前,必须先获得目的主机的MAC地址

6.2 工作流程

可以概括为:广播请求,单播应答

具体步骤

1、主机A想和主机B通信,知道B的IP地址,但不知道B的MAC地址

2、主机A发送ARP请求包,以广播形式发送到整个局域网:

  • 以太网帧目的MAC填 FF:FF:FF:FF:FF:FF

  • ARP请求中包含:发送端IP、发送端MAC、目标IP、目标MAC

  • 请求内容:"IP地址是172.20.1.2的主机,你的MAC地址是多少?"

3、同一网段的所有主机都收到这个广播请求,但只有IP地址匹配的主机B会处理

4、主机B发送ARP应答包,以单播形式直接回给主机A:

  • 以太网帧目的MAC填主机A的MAC地址

  • ARP应答中包含:发送端IP、发送端MAC

  • 应答内容:"我就是172.20.1.2,我的MAC地址是08:00:20:74:CE:EC"

5、主机A收到应答后,就知道了主机B的MAC地址,可以正常通信了

6.3 缓存表

每次通信都发ARP请求?那也太低效了。实际上,每台主机都维护一个ARP缓存表,用来存放最近学到的IP-MAC映射关系。

查看ARP缓存表:

$ arp -a gateway (192.168.1.1) at 10:bd:18:08:af:62 [ether] on enp0s3 ? (192.168.1.107) at e4:f8:9c:be:af:41 [ether] on enp0s3

两个问题:

Q1:为什么要有缓存表?
如果每次通信都发ARP请求,网络上会充斥大量ARP广播,效率很低。有了缓存表,大部分通信直接查表就能拿到MAC地址,不需要每次都请求。

Q2:为什么表项要有过期时间而不是一直有效?
因为网络环境是动态的——主机可能更换网卡、可能更换IP地址、可能下线了。如果缓存永久有效,就会出现"IP还对应着旧MAC"的问题,导致通信失败。

6.4 数据报格式

ARP报文封装在以太网帧中传输,其格式如下:

各字段含义:

字段长度(字节)含义
硬件类型2链路层网络类型,1表示以太网
协议类型2要映射的协议地址类型,0x0800表示IP
硬件地址长度1硬件地址长度,以太网为6
协议地址长度1协议地址长度,IPv4为4
op2操作类型:1=ARP请求,2=ARP应答
发送端以太网地址6发送方MAC地址
发送端IP地址4发送方IP地址
目的以太网地址6目标MAC地址
目的IP地址4目标IP地址

注意到源MAC地址、目的MAC地址在以太网首部ARP请求/应答报文中各出现了一次。对于以太网来说确实有些冗余,但ARP协议设计时考虑了通用性——如果链路层不是以太网,而是其他类型的网络,这两份地址就不一定相同了。

6.5 在局域网中的完整过程

场景说明

  • 局域网中有多台主机(A、B、C、D、E)和一台路由器(网关)

  • 路由器连接外网和局域网

  • 路由器的接口有IP地址和MAC地址

  • 主机A想和外网通信,需要先把数据发给网关路由器,因此需要知道网关的MAC地址

  • 主机A发送ARP广播请求"谁是网关IP?请告诉我你的MAC地址"

  • 路由器收到后,以单播形式回复自己的MAC地址

  • 主机A学到网关的MAC后,就可以把发往外网的数据先封装到目的MAC为网关MAC的帧中,交给路由器转发


七、欺骗原理

7.1 本质

ARP协议设计时没有任何认证机制——主机收到ARP应答后,不管这个应答是不是自己请求的,都会直接用应答中的IP-MAC映射更新自己的ARP缓存表。

这就是ARP欺骗得以实现的根本原因:攻击者可以伪造ARP应答包,让目标主机的ARP缓存中写入错误的IP-MAC映射,从而把流量劫持到攻击者的机器上。

7.2 三步骤

步骤一:正常通信状态

正常情况

  • 主机A的ARP缓存中:网关IP→ 网关MAC

  • 网关R的ARP缓存中:主机A的IP→ 主机A的MAC

  • 主机A和网关之间正常通信,流量直接走网关

步骤二:攻击者发送伪造ARP应答

攻击者主机M开始行动:

  • 主机M向主机A大量发送伪造的ARP应答:"我是网关IP,我的MAC地址是macM"

  • 主机M同时向网关R大量发送伪造的ARP应答:"我是主机A的IP,我的MAC地址是macM"

  • 因为ARP没有认证,主机A和网关R都会更新自己的ARP缓存

  • 更新后:

    • 主机A认为:网关IP → macM

    • 网关R认为:主机A的IP → macM

步骤三:中间人攻击形成

此时,主机M就成了中间人

  • 主机A发往网关的数据 → 目的MAC是macM → 数据先到了主机M

  • 网关发往主机A的数据 → 目的MAC是macM → 数据也先到了主机M

  • 主机M可以选择转发数据,也可以选择不转发

  • 主机A和网关都以为在和对方直接通信,实际上所有流量都经过了攻击者

ARP欺骗的危害极大,攻击者可以:窃听敏感信息、篡改数据、植入恶意代码、进行DNS劫持等。这也是局域网安全中一个非常经典的攻击手段。

7.3 防御方案

针对ARP欺骗,常见的防御手段有以下几种:

方案一:静态ARP绑定

原理:手动在主机和网关设备上配置静态的IP-MAC映射,静态ARP表项不会被动态ARP应答更新。

配置示例

# 查看当前ARP表 $ arp -a # 添加静态ARP绑定(网关IP和网关MAC) $ arp -s 192.168.1.1 10:bd:18:08:af:62 # 删除静态ARP绑定 $ arp -d 192.168.1.1

优点:简单直接,效果可靠

缺点:大型网络中配置和维护成本高,设备更换网卡或IP时需要手动更新

适用场景:小型网络、关键服务器

方案二:交换机端口安全

原理:在交换机端口上配置允许接入的MAC地址数量,甚至绑定特定MAC地址,防止伪造MAC地址的设备通信。

配置示例

[Switch] interface GigabitEthernet 0/0/1 [Switch-GigabitEthernet0/0/1] port-security enable [Switch-GigabitEthernet0/0/1] port-security max-mac-num 1 [Switch-GigabitEthernet0/0/1] port-security protect-action restrict

适用场景:企业级网络,接入层交换机部署

方案三:DAI

原理:交换机结合DHCP Snooping绑定表,检查ARP报文中的源IP和源MAC是否匹配绑定表,不匹配则丢弃。

方案四:ARP防火墙软件

在主机上安装ARP防火墙,软件会主动检测ARP应答的合法性,拦截伪造的ARP包。

适用场景:个人用户、公共WiFi环境

各个方案对比
防御方案部署位置效果维护成本适用规模
静态ARP绑定主机+网关小型网络
端口安全接入交换机较好企业网络
DAI接入交换机企业网络
ARP防火墙终端主机一般个人用户