网络通信 频道

IPv6的分段

    IPv6的分段只能由源节点和目的节点进行,这样就简化了包头并减少了用于选路的开销。逐跳分段被认为是一种有害的方法。首先,它在端到端的分段中将产生更多的分段。此外在传输中,一个分段的丢失将导致所有分段重传。IPv6的确可以通过其扩展头来支持分段,但是如下所述,了解IPv4分段如何工作将有助于了解IPv6中为什么要进行改变。

    在IP v4中,当一个没有分段的包由于太长而无法沿着发送源到目的地的网络链路进行传输时,就需要进行包的分段。举例来说,一个源节点可以创建一个长度为1 5 0 0字节的包,并把它向Internet上的某个远端目的地发送。这个包通过源节点的本地以太网到达该节点的默认路由器。然后路由器通过其链路把数据发到Internet上,这条链路可能是到一个ISP的点到点连接。在Internet中的某处或离目的节点较近的某处,可能有条网络链路无法处理这样一大块的数据。在这种情况下,使用该网络链路的路由器将不得不把1500字节的数据报分割成许多不超过下一个网络的最大传输单元( MTU )的分段。因此,如果假设下一个链路可以处理的包长度不能超过1280 字节的话,路由器将把最初的一个包分割为两个。第一个包的长度为1260字节,留下的20字节用于IPv4头。第二段的长度就是剩余数据的长度,240字节,另外再用2 0字节作为另一个IPv4头。

    IPv4中的分段由包沿途的中间路由器根据需要进行。进行分段的路由器根据需要修改包头并在其中包含进最初的包的数据报标识,同时还将正确地设置分段标志和分段偏移值。当目的节点收到由此产生的分段包之后,该系统必须根据每个分段包的IPv4头后的分段数据重组最初的包。

    在使用了分段之后,不论中间的网络是什么类型,不同类型网络上的节点都可以互操作,源节点无需了解任何有关目的节点网络的信息,同时也无需了解它们之间的网络信息。这一直被认为是一个不错的特性,由于不需要节点或路由器存储信息或记录整个Internet的结构,从而Internet可以获得很好的扩展性。但另一方面,它也为路由器带来了性能方面的问题,对I P包进行分段消耗了沿途路由器和目的地的处理能力和时间。了解I P数据报标识、计算分段偏移值、真正把数据分段以及在目的地进行重装都会带来额外的开销。

    问题在于对于任何一个指定的路由器,虽然源节点能够了解链路的MTU是多大,但却没有办法事先知道整个路径的MTU。路径MTU是源节点和目的节点之间在不分段时可以沿着该路由穿越任何网络的最大包长。

    然而,目前有两种方法可以减少或消除对于分段的需求。第一种方法可用在IPv4中,它使用一种叫做“路径MTU发现”的方法。通过这种方法,路由器可以向目的地发送一个包来报告该路由器上链路的MTU值。如果包到达了一条必须对其进行分段的链路,负责分段的路由器将使用ICMP回送一个报文来指出分段路由器上链路的MTU值。这种过程可以重复进行直到路由器确定路径MTU为止。

    另一种减少分段需求的方法是要求所有支持I P的链路必须能够处理一些合理的最小长度的包。换句话说,如果一个链路的MTU超过20字节,那么所有的节点都必须准备产生可观数量的分段包。另一方面,如果能够提出所有网络链路都可以适应的某个合理的长度,并把它设置为允许包长度的绝对最小值,那么就可以消灭分段。

     IPv6中实际上同时使用了上面两种方法。在最初的RFC中,IPv6规定每个链路支持的MTU最小为5 7 6字节。那么这些包的净荷长度将是536字节,另外40字节用于IPv6头。由于RFC 1883发表于1 9 9 5年,后来产生了很多关于更大的MTU的争论。在Huitema提出的报告(参见《IPv6:新的IP》第2版,Prentice -Hall)中,建议值为1997,Steve Deering 则正在促使将MTU值改为1500字节。在最新的于1997年11月发表的Internet草案中,MTU值被设为1280字节。很明显,关注的焦点在于:倡导较短MTU的人希望那些不能支持较长MTU的网络不会被完全丢弃,而倡导较长MTU的人不希望为照顾小部分接近于废弃的网络而使得整个Internet的性能下降。

    为了对较短的MTU进行一些弥补,IPv6标准中强烈推荐所有IPv6节点都支持路径MTU发现。路径MTU发现最早出现在RFC1191 中,其中使用了分段标志中的“不能分段”来要求中间路由器在发现包太长时返回一个ICMP出错报文。

    路径MTU发现的IPv6版本在RFC 1981(IPv6的路径MTU发现)中描述。这是对原有的RFC1191 的升级,但其中加入了一些改变使之可以工作在IPv6中。其中最重要的是,由于IPv6头中不支持分段,因此也就没有“不能分段”位。正在执行路径MTU发现的节点只是简单地在自己的网络链路上向目的地发送允许的最长包。如果一条中间链路无法处理该长度的包,尝试转发路径MTU发现包的路由器将向源节点回送一个ICMPv6出错报文。然后源节点将发送另一个较小的包。这个过程将一直重复,直到不再收到ICMPv6出错报文为止,然后源节点就可以使用最新的MTU作为路径MTU。

    这里需要注意,有一些实例并没有实现路径MTU发现。例如,使用最小IPv6实现来进行远程网络启动的终端只是简单地使用576字节的路径MTU。从源节点到目的节点的IPv6分段,作为一个扩展头来实现。

转载地址:http://www.net130.com/CMS/Pub/network/network_protocal/21254.htm

0
相关文章