1.9 DAD (地址冲突检测) 原理深度解析
在网络世界中,IP 地址就像我们的身份证号,必须是唯一的。如果网络中两台设备拥有相同的 IP 地址,就会发生冲突,导致通信异常甚至网络中断。
DAD (Duplicate Address Detection,地址冲突检测) 就是一种用来确保 IP 地址在网络链路中唯一性的机制。
本文将分别介绍 IPv4 和 IPv6 环境下的 DAD 工作原理。
1. IPv4 机制:基于免费 ARP
在 IPv4 网络中,DAD 主要通过 免费 ARP (Gratuitous ARP) 来实现。(关于免费 ARP 的详细原理,请参考上一章 1.8 免费 ARP 详解)
当接口配置 IP 地址或接口 Up 时,设备会发送 Sender IP = Target IP 的 ARP 请求。
1.1 图解 IPv4 冲突检测流程
当接口配置 IP 地址或接口 UP 时,会触发 DAD 流程:
- 发送请求:设备发送 免费 ARP (Gratuitous ARP) 请求。
Sender IP = 192.168.1.100(自己想要的 IP)Target IP = 192.168.1.100(自己想要的 IP)
- 等待响应:
- 无响应:IP 可用。
- 有响应:收到 Reply,说明有人在用。此时设备会报错 (Duplicate IP Address) 并禁用该 IP。
Who has .100? Tell .100
当你给电脑或路由器配置了一个静态 IP(例如 192.168.1.100),或者通过 DHCP 获取到一个 IP 时,系统并不会马上使用它,而是会先进行冲突检测:
- 发送请求:设备以广播形式发送一个免费 ARP 请求包。
- 源 MAC:本机 MAC
- 目的 MAC:全 F (广播)
- 源 IP:192.168.1.100
- 目的 IP:192.168.1.100
- 等待响应:
- 情况 A(无冲突):如果在一段时间内(通常是几百毫秒),没有收到任何 ARP Reply(应答),设备就认为网络中没有其他人在使用这个 IP。此时,该 IP 地址正式生效。
- 情况 B(有冲突):如果网络中已经有一台设备使用了 192.168.1.100,它收到这个广播后,会按照 ARP 协议规则,发现“有人在问我的 IP”,于是立刻回复一个 ARP Reply:“我是 192.168.1.100,我的 MAC 是 XXX”。
- 处理冲突:
- 发送检测的设备收到了 ARP Reply,意识到“撞号”了。
- 操作系统通常会弹出“IP 地址冲突”的警告,并且该网卡会禁用此 IP,无法上网,直到冲突解决。
2. IPv6 机制:基于 NDP 协议
IPv6 抛弃了 ARP 协议,改用 ICMPv6 的 NDP (Neighbor Discovery Protocol,邻居发现协议) 来实现地址解析和重复地址检测。
IPv6 的 DAD 机制比 IPv4 更加规范和严谨。
2.1 核心概念:NS 与 NA
- 试验地址 (Tentative Address):当一个 IPv6 单播地址刚配置到接口上时,它处于“试验”状态。此时该地址不能用于正常的单播通信,只能用于 DAD 检测。
- NS (Neighbor Solicitation,邻居请求):类似于 IPv4 的 ARP 请求。
- NA (Neighbor Advertisement,邻居通告):类似于 IPv4 的 ARP 应答。
- 被请求节点组播地址 (Solicited-Node Multicast Address):每个 IPv6 单播地址都有一个对应的组播地址。监听特定 IP 的设备一定会监听其对应的被请求节点组播组。
2.2 图解 IPv6 冲突检测流程
Target=2001::1
假设设备 A 想要配置 IPv6 地址 2001::1。
- 状态置位:接口配置
2001::1,状态标记为 Tentative。 - 加入组播组:设备 A 加入
2001::1对应的被请求节点组播组FF02::1:FF00:1。 - 发送 NS 报文:设备 A 发送一个 NS 报文进行探测。
- 源 IP:
::(未指定地址,因为此时本机 IP 还没生效) - 目的 IP:
FF02::1:FF00:1(被请求节点组播地址) - 查询内容:Target Address =
2001::1
- 源 IP:
- 等待响应:
- 情况 A(无冲突):如果在规定时间内没有收到针对
2001::1的 NA 报文,则 DAD 成功。地址状态从 Tentative 变为 Preferred (首选) 或 Valid (有效),可以正常使用。 - 情况 B(有冲突):如果网络中已有设备 B 使用了
2001::1,它也是该组播组的成员。收到 NS 后,设备 B 会回复一个 NA 报文(目的地址为所有节点组播FF02::1),宣示主权。
- 情况 A(无冲突):如果在规定时间内没有收到针对
- 处理冲突:
- 设备 A 收到 NA,检测失败。
- 该 IPv6 地址被标记为 Duplicate (重复),无法使用。
3. 故障现象:当冲突发生时会看到什么?
当 DAD 检测到地址冲突时,不同设备会有不同的提示方式。
3.1 桌面端:Windows 弹窗与日志
在 Windows 系统中,如果检测到 IP 冲突,右下角任务栏通常会弹出黄色警告三角形,提示“Windows 检测到 IP 地址冲突”。
同时,在“事件查看器 (Event Viewer)”的系统日志中,可以看到来源为 Tcpip 的错误日志 (Event ID 4199):
系统检测到 IP 地址 192.168.1.100 与网络硬件地址 XX-XX-XX-XX-XX-XX 发生冲突。

3.2 服务器端:Linux 内核日志
在 Linux 系统中(如 Ubuntu/CentOS),通常会在终端或 /var/log/syslog (或 /var/log/messages) 中打印内核日志:
# dmesg 输出示例
[ 123.456789] IPv4: host 192.168.1.100/24 already assigned to 52:54:00:12:34:56
[ 123.456790] ARPOP_REPLY 192.168.1.100 [52:54:00:12:34:56] 00:0c:29:ab:cd:ef3.3 网络侧:交换机/路由器的告警
网络设备通常会通过控制台 (Console) 或日志中心 (Syslog) 输出告警信息。
Cisco IOS 设备:
%IP-4-DUPADDR: Duplicate address 192.168.1.100 on Vlan1, sourced by 0000.1111.2222这条日志明确指出了冲突的 IP (192.168.1.100) 以及对方的 MAC 地址 (0000.1111.2222)。

华为 VRP 设备:
ARP/4/ARP_DUPLICATE_IP_ADDR: Detected an IP address conflict. The IP address is 192.168.1.100, the interface is GigabitEthernet0/0/1, and the source MAC address is 00e0-fc00-0001.
可下载实验拓扑查看抓包信息:
4. 网管实战:如何排查“哑终端”冲突?
对于没有显示器的服务器、IoT 设备或哑终端,我们无法直接看到“IP 冲突”的弹窗。此时,我们需要从网络设备(交换机/路由器)侧进行排查。
4.1 侦探思路:捕捉 MAC 地址漂移
IP 冲突的本质是 一个 IP 对应了多个 MAC 地址。
在交换机的 ARP 表中,这个冲突的 IP 会在两个不同的 MAC 地址之间来回切换(Flapping),或者在日志中频繁出现针对同一 IP 的不同 MAC 记录。
4.2 三步定位法:ARP、日志与 MAC 表
步骤 1:查看 ARP 表
在网关设备上查看 ARP 表,检查疑似冲突的 IP 对应的 MAC 地址是否稳定。
- Cisco:
show ip arp | include 192.168.1.100 - Huawei:
display arp | include 192.168.1.100
如果你多次执行该命令,发现 MAC 地址在变化,说明存在冲突。
步骤 2:查看设备日志
这是最有效的方法。交换机通常会记录 ARP 冲突或重复 IP 的告警。
查看 Cisco 日志:
textshow logging | include DUPADDR输出示例:
%IP-4-DUPADDR: Duplicate address 192.168.1.100 on Vlan1, sourced by 0000.1111.2222查看 Huawei 日志:
textdisplay logbuffer | include DUPLICATE输出示例:
ARP/4/ARP_DUPLICATE_IP_ADDR: ... IP address is 192.168.1.100 ... source MAC address is 00e0-fc00-0001.
步骤 3:定位物理端口
一旦通过日志或 ARP 表找到了冲突的 MAC 地址(例如 00e0-fc00-0001 和 0000.1111.2222),就可以在交换机上查找这些 MAC 位于哪个物理端口。
- Cisco:
show mac address-table address 0000.1111.2222 - Huawei:
display mac-address 00e0-fc00-0001
通过这一步,你可以精确地知道是哪两根网线连接的设备配置了相同的 IP,然后物理拔线或关闭端口即可解决问题。
5. 总结与对比:IPv4 vs IPv6
| 特性 | IPv4 DAD | IPv6 DAD |
|---|---|---|
| 基础协议 | ARP (免费 ARP) | ICMPv6 (NDP) |
| 报文类型 | ARP Request / Reply | NS / NA |
| 源 IP 地址 | 自身的 IPv4 地址 (Sender IP) | :: (未指定地址) |
| 目的类型 | 广播 (Broadcast) | 组播 (Multicast) |
| 优势 | 简单,兼容性好 | 效率高(不打扰不想关设备),标准化 |
理解 DAD 原理对于排查网络故障(如设备无法上线、Windows 报 IP 冲突错误)非常有帮助。当你在抓包软件(如 Wireshark)中看到源 IP 为 0.0.0.0 (IPv4 DHCP 探测时) 或 :: (IPv6 DAD 时) 的请求包时,通常就是设备正在进行地址冲突检测。