IPv6系列-彻底弄明白有状态与无状态配置IPv6地址

深入研究自动分配IPv6地址的Stateless(无状态)与Stateful(有状态)方式

小慢哥的原创文章,欢迎转载


目录

? 一. Link-Local Address的生成方式
? 二. Global Address的生成方式
? 三. RA报文中3个关键的Flag
? 四. 流程示意图
? 五. 测试获得IP效果
? 六. 应用场景(选择无状态还是有状态)
? 七. 后续内容
? 附. 参考文档


一. Link-Local Address的生成方式

生成“链路本地地址”,有2种方式

? 手动配置
? 自动配置

其中“自动配置”根据算法,又分为

? eui64:根据mac地址换算而来
? stable_secret:跟随网络环境的变化而变化,处于固定网络环境时其值将固定
? random:随机生成


二. Global Address的生成方式

生成“全球单播地址”(或者“唯一本地地址”),有2种方式

? 手动配置
? 自动配置

其中“自动配置”根据获取方式,又分为

? 无状态(Stateless):根据路由通告报文RA(Router Advertisement)包含的prefix前缀信息自动配置IPv6地址,组成方式是Prefix + (EUI64 or 随机)。Stateless也可以称为SLAAC(Stateless address autoconfiguration)
? 有状态(Stateful):通过DHCPv6方式获得IPv6地址

其中“有状态”又分为2种

? 有状态DHCPv6(Stateful DHCPv6):IPv6地址、其他参数(如DNS)均通过DHCPv6获取
? 无状态DHCPv6(Stateless DHCPv6):IPv6地址依然通过路由通告RA方式生成,其他参数(如DNS)通过DHCPv6获取

为了避免混淆,在此解释下有状态、无状态到底是什么意思:首先,请明确一点,有状态、无状态仅针对于IPv6地址分配方式,并不包含其他参数

? 有状态:可控、可管理。在网络中存在一个IP地址管理者,它能够识别客户端,根据不同的客户端,分配对应的IPv6地址,客户端与服务端之间需要维护IP地址的租期及续约。目前实现这种效果的,就是DHCPv6协议,IP地址管理者就是DHCPv6 Server
? 无状态:不可控、难管理。在网络中只有网关,没有IP地址管理者。因此无人去识别客户端,每个客户端根据网关发送的相同的RA报文内容,自行配置IPv6地址


三. RA报文中3个关键的Flag

RA报文中存在3个关键的flag bit:

? Autonomous flag(简称A flag):表示是否配置无状态IP。在一个RA报文中,可存在多个prefix,比如2401::/64、2402::/64、2403::/64,每个prefix都可以独立配置A flag

? 为on时(对应bit位为1):表示客户端应当在该prefix范围内自动生成IPv6地址(客户端通过DAD自行保证地址可用),并配置子网路由条目、网关
? 为off时(对应bit位为0):表示客户端不应当在该prefix范围内自动生成IPv6地址,但是可以配置子网路由条目、网关

? Managed flag(简称M flag):表示是否配置有状态IP。M flag是RA报文的全局参数,一个RA报文只有一个M flag

? 为on时(对应bit位为1):表示在stateless流程结束后开始stateful流程,也就是告诉客户端可以通过DHCPv6来获得IPv6地址和其他参数(如DNS列表)
? 为off时(对应bit位为0):表示不通过DHCPv6来获得IPv6地址。

? Other flag(简称O flag):表示是否通过DHCPv6获得除IP以外的其他参数(如DNS列表)。O flag也是RA报文中的全局参数,一个RA报文只有一个O flag。注意:仅当M flag为off时,该参数才会被读取。

? 为on时(对应bit位为1):当M flag为on,或者M flag为off且至少有一个A flag为on时,将通过DHCPv6获得其他参数
? 为off时(对应bit位为0):当M flag为on时,依然将通过DHCPv6获得其他参数;当M flag也为off时,将不通过DHCPv6获得其他参数


四. 流程示意图

无状态和有状态并不是相互对立的,他们可以同时存在,也就是一张网卡上可以同时出现通过RA生成的IP以及通过DHCPv6获得的IP。通过下面这张笔者绘制的流程图可知晓其中奥秘。

从图中可以看到,顺序为:

1?? Stateless自动配置“链路本地地址”
2?? Stateless自动配置“全球地址”(或“唯一本地地址”)
3?? Stateful自动配置“全球地址”(或“唯一本地地址”)和其他参数,其中Stateful阶段中存在Stateful DHCPv6或Stateless DHCPv6

注意:部分客户端操作系统或网络管理器当Stateless阶段没有收到RA报文后,就到此结束,不会走Stateful阶段,比如CentOS 7、Ubuntu 17的默认逻辑都是这样,而windows server 2012就会继续走Stateful阶段。


五. 测试获得IP效果

测试环境:客户端基于CentOS 7+NetworkManager(即系统默认的网络管理方式)进行测试

? 网关会发送RA报文,包含一个prefix
? DHCPv6 Server会分配IP、DNS

测试内容:测试M、O、A flag在所有排列组合的情况下

? 客户端是否会通过RA报文配置无状态IP
? 客户端是否会通过RA报文配置prefix子网路由
? 客户端是否会通过RA报文配置gateway
? 客户端是否会通过DHCPv6获得有状态IP
? 客户端是否会通过DHCPv6获得DNS

测试结果


六. 应用场景(选择无状态还是有状态)

何时采用无状态、何时采用有状态,关键看应用场景。核心在于是否需要控制IP地址,比如保持IP不变,如果需要控制,就采用有状态;如果无需控制,就采用无状态。

? 服务端领域:如对外提供服务,通常需要采用有状态IP。因为业务IP的突然变化容易导致业务中断(除非做好服务发现)
? 客户端领域:如移动设备、办公室内PC机,只需要上IPv6互联网,并不需要对外提供服务,可以采用无状态IP


七. 后续内容

由于篇幅有限,本文尚未贴出实验的详细配置。将会在《IPv6系列》后续文章里,贴出实验的完整信息,包括RA、DHCPv6的配置,以及客户端的配置,敬请关注。


附. 参考文档

http://www.6deploy.eu/tutorials/080-6deploy_ipv6_autoconfiguration_mechs_v0_4.pdf
https://cshihong.github.io/2018/02/01/DHCPv6基础/

原文地址:https://www.cnblogs.com/fzxiaomange/p/ipv6-autoconf-stateless-stateful.html

时间: 2024-10-14 05:56:32

IPv6系列-彻底弄明白有状态与无状态配置IPv6地址的相关文章

精通有状态vs无状态(Stateful vs Stateless)—Immutable模式之姐妹篇

我相信有不少人还不明白有状态和无状态(Stateful and Stateless)的概念,那么我们今天就来谈谈有状态和无状态,一方面不断总结提高自我,另一方面兼扫盲.这是Immutable不变模式的姐妹篇,大家可以参照着读. Immutable不变模式的分析blog: http://www.iteye.com/topic/959751 基本概念: 有状态就是有数据存储功能.有状态对象(Stateful Bean),就是有实例变量的对象,可以保存数据,是非线程安全的.在不同方法调用间不保留任何状

有状态 Vs 无状态

公司物联网项目集成Orleans以支持高并发的分布式业务,对于Orleans也是第一次接触,本文就分享下个人对Orleans的理解. 这里先抛出自己的观点:Orleans 是一个支持有状态云生应用/服务水平伸缩的基于Virtual Actor 模型的.NET分布式框架. 下面我会从以下几个关键点,进行阐述: 云生应用的挑战 何为有状态/无状态 什么是 Actor 模型 什么是 Virtual Actor 模型 云生应用的挑战 在讲云生应用之前,我们来先讲讲传统应用,对于传统应用常用的三层结构如下

有状态、无状态(Stateful and Stateless)

我相信有不少人还不明白有状态和无状态(Stateful and Stateless)的概念,那么我们今天就来谈谈有状态和无状态,一方面不断总结提高自我,另一方面兼扫盲.这是Immutable不变模式的姐妹篇,大家可以参照着读. Immutable不变模式的分析blog: http://www.iteye.com/topic/959751 基本概念: 有状态就是有数据存储功能.有状态对象(Stateful Bean),就是有实例变量的对象,可以保存数据,是非线程安全的.在不同方法调用间不保留任何状

Java深度历险(二) EJB Session Bean有状态和无状态的区别与联系

刚开始对两种sessionbean存在误解,认为有状态是实例一直存在,保存每次调用后的状态,并对下一次调用起作用,而认为无状态是每次调用实例化一次,不保留用户信息.仔细分析并用实践检验后,会发现,事实恰好相反:有状态和无状态会话bean的本质区别是它们的生命期. 首先解释一个下面要用到的概念--用户:sessionbean 的用户实际上就是直接调用ejb的类的实例,甚至是这个实例的某个方法.同一个类的不同实例对于session bean来说是不同的用户. 实例解析 有状态的StatefulEjb

聊聊系统设计:有状态、无状态

网站登录校验,很普通的一个功能 对于这个功能我们要如何实现? 先分析一下登录校验是个啥意思 举个栗子,比如我们在登陆页输入用户名密码,登录了社交网站 这时候想去看自己的新鲜事,却告诉我请先输入用户名密码进行验证.. 这时候想去吐槽下这个2B体验,发个新鲜事,点完发布按钮时,又弹出框说请输入用户名密码进行验证...这时候脑子里上千个草泥马奔腾而过 这样的产品可以说拜拜了 对我们的用户来说,登录操作其实完成一次就够了,后续的操作服务应该能够自动识别出是这个合法用户 因此,我们就需要对用户的状态进行记

有状态和无状态

无状态对象 用于处理逻辑, 而不是持有数据 把数据从一个有状态对象处理后传输到另一个有状态对象 属性和字段都是临时的, 不共享, 无需持久化 使用时随时创建, 随时丢弃 有状态对象 持用数据 共享 需要持久化 保持内部数据一致 版本, 身份, 值比较, HashCode 数据访问: 遍历, 查找, 排序 数据变化事件

RHCE 系列(九):如何使用无客户端配置 Postfix

转载于:http://www.itxuexiwang.com/a/liunxjishu/2016/0220/152.html?1456382561 尽管现在有很多在线联系方式,电子邮件仍然是一个人传递信息给远在世界尽头或办公室里坐在我们旁边的另一个人的有效方式. 下面的图描述了电子邮件从发送者发出直到信息到达接收者收件箱的传递过程. 电子邮件如何工作 要实现这一切,背后发生了好多事情.为了使电子邮件信息从一个客户端应用程序(例如 Thunderbird.Outlook,或者 web 邮件服务,例

IPv6系列-入门指南

本文是<IPv6系列>文章的第一篇<入门指南>,用于快速了解并上手IPv6. 小慢哥的原创文章,欢迎转载 目录 ? 一. 为什么要了解IPv6 ? 二. 顾虑:IPv6地址太复杂了,记不住啊 ? 三. 顾虑:每台服务器都有IPv6地址,会暴露整个内网,不安全 ? 四. 顾虑:IPv6地址有好几种类型,很难区分和记忆 ? 五. 需要学哪些知识 ? 六. IPv6基础知识 ? 七. IPv6地址生成 ? 八. 常用命令 ? 九. 在线测试工具 ? 十. 开启与关闭IPv6 ? 十一.

HTTP协议是无状态协议,怎么理解?

 Http是一个无状态协议,同一个会话的连续两个请求互相不了解,他们由最新实例化的环境进行解析,除了应用本身可能已经存储在全局对象中的全部信息外,该环境不保存与会话有关的不论什么信息. 自己的理解,在asp.net里:每次提交server的页面没有不论什么关系,每次记录在页面的信息下次提交是记不住的,(除了应用本身可能已经存储在全局对象中的全部信息外)在.net里实际就是ViewState,ViewState是asp.net中保存页面信息的基本单位,应用时就是保存在控件隐藏域等中的数据 协议的状