(十六)网络层--IPv6
IPv6
互联网经过几十年的飞速发展,到2011年2月,IPv4的地址已经耗尽,ISP已经不能再申请到新的IP地址块了。解决IP地址耗尽的根本措施就是采用具有更大地址空间的新版本的IP,即IPv6。
IPv6的基本首部
IPv6所引进的主要变化如下:
(1)更大的地址空间
IPv6把地址从IPv4的32位增大4倍,变为128位
(2)扩展的地址层次结构
由于IPv6的地址空间很大,因此可以划分为更多的层次
(3)灵活的首部格式
IPv6数据报的首部和IPv4的并不兼容,所以定义了许多可选的扩展首部
(4)改进的选项
IPv6允许数据报含有选项的控制信息,因而可以包含一些新的选项
(5)允许协议继续扩充
因为新的技术总是在不断的发展
(6)支持即插即用
自动配置
(7)支持资源的预分配
IPv6支持实时视像等要求一定带宽和时延的应用
(8)首部8字节对齐
首部长度必须是8字节的整数倍
IPv6数据报由两大部分组成,即基本首部和后面的有效载荷。有效载荷允许有0个或多个扩展首部,再后面是数据部分。如下图所示:
与IPv4相比,IPv6对首部中的某些字段进行了修改:
-
取消了首部长度字段,因为它的首部长度是固定的(40字节)
-
取消了服务类型字段,因为优先级和流标号字段实现了服务类型字段的功能
-
取消了总长度字段,改用有效载荷长度字段
-
取消了标识、标志、片偏移字段,因为这些功能已包含在分片扩展首部中
-
把TTL字段改称为跳数限制字段(名称与作用更加一致)
-
取消了协议字段,改用下一个首部字段
-
取消了检验和字段,这样就加快了路由器处理数据报的速度。因为在数据链路层对检测出有差错的帧就丢弃;在运输层,当使用UDP时,检测出有差错的用户数据报就丢弃;当使用TCP时,检测出有差错的报文段就重传,直到正确传送到目的进程为止,所以,网络层的差错检测可以精简掉。
-
取消了选项字段,而用扩展首部来实现选项功能
下图说明了IPv6基本首部的各字段
(1)版本
占4位,它指明了协议的版本,对于IPv6来说,该字段值是6
(2)通信量类
占8位,这是为了区分不同的IPv6数据报的类别或优先级
(3)流标号
占20位,IPv6的一个新的机制是支持资源预分配,并且允许路由器把每一个数据报与一个给定的资源分配相联系。IPv6提出流的概念:互联网上从特定源点到特定终点的一系列数据报,而在这个流所经过的路径上的路由器都保证指明的服务质量。所有属于同一个流的数据报都具有同样的流标号。因此,流标号对实时音频/视频数据的传送特别有用
(4)有效载荷长度
占16位,它指明IPv6数据报除基本首部以外的字节数,这个字段的最大值是64KB(65535字节)
(5)下一个首部
占8位,它相当于IPv4的协议字段或可选字段
-
当IPv6数据报没有扩展首部时,下一个首部字段的作用和IPv4的协议字段一样,它的值给出了基本首部后面的数据应交付IP层上面的哪一个高层协议(例如:6或17分别表示TCP或UDP)
-
当出现扩展首部时,下一个首部字段的值就标识后面第一个扩展首部的类型
(6)跳数限制
占8位,用来防止数据报在网络中无限期的存在。源点在每个数据报发出时即设定某个跳数限制(最大为255)。每个路由器在转发数据报时,要先把跳数限制字段中的值减1。当跳数限制的值为0时,就要把这个数据报丢弃
(7)源地址
占128位,数据报发送端IP地址
(8)目的地址
占128位,数据报接收端IP地址
IPv4的数据报如果在其首部中使用了选项,那么沿着数据报传送的路径上的每一个路由器都必须对这些选项一一进行检查,这就降低了路由器处理数据报的速度。然而实际上很多的选项在途中的路由器上是不需要检查的。IPv6把原来IPv4首部中选项的功能都放在扩展首部中,并把扩展首部留给路径两端的源点和终点的主机来处理,途中经过的其它路由器都不处理这些扩展首部,这样就大大提高了路由器的处理效率。(只有一个首部除外,即逐跳选项扩展首部)。在RFC 2460中定义了以下六种扩展首部:
(1)逐跳选项
(2)路由选择
(3)分片
(4)鉴别
(5)封装安全有效载荷
(6)目的站选项
IPv6的地址
一般来讲,一个IPv6数据报的目的地址可以是以下三种基本类型地址之一:
(1)单播
即传统的点对点通信
(2)多播
即一对多通信
(3)任播
这是IPv6增加的一种类型。任播的终点是一组计算机,但数据报只交付其中的一个,通常是距离最近的一个。
IPv6的地址占128位,如果继续使用点分十进制,则不太方便,所以IPv6使用冒号十六进制记法,它有两个特点:
(1)允许把数字前面的0省略,即零压缩,但在每个地址中只能使用一次零压缩
(2)可结合使用点分十进制的后缀
下面给出几个使用零压缩的例子:
1080:0:0:0:8:800:200c:417A 记为 1080::8:800:200c:417A
FF01:0:0:0:0:0:0:101 记为 FF01::101
0:0:0:0:0:0:0:1 记为 ::1
0:0:0:0:0:0:0:0 记为 ::