IPv6是InternetProtocolVersion6的缩写,其中InternetProtocol译为“互联网协议”。IPv6是IETF(InternetEngineeringTaskForce,互联网工程任务组)设计的下一代IP协议,用于替代当前版本的IP协议(IPv4)。它声称能够为世界上的每一粒沙子编制一个URL。1.IPV6的基本概念众所周知。IPv6采用128位地址长度,地址空间更大。首先,让我们看一下IPv6长什么样。IPv6数据包与IPv4有很大的区别:数据链路层(L2)的类型字段被标记为0x86dd,表示承载的上层协议为IPv6(与IPv4对比:类型字段为0x0800);IPv6的header字段,和IPv4有很大的不同(可以猜到IPv6和IPv4不兼容)。我们来看一下ipv6包头的格式:ipv6包头比较简单,字段也比较少。与ipv4相比,有几点需要注意:IPv6包头是定长的(固定为40字节),IPv4包头是可变长度的。这意味着编写代码处理IPv6数据包的效率将大大提高:);IPv6中HopLimit字段的含义类似于IPv4的TTL;IPv6中TrafficClass字段的含义类似于IPv4中的TOS(TypeOfService);消息头取消校验和字段:取消该字段也是对IPv4协议的改进。IPv4报文在网络间传输时,每经路由器转发一次,都会修改TTL字段,需要重新计算校验和。由于数据链路层L2和传输层L4的校验和足够强,IPv6取消该字段将提高路由器的转发效率。值得一提的是,在IPv6协议下,传输层L4协议UDP和TCP是强制执行校验和的(IPv4是可选的);IPv6包头中的NextHeader字段表示“承载协议类型”或“扩展头类型”。这里的含义与IPv4有很大不同,需要说明一下:当IPv6数据包携带ICMPv6、TCP、UDP等上层协议时,NextHeader的值分别为58、6、17。此时,它们与IPv4消息头中的Protocol字段非常相似;当不是以上三种协议类型时,IPv6报文头后面是扩展头。扩展头是IPv6引入的一个新概念。每个IPv6数据包可以携带零个或多个扩展头,扩展头以链表的形式组织。当IPv6数据包携带扩展头时,NextHeader的值为扩展头的类型值。为什么要引入扩展头的概念呢?这也是IPv6相对于IPv4的改进。扩展报头取代了IPv4的可选信息,简化了IPv6报头,增强了IPv6的可扩展性。会不会有同学有疑惑,IPv6分片数据包怎么处理?实际上,使用的是IPv6扩展报头。在发送分片的IPv6数据报文时,IPv6采用扩展报头的形式来组织各个分片的信息。IPv6报文头中NextHeader字段的值为44,表示有扩展头,扩展头为IPv6Partition数据信息。与IPv4相比,分片信息记录在IPv4包头的分片字段中。有许多类型的IPv6扩展标头。除了上述分片头之外,还有路由头和逐跳可选头。详情请参考RFC2460。本章主要介绍对IPv6的一些非常直观的认识。下面逐步介绍IPv6的基本知识和概念。2.IPv6地址语法IPv6地址使用冒号十六进制表示法:128位地址,每16位分成段,每16位段用十六进制表示,并用冒号分隔,例如:a普通公网IPv6地址:2001:0D12:0000:0000:02AA:0987:FE29:9871IPv6地址支持压缩前导零的表达方式,例如上面的地址可以表达为:200112:0:0:2AA:987:FE29:9871中为了进一步简化IPv6地址,当冒号十六进制格式中有多个连续的值为0的段时,可以将这些段压缩成双冒号的表示。比如上面的地址可以进一步简化为:[pquote]200112::2AA:987:FE29:9871比如IPv6地址FF80:0:0:0:FF:3BA:891:67C2可以进一步简化并表示为:FE80::FF:3BA:891:67C2这里值得注意的是:双冒号只能出现一次。3.IPv6地址号段划分和前缀表示法IPv6具有128位的巨大地址空间。对于这么大的空间,并不是随机划分的,而是按照位来划分数字段(类似于一些内部鹅厂的64位uin改造了数字分配的区域划分算法)。IPv6地址结构如下图所示:例如RFC4291中定义了n=48和m=16,即子网和接口ID,各占64位。IPv6支持子网前缀标识方式,类似于IPv4的无类域间路由的CIDR机制(注意:IPv6没有子网掩码mask的概念)。使用“IPv6地址/前缀长度”表示方式,例如:2001:C3:0:2C6A::/64表示一个子网;而2001:C3:0:2C6A:C9B4:FF12:48BC:1A22/64代表网络下的子网A节点地址。可见,一个IPv6地址由子网前缀+接口ID组成。子网前缀由地址分配和管理机构定义分配,接口ID可以由各个操作系统生成。生成算法将在后面的章节中介绍。4.IPv6地址类型IPv6地址分为三种:单播,对应IPv4常见的公网和私网地址;multicast,对应IPv4的组播(multicast)地址;anycast,新加入IPv6Address概念类型。IPv6没有广播地址,使用组播地址实现广播功能。事实上,我们在工作和生活中最有可能与单播地址接触最多。接下来,本文将重点讲解单播地址的种类。对组播地址和任播地址感兴趣的同学可以自行参考相关的RFC和文档。
