IPv6变化体现在以下五个重要方面:
1,扩展地址。
2,简化头格式。
3,增强对于宽展和选项的支持。
4,流标记。
5,身份验证和保密。
对于包头的简化,减少了路由器上所需的处理过程,从而提高了选路效率;同时,改进对头扩展和选项支持意味着可以在几乎不影响普通数据包和特殊包选路的前提下适应更多的特殊需求;流标记办法为更加高效流提供了一种机制,这种办法丢与实时应用尤其有用,身份验证和保密方面的改进使得IPV6更加实用那些要求对敏感信息和资源特别对待的商业应用。
1,扩展地址
IPv6的地址结构中除了把32位地址空间扩展到128位外,还对IP主机可能获得的不同类型地址做了一些调整。IPv6中取消了广播地址而代之以任意点播地址。
2,简化的包头
IPv6中包括总长为40字节的8个字段(其中两个源地址和目的地址),它与IPv4包括的不同在于,IPv4包含至少12个不同字段,且长度在没有选项时为20字节,但是包含选项时,可达60字节,Ipv6使用了固定格式的包头,并减少了需要检查和处理字段的数量,这将使得选路效率更高。
包头的简化使得IP的某些工作方式发生了变化。一方面,所有包头长度统一,因此不再需要包头长度字段,此外,通过修改包分段的规则可以在包头中去掉一些字段。IPv6中的分段只能从源节点进行,该包经过的中间路由器不能再经行任何分段。最后,去掉IP头校验和不会影响可靠性,这主要是因为头校验和将由更高层协议(UDP和TCP)负责。
3,对扩展和选项支持的改进
在IPv4中可以在IP头的尾部加入选项,与此不同,IPv6中把选项加在单独的扩展头中,通过这种办法,选项头只有在必要的时候才需要检查 和处理。
为了便于说明,考虑以下两种不同类型的扩展部分:分段头和选路头。IPv6的分段只发生在源节点上,因此需要考虑分段扩展头的节点只有源节点和目的节点。源节点负责分段并创建扩展头,该扩展头将放在IPv6头和下一个高层协议之间。目的节点接收改包并使用扩展头进行重装。所有中间节点可以安全的忽略该分段扩展头,这样就提高了包选路的效率。
另一种选择方案中。逐跳(hop-by-hop)选项扩展头要求包的路径上的每一个节点都处理该头字段。这种情况下,每个路由器必须在处理IPv6包头的同时也处理逐跳选项。第一个逐跳选项被定义用于超长IP包(巨型净荷)。包含巨型净荷的包需要受到特别对待。因为并不是所有链路都有能力处理那样长的传输单元,且路由器希望尽量避免把他们发送到不能处理的网络上,因此,这就需要在包经过的每个节点上都对选项进行检查。
4,流
IPv4中,对所有包大致同等对待,这意味着每个包都是由中间路由器按照自己的方式来处理的。路由器并不跟着任意两台主机间的发送包,因此不能“记住”如何对将来的包进行处理。
流指的是从一个特定源发向一个特定(单播或者组播)目的地的包序列,源点希望中间路由器对这些包进行特殊处理。
路由器需要对流进程跟踪并保持一定的信息,这些信息在流中的每个包都是不变的。这种方法使得路由器可以对流中包进行高效处理。对流中的包的处理方式可以与其他包不同,但是无论如何,对于他们的处理更快,因为路由器无需对每个包头重新处理。
5,身份验证和保密
RFC1825(IP的安全性体系结构)描述了IP的安全协议体系结构,包括IPv4和IPv6.
IPv6使用了两种安全性扩展:IP身份验证头(AH)首先由RFC1826(IP身份验证头)描述,而IP封装安全性净荷(ESP)首先在RFC1827(IP封装安全性净荷(ESP))中描述。
报文摘要功能通过对包的安全可靠性的检查和计算来提供身份验证功能。发送方计算报文摘要兵把结构插入到身份验证头中,接收方根据收到的报文摘要重新计算,并把计算结构与A货头中的数值进行比较。如果两个数值相等,接收方可以确认数据再传输过程中遭到了破坏,或者被某些人进行了故意的修改。
封装安全性提供机制,可以用来加密IP包的净荷,或者再加密整个IP包后以隧道方式在Internet上传输。其中的区别在于,如果只对包的净荷经行加密的话,包中的其他部分(包头)见公开传输。这意味着破译者可以由此来确定发送主机和接收主机一起其他与该包相关的信息。使用ESP对IP进行隧道传输意味着对整个IP包进行加密,并由作为安全性网关操作的系统将其封装在另一IP包中。通过这种方法,被加密的IP包中,所有细节均被隐藏起来。这种技术是创建虚拟专用网(VPN)的基础,它允许各机构使用Internet作为其骨干网络来共享敏感信息。
包头格式:包头以64位为单位,且包的总长度是40字节。IPv6协议为包定义了以下字段:
*版本。长度为4位,对于IPv6,该字段必须为6.
*类别。长度为8位,指明为该包提供了某种“区分服务”,目前默认值全是0.
*流标签。长度20位。用于表示同一业务流的包,一个节点可以同时作为多个业务流的发送源。流标签和源节点地址唯一标识了一个业务流。
*净荷长度。长度16位。其中包含净荷的字节长度。其中包括包净荷的字节长度,即IPv6头后的包中包含的字节数。这意味着在计算净荷长度时包含了IPv6扩展头的长度。
*下一个头。这个字段之处了IPv6头后所跟的字段中的协议类型。与IPv6协议字段类似。
下一个头字段可以用来指出高层是TCP还是UDP,但它可以用来指明IPv6扩展头的存在。
*跳极限。长度8位,每当一个节点对包转发之后,这个字段就会被减1,当该字段减少为0,这个包就将被丢弃。IPv4中具有类似功能的生成字段,但与Ipv4不同,人们不愿意在IPv6中由协议定义一个关于包生成时间的上限。这意味着对过期包进行超时判断的功能可以由高层协议完成。
*源地址。长度128.
*目的地址。长度128.指出了IPv6包的接收方地址,这个地址可以是一个单播、组播或者任意播地址。如果使用了选路扩展头(其中定义了一个包必须经过的特殊路由),其目的地址可以是其中某一个中间节点的地址而不必是最终地址。
流标签:IPv4通常被描述成为无连接协议,就像任何一个包交换网络一样,IPv4设计为让每个包找到自己的路径以达到其目的地。每个包都分别处理。而结构是两个从相同数据元发送相同目的地址的包可以采用完全不同的路由来穿越整个网络。这对于适应网络突发事件来说是好办法,因为突发事件以为着任何一条路由都可能出现故障,但只要两个主机间存在某些路由则可以进行数据的交互。
但是,这种方法的效率可能不是很搞,尤其是当包并不是孤立的,且实际上是两个通信系统间的业务流的一部分时。进一步考虑一个包从一台主机发送另一台主机时,它所经过的路径上将发生的事情:每个中间路由器对每个包的处理将导致在链路上轻微的增加延时。对于类似文件传输或者中断仿真之类的大部分传统Internet应用,延时增加一点点延时只会带来一点不方便而已,但对于一些提供互操作的音频和视频应用而言,即使只是曾加了一点点延时也会显著降低服务质量。
对于IPv4包均进行单独处理带来的另一个问题在于难以把特定的业务流指定到较低代价的链路上。例如,电子邮件的传输优先级不高,并且不是实时应用,但是Ipv4网络管理员却没有简单的办法来识别这些包,把他们传输到较低开销的Internet链路,并为实时应用保留较高开销的链路。
IPv6中定义了流的概念有助于解决类似问题。Ipv6头字段中的流标签把单个包作为一系列源地址和目的地址相同的包流的一部分。同一流中的所有包具有相同的流标签。
业务流类别:现在还没有定义。
分段:IPv6的分段只能由源节点和目的节点进行。这样就简化了包头并减少了用于选路的开销。逐跳分段被认为是一种有害的方法,首先,它在端到端的分段中将产生更多的分段。此外在传输中,一个分段的丢失将会导致所有分段重传。IPv6的确可以通过扩张头来支持分段,但是如下所述,了解IPv4分段如何工作将有助于了解为什么要改变。
在IPv4中,当一个没有分段的包由于太长而无法沿着发送源到目的地的网络链路传输时,就需要分段。(这里刚混淆了一个概念,分段就是指分片,在源的时候,会进行最初分片,然后途径路由根据链路状态,在继续分片,如果继续分的片丢失了个,那么原来的大片就需要重传)。
IPv4的分段由包沿途的中间路由器根据需要进行。进行分段的路由需要修改包头并在包含进最初的包的数据抱标识,同时还将正确的设置分段标志和分段偏移值,当目的节点收到由此产生的分段包之后,该系统必须根据每个分段包的Ipv4后的分段数据重组最初的包。
在使用了分段之后,无论中间的网络是什么类型,不同类型的网络节点都可以互操作,源节点无需了解任何有关目的节点网络的信息,同时无需了解他们直接的网络信息,这一直被认为是不错的特性,由于不需要节点和路由器存储信息或者记录整个Internet结构,从而Internet可以获得更好的扩展性。但是另一方面,它也为路由器带来了性能方面问题。对IP包进行分段消耗了沿途路由器和目的地的处理能力和时间,了解IP数据包标识、计算分段偏移值、真正的把数据分段以及在目的地进行重装都会带来额外的开销。
问题在于对于任何一个指定的路由器,虽然源节点能够了解链路的的MTU有多大,但却没有办法事先知道整个路径的MTU,路径MTU是源节点和目的节点之间在不分段时可以沿着该路由穿越任何网络的最大包长。
然而,目前有两种方法可以减少或者消除对于分段的需求。第一种方法可用在Ipv4中,它使用一种叫做“路径MTU发现”的方法,通过这种方法,路由器可以向目的地发送一个包来报告该路由器链路上的MTU值。如果包到达了一条必须对其进行分段的链路,负责分段的路由器将使用ICMP会送一个报文来指出分段路由器上链路的MTU值。这个过程可以重复进行直到路由器确定路径MTU为止。
另一种减少分段需求的方法是要求所有Ip的链路必须能够处理一些合理的最小长度的包。如果能够提出所有网络链路都可以适应的某个合理的长度,并把它设置为运行包长度的绝对最小值,那么就可以消灭分段。
IPv6中实际上同时使用了上面两种方法。在最初的RFC中,IPv6规定每个链路支持的MTU最小为576字节,那么这些包的净荷长度是536字节,另外40字节用于Ipv6包头。由于RFC1883发表于1995年,后来产生了很多关于更大的MTU的争论。在最新的域1997年11月发表的Internet草案中,MTU值被设为1280字节,很明显,关注的焦点在于:倡导较短MTU的人希望那些不能支持较长MTU的网络不会被完全丢弃。而倡导较长MTu的人,不希望为照顾小部分接近废弃的网络而是整个Internet的性能下降。
为了对较短的MTu进行一些弥补,Ipv6强烈推荐所有的IPv6节点都支持路径MTU发现。正在执行路径MTU发现的节点只是简单的在自己的网络链路上项目地发送允许的最长包。如果一条中间链路无法处理该长度的包,尝试转发路径MTU发现包的路由器将向源节点回送一个ICMPv6出错报文,然后源节点将会发送另一个较小的包。这个过程将一直重复,直到不再受到ICMPv6出错报文位置,然后源节点就可以使用最新的MTU作为路径的MTU。
这里需要注意,有些失礼并没有实现路径MTU发现。例如,使用最小IPv6实现进行远程网络启动的终端,只是简单的使用576字节的路径MTU,从源节点到目的节点的IPv6分段,作为一个扩展头。
扩展头:IPv4选项的问题在于改变了IP头的大小,因此更像一个“特列”,即需要特别的处理。路由器必须优化其性能,这意味着将为最普遍的包进行最佳性能的优化。这使得IPv4选项引发一个路由器把包含该选项的包搁置一边,等到有时间的时候再进行处理。
Ipv6中实现的扩展头可以消灭或至少大量减少选项带来的对性能的冲击。通过把选项从IP头中搬到净荷中,路由器可以像转发无选项包一样来转发包含选项的包。除了规定必须由每个路由器进行处理的逐跳选项之外,IPv6包中的选项对于中间路由而言是不可见的。
可用选项:
除了减少IPv6包转发时选项的影响外,IPv6规范对于新的扩展和选项的定义变得更加简单。在需要的时候,可能还会定义其他的选项和扩展。
IPv6定义了如下选项扩展:
* 逐跳选项头:此扩展头必须紧随在IPv6头之后。它包含所经路径上的每个节点都必须检查的选项数据。由于它需要每个中间路由器经行处理,逐跳选项只有在绝对必要的时候才会出现。到目前为止,已经定义了两个选项:巨型净荷选项和路由器提示选项。巨型净荷选项指明包的净荷长度超过IPV6的16位净荷长度字段。只要包的净荷经过65535字节(其中包括逐跳选项头),就必须包含该选项。如果节点不能转发该包,则必须会送一个ICPMv6出错报文。路由器提示选项用来通知路由器,IPv6数据报中的信息希望能够得到中间路由器的查看和处理,即使这个包是发给其他某个节点的(例如,包含带宽预留协议信息的控制数据报)。
*选项头:此扩展头指明包在到达目的地途中将经过哪些节点。它包含沿途经过的各节点的地址列表。IPv6头的最初目的地址是路由头的一系列地址中的第一个地址,而不是包的的最终目的地址。此地址对应的节点接收到该包之后,对IPv6头和选路头经行处理,并把包发送到选项头列表中的第二个地址,如此继续,知道包到达其最终的目的地。
*分段头:此扩展头包含一个分段偏移值,一个“更多段”标志和一个标识字段,用于源节点对长度超过源端和目的端路径MTU的包经行分段。
*目的地选项包:此扩展头代替了IPv4选项字段。目前,唯一定义的目的地选项是在需要时把选型填充为64位的整数倍。此扩展头可以用来携带由目的地节点检查的信息。
*身份验证头(AH)。此扩展头提供了一种机制,对IPv6,扩展头和净荷的某些部分经行加密的校验和的计算。
*封装安全性净荷(ESP)头:这是最后一个扩展头,不经行加密。它指明剩余的净荷已经加密,并为已获得授权的目的节点提供足够的解密信息。
ICMPv6:
*目的地不可达报文
*包太长
*超时
*参数问题
*回声请求
*回声应答
1,目的地不可达
这个报文由路由器或源主机在由于除业务流拥塞之外的原因而无法转发一个包的实惠产生。这种错误报文有5个代码,包括:
0:没有到达目的的路由。这个报文在路由器没有定义IP包的目的地路由时产生,路由器将采用默认路由来发送无法利用路由器的路由表经行转发的包。
1:与目的地的通信被管理员禁止。当被禁止的某类业务流欲到达防火墙内部的一个主机时,包过滤防火墙将产生该报文。
2:不是邻居。当使用IPv6选项扩展头并严格限定路由时,将使用这个代码。当列表中的下一个目的地与当前正在执行转发的节点不能共享一个网络链路时,将会产生该报文。
3,地址不可达。这个代码指出在把高层地址解析到链路层(网络)地址时遇到了一些问题,或者再目的地网络的链路层上去往其目的地时遇到了问题。
4,端口不可达。这种情况发生在高层协议没有侦听包目的端口的业务量,且传输层协议又没有其他办法把这个问题同志源节点时。
2,包太长
当接收某包的路由器由于包长度大于将要转发到的链路的MTU时,而无法对对其进行转发时,将会产生包太长报文。该ICMPv6错误报文中有一个字段之处导致该问题的链路的MTU值。在路径MTU发现过程中这是一个有用的错误报文。
3,超时
当路由器收到跳极限为1的包时,它必须转发该包之前减小这个数值。如果在路由器减小该数值后,跳极限字段的值变为0(或者是路由器收到一个跳限制为0的包),那么路由器必须丢弃这个包,并且向源节点发送ICMPv6超时报文。源节点在收到该报文后,可以认为最初跳限制设置得太小(包的真是路由比源节点想象的要 长),也可以任务有一个选路循环导致包无法交付。
在“跟踪路由”功能中这个报文非常有用。这个功能使得一个节点可以标识一个包在从源节点到目的节点的路径上的所有路由,它的工作方式:首先,一个去往目的地的包的跳极限设置为1,它所到达的路由器将跳极限减1,并会送一个超市报文,这样一来,源节点就标识了路径上的第一个路由器,然后如果该包必须经过第二个路由器的话,原机电路由器再发送一个跳极限为2的包,该路由将跳极限减少到0,并产生另一个超时报文。这将持续到包最终到达其目的地为止。同时源节点也获得了从每个中间路由器发来的超市报文。
4,参数问题
当IPv6头或者扩展头中的某些部分有问题时,路由器由于无法处理该包而会将其丢弃。路由器的实现中应该可以产生一个ICMP产说错误报告来指出问题的类型(如错误的头字段,无法识别的下一个头类型或无法识别的IPv6选项),并通过一个指针值指出在第几个字节遇到这种情况。
5,ICMPv6回声功能
ICMPv6中包含了一个与错误情况无关的功能。所有IPv6节点都需要支持两种报文:回声请求和回声应答。回声请求报文可以向任何一个正确的IPv6地址发送,并在其中一个包含一个回声请求表示符,一个顺序号,和一些数据。尽管二者都是可选项,但是回声请求标识符合顺序好可以用来区分对应不同的请求和相应。回声请求的数据也是一个选项,并可以用于诊断。
当一个IPv6节点收到一个回声请求报文后,它必须会送一个回声应答报文,在应答中包含相同的请求标识符,顺序号和在最初的请求报文中携带的数据。
ICMP 回声请求和应答报文是对ping功能的基础。ping是一个重要的诊断功能,因为它提供了一种方法来决定一个特定主机是否与其他一些主机连接在相同的网络上。