---
title: "IPv4和IPv6的区别：地址、NAT与归属地，以及怎么查你实际走哪一个"
description: "讲清IPv4和IPv6的区别里真正影响日常使用的几项：地址长度与写法、NAT、地址分配、双栈出口与归属地偏差，并给出 Windows、macOS、Linux 查看本机 IPv6 和分别查询两个出口的命令。"
url: https://cdnping.org/blog/ipv4-vs-ipv6-how-to-check-yours
language: zh-CN
published: 2026-10-23
category: "网络基础"
tags: ["IPv6","IPv4","双栈网络","出口IP","网络自查"]
source: cdnping.org
license: Free to quote and summarize with a link to the url above.
---
# IPv4和IPv6的区别：地址、NAT与归属地，以及怎么查你实际走哪一个

IPv4和IPv6的区别，最直接的一条是地址长度：IPv4 是 32 位，IPv6 是 128 位，所以 IPv6 不再需要靠 NAT 让一群设备共用一个公网地址。对日常使用影响更大的是另一件事：现在很多家庭和手机网络是“双栈”，同一台电脑同时有 IPv4 和 IPv6 两个出口，访问哪个网站走哪一个、两个出口显示的归属地和运营商是否一致，都不一定。

这篇先把区别讲清楚，再给出一套可以照着做的自查步骤：看本机有没有 IPv6、两个出口分别是什么、浏览器实际用的是哪一个。

## IPv4 和 IPv6 到底差在哪？

网上的对比表很多，但有几项说法互相矛盾，比如“IPv6 更安全”“IPv6 没有广播所以更快”。下面只列能在协议层面确认、并且会影响你排查问题的差异。

| 项目 | IPv4 | IPv6 |
|---|---|---|
| 地址长度 | 32 位，约 43 亿个（2^32） | 128 位 |
| 写法 | 点分十进制，如 `203.0.113.7` | 冒号分隔的 8 组十六进制，可省略前导零，连续的全零组用 `::` 压缩一次，如 `2001:db8::7` |
| 在 URL 里 | 直接写 `http://203.0.113.7:8080/` | 必须加方括号 `http://[2001:db8::7]:8080/` |
| 公网地址怎么来 | 运营商给路由器一个（有时连这一个也是 CGNAT 后的共享地址），家里设备走 NAT | 运营商下发一段前缀，家里每台设备各自拿到全球可路由的地址 |
| 局域网内地址配置 | DHCP | SLAAC（路由器发通告，设备自己生成地址）和/或 DHCPv6 |
| 二层地址解析 | ARP | NDP，基于 ICMPv6 |
| 广播 | 有 | 没有，改用组播，如 `ff02::1` 表示链路上所有节点 |
| 报头 | 长度可变，含校验和，路由器可以分片 | 固定 40 字节基本报头，去掉了校验和，分片只在源端做，其他功能放进扩展报头 |

### “IPv6 更安全”这句话对吗？

不完全对。早期规范要求 IPv6 实现必须支持 IPsec，很多文章据此写成“IPv6 自带加密”。后来的规范已经把这项要求放宽为“应当支持”，而且“支持”不等于“默认启用”。你访问网站时的加密靠的仍然是 HTTPS，与走 v4 还是 v6 无关。

真正需要注意的安全差异反而在另一面：IPv4 下家里设备藏在 NAT 后面，外部默认连不进来；IPv6 下每台设备都有公网地址，能不能被外部访问完全取决于路由器和系统的防火墙规则。另外，ICMPv6 不能像有些人处理 IPv4 那样整段屏蔽，邻居发现和路径 MTU 探测都依赖它。

### 没有 NAT 意味着什么？

在 IPv4 下，你在网站眼里通常是“路由器的那个公网地址”，如果运营商还做了 CGNAT，就是很多用户共用的一个地址（这对 IP 信誉的影响见[共享 IP 与 CGNAT 会影响 IP 信誉吗](/blog/shared-ip-cgnat-reputation)）。在 IPv6 下，网站看到的是你这台设备自己的地址。

为了不让一个固定地址长期暴露设备身份，主流系统默认启用“隐私扩展”：在稳定地址之外再生成临时地址，主动发起的连接优先用临时地址，并定期轮换。所以你今天查到的 IPv6 出口，过几小时可能就变了，但前面的网络前缀通常不变。

## 为什么同一台机器会有两个出口？

双栈网络下，系统同时拿到了 IPv4 和 IPv6 的地址和默认路由。访问一个域名时，系统会同时查 A 记录（v4）和 AAAA 记录（v6）。如果网站两种都有，现代浏览器和系统用一种叫 Happy Eyeballs 的策略：优先尝试 IPv6，稍等一小段时间还没连上就并行发起 IPv4，哪个先成就用哪个。

这带来几个容易被忽略的结果：

- 同一个网页，不同资源可能走不同协议。主站有 AAAA 记录走 v6，某个第三方接口只有 A 记录就走 v4。
- v6 不稳的时候会悄悄回落。页面能打开，只是偶尔慢一拍，你未必意识到 v6 其实有问题。
- 两个出口可能属于不同网络。例如 v4 出口经过公司网关或其他转发路径，v6 出口直接是本地运营商。网站如果同时看到两个，会认为你“位置不一致”。

最后一种情况如果和代理有关，原因和排查方法在[IPv6 代理不生效：双栈网络下 IPv4 与 IPv6 出口不一致的原因与排查](/blog/ipv6-dual-stack-proxy-mismatch)里单独讲，本文不展开代理配置。

## 为什么 IPv6 归属地经常不准？

查 IPv4 归属地，很多时候能精确到城市；查 IPv6，常见的是只到省、只到国家，甚至不同地理库给出差得很远的结果。原因主要有三点：

1. 数据稀疏。地理库的位置来自注册信息、运营商公开资料、测量和用户反馈。IPv4 地址块用了几十年，积累多；IPv6 地址空间巨大，同样的数据量摊到里面就很稀。
2. 分配粒度大。运营商从注册机构拿到的是很大的 IPv6 地址段，再按自己的规划切给各省各城市。这个内部切分不一定公开，地理库只能按大段估计。
3. 地址会变。隐私扩展让设备地址轮换，部分运营商下发的前缀也会在重新拨号后变化，按单个地址积累的定位数据很难长期有效。

地理库的原理和分歧来源，可以看[为什么 11 个 IP 库给出不同位置](/blog/ip-geolocation-databases-differ)和[IP 归属地为什么不准](/blog/why-ip-location-is-inaccurate)。比单看一个库更可靠的办法是看“网段归谁”：通过 RDAP 查询地址所属网段的注册信息，能确认运营商和注册国家，这部分来自注册机构，比地理位置稳定得多。国内家宽的 IPv6 地址常见以 `240e`、`2408`、`2409` 开头，分别对应三家基础运营商的大段，但具体归属请以 RDAP 查询结果为准。

## 怎么查自己有没有 IPv6？

先看本机，再看出口，最后看浏览器。三步结果放在一起才能判断清楚。

### 第一步：本机有没有全球 IPv6 地址

**Windows**（命令提示符或 PowerShell）：

```powershell
ipconfig
# 看当前网卡下的“IPv6 地址”和“临时 IPv6 地址”
# “本地链接 IPv6 地址”（fe80 开头）不算公网地址

Get-NetIPAddress -AddressFamily IPv6 | Format-Table InterfaceAlias,IPAddress,PrefixOrigin,SuffixOrigin
# PrefixOrigin 为 RouterAdvertisement 说明来自 SLAAC，Dhcp 说明来自 DHCPv6

route print -6
# 有 ::/0 这条默认路由，才说明系统知道怎么把 v6 流量发出去
```

**macOS**：

```bash
ifconfig en0 | grep inet6
# 带 secured 的是稳定地址，带 temporary 的是隐私扩展生成的临时地址
# Wi-Fi 一般是 en0，有线可能是 en1 或其他编号

netstat -rn -f inet6 | grep default
```

**Linux**：

```bash
ip -6 addr show scope global
# 有输出才说明拿到了全球地址；temporary 标记表示临时地址

ip -6 route show default
```

看到的地址按开头判断类型：

| 开头 | 类型 | 能上公网吗 |
|---|---|---|
| `2` 或 `3`（如 `240e:`、`2408:`、`2001:`） | 全球单播地址 | 能 |
| `fe80:` | 链路本地地址，每块网卡都有 | 不能 |
| `fd` 或 `fc` | 唯一本地地址（ULA），类似 v4 的 192.168 | 不能 |
| `::1` | 本机回环 | 不能 |

只有 `fe80` 而没有 `2`、`3` 开头的地址，基本可以确定这个网络没有给你下发 IPv6。

### 第二步：两个出口分别是什么

用 `curl` 分别强制走 v4 和 v6，向 Cloudflare 的 trace 地址发请求，返回内容里的 `ip=` 就是对方看到的出口地址。Windows 10（1803 及以后）和 Windows 11 自带 curl，在 PowerShell 里要写成 `curl.exe`，避免被别名替换。

```bash
curl -4 -s https://cloudflare.com/cdn-cgi/trace | grep -E 'ip=|loc='
curl -6 -s https://cloudflare.com/cdn-cgi/trace | grep -E 'ip=|loc='
```

Windows PowerShell：

```powershell
curl.exe -4 -s https://cloudflare.com/cdn-cgi/trace
curl.exe -6 -s https://cloudflare.com/cdn-cgi/trace
```

`loc=` 是 Cloudflare 判断的国家代码，只能作参考。如果 `-6` 这条报错或超时，而第一步里明明有全球地址，常见原因是路由器或光猫的 IPv6 防火墙、上游路由有问题，可以再用 `ping -6`（macOS 上用 `ping6`）测一个支持 IPv6 的域名缩小范围；要看路径上哪一跳出问题，可以用 `traceroute -6`、`mtr -6` 或 Windows 的 `tracert -6`，读法与 v4 相同，见[traceroute 和 mtr 结果怎么看](/blog/traceroute-mtr-how-to-read)。

顺便检查你要访问的网站本身支不支持 IPv6：

```bash
dig AAAA example.com +short
# Windows：nslookup -type=AAAA example.com
```

没有 AAAA 记录的网站，无论你的网络多完整，都只会走 IPv4。

### 第三步：浏览器实际走的是哪一个

命令行的结果不等于浏览器的行为。浏览器有自己的 DNS 设置（比如开了 DoH，设置方法见[DNS over HTTPS 配置指南](/blog/dns-over-https-setup-guide)）、可能装了扩展，再加上 Happy Eyeballs 的竞速，最终用哪个协议只能在浏览器里测。

打开 [cdnping 的 IP 与环境检测](/ip)，看其中的 IPv4/IPv6 检测，确认浏览器在两种协议下的连通情况和出口地址。页面上的出口 IP 情报会对地址做 11 个地理库投票并给出置信度，网段注册信息走 RDAP，IP 类型分为机房、家宽、移动、Tor。把 v4 和 v6 两个地址分别对照，就能看出它们是否属于同一个运营商、归属地是否一致。

同一页还有 DNS 泄漏和 WebRTC 泄漏检测。WebRTC 在双栈网络下可能把本机的 IPv6 地址暴露给网页，原理见[DNS 泄漏与 WebRTC 泄漏](/learn/dns-leak-webrtc-leak)，关闭方法见[WebRTC 泄漏怎么关](/blog/fix-webrtc-leak-chrome-firefox-safari)。

## 自查结果怎么判断？

把三步的结果对照下表：

| 本机全球 v6 地址 | `curl -6` | 浏览器检测 | 说明 |
|---|---|---|---|
| 没有 | 失败 | 只有 v4 | 网络没有 IPv6，属于正常情况，不影响使用 |
| 有 | 失败 | 只有 v4 | 地址下发了但出不去，查路由器防火墙、默认路由和上游 |
| 有 | 成功 | 只有 v4 | 浏览器侧回落到了 v4，可能是网站无 AAAA 记录、浏览器 DNS 设置或扩展影响 |
| 有 | 成功 | v4、v6 都通，运营商一致 | 标准的双栈网络 |
| 有 | 成功 | v4、v6 都通，运营商或归属地不同 | 两条路径不一致，先确认是否有转发或代理，再看是否会影响你访问的服务 |

最后一种情况在访问对地区敏感的服务时最容易出问题，因为服务端可能同时记录到两个出口。是否需要统一出口、怎样调整，取决于你的网络环境，并应遵守所用服务的条款和当地法规，相关排查思路在前面提到的双栈出口文章里。

## 开发者还要注意什么？

- 服务端日志里的 IP 字段要能存 IPv6。按 IPv4 设计的 `VARCHAR(15)` 存不下 IPv6 地址，最长的完整写法有 39 个字符；用数据库的原生地址类型或至少 45 个字符更稳妥。
- 按 IP 限流时，v6 应按前缀算。一台设备的临时地址会轮换，一个家庭网络通常拿到一整段前缀，按单个 /128 地址计数基本等于没限。按 /64 或更短的前缀聚合更接近“一个用户”。
- 配置里写 IPv6 地址时记得方括号。接口地址、代理地址、`curl` 的 URL 都一样，`http://2001:db8::1:8080` 会被解析错。
- 测试连通性时分别测两种协议。`curl -4` 和 `curl -6` 各跑一次，只测一种时，另一条路径的故障会被回落机制掩盖。

如果你想把出口 IP、DNS、到 AI API 的延迟一起检查一遍，可以按[开发者网络自检清单（2026 版）](/blog/developer-network-self-check-2026)的顺序做。cdnping 的各项检测口径写在[数据方法](/methodology)页里。
