初识IPv6 有状态、无状态地址相关协议
本文主要介绍IPv6全局单播地址(Global Address)的获取方式及其相关的协议,DHCPv6协议和RA、RS报文(邻居发现协议)。
1、全局单播地址类型
IPv6地址中分为本地链路地址(Link-Local Address)与全局单播地址(Global Address)。
本地链路地址根据mac等信息通过指定算法得到,不需要从路由器获取。以fe80:开头
全局单播地址从需要和路由器进行协商获取,可以与公网通信。
如下图中有三个IPv6全局单播地址地址,其中两个是无状态,一个有状态。一个本地链路地址。
全局单播地址可通过手动或自动方式配置,其中自动方式分为“有状态”和“无状态”。
为了避免混淆,在此解释下有状态、无状态到底是什么意思:首先,请明确一点,有状态、无状态仅针对于IPv6地址分配方式,并不包含其他参数。
有状态:可控、可管理。在网络中存在一个IP地址管理者,它能够识别客户端,根据不同的客户端,分配对应的IPv6地址,客户端与服务端之间需要维护IP地址的租期及续约。目前实现这种效果的,就是DHCPv6协议,IP地址管理者就是DHCPv6 Server
无状态:不可控、难管理。在网络中只有网关,没有IP地址管理者。因此无人去识别客户端,每个客户端根据网关发送的相同的RA报文内容,自行配置IPv6地址
在这种情况下,IPv6相关网络配置具有三种方式。
无状态(Stateless):通过邻居管理协议RA报文,从路由公告中配置IPv6地址。RA报文中会携带前缀等信息。同时IPv6DNS等信息也从RA报文中获取。
有状态(Stateful DHCPv6):通过DHCPv6协议获取IPv6相关信息。包括IP地址及DNS等信息。
无状态DHCPv6(Stateless DHCPv6):这种介于上面两种形式中间,IP地址从RA报文中计算得到,而DNS信息,通过DHCPv6协议获取。
而在使用过程中,可以衍生出一种自动配置模式,即通过RA报文携带的信息,来确定IPv6信息该怎么获取。
那么我们简单需要理解什么是RA报文。
2、RA、RS报文
简介
NDP(Neighbor Discovery Protocol,邻居发现协议)是IPv6的基础协议,它组合了IPv4中的ARP、ICMP路由器发现和ICMP重定向等协议,并对它们作了改进。作为IPv6的基础性协议,NDP还提供了前缀发现、邻居不可达检测、重复地址监测、地址自动配置等功能。
NDP定义了5种ICMPv6报文类型,包括RS、RA、NS、NA和Redirect报文。
NS、NA简单来说就是邻居设备之间互通信息,完成IPv6地址到链路层地址的解析,然后通过解析后得到的链路层地址和IPv6等地址信息来建立相应的邻居缓存表项。
而RS、RA报文用于路由器发现
路由器发现是指主机定位本地链路上的路由器和确定其配置信息的过程,主要包含以下3方面内容:
路由器发现(Router Discovery):主机发现邻居路由器及选择某一个路由器作为默认网关的过程。
前缀发现(Prefix Discovery):主机发现本地链路上的一组IPv6前缀,生成前缀列表。该列表用于主机的地址自动配置和on-link判断。
参数发现(Parameter Discovery):主机发现相关操作参数的过程,如MTU、报文的默认跳数限制、地址分配方式等信息。
全球单播地址的配置步骤如下:
1)客户端在配置好链路本地地址后,发送RS报文,请求路由器的前缀信息。
2)路由器收到RS报文后,发送单播RA报文,其中携带M、O flag用于指示进行何种类型配置,A flag用于无状态地址自动配置的前缀信息。同时路由器也会周期性地发送组播RA报文。
3)客户端根据RA报文携带A flag,获取网关信息。如果是自动配置或者是无状态,则根据M、O flag,选择IPv6地址及DNS的获取方式。
三个flag:M O A
如下图,可以看到客户端发送RS报文后,接收到路由器的RA报文
- M flag:Managed address
configuration字段,为1通过DHCPv6获取IP地址,为0则是通过RA报文获取地址。
- O flag:Other configuration字段,为1通过DHCPv6获取DNS等其他配置,为0通过RA报文获取其他配置。
虽然M O flag具有四种组合,但实际中M=0,0=0是一直错误的配置,因为当IP通过DHCPv6
Server获取时,相应的DNS等其他配置信息也应从DHCPv6 Server获取以保证业务的连通性。
- A flag:Autonomous address-configuration
flag(A)字段,表示是否可以使用RA报文前缀信息配置无状态地址。
通过前缀,可以获取子网掩码长度,网关,以及计算出IP地址,图中例子,前缀信息如下:
ICMPv6 Option (Prefix information : 2409:8a20:c1a:ce70::/64)
如果是客户端采用自动配置,那么则完全根据RA报文来决定如何获取IPv6相关配置,当然,客户端也可以无视RA报文,选择自己想要的配置方式。(如上图,RA报文配置为无状态DHCPv6模式,但是客户端其实也可以通过DHCPv6来获取有状态地址,只要DHCPv6 Server支持即可)。
所以,有状态及无状态地址并不是完全互斥,他们可以同时存在,如下图可以理解其流程:
图片引用自:https://www.cnblogs.com/fzxiaomange/p/ipv6-autoconf-stateless-stateful.html
3、DHCPv6协议
和IPv4的bootp(DHCPv4)作用类似,DHCPv6基于UDP,通过与服务器协商获取IP地址及DNS等信息。
DHCPv6报文类型:
目前DHCPv6定义了如下十三种类型报文,DHCPv6服务器和DHCPv6客户端之间通过这十三种类型的报文进行通信。
DHCPv6和DHCPv4报文对比,比较好理解,不做赘述:
交互例子如下,这是我在客户端已经获取到IPv6地址的情况下,重新进行IPv6有状态连接:
第一次是客户端发送confirm来确认已经获取的IPv6地址是否适用于当前链路;DHCPv6 Server通过reply回应。
第二次是发送request,请求IP地址及DNS等配置,可以看到DHCPv6 Server通过reply回应了IP地址及DNS。
初识IPv6 有状态、无状态地址相关协议相关推荐
- IPV6 DHCPV6 和 无状态 分配地址
1 DHCPv6简介 1.1 DHCPv6概述 DHCPv6(Dynamic Host Configuration Protocol for IPv6,支持IPv6的动态主机配置协议)是针对IPv6 ...
- mysql有状态无状态_k8s statefulSet 有状态应用和无状态应用区别
一.定义: 无状态服务:就是没有特殊状态的服务,各个请求对于服务器来说统一无差别处理,请求自身携带了所有服务端所需要的所有参数(服务端自身不存储跟请求相关的任何数据,不包括数据库存储信息) 有状态服务 ...
- k8s应用管理——有状态无状态
背景 由于ReplicaSet.ReplicationController.Deployment等这些控制器都是无状态的,但是我们想要使用k8s来编排有状态的服务如数据库等,但因为有状态服务的复杂性, ...
- mysql有状态无状态_有状态和无状态的对象区别
每次的总结,都是一种进步,把自己理解的东西记录下来不容易,让别人看懂更不容易. 第一:基本概念: 1.有状态就是有数据存储功能.有状态对象(Stateful Bean),就是有实例变量的对象,可以保存 ...
- 有状态,无状态对象是什么概念
基本概念: 有状态就是有数据存储功能.有状态对象(Stateful Bean),就是有实例变量的对象 ,可以保存数据,是非线程安全的.在不同方法调用间不保留任何状态. 无状态就是一次操作,不能保存数据 ...
- ipv6 “无状态地址分配”和 “有状态地址分配” 两种IPV6地址分配方式的区别说明
the Difference Between Stateful and Stateless DHCP 关键字:IPv6 IPv4 IP DHCP DHCPv6 autoconf IPv6地址 自动分配 ...
- 域名扫描linux,ksubdomain 无状态域名爆破工具
前言 在渗透测试信息中我们可能需要尽可能收集域名来确定资产边界. 在写自动化渗透工具的时候苦与没有好用的子域名爆破工具,于是自己就写了一个. Ksubdomain是一个域名爆破/验证工具,它使用Go编 ...
- JWT无状态登录+跨域问题
1.无状态登录原理 1.1.什么是有状态? 用户登录后,我们把登录者的信息保存在服务端session中,并且给用户一个cookie值,记录对应的session.然后下次请求,用户携带cookie值来, ...
- HTTP协议的 “无连接,无状态”
HTTP 是一个属于应用层的面向对象的协议,HTTP 协议一共有五大特点:1.支持客户/服务器模式:2.简单快速:3.灵活:4.无连接:5.无状态. 无连接 无连接的含义是限制每次连接只处理一个请求. ...
最新文章
- spring cloud config注意点(疑问)
- [转]CSS完美兼容IE6/IE7/FF的通用hack方法
- python窗口化编程_python程序的窗口化
- wxWidgets:wxWindowCreateEvent类用法
- Android6.0 源码修改之 仿IOS添加全屏可拖拽浮窗返回按钮...
- 并查集(UnionFindSet)
- r语言的MASS包干什么的_R语言综述的包
- java web 启动时执行_java Web 启动时自动执行代码的几种方式
- 【python】面向对象的封装、继承、多态的练习题
- 通过德雷福斯模型探寻成长之路
- Struts2的属性驱动与模型驱动的区别
- Erlang实战练习(一)
- Burpsuite1.7.03网站渗透神器最新破解版
- 最全的CDR抠图教程
- 经典r-k法 matlab,解微分方程欧拉法,R-K法及其MATLAB实例
- 《操作系统真象还原》——0.25 指令集、体系结构、微架构、编程语言
- SQL工具导出CSV文件中文乱码
- 手机端与PC端在线预览PDF
- C4.5决策树预测销量
- ASCII码和汉字码
热门文章
- popper.js源码初识研究总结
- WBV334U01-S/BF-WBV334a02_0.5直流电流电压传感器
- 宋飞飞 博客启用 www.songfeifei.com.cn
- cadence 旋转快捷键_cadence原理图快捷键整理
- java数据类型 两大类_JAVA的数据类型分为两大类型
- 推动门html5,白鹭引擎CEO陈书艺:推动游戏前行 开启HTML5游戏之门
- 【学习记录】pubmed检索记录
- 合伙开水果店需要注意什么,开小型水果店需要注意什么
- php paypal订单号查询,关于php购物网站支付paypal的使用方法
- ios开发 方形到圆的动画_ios – cornerRadius上的CGAffineTransformMakeScale动画圆形UIButton...