IPv6协议技术特点
相对于IPv4,IPv6有如下一些显著的优势:
(1)地址容量大大扩展,由原来的32位扩充到128位,彻底解决IPv4地址不足的问题;支持分层地址结构,从而更易于寻址;扩展支持组播和任意播地址,这使得数据包可以发送给任何一个或一组节点;
(2)大容量的地址空间能够真正的实现无状态地址自动配置,使IPv6终端能够快速连接到网络上,无需人工配置,实现了真正的即插即用;
(3)报头格式大大简化,从而有效减少路由器或交换机对报头的处理开销,这对设计硬件报头处理的路由器或交换机十分有利;
(4)加强了对扩展报头和选项部分的支持,这除了让转发更为有效外,还对将来网络加载新的应用提供了充分的支持;
(5)流标签的使用让我们可以为数据包所属类型提供个性化的网络服务,并有效保障相关业务的服务质量;
(6)认证与私密性:IPv6把IPSec作为必备协议,保证了网络层端到端通信的完整性和机密性;
(7)IPv6在移动网络和实时通信方面有很多改进。特别地,不像IPv4,IPv6具备强大的自动配置能力从而简化了移动主机和局域网的系统管理。
3.2.1 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个域,即优先级和流标签。
下图为具体的IPv4与IPv6报头比较。
表1 IPv4包头格式
|
4bit版本号
|
4bit报头长度
|
8bit服务类型
|
16bit数据包长度
|
标识符(16bit)
|
标志(4bit)
|
分段偏移(12bit)
|
生存时间(8bit)
|
传输协议(8bit)
|
报头校验和(16bit)
|
源IP地址(32bit)
|
目的IP地址(32bit)
|
选项(24bit)
|
填充(8bit)
|
|
|
|
|
|
|
表2 ipv6包头格式
|
4bit版本号
|
4bit优先级
|
24bit流标签
|
净荷长度(16bit)
|
下一报头(8bit)
|
HOP限制(8bit)
|
源IP地址(128bit)
|
目的IP地址(128bit)
|
|
|
|
|
|
3.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位是十分合适的。
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)、家庭网络接入设备(HAN)等。
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 。
[NextPage]
3.3.4 IPv6地址为128位,配地址岂不是要花费很多时间?
IPv6协议支持地址自动配置,这是一种即插即用的机制。IPv6节点通过地址自动配置得到IPv6地址和网关地址。
IPv6支持无状态地址自动配置和状态地址自动配置两种地址自动配置方式。在无状态地址自动配置方式下,需要配置地址的网络接口先使用邻居发现机制获得一个链路本地地址。网络接口得到这个链路本地地址之后,再接收路由器宣告的地址前缀,结合接口标识得到一个全球地址。而状态地址自动配置的方式,如动态主机配置协议(DHCP),需要一个DHCP服务器,通过客户机/服务器模式从DHCP服务器处得到地址配置的信息。
所有类型的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路由器;
IPv6任意播地址
(3) 组播(MultiCast)地址
一组接口(一般属于不同节点)的标识符。发往多播地址的包被送给该地址标识的所有接口。地址开始的11111111标识该地址为组播地址。
IPv6组播地址
IPv6中没有广播地址,它的功能正在被组播地址所代替。另外,在IPv6中,任何全“0”和全“1”的字段都是合法值,除非特殊地排除在外的。特别是前缀可以包含“0”值字段或以“0”为终结。一个单接口可以指定任何类型的多个IPv6地址(单播、任意播、组播)或范围。
3.3.6 什么是IPv6的可聚集全球单播地址?
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通常为其订户分配由连续地址组成的地址块,以便这些机构可以建立自己的地址分级结构以识别不同的子网。分级结构的最底层是网络主机。
IPv6可聚集全球单播地址
设计这样的地址格式是为了既支持基于当前供应商的聚集,又支持被称为交换局的新的聚集类型。其组合使高效的路由聚集可用于直接连接到供应商和连接到交换局两者的站点上。站点可以选择连接到两种类型中的任何一种聚集点。
IPv4中,地址是用户拥有的。也就是说,一旦用户从某机构处申请到一段地址空间,他就永远使用该地址空间,而不管他是从哪个因特网服务提供者(ISP)处获得服务。这种方式的缺点是ISP必须在路由表中为每个用户的网络号维护一条表项。随着用户数的增加,会出现大量无法会聚的特殊路由,即使无类别域间路由(CIDR)也不能处理这样的路由表爆炸现象。
IPv6改变了地址的分配方式,从用户拥有变成了ISP拥有。全球网络号由因特网地址分配机构(IANA)分配给ISP,用户的全球网络地址是ISP地址空间的子集。每当用户改变ISP时,全球网络地址必须更新为新ISP提供的地址。这样ISP能有效地控制路由信息,避免路由爆炸现象的出现。
3.3.8 一台IPv6主机有多少地址?
通常一台IPv6主机有多个IPv6地址,即使该主机只有一个单接口。一台IPv6主机可同时拥有以下几种单点传送地址:
· 每个接口的链路本地地址;
· 每个接口的单播地址(可以是一个站点本地地址和一个或多个可聚集全球地址);
· 回环(loopback)接口的回环地址(::1)。
此外,每台主机还需要时刻保持收听以下多点传送地址上的信息:
· 节点本地范围内所有节点组播地址(FF01::1);
· 链路本地范围内所有节点组播地址(FF02::1);
· 请求节点(solicited-node)组播地址(如果主机的某个接口加入请求节点组);
· 组播组组播地址(如果主机的某个接口加入任何组播组)。
3.3.9 一台IPv6路由器有多少地址?
一台IPv6路由器可被分配以下几种单点传送地址:
· 每个接口的链路本地地址;
· 每个接口的单播地址(可以是一个站点本地地址和一个或多个可聚集全球地址);
· 子网-路由器任意播地址;
· 其他任意播地址(可选);
· 回环接口的回环地址(::1)。
同样,除以上这些地址外,路由器需要时刻保持收听以下多点传送地址上的信息流:
· 节点本地范围内的所有节点组播地址(FF01::1);
· 节点本地范围内的所有路由器组播地址(FF01::2);
· 链路本地范围内的所有节点组播地址(FF02::1);
· 链路本地范围内的所有路由器组播地址(FF02::2);
· 站点本地范围内的所有路由器组播地址(FF05::2);
· 请求节点(solicited-node)组播地址(如果路由器的某个接口加入请求节点组);
· 组播组组播地址(如果路由器的某个接口加入任何组播组)。
“即插即用”是指无需任何人工干预,就可以将一个节点插入IPv6网络并在网络中启动,IPv6使用了两种不同的机制来支持即插即用网络连接:启动协议(BOOTstrap Protocol,BOOTP)和动态主机配置协议(DHCP)。这两种机制允许IP节点从特殊的BOOTP服务器或DHCP服务器获取配置信息。这些协议采用“状态自动配置”(Stateful Autoconfiguration),即服务器必须保持每个节点的状态信息,并管理这些保存的信息。
状态自动配置的问题在于,用户必须保持和管理特殊的自动配置服务器以便管理所有“状态”,即所容许的连接及当前连接的相关信息。对于有足够资源来建立和保持配置服务器的机构,该系统可以接受;但是对于没有这些资源的小型机构,工作情形较差。
3.4.2 除了状态自动配置,IPv6还提供什么自动配置服务?
除了状态自动配置,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地址。
[NextPage]
3.5 域名解析技术
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字节之间。一个节点的域名是由从这个节点到根节点的路径上的所有标识从左到右顺序排列组成的,标识之间用“.”分隔。例如
http://www.cnnic.net.cn/
DNS的整个域名空间划分成许多的区(Zone),见上图中的椭圆标记,数据采用分布式存储。每个区都有域名服务器(包括主服务器和辅服务器),以资源记录(Resource Record)的形式来存储域名信息。资源记录包括了主机名(域名)和IP地址的对应,以及子域服务器的授权等多种类型。
用户在使用DNS服务时,可以不必细致地了解DNS域名空间的树型结构体系,只需在设置网络时指定一个DNS服务器或使用动态主机配置(DHCP)等相关技术,从而使用户的应用程序可以通过操作系统内嵌的解析器(Resolver)访问DNS系统,查询域名相关的网络资源信息。
3.5.2 如何自动发现提供解析服务的DNS服务器?
(1) 无状态的DNS服务器发现
无状态DNS服务器自动发现有以下几种方式:
为子网内部的DNS服务器配置站点范围内的任意播地址。要进行自动配置的节点以该任意播地址为目的地址发送服务器发现请求,询问DNS服务器地址、域名和搜索路径等DNS信息。这个请求到达距离最近的DNS服务器,服务器根据请求,回答DNS服务器单播地址、域名和搜索路径等DNS信息。节点根据服务器的应答配置本机DNS信息,以后的DNS请求就直接用单播地址发送给DNS服务器。
与第一种方式相同,只是不用站点范围内的任意播地址,而采用站点范围内的组播地址或链路组播地址等。
一直用站点范围内的任意播地址作为DNS服务器的地址,所有的DNS解析请求都发送给这个任意播地址。距离最近的DNS服务器负责解析这个请求,得到解析结果后把结果返回请求节点,而不像第一种方式是把DNS服务器单播地址、域名和搜索路径等DNS信息告诉节点。
从网络扩展性、安全性、实用性等多方面综合考虑,第一种采用站点范围内的任意播地址作为DNS服务器地址的方式相对较好。
(2) 有状态的DNS服务器发现
有状态的DNS服务器发现方式是通过类似DHCP的服务器把DNS服务器地址、域名和搜索路径等DNS信息告知节点。当然,这需要额外的服务器。
3.5.3 在IPv4到IPv6的过渡阶段如何实现DNS?
在IPv4到IPv6的过渡过程中,作为Internet基础架构的DNS服务也要支持这种网络协议的升级和转换。可以用两种方法实现IPv4到IPv6过渡阶段的DNS:
IPv4和IPv6的DNS在记录格式等方面有所不同,为了实现IPv4网络和IPv6网络之间的DNS查询和响应,可以将应用层网关DNS-ALG与NAT-PT相结合,作为IPv4和IPv6网络之间的翻译器。例如,IPv4的地址域名映射使用“A”记录,而IPv6使用“AAAA”或“A6”记录。那么,IPv4节点发送到IPv6网络的DNS查询请求是“A”记录,DNS-ALG就把“A”改写成“AAAA”,并发送给IPv6网络中的DNS服务器。当服务器的回答到达DNS-ALG时,DNS-ALG修改回答,把“AAAA”改为“A”,把IPv6地址改成DNS-ALG地址池中的IPv4转换地址,把这个IPv4转换地址和IPv6地址之间的映射关系通知NAT-PT,并把这个IPv4转换地址作为解析结果返回IPv4主机。IPv4主机就以这个IPv4转换地址作为目的地址与实际的IPv6主机通过NAT-PT通信。这个过程示意如下图。
(2) 双协议栈方式
对于采用双协议栈方式的过渡方法,在DNS服务器中同时存在“A”记录和“AAAA”(或“A6”)记录。由于节点既可以处理IPv4协议,也可以处理IPv6协议,因此无需类似DNS ALG的转换设备。无论DNS服务器回答“A”记录还是“AAAA”记录,都可以进行通信。
[NextPage]
IPv6定义了邻居发现协议(Neighbor Discovery protocol,NDP),它使用一系列IPv6控制信息报文(ICMPv6)来实现相邻节点(同一链路上的节点)的交互管理,并在一个子网中保持网络层地址和链路层地址之间的映射。邻居发现协议中定义了5种类型的信息:路由器宣告、路由器请求、路由重定向、邻居请求和邻居宣告。通过这些信息,实现了对以下功能的支持:
· 路由器发现:即帮助主机来识别本地路由器;
· 前缀发现:节点使用此机制来确定指明链路本地地址的地址前缀以及必须发送给路由器转发的地址前缀;
· 参数发现:帮助节点确定诸如本地链路MTU之类的信息;
· 地址自动配置:用于IPv6节点自动配置;
· 地址解析:替代了ARP和RARP,帮助节点从目的IP地址中确定本地节点(即邻居)的链路层地址;
· 下一跳确定:可用于确定包的下一个目的地,即可确定包的目的地是否在本地链路上。如果在本地链路,下一跳就是目的地;否则,包需要选路,下一跳就是路由器,邻居发现可用于确定应使用的路由器;
· 邻居不可达检测:帮助节点确定邻居(目的节点或路由器)是否可达;
· 重复地址检测:帮助节点确定它想使用的地址在本地链路上是否已被占用;
· 重定向:有时节点选择的转发路由器对于待转发的包而言并非最佳。这种情况下,该转发路由器可以对节点进行重定向,使它将包发送给更佳的路由器。例如,节点将发往Internet的包发送给为节点所在的内部网服务的默认路由器,该内部网路由器可以对节点进行重定向,以使其将包发送给连接在同一本地链路上的Internet路由器。
3.6.2 IPv6邻居发现协议与IPv4地址解析协议有什么区别?
IPv6不再执行地址解析协议(ARP)或反向地址解析协议(RARP),而以邻居发现协议中的相应功能代替,IPv6邻居发现协议与IPv4地址解析协议主要区别如下:
IPv4中地址解析协议ARP是独立的协议,负责IP地址到链路层地址的转换,对不同的链路层协议要定义不同的ARP协议。IPv6中邻居发现协议NDP包含了ARP的功能,且运行于因特网控制报文协议ICMPv6上,更具有一般性,包括更多的内容,而且适用于各种链路层协议;
ARP协议以及ICMPv4路由器发现和ICMPv4重定向报文基于广播,而NDP协议的邻居发现报文基于高效的组播和单播;
可达性检测的目的是确认相应IP地址代表的主机或路由器是否还能收发报文,IPv4没有统一的解决方案。NDP中定义了可达性检测过程,保证IP报文不会发送给“黑洞”。
3.7 超长数据传送问题
3.7.1 IPv6如何解决超长数据的传送问题?
IPv6要求互联网上的每条链路具有1280或更多个八位组的最大传输单元(MTU)。无法在一段之内传送1280个八位组的链路必须根据链路的情况在IPv6下层的协议中提供分段和重组机制。具有可配置MTU的链路,比如PPP链路必须配置为具有至少1280个八位组的MTU;要发送大于路径MTU的包,节点可以使用IPv6分段报头,在源节点将包分段,并在目的节点将包重组。
3.7.2 IPv6通信中源节点如何发现到目的节点的最大传输单元?
RFC1981中描述了一种动态发现路径最大传输单元(PMTU)的方法。基本思想是源节点最初假定到目的节点的一条路径的PMTU是这条路径第一跳的已知MTU。如果发往这条路径的任何包由于太大而不能被路径上的一些节点转发,那些节点将丢弃这些包并发回ICMPv6包太大消息。源节点收到这样一个消息后应根据包太大消息中报告的MTU压缩的那一跳的MTU值减小它为这条路径假定的PMTU。当节点对PMTU的估计值小于或等于实际PMTU时路径MTU发现过程结束。要注意在这个过程中“发包-收到包太大消息”的循环可能反复多次,因为路径上总潜在可能存在MTU更小的链路。节点也可以通过停止发送比IPv6最小链路MTU大的包来终止这个发现过程。
IPv6采用聚类机制,定义了非常灵活的层次寻址及路由结构,同一层次上的多个网络在上层路由器中表示为一个统一的网络前缀,这样可以显著减少路由器必须维护的路由表项。在理想情况下,一个核心主干网路由器只须维护不超过8192个表项。这大大降低了路由器的寻路和存储开销。
IPv6协议所带来的另一个特点是提供数据流标签,即流量识别。路由器可以识别属于某个特定流量的数据包,并且这条信息第一次接收时即被记录下来,下一次这个路由器接收到同样的流量数据包后,路由器采用识别的记录情况,而不需查对路径选择表,从而减少了数据处理的时间。
多点传送路由是指目的地址是一个多点传送地址的信息包路由。在IPv6中,多点传送路由的问题与IPv4中类似,只是功能有所加强,分别成为了ICMPv6和OSPFv6的一部分,而不是IPv4中的单独协议,从而成为了IPv6整体的一部分。为了路由多点传送信息包,IPv6中创建了一个分布树(多点传送树)到达组里的所有成员。
IPv6主要使用三种路由协议:RIPv6(Routing Information Protocol,路由信息协议)、OSPFv6(Open Shortest Path First,开放最短路径优先)和IDRPv2(Inter-Domain Routing Protocol,域间路由协议)以及可能的EIGRP和双层的IS-IS。
RIPv6是可以与IPv6共同使用的RIP版本。更新后的RIP允许接收128位地址,没有增加新特性,没有消除以前限制的相关前缀长度。这种选择的原因是为了保持RIPv6的简单性,这样它可以在非常简单的设备上实现。
OSPFv6是可以用于IPv6的OSPF版本,它也是IPv6推荐的内部网关路由协议(IGP),作为所有路由器厂商的标准实现,它适于大型网络。OSPFv6作为OSPF的更新,允许传送新的128位地址和相关的前缀长度,在OSPFv6中,区域定义为128位地址。
IDRP是和IPv6共同使用的外部网关路由协议(EGP),IDRP是一个路径矢量协议,在OSI结构中是设计在无连接网络协议(CLNP,ISO 8473)使用的,在Internet上作为EGP从BGP-4得出,适于和IPv6共同使用的IDRP版本是IDRPv2。
IPv6加强了组播功能,这是一种可将信息传递给所有已登记了欲接收该消息的主机的功能。使用组播功能可以同时传递数据给大量的用户,传递过程只会占有一些公共或专用带宽开销而不会浪费带宽在整个网络里广播。在IPv6的组播功能中增加了 “标志”,可以区分永久性与临时性地址,更有利于组播功能的实现。IPv6还包含了一些限制组播消息传递范围的一些特性,这样,组播消息可以被局限在一个特定的位置、区域、公司或其它约定范围,从而减少了带宽的使用并可提供安全性。组播的意义在于只有用户加入相应的组播组才能收到发给该组的信息,这对于视频节目的发送来说意义尤其重大,模拟电视中的频道概念就完全可以用组播组的概念来代替。而且组播组的范围可以包括同一本地网、同一机构网、甚至IPv6全球地址空间中的任何位置的节点,这就为网络多媒体信息服务提供了更大的灵活性。
移动IPv6协议为用户提供可移动的IP数据服务,让用户可以在世界各地都使用同样的IPv6地址,非常适合未来无线上网。
现在的互联网协议IPv4,原本不提供任何移动性支持。针对这一情况,IETF于1996年制订了支持移动互联网设备的协议,称为移动IP,其协议有两种版本:基于IPv4的移动IPv4和基于IPv6的移动IPv6。
移动IP的主要目标是:不管是连接在本地链路还是移动到外地网络,移动节点总是通过本地地址寻址。移动IP在网络层加入了新的特性,在改变网络连接点时,运行在节点上的应用程序不用修改或配置仍然可用。这些特性使得移动节点总是通过本地地址通信。这种机制对于IP层以上的协议层是完全透明的。移动节点所在的本地链路称为移动节点的家乡链路,移动节点的本地地址称为家乡地址。
移动IPv6操作包括家乡代理注册、三角路由、路由优化、绑定管理、移动检测和家乡代理发现。移动IPv6的工作机制如下图所示。图中有3条链路和3个系统。链路A上有一个路由器提供家乡代理服务,这个链路是移动节点的家乡链路。移动节点从链路A移动到链路B。链路C上有一个通信节点,可以是移动的或者静止的。
当移动节点连接到外地链路时,除了家乡地址外,它还可以通过一个或多个转交地址进行通信。转交地址是移动节点在外地链路时的IP地址。移动节点的家乡地址和转交地址之间的关联称为“绑定”。移动节点的转交地址可以自动配置。
移动IPv6的实现离不开家乡链路上的家乡代理。当移动节点离开本地时,要向家乡链路上的一个路由器注册自己的一个转交地址,要求这个路由器作为自己的家乡代理。家乡代理需要用代理邻居发现来截获家乡链路上发往移动节点家乡地址的数据包,然后通过隧道将截获的数据包发往移动节点的主转交地址。为了通过隧道发送截获的数据包,家乡代理要把数据包进行IPv6封装,外部的IPv6报头地址设为移动节点的主转交地址。
当移动节点离开本地时,家乡链路的一些节点可能重新配置,导致执行家乡代理功能的路由器被其他路由器所代替。在这种情况下,移动节点可能不知道自己家乡代理的IP地址。移动IPv6提供了一种动态家乡代理地址发现机制,移动节点可以动态发现家乡链路上家乡代理的IP地址,离开本地时,它在这个家乡代理上注册转交地址。
移动IPv6还定义了一个附加的IPv6目的选项——家乡地址选项。作为发送方的移动节点通过在发送的数据包中携带家乡地址选项可以把家乡地址告诉作为接收方的通信节点,而转交地址对于移动IPv6以上层(如传输层)是透明的。
在IPv6中,移动节点能把自己的转交地址告诉每个通信节点,使通信节点和移动节点之间进行直接路由,避免了三角路由问题。由于未来互联网上会有大量的无线移动节点,因此,在路由效率上的大规模改善可能对互联网的可扩展性产生本质的影响。
移动IPv6具有诱人的应用前景,它为新一代无线用户提供了移动支持,但在移动越区切换、QoS、安全等方面仍不能满足实际应用的需要。目前,许多研究机构(包括移动通信的著名厂商诺基亚、爱立信等)都在研究这些关键技术。
3.10.2 为什么IPv6能够比IPv4更好地解决移动问题?
移动IPv6与移动IPv4相比优势明显,主要是其设计吸收了移动IPv4的发展经验,并且抓住了设计新版本IP协议(IPv6)的大好时机,结合了IPv6的很多新特性。IPv6的出现是移动计算的一个重要里程碑,IPv6的下列主要特性对于未来的移动无线网络的发展至关重要:足够多的IP地址、安全数据报头的实现、目的选项提高了路由效率、地址自动配置、避免入口过滤、错误恢复没有软状态“瓶颈”。
移动IPv6协议的优点在移动终端数量持续上涨的今天尤其突出。IPv6将是实现移动互联网上许多新型而精彩的服务的关键。尽管IPv4中也存在移动协议,但二者之间存在本质的区别:移动IPv4协议不适用于数量庞大的移动终端。目前全世界的移动终端数就超过7亿个,而且移动电话终端的潮流才刚刚开始,包含诸如门、防盗自动警铃等设备的下一轮终端浪潮已经显露出来。移动IP需要为每个设备提供一个全球唯一的IP地址,不久的将来,当每个人都要携带一个或多个移动终端时,IPv4将没有足够的地址空间为在公共互联网上运行的每个移动终端分配一个全球唯一的IP地址,而IPv6却可以实现这一点。除了IPv6的其他优点外,单这一项功能就可以实现个人之间的直接通信。从另一个角度说,移动IPv6能够通过简单的扩展,满足大规模移动用户的需求。这样,它就能在全球范围内解决有关网络和访问技术之间的移动性问题。另外,IPv4协议中对移动性的支持不是强制的,而移动IPv6是IPv6协议中不可或缺的部分,所有IPv6的实现都必须支持移动性。
[NextPage]
原来的互联网安全机制只建立于应用程序级,如E-mail加密、SNMPv2网络管理安全、接入安全(HTTP、SSL)等,无法从IP层来保证Internet的安全。为了加强互联网的安全性,从1995年开始,IETF着手研究制定了一套IP安全(IP Security,IPSec)协议用于保护IP通信的安全。IPSec提供既可用于IPv4也可用于IPv6的安全性机制,它是IPv6的一个组成部分,也是IPv4的一个可选扩展协议。通过集成IPSec,IPv6实现了IP级的安全。IPSec提供如下安全性服务:访问控制、无连接的完整性、数据源身份认证、防御包重传攻击、保密、有限的业务流保密性。IPSec的认证报头(Authentication Header,AH,RFC2402中描述)协议定义了认证的应用方法,封装安全负载(Encapsulating Security Payload,ESP,RFC2406中描述)协议定义了加密和可选认证的应用方法。IPSec安全性服务完全通过AH和ESP头相结合的机制来提供,当然还要有正确的相关密钥管理协议。在实际进行IP通信时,可以根据安全需求同时使用这两种协议或选择使用其中的一种。
IPv6实质上不会比IPv4更加安全。IPv6标准的起草者、思科总部的两位“杰出网络技术领袖”Fred Baker和 Tony Hain认为IPv6从根本上来说,只是IP地址改变的协议包,并不能解决现在的互联网协议IPv4中的安全问题。但是由于IPSec提供的端到端安全性的两个基本组件——认证和加密——都是IPv6协议的必备组件,而在IPv4中,它们只是可选组件,因此,采用IPv6,安全性会更加简便、一致。更重要的是,IPv6使我们有机会在将网络转换到这种新型协议的同时发展端到端安全性。
3.11.2 为解决IPv6网络安全问题,传统的安全设备需要做那些改进?
IPv6网络中仍需要使用防火墙、入侵检测系统等传统的安全设备,但由于IPv6的一些新特点,IPv4网中现有的这些安全设备在IPv6网中不能直接使用,还需要做些改进:
防火墙的设计
由于IPv6相对IPv4在数据报头上有了很大的改变,所以原来的防火墙产品在IPv6网络上不能直接使用,必须做一些改进。针对IPv6的Socket套接口函数已经在RFC3493:Basic Socket Interface Extensions for IPv6中定义,以前的应用程序都必须参考新的API做相应的改动。
IPv4中防火墙过滤的依据是IP地址和TCP/UDP端口号。IPv4中IP头部和TCP头部是紧接在一起的,而且其长度是固定的,所以防火墙很容易找到头部,并应用相应的策略。然而在IPv6中TCP/UDP报头的位置有了根本的变化,它们不再是紧连在一起的,通常中间还间隔有其他的扩展头部,如路由选项头部,AH/ESP头部等。防火墙必须读懂整个数据包才能进行过滤操作,这对防火墙的处理性能会有很大的影响。
入侵检测系统(IDS)的设计
在IPv6下也使我们不得不放弃以往的网络监控技术,投身一个全新的研究领域。首先,IDS产品同防火墙一样,在IPv6下不能直接运行,还要做相应的修改。其次,IDS的工作原理实际上是一个监听器,接收网段上的所有数据包,并对其进行分析,从而发现攻击,并实施相应的报警措施。但是,如果使用传输模式进行端到端的加密,IDS就无法工作,因为它接收的是加密的数据包,无法理解。当然,解决方案之一是让IDS能对这些数据包进行解密,但这样势必会带来新的安全问题。同时IPv6的可靠性是否如最初所设想的那样,也有待时间的考验。
由于IPv6中引入了网络层的加密技术,未来网络上的数据通讯的保密性将会越来越强,这使网络入侵检测系统和主机入侵检测引擎也面临在多种不同平台如何部署的问题。这就需要研究IDS新的部署方式,再下一步,研究如何才能在任何网络状况、任何服务器、任何客户端、任何应用环境都能进行适当的自转换和自适应。
3.12.1 为更好地提供服务质量,IPv6协议作了哪些考虑?
从协议的角度看,IPv6与目前的IPv4提供相同的服务质量(QoS),但是IPv6的优点体现在能提供不同的服务。这些优点来自于IPv6的包头结构中新增的优先级字段和流标签字段。优先级字段扩大到1个字节,这就可以定义256个级别的优先级,对各种多媒体信息根据紧急性确定数据包的优先级,从而保证每一项服务都能达到用户满意的质量。而有了20位长的流标签字段,在传输过程中,中间的各节点就可以识别和分开处理任何IP地址流。在IPv6中,同一个业务流的所有数据包采用相同的流标签,这样当路由器检测到相同的流标签的时候就采用相同的路径发出去,而不需要为每一个数据包重新选择路由,从而大大提高了数据包转发的效率,降低了端到端的延迟。尽管对流标签的准确应用还没有制定出有关标准,但将来它会用于基于服务级别的新计费系统。此外,在支持“总是在线”连接、防止服务中断以及提高网络性能方面,IPv6也有助于改进服务质量。
IPv6实现QoS的协议是IETF的资源保留协议(Resource Reserve Protocol,RSVP)。主机用RSVP代表应用数据流(指可以由路由器或者转发数据的主机辨别的相关数据包的流,在IPv6协议下就是拥有相同的流标签的流)向网络请求特定的服务质量,例如基于平均值的最大带宽、最大接收延迟、优先队列以及其他参数,主机也可以指定一个特定的网络服务级别,这类似于数字视频广播(Digital Video Broadcasting,DVB)中的网络信息表的概念。RSVP带着这个请求通过网络,访问这个数据流经过的网络的每个节点。在每个节点上,RSVP试图为这个流进行资源保留。这使得提供具有服务质量的图像和其它实时业务成为可能。
IPv6不可能立刻替代IPv4,因此在相当一段时间内IPv4和IPv6会共存在一个环境中。要提供平稳的转换过程,使得对现有的使用者影响最小,就需要有良好的转换机制。目前,这个议题是IETF ngtrans工作小组的主要目标,有许多转换机制被提出,部分已被用于6Bone上。IETF推荐了双协议栈、隧道技术以及NAT等转换机制:
IPv6/IPv4双协议栈技术
简单地说,双栈机制就是使IPv6网络节点具有一个IPv4栈和一个IPv6栈,同时支持IPv4和IPv6协议。IPv6和IPv4是功能相近的网络层协议,两者都应用于相同的物理平台,并承载相同的传输层协议TCP或UDP,如果一台主机同时支持IPv6和IPv4协议,那么该主机就可以和仅支持IPv4或IPv6协议的主机通信,IPv6/IPv4双协议栈的协议结构如下图所示:
应用层协议
|
TCP/UDP协议
|
IPv6协议
|
IPv4协议
|
链路层及物理协议
|
隧道技术
隧道机制就是必要时将IPv6数据包作为数据封装在IPv4数据包里,使IPv6数据包能在已有的IPv4基础设施(主要是指IPv4路由器)上传输的机制。随着IPv6的发展,出现了一些被运行IPv4协议的骨干网络隔离开的局部IPv6网络,为了实现这些IPv6网络之间的通信,必须采用隧道技术。隧道对于源站点和目的站点是透明的,在隧道的入口处,路由器将IPv6的数据分组封装在IPv4中,该IPv4分组的源地址和目的地址分别是隧道入口和出口的IPv4地址,在隧道出口处,再将IPv6分组取出转发给目的站点。隧道技术的优点在于隧道的透明性,IPv6主机之间的通信可以忽略隧道的存在,隧道只起到物理通道的作用。隧道技术在IPv4向IPv6演进的初期应用非常广泛。但是,隧道技术不能实现IPv4主机和IPv6主机之间的通信;
网络地址转换技术
网络地址转换(Network Address Translator,NAT)技术是将IPv4地址和IPv6地址分别看作内部地址和全局地址,或者相反。例如,内部的IPv4主机要和外部的IPv6主机通信时,在NAT服务器中将IPv4地址(相当于内部地址)变换成IPv6地址(相当于全局地址),服务器维护一个IPv4与IPv6地址的映射表。反之,当内部的IPv6主机和外部的IPv4主机进行通信时,则IPv6主机映射成内部地址,IPv4主机映射成全局地址。NAT技术可以解决IPv4主机和IPv6主机之间的互通问题。
3.13.2 目前常见的IPv4/IPv6互通转换的技术标准有哪些?
现有网络到IPv6网络的过渡在技术上已十分成熟,而且这种过渡可以是循序渐进的。国际标准化组织和许多研发机构都开发出了多种IPv4与IPv6的互通转换机制。下面给出了目前常见的IPv4/IPv6互通转换技术标准:
· 6to4:RFC 3056
· NAT-PT(Network Address Translation-Protocol Translation):RFC 2766
· SIIT(Stateless IP/ICMP Translation):RFC 2765
· Tunnel broker:RFC 3053
· 6over4:RFC 2529
· BIS(Bump-In-the-Stack):RFC 2767
· BIA(Bump-in-the-API):RFC 3338
· SOCKS-gateway:RFC 3089
· TCP/UDP-relay:RFC 3142
· DSTM(Dual Stack Transition Mechanism):draft-ietf-ngtrans-dstm-08.txt
· ISATAP(Intra-Site Automatic Tunnel Addressing Protocol):draft-ietf-ngtrans-isatap-08.txt
3.13.3 什么是隧道?“IPv6 over IPv4”是什么意思?
隧道(Tunnel)是指将一种协议报头封装在另一种协议报头中,这样,一种协议就可以通过另一种协议的封装进行通信。IPv6隧道是将IPv6报头封装在IPv4报头中,这样IPv6协议包就可以穿越IPv4网络进行通信。
在IPv6全面实施之前,总有一些网络先提供对IPv6的支持,但是这些IPv6网络被运行IPv4协议的骨干网络隔离开来。“IPv6 over IPv4”的隧道就用来连接这些孤立的IPv6网络。隧道技术目前是国际IPv6试验床6Bone所采用的技术。利用隧道技术可以通过现有的运行IPv4协议的Internet骨干网络(即隧道)将局部的IPv6网络连接起来,因而是IPv4向IPv6过渡的初期最易于采用的技术。隧道技术的优点在于隧道的透明性,IPv6主机之间的通信可以忽略隧道的存在,隧道只起到物理通道的作用。它不需要大量的IPv6专用路由器设备和专用链路,可以明显地减少投资。其缺点是:在IPv4网络上配置IPv6隧道是一个比较麻烦的过程,而且隧道技术不能实现IPv4主机和IPv6主机之间的通信。