IPv6协议 ICMPv6协议 NDP协议
ipv6协议
🧩 一、核心协议层(IPv6 主体)
这些是 IPv6 协议栈的基础。
| 协议 | 全称 | 作用 |
|---|
| IPv6(RFC 8200) | Internet Protocol version 6 | 定义 IPv6 的数据包结构、地址格式、分片、头部字段等。 |
| ICMPv6(RFC 4443) | Internet Control Message Protocol for IPv6 | IPv6 的控制消息协议(类似 IPv4 的 ICMP),用于错误报告、邻居发现等。 |
| NDP(RFC 4861) | Neighbor Discovery Protocol | 取代 ARP,用于地址解析、路由器发现、邻居可达性检测。 |
| MLD(RFC 2710 / 3810) | Multicast Listener Discovery | 管理主机加入/离开 IPv6 多播组,类似 IPv4 的 IGMP。 |
🧭 二、地址分配与配置(自动化机制)
| 协议 | 全称 | 作用 |
|---|
| SLAAC(RFC 4862) | Stateless Address Autoconfiguration | 主机根据路由器广告(RA)自动生成地址(无状态)。 |
| DHCPv6(RFC 8415) | Dynamic Host Configuration Protocol for IPv6 | 服务器分配 IPv6 地址和其他配置(有状态)。 |
| DHCPv6-PD(RFC 8415 §6.3) | Prefix Delegation | 向下游路由器分配子网前缀(常用于家庭宽带和v6plus)。 |
| RA(Router Advertisement) | Router Advertisement Message | 路由器广播前缀信息、DNS信息等,供主机生成地址。 |
| RS(Router Solicitation) | Router Solicitation Message | 主机主动请求路由器发送 RA。 |
🔐 三、安全与认证协议
| 协议 | 全称 | 作用 |
|---|
| IPsec(RFC 4301+) | Internet Protocol Security | IPv6 内建安全框架,支持加密与认证。 |
| IKEv2(RFC 7296) | Internet Key Exchange v2 | 为 IPsec 建立安全会话。 |
| SEND(RFC 3971) | Secure Neighbor Discovery | 给 NDP 加上签名与认证,防止伪造邻居攻击。 |
🌍 四、DNS 相关扩展
| 协议 | 全称 | 作用 |
|---|
| AAAA Record(RFC 3596) | IPv6 Address Record | IPv6 对应的 DNS 记录类型。 |
| DNS64(RFC 6147) | DNS IPv6/IPv4 互通 | 将 IPv4 地址合成为 IPv6 地址(配合 NAT64)。 |
| DNS over IPv6(RFC 3646) | DNS over IPv6 transport | 在 IPv6 网络中直接查询 DNS。 |
🔀 五、过渡与兼容机制(IPv4 ↔ IPv6)
| 协议 / 技术 | 作用 |
|---|
| Dual Stack | 主机同时启用 IPv4 和 IPv6。 |
| 6to4(RFC 3056) | IPv6 over IPv4 自动隧道(已淘汰)。 |
| 6rd (RFC 5969) | IPv6 over IPv4 IPv4 网络上快速部署 IPv6 的过渡机制 |
| ISATAP(RFC 5214) | IPv6 over IPv4 内网自动隧道。 |
| Teredo(RFC 4380) | IPv6 over UDP over IPv4 穿透 NAT(已淘汰)。 |
| DS-Lite Tunnel(RFC 6333) | IPv6-only 网络访问 IPv4。 |
| NAT64/NAT46(RFC 6146) | IPv6/IPv4 地址转换。 |
| 464XLAT(RFC 6877) | Android 移动网络常用的 NAT64/CLAT 模式。 |
| MAP-E / MAP-T(RFC 7597/7599) | IPv4 over IPv6 映射机制(ISP 常用)。 |
| v6plus / OCN IPv6 | 日本主流的 MAP-E 实现。 |
📡 六、路由与传输层扩展
| 协议 | 作用 |
|---|
| OSPFv3(RFC 5340) | IPv6 的 OSPF 协议版本。 |
| RIPng(RFC 2080) | IPv6 的 RIP 路由协议版本。 |
| BGP-4+(RFC 2545) | 支持 IPv6 的 BGP。 |
| EIGRP for IPv6(Cisco) | Cisco 的私有 IPv6 路由协议版本。 |
| ICMPv6 Redirect / Router Renumbering(RFC 2894) | 动态更新路由前缀信息。 |
📦 七、扩展头与功能增强
| 扩展头 | 功能 |
|---|
| Hop-by-Hop Options Header | 每跳都要处理的选项(如 Jumbogram)。 |
| Routing Header | 类似 IPv4 的源路由。 |
| Fragment Header | 分片控制(仅源节点能分片)。 |
| Destination Options Header | 目的节点的额外选项。 |
| Authentication / ESP Header | IPsec 相关。 |
| Mobility Header(RFC 6275) | 移动 IPv6 的移动性支持(Mobile IPv6)。 |
🧠 八、特殊功能与改进型协议
| 协议 / 技术 | 作用 |
|---|
| Mobile IPv6(RFC 6275) | 主机在移动网络间保持固定 IPv6 地址。 |
| MIPv6 / PMIPv6 / NEMO | 各类移动性扩展。 |
| Segment Routing over IPv6(SRv6) | 新一代基于 IPv6 的路由控制技术(SDN 常用)。 |
| RDNSS / DNSSL(RFC 8106) | 通过 RA 下发 DNS 配置。 |
| Flow Label(RFC 6437) | 流量识别标签,用于 QoS。 |
| Jumbogram(RFC 2675) | 支持超过 65535 字节的 IPv6 大包。 |
📘 九、总结图(知识结构)
IPv6
├── 核心协议:IPv6, ICMPv6, NDP, MLD
├── 地址配置:SLAAC, DHCPv6, DHCPv6-PD, RA
├── 安全机制:IPsec, IKEv2, SEND
├── DNS扩展:AAAA, DNS64, RDNSS
├── 过渡技术:NAT64, 464XLAT, MAP-E, DS-Lite
├── 路由协议:OSPFv3, RIPng, BGP-4+
├── 扩展头部:Routing, Fragment, ESP, AH
├── 特殊功能:SRv6, MIPv6, Flow Label, Jumbogram
└── 应用层支持:DNS over IPv6, HTTP/3 over IPv6
ipv6地址
IPv6
ipv6地址分类
🧩 一、IPv6 地址的三大类型(按功能划分)
Unicast Multicast Anycast
| 类型 | 名称 | 特点 | 举例 |
|---|
| 单播 (Unicast) | 一对一通信 | 表示网络中唯一的接口 | 2001:db8::1, fe80::1 |
| 组播 (Multicast) | 一对多通信 | 表示一组节点 | ff02::1, ff02::2 |
| 任播 (Anycast) | 一对最近通信 | 多个节点共用一个地址,路由选择最近者 | 通常分配给多个服务器的相同接口 |
Unicast
🧭 二、单播地址的常见类型
IPv6 的单播地址主要分为以下几类👇
| 地址类型 | 前缀 | 用途 | 特点 |
|---|
| 全局单播 (Global Unicast) | 2000::/3(即 2000–3fff) | 公网可路由地址(类似 IPv4 的公网 IP) | 唯一且可跨 Internet 路由 |
| 链路本地地址 (Link-Local) | fe80::/10 | 同一链路内通信(邻居发现、RA/RS) | 自动生成,不能跨网段路由 |
| 唯一本地地址 (Unique Local Address, ULA) | fc00::/7(常用 fdxx::/8) | 内网使用(类似 IPv4 私有地址) | 不可公网路由,可在本地或 VPN 使用 |
| 环回地址 (Loopback) | ::1/128 | 本机测试用(类似 IPv4 的 127.0.0.1) | 仅在本地主机使用 |
| 未指定地址 (Unspecified) | ::/128 | 表示“无地址”,用于启动阶段(如 DAD) | 不能作为通信源/目的 |
| 链路本地前缀(本地链路段) | fe80::/64(通常) | 每个接口自动配置 | 通常基于 MAC/EUI-64 或随机生成 |
| IPv4 映射地址 (IPv4-mapped IPv6) | ::ffff:192.168.1.1 | IPv6-only 环境中表示 IPv4 地址 | 用于 IPv4/IPv6 互操作 |
| IPv4 兼容地址 (IPv4-compatible) | 已废弃 | ::192.168.1.1 | 旧标准,现不再使用 |
| Link-local-Address | | | |
link-local地址与ULA地址在使用场景上是否冲突
Link-Local 和 ULA 不冲突,因为它们的用途完全不同、作用范围不同、甚至通信逻辑也不同。
Link-local 是“链路通信地址”,ULA 是“站点通信地址”。
- Link-local:设备在一个网段内通信、发现邻居、找路由器。
- ULA:设备在**整个局域网(可跨多个网段)**内部通信。
Link-local地址是自生成的,只要设备启动了IPv6就会有link-local地址,然后才能获取其它地址。
Link-Local 地址是否固定?
不一定固定,但通常是稳定的。
- 它是根据网卡接口标识(Interface Identifier, IID) 自动生成的。
- IID 通常取决于网卡的 MAC 地址,或者系统为隐私生成的随机值。
因此:
- 如果设备的 MAC 地址不变、算法一致 → Link-local 地址基本不会变。
- 如果启用了 隐私扩展(Privacy Extension) 或系统策略改变 IID 生成方式 → 地址可能不同。
Link-Local 地址的结构
| 10 bits | 54 bits | 64 bits |
| Prefix | 000...0 | Interface Identifier |
- 前缀固定为
fe80::/10。
- 中间 54 位保留为 0。
- 后 64 位是 接口标识符 (IID)。
IID(接口标识符)的生成算法
IPv6 支持多种 IID 生成方式,不同系统和安全要求可能不同。
| 方式 | 描述 | 稳定性 | 特点 |
|---|
| EUI-64(传统) | 从 MAC 地址转换 | ✅ 稳定 | 可推算出设备的真实 MAC(隐私差) |
| Stable Secret-based(RFC 7217) | 从随机密钥和接口信息生成 | ✅ 稳定 | 隐私好,现代系统使用 |
| 随机 IID(Privacy Extension, RFC 4941) | 随机生成,周期更换 | ❌ 不稳定 | 用于临时全局地址,几乎不用在 link-local 上 |
EUI-64 生成算法
假设网卡 MAC 地址是:
00:1A:2B:3C:4D:5E
EUI-64 生成 IID 的步骤如下:
| 步骤 | 操作 | 结果 |
|---|
| 1️⃣ | 把 MAC 地址分成两半 | 00:1A:2B 和 3C:4D:5E |
| 2️⃣ | 插入固定的 FF:FE 中间 | 00:1A:2B:FF:FE:3C:4D:5E |
| 3️⃣ | 翻转第 7 位(U/L 位) | 改为 02:1A:2B:FF:FE:3C:4D:5E(表示本地管理) |
| 4️⃣ | 拼接到 fe80::/64 前缀 | fe80::021a:2bff:fe3c:4d5e |
| ✅ 得到最终 Link-local 地址: | | |
fe80::021a:2bff:fe3c:4d5e
Stable Secret-based RFC 7217(现代系统默认)
现代 Linux、Windows、macOS 为了防止通过地址推测设备 MAC,通常使用 “Stable Privacy Address” 机制(RFC 7217)。
IID 计算公式:
IID = F(Prefix, Network_Interface, DAD_Counter, Secret_Key)
其中:
- Prefix = fe80::/64(或全局前缀)
- Network_Interface = 接口名(如 eth0)
- DAD_Counter = 检测重试次数
- Secret_Key = 随机生成、系统保存在内核里
🔹 结果:
同一设备、同一接口、同一前缀 → IID 固定。
但不同机器、不同接口 → IID 不同(无法反推出 MAC)。
🌐 三、组播/多播地址(Multicast)
Multicast
IPv6 完全取消了广播,所有广播功能都由组播取代。
组播地址总是以 ff00::/8 开头,第二个字节定义了作用范围(Scope)。
| 范围 | 地址示例 | 含义 |
|---|
| ff02::1 | 所有节点(All Nodes) | 当前链路上所有设备 |
| ff02::2 | 所有路由器(All Routers) | 当前链路上所有路由器 |
| ff05::2 | 区域范围的所有路由器 | 用于更大范围的管理 |
| ff02::1:ffXX:XXXX | Solicited-Node 组播地址 | NDP(邻居发现)使用,用于 IPv6→MAC 解析 |
组播地址结构一般是:
| 8bit | 4bit | 4bit | 112bit |
| ff | flags | scope | group ID |
也就是:
ffXY::Z...
其中:
X 是 Flags(标志)
Y 是 Scope(作用范围)
- 后面的部分是 Group ID(组的标识符)
Flags(标志位)字段 —— 控制“性质”
Flags 是 4 位(二进制),定义了组播地址的特征。
一般写成 4 bit 二进制 abcd,每一位都有特定含义:
| 位 | 名称 | 含义 | 取值说明 |
|---|
| a(bit 0) | R-Flag(Rendezvous Point) | 是否为固定 RP(多播路由相关) | 一般为 0 |
| b(bit 1) | P-Flag(Prefix-based) | 是否根据前缀自动派生 | 一般为 0 |
| c(bit 2) | T-Flag(Transient) | 是否临时(Transient)组播 | 1 = 临时,0 = 永久(标准分配) |
| d(bit 3) | Reserved | 保留位 | 一般为 0 |
👉 实际网络中常见的情况:
ff02:Flags = 0,表示永久的(well-known)组播地址。
ff32:Flags = 3(临时 + link-local),极少见,用于实验性多播。
Scope(作用范围)字段 —— 控制“传播范围”
Scope 是 4 位十六进制值,定义该组播包能传播的最大范围。
| Scope 值 | 范围 | 说明 |
|---|
1 | Interface-local | 仅限本接口(测试用途) |
2 | Link-local | 同一链路(最常见),NDP 都用这个 |
3 | Subnet-local | 子网级别(很少用) |
4 | Admin-local | 管理员限定范围 |
5 | Site-local | 整个站点(多个链路) |
8 | Organization-local | 整个机构(例如公司网) |
E | Global | 全球范围(几乎不用) |
| 👉 IPv6 NDP 的所有组播地址都用 Scope = 2(link-local), | | |
| 比如: | | |
ff02::1 所有节点(链路内)
ff02::2 所有路由器(链路内)
ff02::1:ffxx:xxxx solicited-node(链路内)
Group ID(组编号)
Group ID 是 最后 112 位,用于区分不同的多播组。
它就像“组播频道号”。
常见标准分配的 Group ID:
| 地址 | Group ID | 名称 |
|---|
ff02::1 | 0x1 | 所有节点组 (All Nodes) |
ff02::2 | 0x2 | 所有路由器组 (All Routers) |
ff02::1:ffXX:XXXX | 0x1ffXX:XXXX | solicited-node 组 |
ff05::2 | 0x2 | 所有站点路由器 |
ff02::1:2 | 0x1:2 | 所有 DHCP 服务器 |
常见的标准组播地址(IPv6 内置)
| 地址 | 名称 | 用途 |
|---|
| ff02::1 | 所有节点 | 路由器 RA 广播通告 |
| ff02::2 | 所有路由器 | 主机 RS 请求路由器 |
| ff02::1:ffxx:xxxx | Solicited-node | NDP 地址解析 |
| ff02::1:2 | 所有 DHCPv6 服务器 | DHCPv6 请求 |
| ff02::5 / ff02::6 | OSPFv3 | 路由协议 |
| ff02::9 | RIPng | 路由更新 |
| ff02::fb | mDNS | 本地设备发现 |
Anycast
🧮 四、任播地址(Anycast)
| 项目 | 内容 |
|---|
| 含义 | 多个接口共享同一地址,数据包发给最近的一个 |
| 用途 | 内容分发、DNS 负载均衡(如多个 DNS 服务器共用一个地址) |
| 配置方式 | 从单播地址池中手动指定为 Anycast,无特殊前缀 |
| 示例 | 多个路由器接口都配置 2001:db8::1,客户端请求会自动发往最近的那台 |
🧠 五、作用范围(Scope)总结
IPv6 地址天然带“范围”概念:
| 范围 | 说明 | 可路由性 |
|---|
| Interface-local | 本机内(如 ::1) | 否 |
| Link-local | 本地链路(如 fe80::/10) | 否 |
| Site-local | 已废弃(原为内网使用) | 否 |
| Unique-local (fd00::/8) | 内网、VPN | 否(但可通过隧道或 NAT66) |
| Global (2000::/3) | 互联网 | ✅ 可路由 |
🧾 六、速查表汇总
| 类型 | 前缀 | 示例 | 可公网路由 | 典型用途 |
|---|
| 未指定地址 | ::/128 | :: | ❌ | 初始化、DAD |
| 环回地址 | ::1/128 | ::1 | ❌ | 本地测试 |
| 链路本地 | fe80::/10 | fe80::1 | ❌ | NDP、RS/RA |
| 唯一本地 (ULA) | fd00::/8 | fd12:3456::1 | ❌ | 内网通信 |
| 全局单播 | 2000::/3 | 2001:db8::1 | ✅ | 公网通信 |
| 组播 | ff00::/8 | ff02::1, ff02::2 | 局域/全网 | 路由发现、ND、服务 |
| 任播 | (无固定前缀) | 多节点共享 2001:db8::1 | ✅ | 最近节点选路 |
Link to original