IPv6介绍
IPv6的基本概念 众所周知，32位的IPv4地址已经耗竭，IPv6采用128位的地址长度拥有更大的地址空间。首先我们先来认识一下IPv6到底长成什么样子。 初识IPv6 图1 IPv6数据报文 上图是我们最熟悉的ping的IPv6版本ICMPv6。可以看到，IPv6数据报文和IPv4有很大的差别： 数据链路层（L2）的type字段标识为 0x86dd，表示承载的上层协议是IPv6 IPv4对比：type字段为0x0800 IPv6的头部字段，和IPv4差别巨大（可以猜测到，IPv6和IPv4无法兼容） IPv6的报文头部格式如下： 图2 IPv6报文头部（该图片来自互联网） IPv6报文头部更精简了，字段更少了，对比起IPv4，有以下几个地方值得注意： IPv6报文头部是定长（固定为40字节），IPv4报文头部是变长的。这个意味着，写代码处理IPv6数据报文的效率会提高很多：） IPv6中Hop Limit字段含义类似IPv4的TTL。 IPv6中的Traffic Class字段含义类似IPv4中的TOS（Type Of Service）。 IPv6的报文头部取消了校验和字段。取消这个字段也是对IPv4协议的一个改进。当IPv4报文在网路间传输，每经过一个路由器转发就是修改TTL字段，就需要重新计算校验和，而由于数据链路层L2和传输层L4的校验已经足够强壮，因此IPv6取消这个字段会提高路由器的转发效率。值得一提的是，在IPv6协议下，传输层L4协议UDP、TCP是强制需要进行校验和的（IPv4是可选的）。 IPv6报文头部中的Next Header字段表示“承载上一层的协议类型”或者“扩展头部类型”。这里的含义与IPv4有很大的差别，需要加以解释： 当IPv6数据报文承载的是上层协议ICMPv6、TCP、UDP等的时候，Next Header的值分别为58、6、17，这个时候和IPv4报文头部中的Protocol字段很类似。 当不是以上3种协议类型的时候，IPv6报文头部紧接的是扩展头部。扩展头部是IPv6引入的一个新的概念，每个IPv6的数据报文可以承载0个或多个扩展头部，扩展头部通过链表的形式组织起来。当IPv6数据报文承载着扩展头部的时候，Next Header的数值为扩展头部的类型值。 为什么要引入扩展头部这个概念，这里也是IPv6对IPv4改进的一个方面，用扩展头部取代了IPv4的可选项信息，精简了IPv6的头部，增强了IPv6的扩展性。有同学会不会有疑问，IPv6的分片数据报文怎么处理？其实就是使用了IPv6扩展头部。我们来抓一个UDP分片报文来看看。 图3 IPv6分片报文 当发送一个分片IPv6数据报文的时候，IPv6使用的是扩展头部的形式组织各个分片的信息，如图IPv6报文头部Next Header字段值为44表示存在扩展头部，扩展头部是IPv6分片数据信息。 对比IPv4，分片信息是记录在IPv4报文头部的分片字段中。 IPv6的扩展头部类型有很多种，除了上述的分片头部，还有路由头部、逐跳可选头部等，具体的可以参考RFC2460。 本章主要介绍了IPv6的一些很直观的认识，下面逐渐介绍IPv6上的基本知识和概念。