IPV6核心技术(干货)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IPV6核心技术(干货)相关的知识,希望对你有一定的参考价值。

ipv6地址结构:
技术图片
因此前缀最小长度为48,子网ID最大为64


ipv6 ipv4地址对比
技术图片


IPV6接口ID生成算法
技术图片


IPV6地址配置
技术图片


Linux内核双栈架构
技术图片

Linux内核中,IPv6协议栈与IPv4协议栈并行关系。IPv6和IPv4完全是两套不一样的代码实现。IPv6完整的协议栈逻辑模块包括:
1、网络层IPv6,核心逻辑:IPv6路由子系统
2、传输层TCP/UDP实现:TCPv6、UDPv6
3、控制报文协议ICMPv6,这里值得一提的是ICMPv6在IPv6协议中的地位十分重要。
ICMPv6不仅提供了与ICMPv4相同的服务诊断功能,例如报告数据包的错误和提供简单的echo服务,ICMPv6是IPv6中邻居发现协议的重要组成部分,用于管理链路上的点到点的通信。
4、邻居子系统的实现:邻居发现协议NDP(对应于IPv4里面的ARP协议)
5、其他高级实现(IPv6 NAT、IPv6隧道、iPv6 IPSec等)
由于我们平时的开发工作在应用层,以上1-4是将会接触得最多。


IPV6地址获取:
无状态地址获取:

技术图片

技术图片

无状态自动配置过程:
解释一:
技术图片

解释二:
1、由链路上的主机向链路发起“路由请求”报文,这个报文是以组播协议发送,寻找链路上最合适的路由器。
2、路由器收到请求会返回“路由通告”报文,报文里面带着本链路的地址前缀信息主机将接收到的前缀和自身的接口ID,组成完整的新地址。
3、主机尝试使用新地址发起地址重复检测,检测链路上是否有其他主机也是这个地址,如果有,就停止使用该地址;如果没有,就启用这个新地址。
可以看到无状态自动配置过程十分简易(对比DHCPv4和DHCPv6来说),实际上,无状态自动配置可以单独组网使用,也可以配合有状态自动配置一般会配合使用,加强网络节点管理。涉及自动配置和地址检测等更多细节,可以查阅RFC1971、RFC4861。
参考资料:
https://zhuanlan.zhihu.com/p/35509560


IpV6中的M位和O位:
M位,O位是RA报文里携带的,值为1代表有状态,值为0代表无状态
RA报文中的有状态自动配置地址的标志位(M标志位)全称:managed-address-flag。
RA报文中的有状态自动配置其他信息的标志位(O标志位)。全称:?other-flag
M=0,O=0,表示直接从RA拿地址;
发布RA消息的M和O标志位,DHCPv6客户端通过RA消息学习到IPv6网关的路由
比如DHCPV6中继就会作为网关设备,向客户端发送RA报文,RA报文中携带的M位和O位来指定该网络中的客户端使用DHCPV6的方式获取地址和其他网络配置参数


IPV6邻居发现协议(ND):
IPv6邻居发现协议主要提供了五个功能:地址解析、邻居可达性检测、重复地址检测、路由器发现/前缀发现及地址自动配置、重定向功能。
交换机都会有一个ND表项,类似于ARP表项,是通过发送NS报文来维护这个表项的
邻居发现协议包含,NS,NA,RS,RA,重定向
1)RS type=133 路由请求,请求获得设备的网关和其余的参数------------能够说明请求网关就行
2)RS type=134 路由应答,用于配置设备的网关和地址以及其它参数
3)Type=135(NS) TYPe=NA(136) 用于邻居请求和邻居应答,主要是做链路层地址解析,相当是ARP请求和应答
4)Type=137 重定向报文 发现有更优先的转发路径做报文的重定向

RA报文:
RA报文会携带前缀,DNS,MTU等信息,一个RA报文允许携带10个前缀信息,


IPv6地址的分配方法有以下几种:
手动配置。手动配置IPv6地址/前缀及其他网络配置参数(DNS、NIS、SNTP服务器地址等参数)。
无状态自动地址分配。由接口ID生成链路本地地址,再根据路由通告报文RA(Router Advertisement)包含的前缀信息自动配置本机地址。
有状态自动地址分配,即DHCPv6方式。DHCPv6又分为如下两种:
DHCPv6有状态自动分配。DHCPv6服务器自动分配IPv6地址/PD前缀及其他网络配置参数(DNS、NIS、SNTP服务器地址等参数)。
DHCPv6无状态自动分配。主机IPv6地址仍然通过路由通告方式自动生成,DHCPv6服务器只分配除IPv6地址以外的配置参数,包括DNS、NIS、SNTP服务器等参数。


自动配置之无状态自动配置(SLAAC)
IPv6无状态地址配置方式(参看协议RFC2462)是目前广泛采用的IPv6地址自动配置方式。配置了该协议的主机只需相邻设备开启IPv6路由通告功能,即可以根据通告报文包含的前缀信息自动配置本机地址。
无状态地址配置方案中设备并不记录所连接的IPv6主机的具体地址信息,可管理性差。而且当前无状态地址配置方式不能使IPv6主机获取DNS服务器的IPv6地址等配置信息,在可用性上有一定缺陷。对于互联网服务提供商来说,也没有相关的规范指明如何向设备自动分配IPv6前缀,所以在部署IPv6网络时,只能采用手动配置的方法为设备配置IPv6地址。


自动配置之DHCPV6自动配置(有状态自动配置)
与其他IPv6地址分配方式(手工配置、通过路由器通告消息中的网络前缀无状态自动配置等)相比,DHCPv6具有以下优点:
更好地控制IPv6地址的分配。DHCPv6方式不仅可以记录为IPv6主机分配的地址,还可以为特定的IPv6主机分配特定的地址,以便于网络管理。
DHCPv6支持为网络设备分配IPv6前缀,便于全网络的自动配置和网络层次性管理。
除了为IPv6主机分配IPv6地址/前缀外,还可以分配DNS服务器IPv6地址等网络配置参数。
DHCPv6服务器为客户端分配地址/前缀的过程分为两类:
DHCPv6四步交互分配过程(应用于网络中多个服务器)
DHCPv6两步交互快速分配过程(应用于网络中单个服务器)
管理员可以根据实际的网络环境来配置使用哪种方式
DHCPv6四步交互地址分配过程如下:
DHCPv6客户端发送Solicit报文,请求DHCPv6服务器为其分配IPv6地址和网络配置参数。
如果Solicit报文中没有携带Rapid Commit选项,或Solicit报文中携带Rapid Commit选项,但服务器不支持快速分配过程,则DHCPv6服务器回复Advertise报文,通知客户端可以为其分配的地址和网络配置参数。
如果DHCPv6客户端接收到多个服务器回复的Advertise报文,则根据Advertise报文中的服务器优先级等参数,选择优先级最高的一台服务器,并向所有的服务器发送Request组播报文,该报文中携带已选择的DHCPv6服务器的DUID。
DHCPv6服务器回复Reply报文,确认将地址和网络配置参数分配给客户端使用。

技术图片
DHCPv6两步交互地址分配过程如下:
DHCPv6客户端在发送的Solicit报文中携带Rapid Commit选项,标识客户端希望服务器能够快速为其分配地址和网络配置参数。
DHCPv6服务器接收到Solicit报文后,将进行如下处理:
如果DHCPv6服务器支持快速分配地址,则直接返回Reply报文,为客户端分配IPv6地址和其他网络配置参数,Replay报文中也携带Rapid Commit选项。
如果DHCPv6服务器不支持快速分配过程,则采用四步交互方式为客户端分配IPv6地址/前缀和其他网络配置参数。
技术图片


自动配置之DHCPV6自动配置(无状态自动配置)
IPv6节点可以通过DHCPv6无状态方式获取配置参数(包括DNS、SIP、SNTP等服务器配置信息,不包括IPv6地址)

DHCPv6无状态工作过程如下:
DHCPv6客户端以组播方式向DHCPv6服务器发送Information-Request报文,该报文中携带Option Request选项,指定DHCPv6客户端需要从DHCPv6服务器获取的配置参数。
DHCPv6服务器收到Information-Request报文后,为DHCPv6客户端分配网络配置参数,并单播发送Reply报文,将网络配置参数返回给DHCPv6客户端。DHCPv6客户端根据收到Reply报文提供的参数完成DHCPv6客户端无状态配置。

技术图片


ipv6没有广播报文,所以使用组播,使用到的两个组播地址:

FF02::1:2(All DHCP Relay Agents and Servers):所有DHCPv6服务器和中继代理的组播地址,这个地址是链路范围的,用于客户端和相邻的服务器及中继代理之间通信。所有DHCPv6服务器和中继代理都是该组的成员。
FF05::1:3(All DHCP Servers):所有DHCPv6服务器组播地址,这个地址是站点范围的,用于中继代理和服务器之间的通信,站点内的所有DHCPv6服务器都是此组的成员。


DHCP唯一标识符(DUID)
DHCP设备唯一标识符DUID(DHCPv6 Unique Identifier),每个服务器或客户端有且只有一个唯一标识符,服务器使用DUID来识别不同的客户端,客户端则使用DUID来识别服务器。
客户端和服务器DUID的内容分别通过DHCPv6报文中的Client Identifier和Server Identifier选项来携带。两种选项的格式一样,通过option-code字段的取值来区分是Client Identifier还是Server Identifier选项


身份联盟(IA)
身份联盟IA(Identity Association)是使得服务器和客户端能够识别、分组和管理一系列相关IPv6地址的结构。每个IA包括一个IAID和相关联的配置信息。
客户端必须为它的每一个要通过服务器获取IPv6地址的接口关联至少一个IA。客户端用给接口关联的IA来从服务器获取配置信息。每个IA必须明确关联到一个接口。
IA的身份由IAID唯一确定,同一个客户端的IAID不能出现重复。IAID不应因为设备的重启等因素发生丢失或改变。
IA中的配置信息由一个或多个IPv6地址以及T1和T2生存期组成。IA中的每个地址都有首选生存期和有效生存期。
一个接口至少关联一个IA,一个IA可以包含一个或多个地址信息。


DHCPv6报文类型
技术图片
技术图片
技术图片


DHCPv6 PD前缀工作机制
DHCPv6前缀代理DHCPv6 PD(Prefix Delegation)是一种前缀分配机制,
通过DHCPv6前缀代理机制,下游网络设备不需要再手工指定用户侧链路的IPv6地址前缀,它只需要向上游网络设备提出前缀分配申请,上游网络设备便可以分配合适的地址前缀给下游设备,下游设备把获得的前缀(一般前缀长度小于64)进一步自动细分成64前缀长度的子网网段,把细分的地址前缀再通过路由通告(RA)至与IPv6主机直连的用户链路上,实现IPv6主机的地址自动配置,完成整个系统层次的地址布局。


DHCPv6 PD前缀工作原理
DHCP前缀代表简称DHCPv6-PD,是对DHCPv6的扩展。
DHCPv6为客户端分配地址、DNS等信息。DHCPv6-PD可以为DHCP客户端分配一个网络号,然后这个DHCPv6客户端可以把这个网络号再分成若干个网段分配给它的接口,以及连接在这些接口中的主机或者其他节点。
比如,将企业客户的出口路由器配置成DHCPv6-PD客户端,将ISP的路由器配置成DHCPv6-PD的服务器。客户的出口路由器将从ISP路由器获得一个网段地址,然后再进一步划分成几个网段后,分配给内部主机使用。
又比如,我们公司的ONU,配置了IPV6 wan之后就会获取一个前缀,然后再配置一下lan测地址来源是是wan 测代理,这样就可以为onu下接的设备分配ip地址了,这个时候一般需要在dhcpv6 server上配置两个地址池,一个是给wan测分配,一个是lan测分配


DHCPv6 PD四步交互地址分配过程如下:
DHCPv6 PD客户端发送Solicit报文,请求DHCPv6 PD服务器为其分配IPv6地址前缀。
如果Solicit报文中没有携带Rapid Commit选项,或Solicit报文中携带Rapid Commit选项,但服务器不支持快速分配过程,则DHCPv6服务器回复Advertise报文,通知客户端可以为其分配的IPv6地址前缀。
如果DHCPv6客户端接收到多个服务器回复的Advertise报文,则根据Advertise报文中的服务器优先级等参数,选择优先级最高的一台服务器,并向该服务器发送Request报文,请求服务器确认为其分配地址前缀。
DHCPv6 PD服务器回复Reply报文,确认将IPv6地址前缀分配给DHCPv6 PD客户端使用。
DHCPv6 PD同样也支持携带Rapid Commit选项的两步交互方式,报文交互方式与DHCPV6交互方式一样
DHCPV6 PD工作原理图:
技术图片


配置两个前缀长度的解释:
ipv6 local pool dhcpv6-pool 2001:DB8:1200::/40 48 //定义一个前缀长度为40的本地前缀代表地址池,并且定义分配给DHCPv6-PD Client的前缀长度是48位


DHCPV6中继报文交互过程
DHCPv6客户端向所有DHCPv6服务器和DHCPv6中继发送目的地址为FF02::1:2(组播地址)的请求报文。
根据DHCPv6中继转发报文有如下两种情况:
如果DHCPv6中继和DHCPv6客户端位于同一个链路上,即DHCPv6中继为DHCPv6客户端的第一跳中继,中继转发直接来自客户端的报文,此时DHCPv6中继实质上也是客户端的IPv6网关设备。DHCPv6中继收到客户端的报文后,将其封装在Relay-Forward报文的中继消息选项(Relay Message Option)中,并将Relay-Forward报文发送给DHCPv6服务器或下一跳中继。
如果DHCPv6中继和DHCPv6客户端不在同一个链路上,中继收到的报文是来自其他中继的Relay-Forward报文。中继构造一个新的Relay-Forward报文,并将Relay-Forward报文发送给DHCPv6服务器或下一跳中继。
DHCPv6服务器从Relay-Forward报文中解析出DHCPv6客户端的请求,为DHCPv6客户端选取IPv6地址和其他配置参数,构造应答消息,将应答消息封装在Relay-Reply报文的中继消息选项中,并将Relay-Reply报文发送给DHCPv6中继。
DHCPv6中继从Relay-Reply报文中解析出DHCPv6服务器的应答,转发给DHCPv6客户端。如果DHCPv6客户端接收到多个DHCPv6服务器的应答,则根据报文中的服务器优先级选择一个DHCPv6服务器,后续从该DHCPv6服务器获取IPv6地址和其他网络配置参数。


DHCPv6地址租约更新
DHCPv6服务器为DHCPv6客户端分配的地址是有租约的,租约由生命期(包括地址的首选生命期和有效生命期构成)和续租时间点(IA的T1、T2)构成。地址有效生命期结束后,DHCPv6客户端不能再使用该地址。在有效生命期到达之前,如果DHCPv6客户端希望继续使用该地址,则需要更新地址租约。
DHCPv6客户端为了延长其与IA关联的地址的有效生命期和首选生命期,在T1时刻,发送包含IA选项的Renew报文给服务器,其中IA选项中携带需要续租的IA地址选项。如果DHCPv6客户端一直没有收到T1时刻续租报文的回应报文,那么在T2时刻,DHCPv6客户端通过Rebind报文向DHCPv6服务器继续续租地址
技术图片
T1时刻地址租约更新过程如下:
DHCPv6客户端在T1时刻(推荐值为优先生命期的0.5倍)发送Renew报文进行地址租约更新请求。
DHCPv6服务器回应Reply报文。
如果DHCPv6客户端可以继续使用该地址,则DHCPv6服务器回应续约成功的Reply报文,通知DHCPv6客户端已经成功更新地址租约。
如果该地址不可以再分配给该DHCPv6客户端,则DHCPv6服务器回应续约失败的Reply报文,通知DHCPv6客户端不能获得新的租约。
技术图片
T2时刻地址租约更新过程如下:
DHCPv6客户端在T1时刻发送Renew请求更新租约,但是没有收到DHCPv6服务器的回应报文。
DHCPv6客户端在T2时刻(推荐值为优先生命期的0.8倍),向所有DHCPv6服务器组播发送Rebind报文请求更新租约。
DHCPv6服务器回应Reply报文。
如果DHCPv6客户端可以继续使用该地址,则DHCPv6服务器回应续约成功的Reply报文,通知DHCPv6客户端已经成功更新地址/前缀租约。
如果该地址不可以再分配给该DHCPv6客户端,则DHCPv6服务器回应续约失败的Reply报文,通知DHCPv6客户端不能获得新的租约。
如果DHCPv6客户端没有收到DHCPv6服务器的应答报文,则到达有效生命期后,DHCPv6客户端停止使用该地址。


IP地址预留
DHCPv6服务器支持预留IPv6地址,即保留部分IPv6地址不参与动态分配。比如预留的IPv6地址可作为DNS服务器的IPv6地址。


PC获取IPv6信息注意事项:
针对缺省采用IPv6协议路由通告方式自动获取IPv6地址的客户端(例如PC),还需要在客户端的网关上配置RA消息的标志位,以实现客户端通过DHCPv6方式获取IPv6地址。
像我们电脑接ONU,使用DHCPV6 PD方式获取前缀,然后再通过RA的方式将ipv6信息分配给PC

以上是关于IPV6核心技术(干货)的主要内容,如果未能解决你的问题,请参考以下文章

干货:操作系统核心技术实战

干货:操作系统核心技术实战

k8s核心技术--configmap#yyds干货盘点#

经典干货《Java 多线程编程核心技术》学习笔记及总结(中)

为你硬肝30天,写成4.4w字的Java技术核心开发手册,干货力荐

百度胡晓光:飞桨(PaddlePaddle)核心技术与应用实践