2. IPv6协议基础与地址规划

IPv6不是简单地把IPv4地址从32位扩展到128位,它同时改变了报文的封装方式、地址的层次语义以及终端获取地址的机制。在园区双栈工程中,如果只记住“地址变长了”,后续做前缀分配、网关设计和地址表规划时就会缺少依据。本节从报文结构入手,落到地址类型、前缀分配和园区双栈地址规划,最终给出一份可直接参考的地址规划表设计方法。

一、IPv6报文结构:固定头与扩展头分离

IPv6报文由“IPv6基本头 + 扩展头(0个或多个)+ 上层载荷”组成。基本头固定40字节,字段比IPv4更少,去掉了校验和、分片相关字段和选项字段,把可变部分交给扩展头处理。基本头的关键字段包括:版本(4位,值为6)、流量类别(8位,用于QoS标记)、流标签(20位,用于标识同一业务流)、载荷长度(16位,指基本头之后的总长度)、下一个头(8位,指示紧随其后的头类型)、跳数限制(8位,相当于IPv4的TTL)以及源地址和目的地址(各128位)。

“下一个头”字段是理解IPv6封装的关键:它既可以指向TCP(6)、UDP(17)、ICMPv6(58)等上层协议,也可以指向逐跳选项头(0)、路由头(43)、分片头(44)、目的选项头(60)等扩展头。多个扩展头按顺序串联,形成一条“头链”,直到某个“下一个头”指向真正的上层协议。这种设计让中间路由器在多数情况下只需处理基本头,转发效率更高,也让新功能可以通过新增扩展头实现,而不必改动基本头格式。

与园区工程关系最直接的是ICMPv6(下一个头=58)。邻居请求/邻居通告(NS/NA)承担了IPv4中ARP的地址解析功能,路由器请求/路由器通告(RS/RA)承担了地址自动配置和默认网关下发功能,路径MTU发现也依赖ICMPv6。因此双栈园区中不能简单沿用“过滤所有ICMP”的策略,否则IPv6邻居发现和地址自动配置会直接失效。

IPv6报文封装与“下一个头”头链 IPv6 基本头(固定 40 字节) 版本=6 | 流量类别 | 流标签 载荷长度 | 下一个头 | 跳数限制 源地址(128 位) 目的地址(128 位) 下一个头 扩展头链(可选) 逐跳选项头 (0) 路由头 (43) 分片头 (44) 目的选项头 (60) 下一个头 上层协议 / 载荷 TCP (6) / UDP (17) ICMPv6 (58) OSPFv3 (89) 数据载荷 园区双栈必须放行的 ICMPv6 关键报文 NS / NA 地址解析(替代 ARP) RS / RA 地址自动配置 / 默认网关 路径 MTU 发现 Packet Too Big 不可全量过滤 ICMPv6 否则邻居发现失效

二、IPv6地址类型:单播、组播与任播

IPv6取消了广播地址,所有“一对多”通信由组播承担。地址分为三大类:单播(标识单个接口)、组播(标识一组接口,前缀ff00::/8)和任播(标识一组接口,但报文只送达最近的一个)。园区中最常用的是单播地址,它又细分为几种:

  • 全球单播地址(GUA):目前全球可路由前缀为2000::/3,园区通常从运营商或上级机构获得一段,如2408:8200:1234::/48。GUA用于终端对外通信和业务访问。
  • 链路本地地址(LLA):前缀fe80::/10,每个启用IPv6的接口自动生成,仅在本链路有效。它是邻居发现、路由协议对等体建立的基础,也是园区设备管理面常用的稳定地址。
  • 唯一本地地址(ULA):前缀fc00::/7,常用fd00::/8自行分配,类似IPv4私网地址,适合园区内部服务器、管理网段等不需要公网访问的场景。
  • 环回地址:::1/128,对应IPv4的127.0.0.1。
  • 未指定地址:::/128,用于地址配置前或DAD检测源地址。

组播地址中需要记住几个固定地址:ff02::1表示链路本地所有节点,ff02::2表示链路本地所有路由器,ff02::1:ff00:0/104是请求节点组播地址前缀,用于NS报文的目的地址。理解请求节点组播,才能理解为什么IPv6邻居发现不需要广播。

三、前缀分配方法:从/48到/64的层次划分

IPv6地址规划的核心是“按层次分配前缀”,而不是逐台设备分配地址。典型园区从上级获得一段/48或/56,然后按“区域—楼栋—楼层/业务—VLAN”逐级划分。一个常用的划分逻辑是:

上级分配:2408:8200:1234::/48
  ├─ 核心与互联:2408:8200:1234:0000::/64
  ├─ 办公区 A 栋:2408:8200:1234:0100::/64
  ├─ 办公区 B 栋:2408:8200:1234:0200::/64
  ├─ 数据中心:  2408:8200:1234:1000::/64
  ├─ 无线用户:  2408:8200:1234:2000::/64
  └─ 管理网:    2408:8200:1234:f000::/64

这里有一个必须遵守的工程约定:终端所在的VLAN网段应使用/64前缀。原因是SLAAC(无状态地址自动配置)规定接口标识为64位,终端通过RA获得/64前缀后自行拼接接口标识。如果给终端网段分配/72或/80,SLAAC将无法正常工作,只能改用DHCPv6。因此规划时应把/64作为“一个广播域/一个VLAN”的标准粒度,/48到/64之间保留的16位用于子网编号,足以支撑数万个VLAN。

前缀分配还要考虑聚合。同一楼栋的多个VLAN尽量落在同一个/56或/60内,这样核心路由表可以只保留一条聚合路由,减少路由条目。例如A栋使用2408:8200:1234:0100::/56,其下再分0101、0102等/64给不同楼层,核心只需发布0100::/56。

四、园区双栈地址规划原则

双栈园区的地址规划不是“IPv4一套、IPv6再随便来一套”,而应让两套地址在管理维度上尽量对齐,降低运维认知负担。建议遵循以下原则:

  1. VLAN与IPv6子网一一对应:一个VLAN对应一个/64,VLAN ID与IPv6子网编号建立可读映射,例如VLAN 110对应子网0101::/64,便于排障时快速定位。
  2. 网关地址固定化:每个/64内约定网关使用::1或::254,例如2408:8200:1234:0101::1。统一约定后,终端、DHCPv6和静态路由都容易书写。
  3. 基础设施使用LLA或ULA:设备互联、路由协议对等体优先使用链路本地地址,管理地址使用ULA或规划内的GUA,避免因运营商前缀变更导致管理中断。
  4. 服务器地址静态规划:对外服务使用GUA并尽量静态配置或DHCPv6保留,内部服务可用ULA,避免SLAAC随机化带来的地址漂移。
  5. 预留扩展空间:每个区域预留至少一个/56,避免后期新增楼栋时前缀不连续、无法聚合。

五、实战地址表设计

下面给出一份园区双栈地址规划表的示例(参数为教学示例,实际项目需按运营商分配和业务规模调整)。表中同时列出IPv4与IPv6,便于双栈对照。

区域/用途 VLAN IPv4 网段 IPv6 前缀 IPv6 网关 地址分配方式
核心互联 — 10.0.0.0/30 2408:8200:1234:0000::/64 LLA 静态
办公A栋1层 110 10.10.1.0/24 2408:8200:1234:0101::/64 ::1 SLAAC + DHCPv6
办公A栋2层 120 10.10.2.0/24 2408:8200:1234:0102::/64 ::1 SLAAC + DHCPv6
无线用户 200 10.20.0.0/22 2408:8200:1234:2000::/64 ::1 SLAAC + DHCPv6
数据中心服务器 300 10.30.0.0/24 2408:8200:1234:1000::/64 ::1 静态 / DHCPv6保留
网络设备管理 999 10.99.0.0/24 fd00:1234:999::/64 ::1 静态
规划完成后,建议用一条聚合检查:核心设备上A栋的IPv6路由应能聚合为2408:8200:1234:0100::/56,而不是出现0101、0102等多条/64明细。若无法聚合,说明子网编号分配时没有按区域连续预留,应在规划阶段修正。
常见错误:给终端VLAN分配/72或/80前缀,导致SLAAC无法生成地址;或把网关地址写成::FFFF,与请求节点组播地址混淆。另一个高频问题是只规划了GUA而忽略LLA,导致OSPFv3邻居无法建立——OSPFv3默认使用LLA作为对等体地址。

掌握报文结构、地址类型和前缀分配逻辑后,下一步就可以在设备上落地:接口启用IPv6、配置地址、下发RA或DHCPv6,并用display ipv6 interface、display ipv6 routing-table等命令验证地址与路由是否符合规划表。地址规划表是后续所有配置和排障的基准,建议在项目开工前完成评审并冻结版本。