1.概述
IPv4 是当前全球因特网的运行版本。事实证明,IPv4版本稳固耐用、便于实施、且能够和多种协议及应用设备良好协同。尽管IPv4自20世纪80年代初首次确立以来就几乎未曾改动,但是其始终支持因特网的升迁,一直发展到目前的全球规模。然而,随着因特网与因特网服务不断地突飞猛进,IPv4 在因特网的目前规模与复杂性面前已暴露其不足之处。IPv6 是专为弥补这些不足而开发出来的,以便让因特网能够进一步发展壮大。
IPv6 所解决的最重要问题就是增加IP地址的需要:IPv4的32 位地址空间已近枯竭,而因特网用户的数量却在不断以几何基数增长。随着需要使用IP 地址的因特网服务与应用设备(利用因特网的PDA、家庭与小型办公室网络、与因特网相连的运载工具与器具、IP电话与无线服务等)不断大量涌现,对IP地址的需求便更显紧张。人们早就开始着手解决IPv4 地址紧缺的问题,采用各种技术延长现有IPv4 基础架构的寿命,其中包括网络地址转换(Network Address Translation,简称NAT)、动态主机配置协议(Dynamic Host Configuration Protocol,简称DHCP)和无类别域间路由(Classless Inter-Domain Routing,简称CIDR)等技术。虽然这些技术为地址空间紧缺提供了一个缓冲,但是它们仍然无法从根本上满足因特网的端到端结构与对等应用的需要。此外,宽带因特网需要随时在线、随时可以联系的全球地址,但是目前的IP地址转换策略、以及其它临时分配技术对这些需求并不支持。多年对IP地址的全球需求为推动IPv6的实施增添了动力。
在解决地址空间的同时,IETF发现IPv4在多年运行中遇到下列的问题:
路由表越来越大:由于IPv4采用与网络拓扑结构无关的形式来分配地址,所以随着连入网络数目的增涨,路由器数目飞速增加,相应地,决定数据传输路由的路由表也就不断增大。
缺乏服务质量:IPv4遵循Best Effort原则,这一方面是一个优点,因为它使IPv4简单高效;但另一方面它对互联网上涌现出的新业务类型缺乏有效的支持,比如实时和多媒体应用,这些应用要求提供一定的服务质量保证,如带宽、延迟和抖动等。
地址分配不便:IPv4是采用手工配置的方法来给用户分配地址,这不仅增加了管理和规划的复杂程度,而且不利于为那些需要IP移动性的用户提供更好服务。
今天的IPv6继承了IPv4的优点,并根据IPv4多年来运行的经验进行了大幅度的修改和功能扩充,比IPv4处理性能更加强大、高效。与互联网发展过程中涌现的其它技术概念相比,IPv6可以说是引起争议最少的一个。人们已形成共识,认为IPv6取代IPv4是必然发展趋势。那到底IPv6带来了什么呢?
(1)增加地址空间。
IPv6将IP地址长度从32位扩展到128位。IPv6从根本上解决了地址枯竭的问题。
(2)路由选择与数据包处理的效率大为提高。
IPv6 采用多层寻址结构,缩小了因特网路由器必须储存与维护的选路表的大小,提高了路由选择的效率与可扩展性。
(3)增加标识流的能力。
标识流使得发送方要求特别处理的特定通信“流”的包成为可能,从而可以实现各种服务质量;
(4)支持自动配置与即插即用。
为了适应移动服务(数据和语音)与利用因特网设备的发展,对即插即用自动配置和地址重新编号的需求已经变得日益重要。IPv6的内置地址自动配置功能使大量IP 主机能够轻松发现网络,并获得新的、全球唯一的IPv6 地址。这使利用因特网的设备实现了即插即用,诸如移动电话、无线设备与家用电器等。
自动配置功能还使对现有网络的重新编号变得更加简单便捷。这使网络运营商能够更加方便地管理从一个提供商到另一个提供商的转换。
(5)支持嵌入的IPSec
IPSec 在IPv4 中为可选项,而在IPv6 协议集中则是必备的一部分。IPv6 提供了安全扩展报头,从而使加密、验证和虚拟专用网络(VPN) 的实施变得更加容易。通过提供全球唯一地址与嵌入式安全,IPv6 能够在提供诸如访问控制、机密性与数据完整性等端到端安全服务的同时,减少对网络性能的影响。
(6)增强对移动IP与移动计算设备的支持
在IETF标准中定义的移动IP 使移动设备不必脱离其现有连接即可自由移动,这是一种日益重要的网络功能。与IPv4不同的是,IPv6 的移动性是使用内置自动配置获取转交地址(Care-Of-Address),因而无需外地代理(Foreign Agent)。此外,这种联编过程使通信节点(Correspondent Node) 能够与移动节点(Mobile Node) 直接通信,从而避免了在IPv4 中所要求的三角路由选择的额外系统开销。其结果是,在IPv6 中,移动IP 结构的效率大为提高。
(7)避免网络地址转换(NAT) 的需要
NAT 机制的引入是为了在不同的网络区段之间共享和重新使用相同的地址空间。这种机制在暂时缓解了IPv4 地址紧缺问题的同时,却为网络设备与应用程序增加了处理地址转换的负担。由于IPv6 的地址空间大大增加,也就无需再进行地址转换,NAT 部署带来的问题与系统开销也随之解决。
(8)支持广泛部署的路由选择协议
IPv6 保持并扩展了对现有内部网关协议(Interior Gateway Protocols,简称IGP)与外部网关协议(Exterior Gateway Protocols,简称EGP)的支持。例如,OSPFv3、IS-ISv6、RIPng 与MBGP4+ 均充分定义与支持IPv6。
(9)组播地址数量增加,对组播的支持有所提高
IPv6 组播通过处理诸如路由器发现与路由器请求等IPv4 广播功能,从而在功能上完全取代了IPv4 广播。组播不仅节省了网络带宽,而且提高了网络效率。
2.IPv6的报头结构
IPv6报头经过改进,结构比IPv4简单得多,效率大为提高。IPv6报头中删除了IPv4报头中许多不常用的域,放入了可选项和报头扩展中;IPv6中的可选项有更严格的定义。IPv4中有10个固定长度的域、2个地址空间和若干个选项,IPv6中只有6个域和2个地址空间。虽然IPv6报头占40字节,是24字节IPv4报头的1.6倍,但因其长度固定(IPv4报头是变长的),故不需要消耗过多的内存容量。
IPv4中的报头长度(header length)、服务类型(type of service,TOS)、标识符(identification)、标志(flag)、分段偏移(fragment offset)和报头校验和(header checksum)这6个域被删除。报文总长(total length)、协议类型(protocol type)和生存时间(time to live,TTL)3个域的名称或部分功能被改变,其选项(options)功能完全被改变,新增加了2个域,即优先级和流标签。
IPv6 报头中的字段包括:
Version(版本):4 位因特网协议(Internet Protocol) 版本号,值为6。
Traffic Class(业务负载类别):8 位业务负载类别字段,类似于IPv4中的服务类型。
Flow Label(流标号):20 位流标号,用于确定服务质量方面附加控制的业务流。
Payload Length(有效负载长度):16位无符号整数,IPv6有效负载的长度。
Next Header(下一报头):8位选择器,用于识别紧随IPv6报头之后的报头类型。
Hop Limit(跳转限度):8位无符号整数,根据转发数据包的每个节点按1递减。如果Hop Limit 减至零,则数据包被丢弃。
Source Address(源地址):数据包始发方的128 位地址。
Destination Address(目标地址):数据包预期接收方的128 位地址。
IPv6 扩展报头:扩展报头在IPv6中为可选项。如果存在,扩展报头则紧随报头字段。IPv6 扩展报头具有以下特性:
它们按64位排列,其系统开销远远低于IPv4选项。
不像IPv4那样有大小限制。唯一的限制就是IPv6数据包的大小。
它们仅由目的节点处理。唯一的例外就是Hop-by- Hop(逐段跳转)报头选项。
基本IPv6 报头的Next Header(下一报头)字段识别扩展报头。
一个IPv6数据包内可能存在多个扩展报头时,其发生顺序如下:
逐跳(Hop-by-Hop) 报头携带需由发送路径上的所有节点检验的信息。当逐跳选项存在时,则其始终紧随基本IPv6 报头之后。
目的(Destination) 报头携带仅能由目的节点检验的附加信息。
选路(Routing) 报头由源节点使用,以列出数据包通过路径到达其目的地所需的所有节点。
分段(Fragmentation) 报头由源节点使用,以表明数据包已经被分为片段,适合在最大传输单元(MTU 大小)内使用。与IP4 不同的是,在IPv6 内,数据包分段与组装是通过端节点完成,而非通过路由器完成,这进一步提高了IPv6 网络的效率。
认证报头(AH) 与封装安全有效负载(ESP) 报头用于IPSec 中,以提供安全服务,确保数据包的认证、完整性和保密性。
3.IPv6的寻址结构
3.1 为什么IPv6协议的地址长度是128位?
有些人也许要问,IPv4地址不够用,那我在IPv4上再增加几位地址表示就行了,何必非要是IPv6的128位呢?这种提问是对芯片设计及CPU处理方式不理解造成的,同时也对未来网络的扩展没有充分的预见性。芯片设计中数值的表示我们知道是全用“0”、“1”代表,CPU处理字长发展到现在分别经历了4位、8位、16位、32位、64位等,我们知道,在计算机中,当数据能用2的指数次幂字长位的二进制数表示时,CPU对数值的处理效率最高。IPv4地址对应的是32比特字长就是因为当时的互联网上的主机CPU字长为32位。现在的64位机已十分普及,128位机正在成长中。将地址定为64位在网络扩展性上显得不足,定为其它的一个长度在硬件芯片设计、程序编制方面的效率都将下降,因此从处理效率和未来网络扩展性上考虑,将IPv6的地址长度定为128位是十分合适的。
3.2IPv6的128位地址是一个什么概念?
IPv6提供128位的地址空间,IPv6所能提供的巨大的地址容量可以从以下几个方面来说明:
共有2128个不同的IPv6地址,也就是全球可分配地址数为340,282,366,920,938,463,463,374,607,431,768,211,456个;
若按土地面积分配,每平方厘米可获得2.2*1020个地址。
IPv6地址耗尽的机会是很小的。在可预见的很长时期内,IPv6的128位地址长度形成的巨大的地址空间能够为所有可以想象出的网络设备提供一个全球唯一的地址,IPv6充足的地址空间将极大地满足那些伴随着网络智能设备的出现而对地址增长的需求,例如个人数据助理(PDA)、移动电话(Mobile Phone)、家庭网络接入设备等。
3.3IPv6地址是如何表示的?
IPv4地址表示为点分十进制格式,32位的地址分成4个8位分组,每个8位写成十进制,中间用点号分隔。而IPv6的128位地址则是以16位为一分组,每个16位分组写成4个十六进制数,中间用冒号分隔,称为冒号分十六进制格式。例如:21DA:00D3:0000:2F3B:02AA:00FF:FE28:9C5A 是一个完整的IPv6地址。
IPv6的地址表示有以下几种特殊情形:
IPv6地址中每个16位分组中的前导零位可以去除做简化表示,但每个分组必须至少保留一位数字。如上例中的地址,去除前导零位后可写成:21DA:D3:0:2F3B:2AA:FF:FE28:9C5A。
某些地址中可能包含很长的零序列,为进一步简化表示法,还可以将冒号十六进制格式中相邻的连续零位合并,用双冒号“::”表示。“::”符号在一个地址中只能出现一次,该符号也能用来压缩地址中前部和尾部的相邻的连续零位。例如地址1080:0:0:0:8:800:200C:417A,0:0:0:0:0:0:0:1,0:0:0:0:0:0:0:0分别可表示为压缩格式1080::8:800:200C:417A,::1,:: 。
在IPv4和IPv6混合环境中,有时更适合于采用另一种表示形式:x:x:x:x:x:x:d.d.d.d,其中x是地址中6个高阶16位分组的十六进制值,d是地址中4个低阶8位分组的十进制值(标准IPv4表示)。例如地址0:0:0:0:0:0:13.1.68.3 ,0:0:0:0:0:FFFF:129.144.52.38 写成压缩形式为::13.1.68.3,::FFFF.129.144.52.38 。
要在一个URL中使用文本IPv6地址,文本地址应该用符号“[”和“]”来封闭。例如文本IPv6地址FEDC:BA98:7654:3210:FEDC:BA98:7654:3210写作URL示例为http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.asp。
3.3IPv6的地址类型
所有类型的IPv6地址都被分配到接口,而不是节点。IPv6地址是单个或一组接口的128位标识符,有三种类型:
(1) 单播(Unicast)地址
单一接口的标识符。发往单播地址的包被送给该地址标识的接口。对于有多个接口的节点,它的任何一个单播地址都可以用作该节点的标识符。IPv6单播地址是用连续的位掩码聚集的地址,类似于CIDR的IPv4地址。IPv6中的单播地址分配有多种形式,包括全部可聚集全球单播地址、NSAP地址、IPX分级地址、站点本地地址、链路本地地址以及运行IPv4的主机地址。单播地址中有下列两种特殊地址:
不确定地址
单播地址0:0:0:0:0:0:0:0称为不确定地址。它不能分配给任何节点。它的一个应用示例是初始化主机时,在主机未取得自己的地址以前,可在它发送的任何IPv6包的源地址字段放上不确定地址。不确定地址不能在IPv6包中用作目的地址,也不能用在IPv6路由头中;
回环地址
单播地址0:0:0:0:0:0:0:1称为回环地址。节点用它来向自身发送IPv6包。它不能分配给任何物理接口。
(2) 任意播(AnyCast)地址
一组接口(一般属于不同节点)的标识符。发往任意播地址的包被送给该地址标识的接口之一(路由协议度量距离最近的)。IPv6任意播地址存在下列限制:
·任意播地址不能用作源地址,而只能作为目的地址;
·任意播地址不能指定给IPv6主机,只能指定给IPv6路由器;
(3) 组播(MultiCast)地址
一组接口(一般属于不同节点)的标识符。发往多播地址的包被送给该地址标识的所有接口。地址开始的11111111标识该地址为组播地址。
IPv6中没有广播地址,它的功能正在被组播地址所代替。另外,在IPv6中,任何全“0”和全“1”的字段都是合法值,除非特殊地排除在外的。特别是前缀可以包含“0”值字段或以“0”为终结。一个单接口可以指定任何类型的多个IPv6地址(单播、任意播、组播)或范围。
3.4IPv6的可聚集全球单播地址
IPv6为点对点通信设计了一种具有分级结构的地址,这种地址被称为可聚集全球单播地址(Aggregatable Global Unicast Address),它在RFC2374中定义。可聚集地址具有三个层次的分级结构:
公用拓扑:提供公用互联网传送服务的供应商和交换局群体;
站点拓扑:本地的特定站点或组织,不提供到本站点以外节点的公用传送服务;
接口标识符:标识链路上的接口;
可聚集全球单播地址的分级结构划分如下图所示。
开始3个地址位是地址类型前缀,用于区别其它地址类型。其后的13位TLA ID、32位NLA ID、16位SLA ID和 64位主机接口ID,分别用于标识分级结构中自上向下排列的TLA (Top Level Aggregator,顶级聚集体)、NLA(Next Level Aggregator,下级聚集体)、SLA(Site Level Aggregator,站点级聚集体)和主机接口。RES保留,以备将来TLA或NLA扩充用。TLA是与长途服务供应商和电话公司相互连接的公共网络接入点,它从国际Internet注册机构如IANA处获得地址。NLA通常是大型ISP,它从TLA处申请获得地址,并为 SLA分配地址。SLA也可称为订户(subscriber),它可以是一个机构或一个小型ISP。SLA负责为属于它的订户分配地址。SLA通常为其订户分配由连续地址组成的地址块,以便这些机构可以建立自己的地址分级结构以识别不同的子网。分级结构的最底层是网络主机。
设计这样的地址格式是为了既支持基于当前供应商的聚集,又支持被称为交换局的新的聚集类型。其组合使高效的路由聚集可用于直接连接到供应商和连接到交换局两者的站点上。站点可以选择连接到两种类型中的任何一种聚集点。
3.4IPv6的地址分配策略
IPv4中地址是用户拥有的。也就是说,一旦用户从某机构处申请到一段地址空间,他就永远使用该地址空间,而不管他是从哪个因特网服务提供者(ISP)处获得服务。这种方式的缺点是ISP必须在路由表中为每个用户的网络号维护一条表项。随着用户数的增加,会出现大量无法会聚的特殊路由,即使无类别域间路由(CIDR)也不能处理这样的路由表爆炸现象。
IPv6改变了地址的分配方式,从用户拥有变成了ISP拥有。全球网络号由因特网地址分配机构(IANA)分配给ISP,用户的全球网络地址是ISP地址空间的子集。每当用户改变ISP时,全球网络地址必须更新为新ISP提供的地址。这样ISP能有效地控制路由信息,避免路由爆炸现象的出现。
3.5一台IPv6主机有多少地址?
通常一台IPv6主机有多个IPv6地址,即使该主机只有一个单接口。一台IPv6主机可同时拥有以下几种单点传送地址:
·每个接口的链路本地地址;
·每个接口的单播地址(可以是一个站点本地地址和一个或多个可聚集全球地址);
·回环(loopback)接口的回环地址(::1)。
此外,每台主机还需要时刻保持收听以下多点传送地址上的信息:
·节点本地范围内所有节点组播地址(FF01::1);
·链路本地范围内所有节点组播地址(FF02::1);
·请求节点(solicited-node)组播地址(如果主机的某个接口加入请求节点组);
·组播组组播地址(如果主机的某个接口加入任何组播组)。
3.6一台IPv6路由器有多少地址?
一台IPv6路由器可被分配以下几种单点传送地址:
·每个接口的链路本地地址;
·每个接口的单播地址(可以是一个站点本地地址和一个或多个可聚集全球地址);
·子网-路由器任意播地址;
·其他任意播地址(可选);
·回环接口的回环地址(::1)。
同样,除以上这些地址外,路由器需要时刻保持收听以下多点传送地址上的信息流:
·节点本地范围内的所有节点组播地址(FF01::1);
·节点本地范围内的所有路由器组播地址(FF01::2);
·链路本地范围内的所有节点组播地址(FF02::1);
·链路本地范围内的所有路由器组播地址(FF02::2);
·站点本地范围内的所有路由器组播地址(FF05::2);
·请求节点(solicited-node)组播地址(如果路由器的某个接口加入请求节点组);
·组播组组播地址(如果路由器的某个接口加入任何组播组)。
4.IPv6地址自动配置技术
IPv6地址为128位,配置地址岂不是要花费很多时间?IPv6协议支持地址自动配置,这是一种即插即用的机制。IPv6节点通过地址自动配置得到IPv6地址和网关地址,解决了用户配置地址的问题。
IPv6支持无状态地址自动配置和状态地址自动配置两种地址自动配置方式。
状态地址自动配置的方式是指一个节点插入IPv6网络中时,使用了两种启动协议(BOOTstrap Protocol,BOOTP)或动态主机配置协议(DHCP)来支持即插即用网络连接。这两种机制允许IP节点从特殊的BOOTP服务器或DHCP服务器获取配置信息。这些协议采用“状态自动配置”(Stateful Autoconfiguration),即服务器必须保持每个节点的状态信息,并管理这些保存的信息。
状态自动配置的问题在于,用户必须保持和管理特殊的自动配置服务器以便管理所有“状态”,即所容许的连接及当前连接的相关信息。对于有足够资源来建立和保持配置服务器的机构,该系统可以接受;但是对于没有这些资源的小型机构,工作情形较差。
除了状态自动配置,IPv6还采用了一种被称为无状态自动配置(Stateless Auto Configuration)的自动配置服务。RFC2462中描述了IPv6的无状态自动配置。无状态自动配置要求本地链路支持组播,而且网络接口能够发送和接收组播包。无状态自动配置过程要求节点采用如下步骤:
首先,进行自动配置的节点必须确定自己的链路本地地址;
然后,必须验证该链路本地地址在链路上的唯一性;
最后,节点必须确定需要配置的信息。该信息可能是节点的IP地址,或者是其他配置信息,或者两者皆有。如果需要IP地址,节点必须确定是使用无状态自动配置过程还是使用状态自动配置过程来获得。
具体地说,在无状态自动配置过程中,主机首先通过将它的网卡MAC地址附加在链路本地地址前缀1111111010之后,产生一个链路本地单播地址(IEEE已经将网卡MAC地址由48位改为了64位。如果主机采用的网卡的MAC地址依然是48位,那么IPv6网卡驱动程序会根据IEEE的一个公式将48位MAC地址转换为64位MAC地址)。接着主机向该地址发出一个邻居发现请求(Neighbor Discovery Request),以验证地址的唯一性。如果请求没有得到响应,则表明主机自我配置的链路本地单播地址是唯一的。否则,主机将使用一个随机产生的接口ID组成一个新的链路本地单播地址。然后,以该地址为源地址,主机向本地链路中所有路由器多点传送一个路由器请求(Router Solicitation)来请求配置信息,路由器以一个包含一个可聚集全球单播地址前缀和其它相关配置信息的路由器宣告(Router Advertisement)作为响应。主机用它从路由器得到的全球地址前缀加上自己的接口ID,自动配置全球地址,然后就可以与Internet中的其它主机通信了。
如果没有路由器为网络上的节点服务,也就是本地网络孤立于其他网络,则节点必须寻找配置服务器来完成其配置;否则,节点必须侦听路由器宣告报文。这些报文周期性地发往所有主机的组播地址,以指明诸如网络地址和子网地址等配置信息。节点可以等待路由器宣告,也可以通过发送组播请求给所有路由器的组播地址来请求路由器发送宣告。一旦收到路由器的响应,节点就可以使用响应的信息来完成自动配置。
使用无状态自动配置,无需手动干预就能够改变网络中所有主机的IP地址。例如,当企业更换了联入Internet的ISP时,将从新ISP处得到一个新的可聚集全球地址前缀。ISP把这个地址前缀从它的路由器上传送到企业路由器上。由于企业路由器将周期性地向本地链路中的所有主机多点传送路由器宣告,因此企业网络中所有主机都将通过路由器宣告收到新的地址前缀,此后,它们就会自动产生新的IP地址并覆盖旧的IP地址。
5. IPv6域名解析技术
IPv6网络中的DNS与IPv4的DNS在体系结构上是一致的,都是采用树型结构的域名空间,如下图所示。IPv4协议与IPv6协议的不同并不意味着IPv4 DNS体系和IPv6 DNS体系需要各自独立,相反,DNS的体系和域名空间必须一致,即IPv4和IPv6共同拥有统一的域名空间。在IPv4到IPv6的过渡阶段,域名可以同时对应于多个IPv4和IPv6的地址。以后随着IPv6网络的普及,IPv6地址将逐渐取代IPv4地址。下图的最上方是DNS树形结构中唯一的一个根(Root),用点号“.”表示。根的下一级称为顶级域(Top Level Domain,TLD),也称一级域。顶级域的下级就是二级域(Second Level Domain,SLD),二级域的下级就是三级域,依次类推。每个域都是其上级域的子域(Sub Domain),比如“.net.cn”是“.cn”的子域,而“cnnic.net.cn”既是“net.cn”的子域,同时也是“.cn”的子域。
DNS树上的每一个节点都有一个标识(Label),根节点的标识是“空”(即长度为0),其它节点的标识的长度在1到63字节之间。一个节点的域名是由从这个节点到根节点的路径上的所有标识从左到右顺序排列组成的,标识之间用“.”分隔。例如www.cnnic.net.cn
DNS的整个域名空间划分成许多的区(Zone),见上图中的椭圆标记,数据采用分布式存储。每个区都有域名服务器(包括主服务器和辅服务器),以资源记录(Resource Record)的形式来存储域名信息。资源记录包括了主机名(域名)和IP地址的对应,以及子域服务器的授权等多种类型。
用户在使用DNS服务时,可以不必细致地了解DNS域名空间的树型结构体系,只需在设置网络时指定一个DNS服务器或使用动态主机配置(DHCP)等相关技术,从而使用户的应用程序可以通过操作系统内嵌的解析器(Resolver)访问DNS系统,查询域名相关的网络资源信息。