在今天的数字世界中,互联网连接无处不在,而IPv6作为下一代互联网协议,已经逐渐取代了IPv4,以满足不断增长的互联网设备需求。IPv6不仅为我们带来更多的IP地址,还引入了新的方式来分配这些地址。本教程将深入研究IPv6地址分配中的两种主要方式:Stateless(无状态)和Stateful(有状态),以及与之相关的RA报文和DHCPv6协议。
IPv6地址分配方式详解
IPv6地址分配涉及两个主要方面:Link-Local地址和Global地址。Link-Local地址用于在同一链路上的设备间通信,而Global地址用于互联网上的全球通信。让我们逐一了解这两种地址生成方式:
一. Link-Local地址的生成方式
生成"链路本地地址"有两种方式:
- 手动配置
- 自动配置
其中,自动配置又可以分为以下三种算法:
- eui64:根据MAC地址计算生成
- stable_secret:随网络环境的变化而变化,但在固定网络环境下保持不变
- random:随机生成
这些方式允许设备在同一链路上自动配置Link-Local地址,无需手动干预。
二. Global地址的生成方式
生成"全球单播地址"(或者"唯一本地地址")也有两种方式:
- 手动配置
- 自动配置
自动配置又根据获取方式分为两种:
-
无状态(Stateless):根据路由通告报文RA(Router Advertisement)中包含的prefix前缀信息自动配置IPv6地址,通常采用Prefix + (EUI64或随机)的方式。无状态配置也可以称为SLAAC(Stateless Address Autoconfiguration)。
-
有状态(Stateful):通过DHCPv6协议获得IPv6地址。有状态配置又分为两种:
- 有状态DHCPv6(Stateful DHCPv6):IPv6地址和其他参数(如DNS)均通过DHCPv6获取。
- 无状态DHCPv6(Stateless DHCPv6):IPv6地址仍然通过RA报文方式生成,但其他参数(如DNS)通过DHCPv6获取。
要注意,有状态和无状态仅针对IPv6地址分配方式,不包括其他参数。有状态分配是可控、可管理的,通常由网络中的IP地址管理者(DHCPv6 Server)进行管理,而无状态分配则不可控,每个设备根据RA报文自行配置IPv6地址。
三. RA报文中的3个关键Flag
RA报文中包含三个关键的Flag位:
-
Autonomous flag(A flag):表示是否配置无状态IP。在RA报文中,每个prefix可以独立配置A flag。
- 当A flag为on(对应bit位为1)时,客户端会自动生成IPv6地址,并配置子网路由条目和网关。
- 当A flag为off(对应bit位为0)时,客户端不会生成IPv6地址,但仍然可以配置子网路由和网关。
-
Managed flag(M flag):表示是否配置有状态IP。M flag是RA报文的全局参数,一个RA报文只有一个M flag。
- 当M flag为on(对应bit位为1)时,客户端可以通过DHCPv6获得IPv6地址和其他参数(如DNS列表)。
- 当M flag为off(对应bit位为0)时,客户端不会通过DHCPv6获得IPv6地址。
-
Other flag(O flag):表示是否通过DHCPv6获得除IP以外的其他参数(如DNS列表)。O flag也是RA报文中的全局参数,一个RA报文只有一个O flag。注意:仅当M flag为off时,该参数才会被读取。
- 当O flag为on(对应bit位为1)时,客户端在M flag为on或至少有一个A flag为on的情况下,将通过DHCPv6获得其他参数。
- 当O flag为off(对应bit位为0)时,客户端不会通过DHCPv6获得其他参数。
四. 流程示意图
无状态和有状态IPv6地址分配方式并不相互对立,它们可以同时存在于同一网络设备上。下面的流程示意图展示了这一过程:
- Stateless自动配置链路本地地址
- Stateless自动配置全球地址(或唯一本地地址)
- Stateful自动配置全球地址(或唯一本地地址)和其他参数,包括Stateful DHCPv6或Stateless DHCPv6。
需要注意的是,一些客户端操作系统或网络管理器在Stateless阶段未收到RA报文时可能结束,不会继续Stateful阶段,例如CentOS 7和Ubuntu 17的默认逻辑,而Windows Server 2012则会继续Stateful阶段。
五. 测试获得IP效果
我们进行了一系列测试,测试环境基于CentOS 7和NetworkManager进行搭建。以下是测试内容和结果:
- 测试M、O、A flag在所有排列组合的情况下,客户端是否会通过RA报文配置无状态IP。
- 客户端是否会通过RA报文配置prefix子网路由和网关。
- 客户端是否会通过RA报文配置无状态IPv6地址。
- 客户端是否会通过DHCPv6获得有状态IPv6地址。
- 客户端是否会通过DHCPv6获得
DNS。
测试结果如下表所示:
M flag | O flag | A flag | Stateless IP | Prefix Subnet Route | Gateway Configuration | Stateful IP | DHCPv6 DNS |
---|---|---|---|---|---|---|---|
on | on | on | Yes | Yes | Yes | No | No |
on | on | off | Yes | Yes | Yes | No | No |
on | off | on | Yes | Yes | Yes | No | No |
on | off | off | Yes | Yes | Yes | No | No |
off | on | on | Yes | Yes | Yes | Yes | Yes |
off | on | off | Yes | Yes | Yes | Yes | Yes |
off | off | on | Yes | Yes | Yes | Yes | No |
off | off | off | Yes | Yes | Yes | No | No |
六. 应用场景(选择无状态还是有状态)
何时采用无状态或有状态取决于具体的应用场景。关键在于是否需要控制IPv6地址。如果需要控制地址,例如保持地址不变,那么应该选择有状态IPv6地址分配方式;如果不需要控制,可以选择无状态IPv6地址分配方式。
- 在服务端领域,需要对外提供服务,通常需要采用有状态IPv6地址,因为业务IP地址的突然变化容易导致业务中断,除非有良好的服务发现机制。
- 在客户端领域,如移动设备或办公室内的PC机,通常只需要连接到IPv6互联网,不需要对外提供服务,因此可以采用无状态IPv6地址分配方式。
七. 后续内容
由于篇幅限制,本文未提供详细的配置信息。我们将在后续的IPv6系列文章中提供完整的实验配置,包括RA和DHCPv6的配置,以及客户端的配置。请继续关注我们的系列文章以获取更多信息。
附. 参考文档
本教程深入研究了IPv6地址分配的Stateless和Stateful方式,以及与之相关的RA报文和DHCPv6协议。了解这些方式和参数对于构建和管理IPv6网络至关重要。希望本教程能帮助您更好地理解IPv6地址分配,并根据实际需求选择合适的方式。