IPv6
一、IPv6简介
1.1 IPv6的使用场景
为了解决IPv4地址枯竭问题也日益严重,IPv6使用128位地址空间,提供了更多的地址,以及更好的安全性和性能。
1.2 IPv6报文格式
字段 长度 含义 Version 4比特 4:表示为IPv4;6:表示为IPv6。 Traffic class 8比特 流量类别。该字段及其功能类似于IPv4的业务类型字段。该字段以区分业务编码点(DSCP)标记一个IPv6数据包,以此指明数据包应当如何处理。 Flow Label 20比特 流标签。该字段用来标记IP数据包的一个流,当前的标准中没有定义如何管理和处理流标签的细节。 Payload length 16比特 该字段表示有效载荷的长度,有效载荷是指紧跟IPv6基本报头的数据包,包含IPv6扩展报头。 Next header 8比特 下一报头,该字段指明了跟随在IPv6基本报头后的扩展报头的信息类型。 Hop limit 8比特 跳数限制,该字段定义了IPv6数据包所能经过的最大跳数,这个字段和IPv4中的TTL字段非常相似。 Source Address 128比特 该字段表示该报文的源地址。 Destination Address 128比特 该字段表示该报文的目的地址。 Extension Headers 可变 扩展报头。路由设备转发时根据基本报头中Next Header值来决定是否要处理扩展头。除了目的选项扩展报头出现两次(一次在路由扩展报头之前,另一次在上层扩展报头之前),其余扩展报头只出现一次。
1.3 IPv6的改进
在IPv4中,IPv4报头包含可选字段Options,内容涉及security、Timestamp、Record route等,这些Options可以将IPv4报头长度从20字节扩充到60字节。在转发过程中,处理携带这些Options的IPv4报文会占用路由器很大的资源,因此实际中也很少使用。
IPv6将这些Options从IPv6基本报头中剥离,放到了扩展报头中,扩展报头被置于IPv6报头和上层协议数据单元之间。一个IPv6报文可以包含0个、1个或多个扩展报头,仅当需要路由器或目的节点做某些特殊处理时,才由发送方添加一个或多个扩展头。
当使用多个扩展报头时,前面报头的Next Header字段指明下一个扩展报头的类型,这样就形成了链状的报头列表。
简而言之是通过一个类似链表指针的字段去让路由器自己触发携带是否处理扩展报头
二、IPv6的编址

为了书写方便,IPv6提供了压缩格式。IPv6可将每组中前面的0省略,若存在连续的0还可缩写为双冒号形式。最多压缩一个::
# 前导0省略
2001:0db8 → 2001:db8
# 连续0
2001:0000:0000:0000:abcd → 2001::abcd
2.1 单播地址(Unicast)
2.1.1 全球单播地址 GUA (global unicast address)
公网可路由地址(类似IPv4公网IP
地址范围 2000::/3 2000:0000:0000:0000:0000:0000:0000:0000 ~ 3FFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF
2.1.2 链路本地地址 LLA (Link-Local address)
同一链路上的设备通信
地址范围 FE80::/10 FE80:0000:0000:0000:0000:0000:0000:0000 ~ FEBF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF
2.1.3 唯一本地地址 ULA (Unique Local address)
前身Site-local (参考文档RFC 3879)
地址范围 Fec0::/10,定义模糊已弃用
地址范围FC00::/7 FC00:0000:0000:0000:0000:0000:0000:0000 ~ FDFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF (参考文档RFC4193)
2.2 组播地址(Multicast)
Flags位
Flags目前有以下两个值:
0000:表示该Multicast地址由IANA组织固定分配,是Well-knownMulticast地址
0001:表示该Multicast地址尚未被IANA固定分配,是临时Multicast地址
Scope位
Scope值 范围名称 符号表示 地址示例 用途 1 Interface-Local ff01::/16ff01::1单个接口内的进程通信(极少用) 2 Link-Local ff02::/16ff02::1(所有节点)同一物理链路的设备通信 5 Site-Local ff05::/16ff05::1:3(DHCPv6服务)同一机构内跨子网的组播通信 常见Well-knownMulticast地址
组播地址 范围 标志位 用途 协议/服务 FF02::1Link-Local 永久(0) 本链路上所有IPv6节点 NDP、RA/RS FF02::2Link-Local 永久(0) 本链路上所有IPv6路由器 RA/RS、路由协议交互 FF02::5Link-Local 永久(0) 所有OSPFv3路由器(泛洪LSA、Hello包) OSPFv3 FF02::6Link-Local 永久(0) OSPFv3的DR(指定路由器)和BDR(备份DR) OSPFv3(DR/BDR选举)
2.2.1 请求组播地址 (Solicite-node Mulitcast)
Solicited-Node multicast address由前缀FF02:0:0:0:0:1:FF00:/104以及Unicast地址或Anycast地址的最后24位产生
Solicited-Node组播地址主要用于 IPv6邻居发现协议(NDP) 的以下两个关键流程:
- 地址解析(Address Resolution)
- 替代IPv4的ARP协议,将目标IPv6地址解析为对应的MAC地址。
- 重复地址检测(DAD, Duplicate Address Detection)
- 在主机配置IPv6地址前,检测链路中是否已有其他设备使用相同地址。
2.3 任播地址(Anycast)
任播地址与单播地址在结构上无差异,其特殊性源于路由配置,Anyfcast只能作为目的地址
三、NDP
邻居发现协议NDP(Neighbor Discovery Protocol),通过ICMPv6集成了地址解析,路由发现,DAD检测等功能。
3.1 ICMPv6
通过IPv6报头的Next Header字段链接到ICMPv6的报文,新增一些Type类型来实现NDP的功能
消息类型 ICMPv6类型 发送方式 用途 路由器请求(RS) 133 组播(ff02::2) 主机主动请求路由器发送RA 路由器通告(RA) 134 组播(ff02::1) 路由器通告前缀、网关、SLAAC参数 邻居请求(NS) 135 组播或单播 地址解析或DAD检测 邻居通告(NA) 136 单播或组播 响应NS消息,提供MAC地址或确认地址唯一性 重定向(Redirect) 137 单播 指示主机使用更优路径
3.2 DAD检测( Duplicate Address Detection)
除了Anycast地址外,任何地址在接口配置后都要进行DAD检测。
当接口UP以后,Link local IPv6地址是试验地址[tentative address]
%% DAD(重复地址检测)流程 sequenceDiagram participant NewHost as 新主机 participant ExistingHost as 其他主机(已占用地址) NewHost->>NewHost: 生成或配置IPv6地址(如2001:db8::1) Note over NewHost: 触发DAD检测,地址状态为TENTATIVE NewHost->>ExistingHost: 发送NS(Neighbor Solicitation) Note left of NewHost: 源地址 = ::(未指定地址)<br/>目标地址 = Solicited-Node组播地址(ff02::1:ff00:1)<br/>包含待检测地址(2001:db8::1) alt 地址已被占用 ExistingHost-->>NewHost: 返回NA(Neighbor Advertisement) Note right of ExistingHost: 声明地址所有权(覆盖标志位=1) NewHost->>NewHost: 接口的地址标识从 [Tentative]-->[duplicate],停止使用该地址<br/>记录错误或尝试新地址 else 地址可用 Note over ExistingHost: 未收到响应(无冲突) NewHost->>NewHost: 确认地址唯一性<br/>将地址状态标记为VALID end
3.3 ARP邻居发现 (Address Resolution Protocol)
sequenceDiagram participant HostA as 主机A(2001:db8::1) participant HostB as 主机B(2001:db8::2) HostA->>HostB: NS(目标IPv6=2001:db8::2,目标MAC=组播MAC) Note over HostA: 组播地址=ff02::1:ff00:2(Solicited-Node组播) HostB->>HostA: NA(携带MAC地址) Note over HostB: 单播响应,更新邻居缓存表对比与IPv4的ARP协议,IPv6使用Solicited-Node组播地址进行精准的投放
特性 IPv4 ARP IPv6 NDP地址解析 报文类型 广播(全链路泛洪) 组播(仅订阅设备处理) 效率 高广播风暴风险 精准投递,降低网络负载 安全性 易受ARP欺骗 支持SEND协议加密(RFC 3971) 地址映射机制 所有ARP请求全链路处理 每个IPv6地址对应唯一组播地址
四、SLACC
IPv6无状态地址自动配置(SLAAC,Stateless Address Autoconfiguration) ,无需DHCP协议可以进行地址配置。
4.1 RA报文
IPv6路由器周期性发送ICMPv6路由器通告RA(RouterAdvertisement)消息,或者在收到路由请求RS(Router Solicitation)消息时回应ICMPv6 RA消息
[!IMPORTANT]
- RFC 4861 规定:
RA报文必须使用链路本地地址作为源地址(Source Address),无论路由器是否配置了全局地址。这是IPv6邻居发现协议(NDP)的强制要求。
字段 长度 含义 Type 1字节 消息类型,此处值为134。 Code 1字节 该ICMPv6差错报文的始发者必须将该字段置为0,且接收端忽略该字段。 Checksum 2字节 用来在ICMPv6报文中检验数据和部分IPv6首部的完整性。 Cur Hop Limit 1字节 8位无符号整数。默认值应当放置在发出IP分组的IP首部的Hop Count字段中。 取0值意味着未(由该路由器)规定。 M 1比特 1位“管理地址配置”标记。当置1时,它指出地址可通过Dynamic Host Configuration协议获得。如果M标记置1,则O标记为冗余,可以忽略,因为DHCPv6将返回所有可用配置信息。 O 1比特 1位“其他配置”标记。当M=0且O=1时,指示其他配置信息可通过DHCPv6获得。例如,这类信息包括DNS相关信息或关于网络内其他服务器的信息。
IPv6 Global地址+掩码+网关(指Server的LLA地址)
如果M=0且O=0,指示没有信息可通过DHCPv6获得。纯SLAAC无状态在Options中注意A置位
通过命令Undo IPv6 nd ra halt开启
A标志位值 含义 对主机的行为影响 A=1 允许主机使用SLAAC(无状态地址自动配置)生成全局IPv6地址。 主机将根据RA中的网络前缀和本地生成的接口标识符(EUI-64或隐私扩展)自动配置全局地址。 A=0 禁止主机使用SLAAC生成全局地址。 主机无法自动获得IPv6全局地址,需通过DHCPv6(有状态)或其他方式手动配置。 4.1.1 SLACC分配地址的类型
模式 RA标志位 地址来源 DNS获取方式(额外信息) 纯SLAAC A=1, M=0, O=0SLAAC生成 扩展协议RDNSS(RA携带DNS),不一定支持 SLAAC+无状态DHCPv6 A=1, M=0, O=1SLAAC生成 DHCPv6(无状态) 有状态DHCPv6 A=0, M=1, O=1DHCPv6分配 DHCPv6(有状态) Undo ipv6 nd ra halt # 开启A=1置位 Ipv6 nd autoconfig managed-address-flag # 设置RA报文中携带M置位1,O置位1,即DHCP有状态配置 IPv6 nd autoconfig other-flag # 设置RA报文中的O置位为1,即DHCP无状态配置
4.2 SLACC工作流程
sequenceDiagram participant Host as 新设备 participant Router as 路由器 Host->>Router: 发送RS(Router Solicitation) Router->>Host: 响应RA(Router Advertisement) Note right of Router: 携带前缀(如2001:db8::/64)、默认网关、Flags Host->>Host: 生成接口标识符(EUI-64或随机) Host->>Host: 组合地址 = 前缀 + 接口标识符 Host->>Host: 执行DAD检测(发送NS报文) alt 地址可用 Host->>Host: 标记地址为VALID else 地址冲突 Host->>Host: 重新生成接口标识符 end
4.3 EUI-64地址生成原理
将MAC地址的48位通过固定格式生成位64位,但是容易暴露MAC地址
# 分割MAC地址 原始MAC → 00:11:22:33:44:55 前24位 → 00:11:22 后24位 → 33:44:55 # 插入FFFE 中间插入固定值: 00:11:22 + FFFE + 33:44:55 → 00:11:22FFFE33:44:55 # 反转U/L位(第7位) 原始第一字节:00(二进制 00000000) U/L位位置:第7位(从左到右第一个字节的最高第二位) 反转操作:00000000 → 00000010(十六进制 02) # 修正后的第一字节 → 02 最终格式 → 0211:22FF:FE33:4455
4.3 SLACC典型配置
4.3.1 无状态SLACC配置
# AR2 Interface g0/0/0 Undo IPv6 nd ra halt # 开启发送带有A置位的RA报文 # AR1 IPv6 address auto global {default} # {default}参数 华为设备的RA的SLACC无状态没有网关信息(LLA地址默认路由),需要配置收到RA报文生成IPv6地址同时,还可以学习RA报文中的源地址,并且把它作为IPv6缺省路由 Ipv6 address auto link-local # 本地生成LLA地址
4.3.2 有状态DHCPv6配置
# AR1: Dhcp enable Interface g0/0/0 Ipv6 address autoconfig dhcp Ipv6 address autoconfig link-local # AR2 Dhcp enable # dhcpv6 pool dhcpv6 address prefix 3FFF::/64 dns-server 4444::4 # Interface g0/0/0 Ipv6 address 2001:10:1:12::2 64 Ipv6 address fe80::2 link-local dhcpv6 server dhcpv6
4.3.3 SLAAC+无状态DHCPv6
AR1:client: Dhcp enable # Interface g0/0/0 Ipv6 enable Ipv6 address auto global default Ipv6 address auto link-local Dhcpv6 client information-request #只获取other信息 AR2:server Dhcp enable # Dhcpv6 pool dhcpv6 Dns-server 4444::4 Interface g0/0/0 Ipv6 enable Ipv6 address 2001:10:1:12::2 64 Ipv6 address fe80::2 link-local ipv6 nd autoconfig other-flag # Dhcpv6中ra只发送other信息 Undo ipv6 nd ra halt #使能SLACC功能

















浙公网安备 33010602011771号