浅谈IPv6技术

来源:匠心独运维妙维效

    谈到IPv6协议,相信大家不会感到陌生,从最初的IPv6标准的发表算起,到现在已有二十多年的时间。因前期IPv6协议仅在校园网及一些科研机构中被使用,各金融企业实际工作中接触到IPv6地址的机会还比较少,下面就为大家介绍一下IPv6协议的相关技术。

一、为什么是IPv6?我们目前正在广泛使用的IPv4地址采用32位二进制数进行编码,因此地址空间中有2的32次方个地址,其中有约42亿个地址可供使用。进入21世纪,随着互联网技术的快速发展,IPv4地址空间不足的问题正在持续加剧,早在2011年2月,IANA(互联网数字分配机构)就已将其IPv4地址空间段的最后2个A类/8地址组分配出去,其下属的APNIC(亚太互联网络信息中心)的IPv4地址库存已于2011年4月枯竭,2015年9月24日,ARIN(美国互联网号码注册中心)也宣布其库存的IPv4地址耗尽。IPv4地址使用情况如下图所示:

由于IPv4互联网地址资源紧张,目前企业使用NAT(地址转换)技术进行IPv4公网地址和私有地址之间的转换,但NAT导致无法进行端到端IP地址的跟踪,同时会导致有些应用程序无法正常运行。IPv6设计的初衷,正是为解决IPv4地址空间不足的问题。IPv6是IETF(互联网工程任务组)设计的用于替代现行IPv4的下一代IP协议,IANA在2016年已向IETF提出建议,要求新制定的国际互联网标准只支持IPv6,不再兼容IPv4。我们国家也将IPv6作为建设网络强国、构建下一代高速率、全覆盖、智能化网络的主推协议。IPv6的地址长度为128位,地址空间为2的128次方,数量非常庞大,号称可为全世界的每一粒沙子编上一个地址。随着物联网及5G技术的推进,未来将会有更多的终端需要通过IP地址接入互联网,预计到2020年,全球将有500亿台设备在线,相信IPv6协议将能为万物互联提供很好的支撑。二、IPv6地址介绍那么IPv6协议被得到认可,仅仅是因为地址空间大吗?其实不尽然。在介绍IPv6协议的优势之前,我们先来看看IPv6的地址格式。我们比较熟悉的IPv4地址采用点分十进制形式表示,即四个字节(每字节8bit)被分开用十进制写出,中间用“.”分隔。因IPv6地址由128个二进制位组成,是IPv4地址长度的4倍,于是IPv4点分十进制格式已不再适用。IPv6地址采用冒分十六进制表示法,格式为X:X:X:X:X:X:X:X,其中每个X表示地址中的16bit,8个段共128位,可完整表示一个IPv6地址。我们来看一个具体的IPv6地址:2013:0000:230D:0000:0000:0810:576B:231A因4bit二进制数可以完整表示1个十六进制数,因此每个X(即被“:”分开的部分)用4个十六进制数表示。在这种表示法中,每个X的前导0是可以省略的,因此上面这个IPv6地址可被简写为:2013:0:230D:0:0:810:576B:231A在某些情况下,一个IPv6地址中可能包含很长的一段0,此时可以把连续的一段0压缩为“::”,因此示例中的IPv6地址可被进一步简写为:2013:0:230D::810:576B:231A特别说明:

1、为保证地址的唯一性,地址中“::”只能出现一次,比如下面的简写方式就是错误的,因“::”出现了2次,我们无法根据此地址准确还原简写前的IPv6地址。

2013::230D::810:576B:231A

此地址既可被还原为2013:0:230D:0:0:810:576B:231A,也可被还原为2013:0:0:230D:0:810:576B:231A。

2、在IPv4中,对于一个URL链接,当需要通过“IP地址+端口号”的方式来访问时,可以按如下格式表示:

http://201.12.26.71:8080

由于IPv6地址中包含“:”,为了避免歧义,当URL链接中含有IPv6地址时,用“[]”将IPv6地址包含起来,如下所示:

http://[2013:0:230D::810:576B:231A]:8080

3、每个X的前导0可以省略,但其余的0不可省略。如2013:0:230D::810:576B:231A不能被简写为2013:0:230D::81:576B:231A。因这种简写方式仅能被还原为2013:0:230D::0081:576B:231A,不能被还原为2013:0:230D::810:576B:231A。

下面我们看看IPv6的几种地址类型

目前我们从运营商或地址分配机构申请到的均为2或3开头的全球单播地址(相当于IPv4的公网地址),其余地址尚未开始分配使用,但即便如此,这两个网段的IP地址数量也是十分庞大的。同时在IPv6协议中也有类似IPv4的私有地址,即地区本地单播地址,我们可以根据实际需要,在内网的服务器上使用。和IPv4地址的私有地址类似,IPv6的地区本地单播地址也仅在企业内部有效,在互联网上是无法正常进行通信的。值得一提的是,在IPv6协议下,增加了一种叫做链路本地(Link-Local)的地址,它仅在链路本地有效(不会跨路由器),它的功能我们稍后进行介绍。三、IPv6协议优势

相比IPv4协议,IPv6协议有如下几个方面的改进与提升。1、IPv6数据包头更加简洁。IPv4的包头大小一般为20字节(在没有设置option的情况下),有13个字段,而IPv6的包头大小固定为40字节,包头字段减少到8个。IPv4和IPv6的包头对比如下图所示:

从图中我们可以看到,IPv6的包头更大,但这并不意味着IPv6的数据包头更复杂,IPv6数据包头变大主要是IPv6的地址字段变长导致的(IPv6的源目的地址字段已经占用了32字节)。相反,IPv6对包头进行了如下优化:(1)IPv6取消了“包头长”字段,因为在IPv6的包头中没有“选项”字段,包头长度是固定的40字节,所以没有必要再设置一个“包头长”的字段来标识包头的长度。IPv6包头中仅有一个“负载长度”字段用来标识数据包的有效载荷长度。由于在IPv4的包头中包含了所有的选项,因此每个中间路由器都必须检查这些选项是否存在,如果存在,就必须处理它们。在IPv6中,引入了扩展包头的机制,扩展包头是跟在IPv6基本包头后面的可选包头,它不属于包头,它是IPv6数据报文的一部分。中间路由器不必处理每个可能出现的选项。这种处理方式提高了路由器处理数据报文的速度,也提高了其转发性能。IPv6数据报文结构如下图所示:

(2)IPv6取消了头部“校验和”字段。因为在OSI七层模型中,二层数据链路层和四层传输层都已进行了校验,故在IPv6设计之初,校验字段就被取消了,同样可以减少路由器的处理时间,提高报文转发速度。

(3)IPv6取消了分片标志(flags)及后面的分片偏移(Fragment Offset)字段。IPv6取消在中间节点进行数据包分片。在IPv4协议下,每个路由器收到一个数据包,都会比较数据包的大小和自己转发接口的MTU(最大传输单元)值,当数据包的大小大于自己的MTU时,会进行分片,下一跳路由器会对数据包进行重组。和IPv4由路由器来组装和分片不同,IPv6的数据只在源端分片,在目的端重组,中间的路由器均不再负责分片及重组工作,主机通过PMTU(路径MTU)发现协议来确定传输的最大MTU大小。当中间转发设备的接口收到一个报文后,如果发现报文长度比转发接口的MTU值大,则会将其丢弃,同时将转发接口的MTU值通过ICMPv6报文的“Packet Too Big”消息发给源端主机,源端主机以该值重新发送IPv6报文,PMTU发现协议可以动态发现整条传输路径上各链路的MTU值,减少由于重传带来的额外流量开销。主流网络设备PMTU发现过程如下图所示:

(4)IPv6新增了流标签(Flow Label)字段,其主要作用是对流进行分类。路由器可以不必根据报文的数据内容来识别不同的流,流标签字段由源节点进行分配,通过流标签、源地址、目的地址三元组即可唯一标识一条通信流,而不用像IPv4协议那样需要使用五元组(源地址、目的地址、源端口、目的端口和传输层协议号)来进行标识。不过这项技术目前尚未在IPv6协议下进行使用。

2、相比IPv4协议,IPv6的路由更加高效。前面提到,在IPv6中引入了链路本地(Link-Local)地址,此地址在本地链路是直连可达的,且仅能在连接到同一本地链路的节点之间使用。链路本地地址的结构如下图所示:

从图中可以看出,链路本地地址由一个特定的前缀FE80::/64(前10bit为1111111010)和64位的接口ID组成。其中接口ID使用IEEE定义的一种64位的扩展唯一标识符(EUI-64)来进行填充,EUI-64和接口链路层地址有关。在以太网上,IPv6的接口ID由MAC地址映射而来。由于MAC地址是48位的,而接口ID是64位的,EUI-64定义在MAC地址的中间插入十六进制数FFFE(共16位二进制数),同时将MAC从高位开始的第7位设置为1,最后得到的这组数就作为EUI-64格式的接口ID。当一个节点启动IPv6协议栈时,节点的每个接口会自动配置一个链路本地地址,这种机制使得每个连接到同一链路的IPv6节点不需要做任何配置就可以通信。例如下面的这个路由器接口就已经自动生成了一个链路本地地址:

当在IPv6下运行动态路由协议时,路由的下一跳地址均为链路本地(Link-Local)地址,由于链路本地地址都是直连可达的,这样就会避免重复递归查找路由表的情况出现。如下图所示,IPv6下RIP协议(RIPng)的路由表中下一跳地址均为链路本地地址:

同时链路本地地址还用在IPv6的邻居发现协议(NDP)中。关于NDP协议,我们稍后进行介绍。3、IPv6还有一个重要的改变是取消了广播。在IPv4协议中,ARP(地址解析协议)、DHCP(动态主机配置协议)、重复地址检测(DAD)等需要使用广播实现的功能,在IPv6协议下均通过组播来实现,这样做的好处是减少了网络泛洪流量,提升了网络性能。IPv6组播地址由特定的前缀FF::/8来标识。部分常用的IPv4和IPv6组播地址对应关系如下所示:

在IPv6组播地址中,有一种特别的组播地址,称为“被请求节点(Solicited-node)组播地址”,主要用于在获取邻居节点的链路层地址(取代IPv4的ARP协议)和进行重复地址检测时使用。SN地址由前缀FF02::1::FF00::/104和接口的IPv6单播地址的最后24位组成。在IPv6协议中,一个网络接口默认会加入如下组播组:

其中FF02::1:FF47:1530即为接口所属的SN组播地址,后24位与接口单播地址的后24位相同(此例中接口的全球唯一单播地址和链路本地地址后24位相同,故这两个地址的组播地址也相同)。在IPv6协议下可通过邻居发现协议(NDP)来进行MAC地址解析、重复地址检测,同时NDP协议还可实现前缀发现、邻居不可达检测、地址自动配置等功能,其中就用到了SN地址。下面我们举一个MAC地址解析的例子:当主机A需要获取主机B的MAC地址时,会发送一条ICMPv6消息,目的地址为主机B的被请求节点组播(SN)地址(非广播地址,不在此组播组的主机不会收到此消息),当主机B收到此消息时,会向主机A发送自己的MAC地址,此时主机A和主机B就可以正常通讯了。消息交互过程如下图所示:

四、IPv6过渡技术介绍

在实际进行IPv6部署时,有哪些方面需要注意呢?首先就是做好从IPv4向IPv6演进升级的技术路线规划。在以IPv4为主流协议的情况下,如何平滑升级至IPv6,将是我们在进行实际方案选择时面临的问题。下面我们介绍一下IPv4到IPv6的几种过渡方案。1、双栈(Dual-Stack)技术

双栈技术是指在网络及应用层面同时启用IPv4和IPv6两个协议栈,结构图如下所示:

从图中可以看出,应用服务器可同时支持IPv4和IPv6协议。既能与支持IPv4协议的客户端通信,又能与支持IPv6协议的客户端通信,真正实现同时支持IPv6/IPv4访问。双栈技术是目前使用较为广泛且改造最为彻底的方案。使用双栈技术,需要进行网络、系统及应用层面的改造。服务器网卡需启用双栈,同时需要进行apache等中间件的IPv6转发改造;数据库或程序代码中如使用unit32、in_addr,sockaddr_in等32位或更小的地址类型,则需进行调整,以支持128位大小的IPv6地址;IPv6协议下,每个网卡会存在全球单播地址、链路本地地址、组播地址等多个地址,在编写程序代码时需考虑地址调用情况;根据RFC 3493 API标准,IPv4/v6合并编码,编写程序代码时需采用新的风格;后续新投产的应用系统、中间件产品及新开发的应用等需全部支持IPv6连接访问。双栈技术有两种模式可供选择:

(1)单网卡双栈

即前端应用服务器使用一块网卡,既供客户端访问,同时此网卡可使用IPv6地址访问后端APP服务器、数据库服务器等应用,该方案要求后端服务器同步进行IPv6改造,或在后端防火墙上进行地址转换。(2)双网卡双栈

在实际环境中,应用服务器需要与后端APP服务器、数据库服务器通信。在改造初期,由于后端服务器仍然采用IPv4协议,将这些服务器同步修改为IPv6协议难度大、风险高,此时可以在前端应用服务器设置双网卡,外网卡采用IPv6地址,与IPv6客户端进行通信,内网卡采用IPv4地址,与后端IPv4服务器进行通信。2、地址-协议转换(NAT-PT)技术

NAT-PT(Network Address Translation-Protocol Translation)是指带协议转换功能的网络地址转换,通过修改协议报文头来转换网络地址,使IPv4和IPv6网络能够互访。如下图所示:

NAT-PT技术适用于IPv6和IPv4之间的互通,可仅针对IPv6和IPv4边界网络设备进行改造,或在边界网络部署专用的转换设备,改造难度相对较小。但此方案增加了边界网络设备的处理时延和复杂性,同时边界网络设备作为流量的汇聚点,可能成为故障点和性能瓶颈,扩展性不足。最重要的,后端应用仍然仅支持IPv4访问,没有真正实现应用层面支持IPv6访问。

3、隧道(Tunnel)技术

当IPv6改造进行到一定阶段后,网络中会出现多个IPv6孤岛,隧道技术可以实现IPv6网络穿越IPv4网络访问IPv6网络的需求。隧道是指将一种协议报文封装在另一种协议报文中,这样,一种协议就可以通过另一种协议的封装进行通信。IPv6隧道将IPv6报文封装在IPv4报文中,这样IPv6协议报文就可以穿越IPv4网络间通信。如下图所示:

采用隧道技术时,需要在起始端(隧道的入口处)将IPv6的数据报文封装入IPv4报文中,IPv4报文的源地址和目的地址分别是隧道入口和出口的IPv4地址。在隧道的出口处再将IPv6报文取出转发给目的服务器。需要特别说明的是,隧道技术不能实现IPv4主机和IPv6主机之间的直接通信。三种过渡技术的比较如下表所示,我们可以根据实际情况进行选择。

总结通过这篇文章,我们向大家介绍了IPv6协议技术及从IPv4向IPv6过渡的可选方案。IPv6改造是一项系统工程,其中涉及到IP地址、运营商线路、域名解析、网络设备、操作系统、中间件、数据库、程序代码及监控策略等环节的改造,需要网络、系统、开发、应用、安全及监控等多个专业领域共同推进。在IPv6规模部署的过程中,我们还有较长的一段路要走。构筑既能有效防范IPv6安全风险,又不低于现有IPv4网络同等防护能力的安全防护体系,同时不断健全IPv6监控运维体系并完善网络安全管理制度与能力,将是未来我们需要重点思考的方向。