IPv4理论上仅仅能够提供的地址数量是43亿,但是由于地址分配机制等原因,实际可使用的数量还远远达不到43亿。因特网的迅猛发展令人始料未及,同时也带来了地址短缺的问题。针对这一问题,曾先后出现过几种解决方案,比如CIDR和NAT。但是CIDR和NAT都有各自的弊端和不能解决的问题,在这样的情况下,IPv6的应用和推广便显得越来越急迫。
IPv6是Internet工程任务组(IETF)设计的一套规范,它是网络层协议的第二代标准协议,也是IPv4的升级版本。IPv6与IPv4的最显著区别是,IPv4地址采用32比特标识,而IPv6地址采用128比特标识。128比特的IPv6地址可以划分更多地址层级、拥有更广阔的地址分配空间,并支持地址自动配置。
IPv6报文格式
IPv6数据包由一个IPv6报头、多个扩展报头和一个上层协议数据单元三部分组成。
IPv6基本报头
IPv6基本报头提供报文转发的基本信息,会被转发路径上面的所有路由器解析,有8个字段,固定大小为40字节,每一个IPv6数据报都必须包含报头。
IPv6的基本报头在IPv4报头的基础上,增加了流标签域,去除了一些冗余字段,使报文头的处理更为简单、高效。具体格式如下图所示:
IPv6基本报头中主要字段解释如下:
-
Version:版本号,长度为4bit。对于IPv6,该值为6。
-
Traffic Class:流类别,长度为8bit。等同于IPv4中的ToS字段,表示IPv6数据报的类或优先级,主要应用于QoS。
-
Flow Label:流标签,长度为20bit。IPv6中的新增字段,用于区分实时流量,不同的流标签+源地址可以唯一确定一条数据流,中间网络设备可以根据这些信息更加高效率的区分数据流。
-
Payload Length:有效载荷长度,长度为16bit。有效载荷是指紧跟IPv6报头的数据报的其它部分(即扩展报头和上层协议数据单元)。
-
Next Header:下一个报头,长度为8bit。该字段定义了紧跟在IPv6报头后面的第一个扩展报头(如果存在)的类型。
-
Hop Limit:跳数限制,长度为8bit。该字段类似于IPv4中的Time to Live字段,它定义了IP数据报所能经过的最大跳数。每经过一个路由器,该数值减去1,当该字段的值为0时,数据报将被丢弃。
-
Source Address:源地址,长度为128bit。表示发送方的地址。
-
Destination Address:目的地址,长度为128bit。表示接收方的地址。
IPv6扩展报头
在IPv4中,IPv4报头包含可选字段Options,内容涉及security、Timestamp、Record route等,这些Options可以将IPv4报头长度从20字节扩充到60字节。在转发过程中,处理携带这些Options的IPv4报文会占用路由器很大的资源,但实际中也很少使用。IPv6将这些Options从IPv6基本报头中剥离,放到了扩展报头中,使得IPv6报头更加简化。