一、概述
1. IPv4存在的问题
- IPv4公网地址耗尽。这应该是当前IPv6替代IPv4的最大原动力。随着最后一块IPv4公网地址分配光,加上接入公网的用户及设备越来越多,IPv4地址枯竭的问题日益加剧。
- Internet用户快速增长,随着科技行业的发展,有更多的用户、更多种类的设备接入公网。
- IPv4缺乏真正的端到端通信模型。为了缓解地址紧缺的问题,私有IPv4地址空间被大量的部署,应该说私有地址空间的定义极大程度上缓解了IPv4地址枯竭的问题,任何人在任何本地私有的网络中都能够随意使用IPv4私有地址,只是这些地址无法上公网,如果需要访问公网,或者被公网访问,那就需要用到NAT。NAT的问题确实能解决一定的私有地址空间与公网互访的问题,但是却无法实现真正意义上的端到端的通信,举例说,如果公网上的节点要在安全的环境下访问内网的一台服务器,除非将该服务器的私有IP映射到公网,否则是无法访问的。NAT内部网络对于外网而言是隐藏的、不可见的(虽然这在一定程度上增加了安全性)。
- IPv4无法适应新技术的发展,如物联网等。所有行业都是IPv6的潜在用户。
- 广播机制的存在,对ARP的依赖等,使得IPv4局域网的相关运作问题频发。
2.IPv6的特点及优势
- IPv6地址采用128bits长度,地址空间非常庞大,为未来数十年提供了巨大的地址数量支撑。
- 多等级层次有助于路由聚合,提高了因特网网络路由的效率及可扩展性,同时也极大程度上优化了骨干网的路由。
- 自动配置机制允许IPv6网络中的节点更加便捷的加入IPv6网络。独特的无状态自动配置功能使得IPv6节点能够即插即用,省去了地址配置的麻烦。
- 重新编址机制使得IPv6提供商之间的转换对最终用户透明、更平滑。
- 仅存在特定需求的场景中部署NAT,由于IPv6地址空间足够庞大,因此单纯的IPv6到IPv6的地址转换不再需要。
- IPv6中取消了广播这一在IPv4网络中带来诸多问题的数据传输机制。IPv4中所有需要借助广播来工作的协议,在IPv6中均采用组播替代。另外IPv6中取消了ARP,取而代之的是通过ICMPv6定义的几个消息,以及相关的机制实现更佳的地址解析及重复地址检验机制。
- IPv6的包头比IPv4更有效率,数据字段更少,去掉了包头校验和。更简单的报头提高了路由器的处理效率。新定义的扩展包头替代了IPv4的选项字段,并且提供了更多的灵活性。
- 更有效的支持移动性和安全性。
- IPv4到IPv6网络的过渡技术丰富多彩。IPv6要取代IPv4是绝不可能一触而就的,相反,这将会是一个漫长的历史过程,在这个过程中,势必会出现IPv4及IPv6网络并存的情况,也会出现诸多复杂的两网通场景。IPv6有丰富的共存及过渡技术,使得V4/V6的切换更加的灵活。
二、IPv6报文头部
1.IPv6基本包头
以上是IPv4与IPv6包头结构的对比。IPv4的包头最小20字节,由于包含了选项及填充字段,因此包头长度不固定。IPv6包头相比于IPv4虽然长度加长了,变成40字节,但是包头长度是固定的,它将原来IPv4中的选项、填充字段以及部分其他字段放置在了“扩展包头”中。
在IPv6包头中,“Traffic Class”字段类似IPv4中的ToS。“Hop Limit”字段相当于TTL,另外“Next Header”字段用来指示IPv6基本包头后面的报文类型。新增的“Flow Label”字段用来标记同属一个流的报文。转发路径上的网络设备可以根据这个值来区分流并进行处理,由于Flow Label在V6的包头中携带,因此相比IPv4那样,还要通过源目的IP、源目的端口号和协议类型来确定一个流,效率就要高得多。
2.IPv6扩展包头
在IPv6中,原IPv4包头中的选项字段被移到了IPv6扩展报头中。一个IPv6数据包可能包括0个或多个扩展包头,当使用多个扩展包头时,通过前面的包头的Nexthead字段指明该扩展包头后的扩展包头。有了扩展包头,中间路由器就不需要处理每一个可能出现的选项,提高了路由器处理数据包的速度,提高了其转发性能。在扩展报头链的最后就是有效负载。
扩展报头是可选的,只有需要该扩展报头对应的功能,发送主机才会添加相应扩展报头
- 逐跳选项报头Hop-by—Hop Options Header(协议0)
传送路径上每个路由器都要处理,用于巨型数据包和路由器警报。如RSVP资源预留协议
- 目标选项报头Destination Options Header(协议60)
该包头承载特别针对数据包目的地的可选信息,例如用在移动节点和家乡代理之间交换注册信息,移动IP是这样的一个协议,即使移动节点改变了连接点,仍允许它保持永久的IP地址
- 路由包头Routing Header (协议63)
在数据包发往目的地的途中,该包头能够被IPv6源节点用来强制数据包经过特定的路由器,当路由类型字段为0时,在路由包头中可以指定中间路由器列表,这个功能类似IPv4中的松散源路由选项。
- 分段报头Fragment Header (协议44)
在IPv6中,建议所有的节点使用PMTUD机制来发现链路的MTU,这样就不需要对数据进行分段了。但是如果IPv6节点不支持PMTUD,但又必须发送比路径MTU还大的数据包时,就不得不分段了,这时候需使用分段包头,节点将数据分段,使用分段包头发送每个分段。
- 认证报头Authentication Header (协议51)
AH头, 由IPSec所使用,可以实现认证、数据的完整性校验,以及防重放攻击。
- 封装安全有效载荷报头Encapsulating Security Payload Header(协议50)
ESP头,由IPSec所使用,可以实现认证、数据完整性校验、防重放攻击,以及支持数据加密。
3. IPv6包头的改进
- 取消了IP的校验
IPv6包头中取消了原来IPv4包头中的Header Checksum,也就是包头校验和字段,这是因为第二层和第四层的校验已经足够健壮了,再在IPv6中做校验实际上就显得多余而且造成资源的重复损耗,因此IPv6直接取消了三层校验。
- 取消中间节点的分片功能
在IPv6中,分片是不被建议的,尤其是数据包在被传输的路径中尤其不建议分片,这是因为我们期望中转的设备只做最快速的转发而无需耗费资源去处理分片,分片必然会消耗设备性能并降低转发效率。即使数据包真的超出了路径上的MTU,IPv6要求分片行为由数据发送方来完成,然后接收端来重组。发送端在发送数据的时候事先知道路径的最小MTU,然后在发送大包时将报文分片,并且附上分片扩展包头。IPv4包头中Identification及Offset这两个用于分片的字段在IPv6基本包头中取消,而是用分片扩展包头来替代其功能
- 定义最长的IPv6报头
有利于硬件的快速处理,如此一来中间节点可以避免处理而节省大量的资源
- 安全选项的支持
IPv6提供了对IPsec的完美支持,如此上层协议可以省去许多安全选项,例如OSPFv3就取消了认证
- 增加流标签,提高QoS效率