IPv6 地址完全解析:从结构到实战

IPv6 地址完全解析:从结构到实战

文章目录

  • [IPv6 地址完全解析:从结构到实战](#IPv6 地址完全解析:从结构到实战)
    • [一、IPv6 地址的基础结构](#一、IPv6 地址的基础结构)
      • [1.1 128 位如何组织?](#1.1 128 位如何组织?)
      • [1.2 文本表示法](#1.2 文本表示法)
    • [二、IPv6 地址的组成要素](#二、IPv6 地址的组成要素)
      • [2.1 前缀(Prefix)](#2.1 前缀(Prefix))
      • [2.2 接口标识符(Interface Identifier, IID)](#2.2 接口标识符(Interface Identifier, IID))
    • [三、IPv6 地址的三大类型](#三、IPv6 地址的三大类型)
      • [3.1 单播(Unicast):一对一通信](#3.1 单播(Unicast):一对一通信)
        • [① 全球单播地址(Global Unicast)](#① 全球单播地址(Global Unicast))
        • [② 链路本地地址(Link-Local)](#② 链路本地地址(Link-Local))
        • [③ 唯一本地地址(Unique Local)](#③ 唯一本地地址(Unique Local))
        • [④ 回环地址(Loopback)](#④ 回环地址(Loopback))
        • [⑤ 未指定地址(Unspecified)](#⑤ 未指定地址(Unspecified))
      • [3.2 组播(Multicast):一对多通信](#3.2 组播(Multicast):一对多通信)
      • [3.3 任播(Anycast):一对"最近"通信](#3.3 任播(Anycast):一对"最近"通信)
    • 四、特殊地址与保留前缀速查表
    • [五、IPv6 vs IPv4 核心对比](#五、IPv6 vs IPv4 核心对比)

IPv6 地址长度为 128 位 ,是 IPv4(32 位)的 4 倍。如果把 IPv4 的地址空间比作一个小镇,IPv6 的地址空间就是整个银河系。IPV6的数量足够给地球上每一粒沙子分配一亿个IP地址。本文将从位级结构实际应用,彻底拆解 IPv6 地址的每一个细节。


一、IPv6 地址的基础结构

1.1 128 位如何组织?

IPv6 地址在逻辑上分为两个 64 位部分:

复制代码
┌─────────────────────────────┬─────────────────────────────┐
│        前 64 位              │        后 64 位              │
│      (子网前缀)            │    (接口标识符 IID)        │
│      Network Prefix         │   Interface Identifier      │
├─────────────────────────────┼─────────────────────────────┤
│  标识"你在哪个网络"          │  标识"你是这个网络中的哪台设备" │
│  由 ISP/管理员分配            │  由设备自动生成或手动配置      │
└─────────────────────────────┴─────────────────────────────┘

为什么刚好是 64/64 分割?

这是 IPv6 设计时的硬性建议:

  • /64 被定义为"一个子网的标准前缀长度"
  • 后 64 位留给接口标识符,足够大(2⁶⁴),可以容纳各种自动配置机制(EUI-64、随机生成、哈希等)
  • 这种固定分割简化了协议设计,让 SLAAC(无状态自动配置)成为可能

1.2 文本表示法

128 位被分成 8 组 ,每组 16 位 ,用 4 位十六进制数 表示,组间用冒号 : 分隔。

完整格式示例:

复制代码
2001:0DB8:0000:0000:0000:FF00:0042:8329

缩写规则(必须掌握):

规则 说明 示例
省略前导零 每组的左侧 0 可以省略 0DB8DB8004242
双冒号压缩 连续多组全 0 可以用 :: 代替,只能出现一次 0000:0000:0000::

缩写后的标准写法:

复制代码
完整:2001:0DB8:0000:0000:0000:FF00:0042:8329
缩写:2001:DB8::FF00:42:8329

为什么不能出现两次 ::

因为 :: 代表"连续若干组 0",如果出现两次,系统无法判断每组分别压缩了多少个 0。例如 2001::DB8::1非法的


二、IPv6 地址的组成要素

2.1 前缀(Prefix)

前缀表示"网络号"部分,用 CIDR 斜线表示法

复制代码
2001:DB8:1234:5678::/64

这里 /64 表示前 64 位是网络前缀,后 64 位是主机部分。

常见的前缀长度:

前缀长度 名称 用途 类比 IPv4
/32 ISP 分配单元 大型 ISP 获得的前缀块 类似 /8
/48 站点前缀 企业/家庭从 ISP 获得的标准分配 类似 /16
/56 小型站点 部分 ISP 分配给家庭用户
/64 子网标准 一个 LAN 网段(有线/无线) 类似 /24
/128 单个主机 只代表一台设备 类似 /32

从 /48 到 /64 的分配逻辑:

假设 ISP 分配给你 2001:DB8:1234::/48

复制代码
2001:DB8:1234:0000::/64   → 子网 0(LAN1,客厅网线)
2001:DB8:1234:0001::/64   → 子网 1(LAN2,卧室 Wi-Fi)
2001:DB8:1234:0002::/64   → 子网 2(LAN3,客房)
...
2001:DB8:1234:FFFF::/64   → 子网 65535

/48 给你留了 16 位 (4 个十六进制字符)来自由划分子网,可以创建 65,536 个 /64 子网,足够任何家庭或中小企业使用。

2.2 接口标识符(Interface Identifier, IID)

后 64 位标识网段内的具体设备。

生成方式:

方式 说明 特点
EUI-64 基于 MAC 地址扩展 把 48 位 MAC 拆成两半,中间插入 FF:FE
随机生成 操作系统随机产生 保护隐私,难以追踪
稳定隐私地址 基于网络前缀 + 密钥哈希 每个网络不同,但重启不变
手动配置 管理员手工指定 服务器常用,如 ::1::100

EUI-64 转换示例:

复制代码
MAC 地址:     00:1A:2B:3C:4D:5E
插入 FF:FE:   00:1A:2B:FF:FE:3C:4D:5E
翻转第 7 位:  02:1A:2B:FF:FE:3C:4D:5E  ← 最终 IID

第 7 位翻转(Universal/Local 位)是为了标识这个地址是全局唯一还是本地分配的。


三、IPv6 地址的三大类型

3.1 单播(Unicast):一对一通信

单播地址是分配给单一接口的地址,数据包只发给这一个目标。

① 全球单播地址(Global Unicast)

通俗理解:你的"全球身份证号"

项目 说明
前缀 2000::/3(即以二进制 001 开头的地址)
范围 全球互联网,公网可路由
类比 IPv4 公网 IP(如 114.114.114.114
特点 全球唯一,能在整个互联网上找到你

地址块举例:

前缀块 持有者 用途
2001::/32 Teredo 隧道 IPv4/IPv6 过渡技术
2001:DB8::/32 文档保留 RFC 规定只能用于示例和文档
2400::/12 亚太 APNIC 分配 包括中国电信 240e::/20、联通 2408::/20、移动 2409::/20
2600::/12 美洲 ARIN 分配 美国运营商

全球单播地址是 IPv6 的"主角"。如果你的设备要访问百度、刷视频、上公网,走的就是这个地址。它由 ISP(运营商)或上级网络分配,在全球范围内进行路由,就像你的真实住址,邮递员从世界任何地方都能把信送到。

通俗理解:你的"小区临时对讲机号码"

项目 说明
前缀 FE80::/10(即以二进制 1111 1110 10 开头)
范围 只在本网卡直连的这条网线上有效,不能跨路由器
类比 IPv4 169.254.x.x(APIPA 自动配置地址)
特点 自动生成,无需配置,出不了本链路

格式:

复制代码
FE80::/10  +  54 位 0  +  64 位接口标识符
实际常见:FE80::250:56FF:FE12:3456

关键特性:

  • NDP(邻居发现协议):替代 IPv4 ARP,解析 MAC 地址
  • SLAAC 自动配置:设备通过 FE80 地址和路由器协商,获取自己的全球单播地址。
  • 路由协议:OSPFv3、RIPng 使用链路本地地址作为下一跳。两台电脑用网线直连,或者接在同一个交换机下,可以用 FE80 地址互相 ping 通。
  • 不可路由:路由器见到 FE80 开头的数据包会直接丢弃,绝不允许它进入公网。
  • 必须指定网卡访问 :因为每台设备的每个网卡都有一个 FE80 地址,全球重复也没关系(只在本链路有效)。所以访问时必须指定从哪个网卡出去,访问时必须指定网卡索引(Zone ID),例如 ping FE80::1%eth0
  • 自动生成:只要网卡开启 IPv6,系统就会自动给自己生成一个以 FE80:: 开头的地址,不需要 DHCP,也不需要手动配置。
③ 唯一本地地址(Unique Local)

通俗理解:你的"公司内部短号"

项目 说明
前缀 FC00::/7(即以二进制 1111 110 开头,实际常用 FD00::/8
范围 一个组织、一个企业、一个校园网内部
类比 IPv4 私有地址(10.x.x.x172.16.x.x192.168.x.x
特点 组织内可路由,组织外不可路由,允许手动规划

生成建议(RFC 4193):

唯一本地地址应该包含一个40 位随机全局 ID,以避免不同组织合并时出现地址冲突:

复制代码
FD +  40位随机数  + 16位子网ID  + 64位接口ID
│  └─ 确保全球统计唯一性 ─┘  └─ 内部子网划分 ─┘

示例:

复制代码
FD12:3456:789A:00FF::/64
④ 回环地址(Loopback)
复制代码
::1

等价于 IPv4 的 127.0.0.1,始终指向本机,不经过任何物理网卡。

⑤ 未指定地址(Unspecified)
复制代码
::

全 0 地址,等价于 IPv4 的 0.0.0.0。用于:

  • 设备启动时尚未获得地址,作为源地址发送 DHCP 请求
  • 监听时表示"所有地址"(如 :: 表示监听所有接口)

3.2 组播(Multicast):一对多通信

IPv6 取消了广播(Broadcast),所有一对多通信都通过组播实现。

属性 说明
前缀 FF00::/8(二进制以 1111 1111 开头)
格式 FF + 标志(4位) + 范围(4位) + 112位组ID

常见组播地址:

地址 含义 用途
FF02::1 所有节点(All Nodes) 链路本地范围内的所有 IPv6 设备
FF02::2 所有路由器(All Routers) 链路本地范围内的所有路由器
FF02::1:FFxx:xxxx 请求节点组播(Solicited-Node) NDP 邻居发现时,替代 ARP 广播

请求节点组播的精妙设计:

当设备要解析某个 IPv6 地址对应的 MAC 地址时,它不会广播问所有人,而是发送到这个特殊的组播地址:

复制代码
目标 IPv6:2001:DB8::1234:5678
请求节点组播:FF02::1:FF34:5678  ← 取目标地址的后 24 位

只有拥有这个后缀地址的设备才会监听这个组播组,大大减少了无关设备的打扰。


3.3 任播(Anycast):一对"最近"通信

任播地址在格式上与全球单播地址完全相同 ,没有专门的前缀。区别只在于配置方式

  • 同一个任播地址被分配给多个不同地理位置的服务器
  • 路由器根据路由协议,把数据包转发到距离最近/成本最低的那一台
  • 常用于 DNS 根服务器、CDN 节点、负载均衡

示例:

复制代码
Google DNS 任播地址:2001:4860:4860::8888

无论你在中国、美国还是欧洲,访问这个地址都会连接到离你最近的 Google DNS 服务器。


四、特殊地址与保留前缀速查表

地址/前缀 名称 说明
::/128 未指定地址 全 0,尚未分配地址时使用
::1/128 回环地址 本机自身
::FFFF:0:0/96 IPv4 映射地址 在 IPv6 套接字中表示 IPv4 地址,如 ::FFFF:192.168.1.1
::/96 IPv4 兼容地址(已废弃) 早期过渡方案,不再使用
FE80::/10 链路本地 仅链路内有效
FEC0::/10 站点本地(已废弃) 被唯一本地地址 FD00::/8 取代
FC00::/7 唯一本地 组织内部使用
2000::/3 全球单播 公网可路由地址
FF00::/8 组播 一对多通信

五、IPv6 vs IPv4 核心对比

特性 IPv4 IPv6
地址长度 32 位 128 位
地址数量 约 42 亿 约 3.4 × 10³⁸
子网掩码 可变长度,需显式配置 固定 /64 为主流,用前缀长度
地址配置 手动或 DHCPv4 SLAAC 自动配置 + DHCPv6
ARP 独立协议 被 NDP(邻居发现)取代
广播 无,用组播替代
NAT 广泛使用 设计上不需要,但可用 NAT66
IPsec 可选附加 协议内置
头部结构 可变长,较复杂 固定 40 字节基本头部,扩展头部链式处理
校验和 头部有校验和 头部无校验和,由上层(TCP/UDP)负责
分片 路由器和主机都可分片 仅源主机可分片,中间路由器不允许

相关推荐
Dovis(誓平步青云)1 小时前
牛奶不能减成负数:冰箱库存的筛选、去重与不可变更新
android·java·开发语言
OPEN-F1 小时前
Python进阶教程:算法与数据结构入门
开发语言·python
薛定猫AI1 小时前
【技术干货】Claude Code多模型代理与反馈闭环:Python实现可验证的AI编程工作流
开发语言·python·ai编程
XR1234567881 小时前
工厂车间无线网络怎么选?AGV 与复杂环境是分水岭
开发语言·php
zq_63891 小时前
利用 MATLAB 调用 STK Object Model COM 显示雷达受干扰前后探测范围的变化
开发语言·matlab
大鹏说大话2 小时前
API 设计之道:用 PHP 构建符合 RESTful 与 GraphQL 规范的高可用接口
php·restful·graphql
大黄说说2 小时前
类型安全时代:PHP 8+ 的联合类型、交集类型与泛型(模板)最佳实践
开发语言·安全·php
小弥儿2 小时前
GPT Image 2 提示词库,把散落的生图提示词变成工程资产
开发语言·javascript·gpt·学习
PHP实战开发录2 小时前
AI接口结构化输出解析异常排查记录
数据库·安全·ai·php·开发