什么是IPv6
IPv6是Internet Protocol Version 6的缩写,其中Internet Protocol译为“互联网协议”。IPv6是IETF(互联网工程任务组,Internet Engineering Task Force)设计的用于替代现行版本IP协议(IPv4)的下一代IP协议。目前IP协议的版本号是4(简称为IPv4),它的下一个版本就是IPv6。
我们使用的第二代互联网IPv4技术,核心技术属于美国。它的最大问题是网络地址资源有限,从理论上讲,编址1600万个网络、40亿台主机。但采用A、B、C三类编址方式后,可用的网络地址和主机地址的数目大打折扣,以至IP地址已于2011年2月3日分配完毕。其中北美占有3/4,约30亿个,而人口最多的亚洲只有不到4亿个,中国截止2010年6月IPv4地址数量达到2.5亿,落后于4.2亿网民的需求。地址不足,严重地制约了中国及其他国家互联网的应用和发展。
一方面是地址资源数量的限制,另一方面是随着电子技术及网络技术的发展,计算机网络将进入人们的日常生活,可能身边的每一样东西都需要连入全球因特网。在这样的环境下,IPv6应运而生。单从数量级上来说,IPv6所拥有的地址容量是IPv4的约8×10^28倍,达到2^128(算上全零的)个。这不但解决了网络地址资源数量的问题,同时也为除电脑外的设备连入互联网在数量限制上扫清了障碍。
但是与IPv4一样,IPv6一样会造成大量的IP地址浪费。准确的说,使用IPv6的网络并没有2^128个能充分利用的地址。首先,要实现IP地址的自动配置,局域网所使用的子网的前缀必须等于64,但是很少有一个局域网能容纳2^64个网络终端;其次,由于IPv6的地址分配必须遵循聚类的原则,地址的浪费在所难免。
但是,如果说IPv4实现的只是人机对话,而IPv6则扩展到任意事物之间的对话,它不仅可以为人类服务,还将服务于众多硬件设备,如家用电器、传感器、远程照相机、汽车等,它将是无时不在,无处不在的深入社会每个角落的真正的宽带网。而且它所带来的经济效益将非常巨大。
当然,IPv6并非十全十美、一劳永逸,不可能解决所有问题。IPv6只能在发展中不断完善,也不可能在一夜之间发生,过渡需要时间和成本,但从长远看,IPv6有利于互联网的持续和长久发展。国际互联网组织已经决定成立两个专门工作组,制定相应的国际标准。
IPV6的特点
(1)IPV6地址长度为128位,地址空间增大了2的96次方倍;
(2)灵活的IP报文头部格式。使用一系列固定格式的扩展头部取代了IPV4中可变长度的选项字段。IPV6中选项部分的出现方式也有所变化,使路由器可以简单路过选项而不做任何处理,加快了报文处理速度。
(3)IPV6简化了报文头部格式,字段只有8个,加快报文转发,提高了吞吐量;
(4)提高安全性。身份认证和隐私权是IPV6的关键特性;
(5)支持更多的服务类型;
(6)允许协议继续演变,增加新的功能,使之适应未来技术的发展;
IPV6的优势
与IPV4相比,IPV6具有以下几个优势:
1.IPv6具有更大的地址空间。IPv4中规定IP地址长度为32,最大地址个数为2^32;而IPv6中IP地址的长度为128,即最大地址个数为2^128。与32位地址空间相比,其地址空间增加了2^128-2^32个。
2.IPv6使用更小的路由表。IPv6的地址分配一开始就遵循聚类(Aggregation)的原则,这使得路由器能在路由表中用一条记录(Entry)表示一片子网,大大减小了路由器中路由表的长度,提高了路由器转发数据包的速度。
3.IPv6增加了增强的组播(Multicast)支持以及对流的控制(Flow Control),这使得网络上的多媒体应用有了长足发展的机会,为服务质量(QoS,Quality of Service)控制提供了良好的网络平台。
4.IPv6加入了对自动配置(Auto Configuration)的支持。这是对DHCP协议的改进和扩展,使得网络(尤其是局域网)的管理更加方便和快捷。
5.IPv6具有更高的安全性。在使用IPv6网络中用户可以对网络层的数据进行加密并对IP报文进行校验,在IPV6中的加密与鉴别选项提供了分组的保密性与完整性。极大的增强了网络的安全性。
6.允许扩充。如果新的技术或应用需要时,IPV6允许协议进行扩充。
7.更好的头部格式。IPV6使用新的头部格式,其选项与基本头部分开,如果需要,可将选项插入到基本头部与上层数据之间。这就简化和加速了路由选择过程,因为大多数的选项不需要由路由选择。
8.新的选项。IPV6有一些新的选项来实现附加的功能。
IPv6的应用
IPv6的普及一个重要的应用是网络实名制下的互联网身份证/VIeID,基于IPv4的网络之所以难以实现网络实名制,一个重要原因就是因为IP资源的共用,因为IP资源不够,所以不同的人在不同的时间段共用一个IP,IP和上网用户无法实现一一对应。
在IPv4下,根据IP查人也比较麻烦,电信局要保留一段时间的上网日志才行,通常因为数据量很大,运营商只保留三个月左右的上网日志,比如查前年某个IP发帖子的用户就不能实现。
IPv6的出现可以从技术上一劳永逸地解决实名制这个问题,因为那时IP资源将不再紧张,运营商有足够多的IP资源,那时候,运营商在受理入网申请的时候,可以直接给该用户分配一个固定IP地址,这样实际就实现了实名制,也就是一个真实用户和一个IP地址的一一对应。
当一个上网用户的IP固定了之后,你任何时间做的任何事情都和一个唯一IP绑定,你在网络上做的任何事情在任何时间段内都有据可查,并且无法否认。
但是,实际情况是,每个路由器只负责几个网段的路由,而不会为某个特定IP进行路由,否则信息量之大会使对一个数据包的计算成本高到崩溃。受路由器吞吐量限制,通过每人一个固定IP的实名制方式在很长一段时间内将只是一种理论。
IPv6地址的分类
IPv6地址可分为三种:
1.单播(unicast)地址
单播地址标示一个网络接口。协议会把送往地址的数据包投送给其接口。IPv6的单播地址可以有一个代表特殊地址名字的范畴,如link-local地址和唯一区域地址(ULA,unique local address)。单播地址包括可聚类的全球单播地址、链路本地地址等。
2.任播(anycast)地址
Anycast 是 IPv6 特有的数据传送方式,它像是IPv4的Unicast(单点传播)与Broadcast(多点广播)的综合。IPv4 支持单点传播和多点广播,单点广播在来源和目的地间直接进行通信;多点广播存在于单一来源和多个目的地进行通信。 而Anycast则在以上两者之间,它像多点广播(Broadcast)一样,会有一组接收节点的地址栏表,但指定为 Anycast 的数据包,只会传送给距离最近或传送成本最低(根据路由表来判断)的其中一个接收地址,当该接收地址收到数据包并进行回应,且加入后续的传输。该接收列表的其他节点,会知道某个节点地址已经回应了,它们就不再加入后续的传输作业。 以目前的应用为例,Anycast 地址只能分配给路由器,不能分配给电脑使用,而且不能作为发送端的地址。
3.多播(multicast)地址
多播地址也称组播地址。多播地址也被指定到一群不同的接口,送到多播地址的数据包会被传送到所有的地址。多播地址由皆为一的字节起始,亦即:它们的前置为FF00::/8。其第二个字节的最后四个比特用以标明”范畴”。
一般有node-local(0x1)、link-local(0x2)、site-local(0x5)、organization-local(0x8)和global(0xE)。多播地址中的最低112位会组成多播组群识别码,不过因为传统方法是从MAC地址产生,故只有组群识别码中的最低32位有使用。定义过的组群识别码有用于所有节点的多播地址0x1和用于所有路由器的0x2。
另一个多播组群的地址为”solicited-node多播地址”,是由前置FF02::1:FF00:0/104和剩余的组群识别码(最低24位)所组成。这些地址允许经由邻居发现协议(NDP,Neighbor Discovery Protocol)来解译链接层地址,因而不用干扰到在区网内的所有节点。
4.特殊地址
IANA维护官方的IPv6地址空间列表。全局的单播地址的分配可在各个区域互联网注册管理机构或GRH DFP pages找到。IPv6中有些地址是有特殊含义的:
(1)未指定地址
所有比特皆为零的地址称作未指定地址。这个地址不可指定给某个网络接口,并且只有在主机尚未知道其来源IP时,才会用于软件中。路由器不可转送包含未指定地址的数据包。
(2)链路本地地址
::1/128- 是一种单播绕回地址。如果一个应用程序将数据包送到此地址,IPv6堆栈会转送这些数据包绕回到同样的虚拟接口(相当于IPv4中的127.0.0.0/8)。
fe80::/10- 这些链路本地地址指明,这些地址只在区域连接中是合法的,这有点类似于IPv4中的169.254.0.0/16。
(3)唯一区域位域
fc00::/7-唯一区域地址(ULA,unique local address)只可在一群网站中绕送。这定义在RFC 4193中,是用来取代站点本地位域。这地址包含一个40比特的伪随机数,以减少当网站合并或数据包误传到网络时碰撞的风险。这些地址除了只能用于区域外,还具备全局性的范畴,这点违反了唯一区域位域所取代的站点本地地址的定义。
(4)多播地址
ff00::/8-这个前置表明定义在”IP Version 6 Addressing Architecture”(RFC 4291)中的多播地址。其中,有些地址已用于指定特殊协议,如ff0X::101对应所有区域的NTP服务器(RFC 2375)。
(5)请求节点多播地址 (Solicited-node multicast address)
ff02::1:FFXX:XXXX-XX:XXXX为相对应的单播或任播地址中的三个最低的字节。
(6)IPv4转译地址
::ffff:x.x.x.x/96- 用于IPv4映射地址。
2001::/32- 用于Teredo tunneling。
2002::/16- 用于6to4。
(7)ORCHID
2001:10::/28-ORCHID (Overlay Routable Cryptographic Hash Identifiers) (RFC 4843)。这些是不可绕送的IPv6地址,用于加密散列识别。
(8)文件
2001:db8::/32- 这前置用于文件(RFC 3849)。这些地址应用于IPV6地址的示例中,或描述网络架构。
(8)遭舍弃或删除的用法
::/96- 这个前置曾用于IPv4兼容地址,现已删除。
fec0::/10- 这个站点本地前置指明这地址只在组织内合法。它已在2004年9月的RFC3879中舍弃,并且新系统不应该支持这类型的地址。
IPv6数据包
IPv6数据包由两个主要部分组成:头部和负载。
包头是包的前64比特并且包含有源和目的地址,协议版本,通信类别(8位,包优先级),流标记(20比特,QoS服务质量控制),分组长度(16位),下一个头部(用于入栈解码,类似IPv4中的协议号),和跳段数限制(8位,生存时间,相当于IPv4中的TTL)。后面是负载。MTU至少1280字节长,在常见的以太网环境中为1500字节。负载在标准模式下最大可为65535字节,如果扩展报头设置了”jumbo payload”选项,则长度值被置为0。IPv6曾有两个有着细微差别的版本;在 RFC 1883 中定义的原始版本(现在废弃)和 RFC 2460 中描述的现在提议的标准版本。两者主要在通信类别这个选项上有所不同,它的位数由4位变为了8位。其他的区别都是微不足道的。
分段(Fragmentation)只在IPv6的主机中被处理。在IPv6中,可选项都被从标准头部中移出并在协议字段中指定,类似于IPv4的协议字段功能。
IPv6和域名系统
IPv6地址在域名系统中为执行正向解析表示为AAAA记录(所谓4A记录,类似的IPv4表示为A记录A records);反向解析在ip6.arpa(原先ip6.int)下进行,在这里地址空间为半字节16进制数字格式。这种模式在RFC 3596给与了定义。
AAAA模式是IPv6结构设计时的两种提议之一。另外一种正向解析为A6记录并且有一些其他的创新像二进制串标签和DNAME记录等。RFC 2874和它的一些引用中定义了这种模式。
AAAA模式只是IPv6域名系统的简单概括,A6模式使域名系统中检查更全面,也因此更复杂:
A6记录允许一个IPv6地址在分散于多个记录中,或许在不同的区域;举例来说,这就在原则上允许网络的快速重编号。
使用域名系统记录委派地址被DNAME记录(类似于现有的CNAME,不过是重命名整棵树)所取代。
一种新的叫做比特标签的类型被引入,主要用于反向解析。
2002年8月的RFC 3363中对AAAA模式给与了有效的标准化(在RFC 3364有着对于两种模式优缺点的更深入的讨论)。
IPv6转换机制
在IPv6完全取代IPv4前,需要一些转换机制使得只支持IPv6的主机可以连络IPv4服务,并且允许孤立的IPv6主机及网络可以借由IPv4设施连络IPv6互联网。
在IPv6主机和路由器与IPv4系统共存的时期时,RFC2893 和 RFC2185 定义了转换机制。这些技术,有时一起称作简单互联网转换(SIT,Simple Internet Transition)。包含:
运作于主机和路由器之间的双堆栈IP实现
将IPv4嵌入IPv6地址
IPv6立于IPv4之上的隧道机制
IPv4/IPv6报头转换
1.双堆栈
双堆栈(Dual IP stack implementation)是将IPv6视为一种IPv4的延伸,以共享代码的方式去实现网络堆栈,其可以同时支持IPv4和IPv6,如此是相对较为容易的。如此的实现称为双堆栈,并且,一个实现双堆栈的主机称为双堆栈主机。这步骤描述于RFC 4213。
目前大部分IPv6的实现使用双堆栈。一些早期实验性实现使用独立的IPv4和IPv6堆栈。
2.隧道
隧道(Tunneling)是另一个用来链接IPv4与IPv6的机制。为了连通IPv6互联网,一个孤立主机或网络需要使用现存IPv4的基础设施来携带IPv6数据包。这可由将IPv6数据包装入IPv4数据包的隧道协议来完成,实际上就是将IPv4当成IPv6的链接层。
IP协议号码的41号用来标示将IPv6数据讯框直接装入IPv4数据包。IPv6亦能将入UDP数据包,如为了跨过一些会阻挡协议41交通的路由器或NAT设备。其它流行的封装机制则有AYIYA和GRE。
3.自动隧道
自动隧道(Automatic tunneling)指路由设施自动决定隧道端点的技术。RFC 3056建议使用6to4隧道技术来自动隧道,其会使用41协议来封装。隧道端点是由远程知名的IPv4任播地址所决定,并在本地端嵌入IPv4位址信息到IPv6中。现今6to4是广泛布署的。
Teredo是使用UDP封装的隧道技术,据称可跨越多个NAT设备。Teredo并非广泛用于布署的,但一个实验性版本的Teredo已安装于Windows XP SP2 IPv6堆栈中。IPv6,包含6to4隧道和Teredo隧道,在Windows Vista中默认是启动的。许多Unix系统只支持本地的6to4,但Teredo可由如Miredoo的第三方软件来提供。
ISATAP借由将IPv4位址对应到IPv6的link-local地址,从而将IPv4网络视为一种虚拟的IPv6区域连接。不像6to4和Teredo是站点间的隧道机制,ISATAP是一种站点内机制,意味着它是用来设计提供在一个组织内节点之间的IPv6连接性。
4.组态隧道 (6in4)
在组态隧道中,如6in4隧道,隧道端点是要明确组态过的,可以是借由管理员手动或操作系统的组态机制,或者借由如tunnel broker等的自动服务。组态隧道通常比自动隧道更容易去除错,故建议用于大型且良好管理的网络。组态隧道在IPv4隧道上,使用网际协议中号码的41号。
5.用于只支持IPv6主机的代理和转译
在局域网际网络注册管理机构耗尽所有可使用的IPv4位址后,非常有可能新加入互联网的主机只具有IPv6连接能力。对这些须要向后兼容以能访问IPv4资源的客户端,须要布署合适的转换机制。
一种转换技术是使用双堆栈的应用层代理,如网页代理服务器。一些对于应用程序无法得知但在其低层使用类NAT转换技术也曾被提出。但因为一般应用层协议所要求的能力其应用太广,其中大部分都被认定在实际上太不可靠,并且被认为应删除。