1. IPv6概述
基本概念
IPv6(Internet Protocol Version 6)也被称为IPng(IP Next Generation)。它是Internet工程任务组IETF(Internet Engineering Task Force)设计的一套规范,是IPv4(Internet Protocol Version 4)的升级版本。
IPv6优势
① “无限”地址空间:地址长度为128bit,海量的地址空间,满足物联网等新兴业务、有利于业务演进及扩展。
②层次化的地址结构:相较于IPv4地址,IPv6地址的分配更加规范,利于路由聚合(缩减IPv6路由表规模)、路由快速查询。
③即插即用:IPv6支持无状态地址自动配置(SLAAC),终端接入更简单。
④简化的报文头部:简化报文头,提高效率;通过扩展包头支持新应用,利于路由器等网络设备的转发处理,降低投资成本。
⑤安全特性:IPsec、真实源地址认证等保证端到端安全;避免NAT破坏端到端通信的完整性。
⑥移动性:对移动网络实时通信有较大改进,整个移动网络性能有比较大的提升。
⑦增强QoS特性:额外定义了流标签字段,可为应用程序或者终端所用,针对特殊的服务和数据流,分配特定的资源。
IPv6过渡技术
(1)
由于NAT技术的应用,缓解了IPv4地址不足产生的问题,但是部署IPv6是解决IPv4地址不足的最终方案。当前世界上不同地区对部署IPv6的需求强烈程度不一,且当前IPv4网络仍然占主流地位,因此短时间内IPv6和IPv4将会共存。
IPv4网络演变为IPv6网络主要有以下三种技术:
①双栈技术:在一台设备上同时启用IPv4协议栈和IPv6协议栈的技术。
②隧道技术:将一种协议的数据封装在另一种协议中的技术。
③转换技术:将IPv6地址和IPv4地址进行转换的一种技术。
没有最好的过渡技术方案,没有任何一种技术方案能够解决所有问题,通常是多种技术组合成不同的过渡方案,满足不同的网络访问场景。
(2)
双栈技术:
设备支持IPv4/IPv6,IPv4及IPv6在网络中独立部署,在一段时间内并存。对现有IPv4业务影响较小。
演进方案相对简单、易理解。网络规划设计工作量相对更少。
现有软硬件(网络设备、终端、操作系统等)已经有很大一部分支持双栈,甚至默认使能IPv6,可直接使用。
对设备的硬件/软件有要求,设备需支持双栈。
隧道技术:
将IPv4流量封装在IPv6隧道中,或者将IPv6流量封装在IPv4隧道中。
适用于在IPv4传输网络中实现IPv6孤岛之间的互通,或者在IPv6传输网络中实现IPv4孤岛之间的互通。
部署隧道技术的设备(一般是隧道端点)需支持双栈及相应的隧道技术。
仅适用于实现孤岛互通的临时状态,并不适用于长期、稳定的业务形态。
转换技术:
将IPv4流量转换成IPv6(主要是IP头部的改写),反之亦然。
适用于纯IPv4网络与纯IPv6网络之间的通信,反之亦然。
破坏了端到端连接的完整性。需针对特殊应用提供ALG功能。
网络管理/审计变得复杂。
需在网络中部署网络层协议转换(NAT)设备、DNS设备。
IPv6协议简介
(1)OSPFv3
①基于链路运行,单链路支持多实例。
②取消LSA头部IP地址信息,实现与网络层协议解耦。
③LSA内新定义泛洪范围字段,支持未知LSA的处理。
④新增LSA支持IPv6路由发布。
(2)IS-IS for IPv6
①不是新协议或新版本,仅 是原有协议上做了简单扩展,IS-IS路由器和IS-IS路由器可以实现互通。
②新增1种NLPID(网络层协议标识)宣告自身支持IPv6。
③新增2种TLV,支持宣告IPv6网络可达性和接口IPv6地址信息。
(3)BGP4+
①不是新协议或新版本,只需在MP-BGP(BGP多协议)架构上支持IPv6地址族,BGP4+路由器和BGP4路由器可以实现互通。
②新添2种NLRI(网络层可达信息),支持发布IPv6可达路由及下一跳信息,支持撤销不可达路由。
(4)PIM
①PIM协议本义即为协议无关组播,PIM真正版本号仍为PIMv2。
②唯一区别在于协议报文地址及组播数据报文地址均使用IPv6地址。
2. IPv6地址
IPv6地址概述
IPv6地址的长度为128bit。一般用冒号分割为8段,每一段16bit,每一段内用十六进制表示。
与IPv4地址类似,IPv6也用“IPv6地址/掩码长度”的方式来表示IPv6地址。
IPv6地址格式
(1)首选格式
①冒号分割为8段,每一段16bit,每一段内用十六进制表示。
②用“IPv6地址/掩码长度”的方式来表示。
例如:2001:0DB8:0000:0001:0000:0000:0000:45ff/64。
(2)压缩格式
①每段前导0可以省略,但是如果该段为全0,则至少保留一个“0”字符;拖尾的0不能被省略。
②一个或多个连续的段为全0时,可用“::”表示,整个IPv6地址缩写中只允许有一个“::”。
例如:2001:DB8:0:1::45ff/64。
内嵌的IPv4地址的格式
①地址的前96bit为IPv6地址格式,后32bit为IPv4地址格式。
②IPv6部分可采用首选或压缩格式,IPv4部分采用点分十进制格式。
例如:0:0:0:0:0:0:166.168.1.2/64。
IPv6地址结构
一个IPv6地址可以分为如下两部分:
网络前缀:nbit,相当于IPv4地址中的网络ID。
接口标识:(128-n)bit,相当于IPv4地址中的主机ID。
IPv6单播地址示例:2001:0DB8:6101:0001:5ED9:98FF:FECA:A298/64。
IPv6地址前缀
鉴于IPv4地址在规划和分配上的局限性,IETF对IPv6地址类型进行了精细划分,不同类型的IPv6地址被赋予了不同的前缀,且受地址分配机构的严格管理。
常用的IPv6地址或前缀有:
IPv6地址接口标识
接口ID可通过三种方式生成:手工配置、系统自动生成,或基于IEEE EUI-64规范生成。
其中,基于IEEE EUI-64规范自动生成接口ID的方式最为常用,该方式将接口的MAC地址转换为IPv6接口标识。
3. IPv6地址类型
地址类型
单播地址(Unicast Address):标识一个接口,目的地址为单播地址的报文会被送到被标识的接口。在IPv6中,一个接口拥有多个IPv6地址是非常常见的现象。
组播地址(Multicast Address):标识多个接口,目的地址为组播地址的报文会被送到被标识的所有接口。只有加入相应组播组的设备接口才会侦听发往该组播地址的报文。
任播地址(Anycast Address):任播地址标识一组网络接口(通常属于不同的节点)。目标地址是任播地址的数据包将发送给其中路由意义上最近的一个网络接口。
IPv6没有定义广播地址(Broadcast Address)
IPv6常见单播地址
1)GUA
GUA( Global Unicast Address,全球单播地址),也被称为可聚合全球单播地址。该类地址全球唯一,用于需要有互联网访问需求的主机,相当于IPv4的公网地址。
全局路由前缀:由提供商指定给一个组织机构,一般至少为48bit。
子网ID:组织机构根据自身网络需求划分子网。
接口标识:用来标识一个设备的接口。
2)ULA
ULA( Unique Local Address,唯一本地地址)是IPv6私网地址,只能够在内网中使用。该地址空间在IPv6公网中不可被路由,因此不能直接访问公网。
唯一本地地址使用FC00::/7地址块,目前仅使用了FD00::/8地址段。FC00::/8预留为以后拓展用。
ULA虽然只在有限范围内有效,但也具有全球唯一的前缀(虽然随机方式产生,但是冲突概率很低)。
3)LLA
LLA( Link-Local Address,链路本地地址)是IPv6中另一种应用范围受限制的地址类型。LLA的有效范围是本地链路,前缀为FE80::/10。
LLA用于一条单一链路层面的通信,例如IPv6地址无状态自动配置、IPv6邻居发现等。
源或目的IPv6地址为链路本地地址的数据包将不会被转发到始发的链路之外,换句话说,链路本地地址的有效范围为本地链路。
每一个IPv6接口都必须具备一个链路本地地址。华为设备支持自动生成和手工指定两种配置方式。
IPv6组播地址
IPv6组播地址标识某个组,目的为组播地址的报文会被送到该组播组内的成员。组播地址由前缀(FF::/8),标志(Flag)字段、范围(Scope)字段以及组播组ID(Group ID)4个部分组成。
①Flags:
用来表示永久或临时组播地址
0000表示永久组播地址
0001表示临时组播地址
②scope:表示组播组的范围
0:预留;
1:节点本地范围;单个接口有效,仅用于Loopback通讯
2:链路本地范围;例如FF02::1
5:站点本地范围;
8:组织本地范围;
E:全球范围;
F:预留。
③Group ID:组播组ID
IPv6组播MAC
组播IPv6报文的目的IP为组播IPv6地址,同样,目的MAC为组播MAC地址。
组播MAC的前16bit为“33:33”,是专门为IPv6组播预留的MAC地址前缀。后32bit从组播IPv6地址的后32bit直接映射而来。
被请求节点组播地址
当一个节点具有了单播或任播地址,就会对应生成一个被请求节点组播地址,并且加入这个组播组。该地址主要用于邻居发现机制和地址重复检测功能。被请求节点组播地址的有效范围为本地链路范围。
IPv6任播地址
任播地址标识一组网络接口(通常属于不同的节点)。任播地址可以作为IPv6报文的源地址,也可以作为目的地址。
IPv6与IPv4比较
IPv6地址规划
IPv6地址使用建议
地址规划要点
①一般而言,ISP从地址分配机构获取的IPv6地址至少为/32前缀长度。企业用户获得的前缀长度往往为/48。
②虽然IPv6地址空间巨大,但是在规划网络时,依然需要对地址进行合理规划。
③确保IPv6地址的全网唯一性(除某些特殊的应用外,如anycast)。
④确保IPv6地址规划的连续性、可聚合性、可扩展性。
⑤业务地址:可在IPv6地址中规划适当bit用于承载业务信息、VLAN信息或位置信息,利于路由规划、QoS部署。
⑥用户地址:考虑为不同业务类型的用户预留连续的地址段。通过特定bit确定用户类型、分布区域等。
⑦建议为终端网段(用户主机、服务器等)分配/64的前缀长度。
⑧建议为P2P链路分配/127的前缀长度。
⑨建议为Loopback接口分配/128的前缀长度。
4. IPv6报文结构
IPv6报文构成
IPv6报文一般由三个部分组成:
①基本报头:提供报文转发的基本信息,路由器通过解析基本报头就能完成绝大多数的报文转发任务。
②扩展报头:提供一些扩展的报文转发信息,如分段、加密等,该部分不是必需的,也不是每个路由器都需要处理,仅当需要路由器或目的节点做某些特殊处理时,才由发送方添加一个或多个扩展头。
③上层协议数据单元:一般由上层协议报头和它的有效载荷构成,该部分与IPv4的上层协议数据单元相似。
IPv6基本报头
IPv6相较于IPv4的改进
①取消三层校验:协议栈中二层和四层的已提供校验,因此IPv6直接取消了IP的三层校验,节省路由器处理资源。
②取消中间节点的分片功能:中间路由器不再处理分片,只在产生数据的源节点处理,省却中间路由器为处理分片而耗费的大量CPU资源。
③定义定长的IPv6报头:有利于硬件的快速处理,提高路由器转发效率。
④安全选项的支持:IPv6提供了对IPSec的完美支持,如此上层协议可以省去许多安全选项。
⑤增加流标签:提高QoS效率。
IPv6扩展报头
1)
Next Header:下一报头,长度为8bit。与基本报头的Next Header的作用相同。指明下一个扩展报头(如果存在)或上层协议的类型。
Extension Header Length:报头扩展长度,长度为8bit。表示扩展报头的长度(不包含Next Header字段)。
Extension Header Data:扩展报头数据,长度可变。扩展报头的内容,为一系列选项字段和填充字段的组合。
2)扩展报头规约
扩展报头必须按如左排列的顺序出现。
除目的选项报头外,每种扩展报头只能出现一次。
目的选项头最多出现2次,1次在路由报头之前,1次在上层协议数据报文之前,如果没有路由报头,则只能出现一次。
基本报头、扩展报头和上层协议数据报文的相互关系举例如下:
IPv6地址配置
IPv6地址配置的方式
IPv6地址配置的方式可以分为静态配置和动态配置。其中,动态地址配置又可以分为无状态地址自动配置(Stateless Address Autoconfiguration, SLAAC)和有状态地址自动配置(Stateful Address Autoconfiguration)。
IPv6地址自动配置的分类
1)无状态地址自动配置
①不需要IPv6地址分配服务器保存和管理每个节点的状态信息的一种IPv6地址自动配置方式,称之为IPv6无状态地址自动配置。
②无状态地址自动配置方式基于NDP来实现。
2)有状态地址自动配置
IPv6地址分配服务器必须保存每个节点的状态信息,并管理这些保存的信息,这种方式称之为IPv6有状态地址自动配置。
有状态地址自动配置基于DHCPv6(Dynamic Host Configuration Protocol for IPv6)来实现。
IPv6地址无状态自动配置过程
①PC1根据本地的接口ID自动生成链路本地地址。
②PC1对该链路本地地址进行DAD检测,如果该地址无冲突则可启用,此时PC1具备IPv6连接能力。
③PC1发送RS报文,尝试在链路上发现IPv6路由器。
④R1发送RA报文(携带可用于无状态地址自动配置的IPv6地址前缀。路由器在没有收到RS报文时也能够主动发出RA报文)。
⑤PC1解析路由器发送的RA报文,获得IPv6地址前缀,使用该前缀加上本地的接口ID生成IPv6单播地址。
⑥PC1对生成的IPv6单播地址进行DAD检测,如果没有检测到冲突,则启用该地址。
RA报文中的Flags字段
M-bit:管理地址配置标识
①M-bit默认为0,此时收到该RA的终端将使用RA中包含的IPv6前缀来构造单播地址,即采用无状态地址自动配置。
②M-bit设置为1时,收到该RA的终端将使用DHCPv6来获取地址及其他信息。当M-bit为1时,终端可以忽略O-bit。也即终端将使用DHCPv6来获取地址及其他信息(如DNS等)。
使用如下命令,可将M-bit设置为1:ipv6 nd autoconfig managed-address-flag
O-bit:其它有状态配置标识
①O-bit默认为0,此时收到该RA的终端进行无状态自动配置。即路由设备通过RA报文向终端发布除IPv6地址外的其他配置信息。
②O-bit设置为1时,收到该RA的终端将使用DHCPv6来获取除地址之外的其他参数。
使用如下命令,可将O-bit设置为1:ipv6 nd autoconfig other-flag
RA报文中的可选信息
1)地址前缀信息
A-bit,用于指示终端设备是否能使用该前缀进行无状态地址自动配置。
A-bit被设置为0时,此时终端不能使用该前缀进行无状态地址自动配置。
A-bit被设置为1时,终端可以使用该前缀进行无状态自动配置。
使用如下命令将该比特位设置为0: ipv6 nd ra prefix 2001:DB8:: 64 2592000 604800 no-autoconfig
2)生存周期
①当终端获取到前缀并生成IPv6单播地址后,首先进入Tentative状态,在通过DAD后,该地址将进入Preferred状态,并在Preferred lifetime内保持该状态。
②在Preferred状态,终端可以正常收发报文。Preferred lifetime超时后,地址进入Deprecated状态,并在Valid lifetime内保持该状态。
③在Deprecated状态,该地址仍然有效,现有的连接可以继续使用该地址,但是无法使用该地址建立新的连接。
④当Valid lifetime超时后,地址进入Invalid状态,表示该地址无法继续使用。
5. DHCPv6
DHCPv6概述
DHCPv6针对IPv6编址方案设计,支持对客户端分配IPv6前缀、IPv6地址和其他网络配置参数,并记录这些信息,便于网络管理。
DHCPv6又分为如下三种:
①DHCPv6有状态自动配置:DHCPv6服务器自动配置IPv6地址/前缀及其他网络配置参数(DNS、NIS、SNTP服务器地址等参数)。
②DHCPv6无状态自动配置:主机IPv6地址仍然通过路由通告方式自动生成,DHCPv6服务器只分配除IPv6地址以外的配置参数,包括DNS服务器等参数。
③DHCPv6 PD(Prefix Delegation,前缀代理)自动配置:下层网络路由器不需要再手工指定用户侧链路的IPv6地址前缀,它只需要向上层网络路由器提出前缀分配申请,上层网络路由器便可以分配合适的地址前缀给下层路由器,下层路由器把获得的前缀(前缀一般长度小于64)进一步自动细分成64位前缀长度的子网网段,把细分的地址前缀再通过路由通告(RA)至与IPv6主机直连的用户链路上,实现主机的地址自动配置,从而完成整个IPv6网络的层次化布局。
DHCPv6网络构成
DHCPv6基本协议架构中,主要包括以下三种角色:
①DHCPv6 Client:DHCPv6客户端,通过与DHCPv6服务器进行报文交互,获取IPv6地址/前缀和其他网络配置参数,完成自身的网络配置。
②DHCPv6 Server:DHCPv6服务器,负责处理来自客户端或中继的地址分配、地址续租、地址释放等请求,为客户端分配IPv6地址/前缀和其他网络配置参数。
③DHCPv6 Relay:DHCPv6中继,负责转发来自客户端或服务器的DHCPv6报文,协助DHCPv6客户端和DHCPv6服务器完成地址配置功能。
DHCPv6中的常用概念
①有效时间:Valid Lifetime,地址/前缀的生命周期。
②优选时间:Preferred Lifetime,用于计算续租时间和重绑定时间。
③T1:IPv6地址的续租(Renew)时间,默认是Preferred Lifetime的0.5倍。
④T2:IPv6地址的重绑定(Rebind)时间,默认是Preferred Lifetime的0.8倍。
⑤IA:Identity association,即身份联盟,是使得服务器和客户端能够识别、分组和管理一系列相关IPv6地址的结构,又分为IA_NA(非临时地址身份联盟)和IA_PD(代理前缀身份联盟)。
⑥DUID:DHCP Unique Identifier,即DHCP设备唯一标识符。用来唯一标志一台设备,每个客户端、服务器、中继都有自己的DUID。
⑦报文类型:Solicit、Advertise、Request、Reply、Information-Request、Renew、Rebind、Release、Confirm、Decline、Reconfigure、Relay-Forward、Relay-Reply等。
IPv6有状态自动配置
1)四步交互
四步交互是指DHCPv6客户端与服务器交互四次来完成前缀/地址等参数获取的过程。
过程:
①DHCPv6客户端发送Solicit消息,请求DHCPv6服务器为其分配IPv6地址/前缀和网络配置参数。
②DHCPv6服务器回复Advertise消息,通知客户端可以为其分配的地址/前缀和网络配置参数。
③如果DHCPv6客户端接收到多个服务器回复的Advertise消息,则根据消息接收的先后顺序、服务器优先级等,选择其中一台服务器,并向该服务器发送Request消息,请求服务器确认为其分配地址/前缀和网络配置参数。
④DHCPv6服务器回复Reply消息,确认将地址/前缀和网络配置参数分配给客户端使用。
2)两步交互
DHCPv6客户端可以在发送的Solicit消息中携带Rapid Commit选项,标识客户端希望服务器能够快速为其分配地址/前缀和网络配置参数
步骤:
①DHCPv6客户端发送Solicit报文,携带Rapid Commit选项。
②DHCPv6服务器接收到Solicit报文后,将会判断,如果DHCPv6服务器支持快速分配,则直接返回Reply报文,为客户端分配IPv6地址/前缀和其他网络配置参数。如果DHCPv6服务器不支持快速分配,则将采用四步交互方式。
地址/前缀租约更新
1)DHCPv6服务器分配的IPv6地址/前缀具有有效时间。地址/前缀的租借时间超过有效时间后,DHCPv6客户端不能再使用该地址/前缀。因此,在有效时间超时之前,如果DHCPv6客户端希望继续使用该地址/前缀,则需要更新地址/前缀的租约。
步骤:
①DHCPv6客户端在T1时刻(默认为Preferred Lifetime的1/2)发送Renew报文进行地址/前缀租约更新请求。
②如果DHCPv6客户端可以继续使用该地址/前缀,则DHCPv6服务器回应续约成功的Reply报文,通知DHCPv6客户端已经成功更新地址/前缀租约。否则,DHCPv6服务器回应续约失败的Reply报文,通知DHCPv6客户端不能获得新的租约。
2)如果DHCPv6服务器未响应T1时刻DHCPv6客户端发出的Renew请求,则客户端会在T2(默认为Preferred Lifetime的0.8倍)向所有DHCPv6服务器组播发送Rebind请求更新租约。
步骤:
①DHCPv6客户端在T1时刻发送Renew请求更新租约,但是没有收到DHCPv6服务器的回应报文。
②DHCPv6客户端在T2时刻,向所有DHCPv6服务器组播发送Rebind报文请求更新租约。
③如果DHCPv6客户端可以继续使用该地址/前缀,则DHCPv6服务器回应续约成功的Reply报文,通知DHCPv6客户端已经成功更新地址/前缀租约。否则DHCPv6服务器回应续约失败的Reply报文,通知DHCPv6客户端不能获得新的租约。
DHCPv6无状态自动配置
DHCPv6服务器为已经具有IPv6地址/前缀的客户端分配除地址/前缀以外的其他网络配置参数,该过程称为DHCPv6无状态自动配置。
步骤:
①DHCPv6客户端以组播的方式向DHCPv6服务器发送Information-request报文,该报文中携带Option Request选项,指定客户端需要从服务器获取的配置参数。
②服务器收到该报文后,为客户端分配网络配置参数,并单播发送Reply报文将网络配置参数返回给客户端。客户端检查Reply报文中提供的信息,如果与Information-request报文中请求的配置参数相符,则按照Reply报文中提供的参数进行网络配置;否则,忽略该参数。
DHCPv6 DP自动配置
在一个层次化的网络结构中,不同层次的IPv6地址配置一般是手工指定的。手工配置IPv6地址扩展性不佳,不利于IPv6地址的统一规划管理。DHCPv6 PD可以解决这个问题。
步骤:
①DHCPv6客户端发送Solicit报文,请求DHCPv6服务器为其分配IA_NA地址和IA_PD前缀。
②DHCPv6服务器回复Advertise报文,通知客户端可以为其分配的IPv6地址和前缀。
③如果客户端接收到多个服务器回复的Advertise报文,则根据Advertise报文中的服务器优先级等参数,选择优先级最高的一台服务器(若服务器优先级一样,则选择带有该客户端需要的配置参数的Advertise报文) ,并向其发送Request报文,请求为其分配地址/前缀。
④DHCPv6服务器回复Reply报文,确认将IPv6地址/前缀分配给DHCPv6客户端。
⑤DHCPv6客户端在收到PD前缀后,与终端进行RS/RA报文交互,在RA报文中将携带获取到的PD前缀下发至终端。
DHCPv6中继工作过程
当服务器和客户端不在一个网段时,需要使用到DHCPv6中继来完成IPv6地址/前缀和其他网络配置参数的获取。
步骤:
①DHCPv6客户端向所有DHCPv6服务器和DHCPv6中继的组播地址FF02::1:2发送请求报文。
②DHCPv6中继收到客户端的报文后,将其封装在Relay-Forward报文的中继消息选项中,并将Relay-Forward报文发送给DHCPv6服务器或下一跳中继。
③DHCPv6服务器从Relay-Forward报文中解析出DHCPv6客户端的请求,为DHCPv6客户端选取IPv6地址和其他配置参数,并将Relay-Reply报文发送给DHCPv6中继。
④DHCPv6中继从Relay-Reply报文中解析出DHCPv6服务器的应答,转发给DHCPv6客户端。
DHCPv6地址确认过程
当客户端有断电、掉线、漫游等情况发生时,客户端会发送Confirm报文确认自己的IPv6地址是否可用。如果客户端确认的地址是合法的,则服务器回应;如果没有回应,则客户端需要重新启动地址申请流程。
DHCPv6地址冲突检测过程
客户端完成地址申请后,会在开始使用该地址前发起DAD探测。如果DAD检测到地址存在冲突,则客户端发送Decline消息通知服务器,并不再使用该地址。
DHCPv6地址释放过程
当客户端不需要再使用某地址时,将发送Release消息至服务器,发起释放地址的交互流程。