第二章
IPv6协议的结构
本章将阐述IPv6报头的结构并将其与IPv4报头相比较。此外还将讨论Extension (扩展)报头,这是IPv6所新加的内容。
在RFC 2460中定义了IPv6数据包的报头结构。该报头固定为40字节长。源和目的地址各占16字节(128位),因此,只有8字节是用于普通报头信息的。
普通报头结构
在IPv6中,IPv4报头中的下面五个字段被去除了:
●Header Length(报头长度)
●Identification(标识)
●Flags(标志)
●Fragment Offset(段偏移量)
●Header Checksum(报头校验和)
除去Header Length(报头长度)字段是因为对于固定长度的报头,它是不起作用的。在IPv4中,报头最短长度为20字节,但是如果添加一些选项,则会以4 20
IPv6协议的结构21
字节长度递增,最长可达60字节。因此,对于IPv4来说,报头的总长度信息是很重要的。在IPv6中,选项由扩展报头定义(将在本章后面部分作介绍)。
Identification(标识)字段、Flags(标志)字段和Fragment Offset(段偏移量)字段处理IPv4报头中的数据包分段。如果要在只支持小数据包的网络中发送大数据包,就需要进行分段。在这种情况下,IPv4路由器把数据包分割成更小的片段,并转发多个数据包。目的主机收集数据包并进行重新组合。即便只有一个数据包丢失或出错,都需要重新进行传输,因此效率很低。在IPv6中,主机通过一个叫做路径MTU发现(Path MTU Discovery)的过程来了解路径最大传输单元(Maximum Transmission Unit,MTU)的大小。如果IPv6的发送主机想要对数据包进行分段,就需要使用扩展报头来实现。数据包传输路径上的IPv6路由器不像在IPv4中那样进行数据分段。因此,在IPv6中去除了Identification、Flags和Fragment Offset字段并将会按需插入一个扩展报头。扩展报头将在本章后面进行介绍。
注意:路径MTU发现将在第四章中论述。
去除Header Checksum(报头校验和)字段是为了提高处理速度。如果路由器无需检验并更新校验和,则处理会变得更快。校验和的计算也是在介质访问层完成的,这样未检测到的错误和错误路由的数据包所引起的风险最小。传输层(UDP 和TCP)中有一个校验和字段。IP是一种“尽力而为”的传输协议,保证数据完整性的责任属于其上层协议。
Type of Service(服务类型)字段由Traffic Class(流量类别)字段代替。IPv6处理参数的机制与IPv4不同。请参考第六章来了解更多的信息。Protocol Type (协议类型)和Time-to-Live(TTL,生存期)字段被重新命名,且稍稍做了些修改。IPv6报头中还添加了一个Flow Label(流标签)字段。
IPv6报头中的字段
对IPv6报头中各个字段越熟悉,你对IPv6的工作方式越理解。
第二章22
注意:要想了解IPv4报头中所有字段的详细描述,请参考Novell's Guide to Troubleshooting TCP/IP(John Wiley & Sons)一书,由Silvia Hagen和Stephanie Lewis编著。
图2-1是IPv6报头的概述。将在下面的段落中详细讨论各个字段。
图2-1:IPv6报头中的字段
图2-1说明,即使IPv6报头的总长度是默认的IPv4报头的两倍长,达到了40字节,但它实际上是被简化了的,因为报头的绝大部分被两个16字节的IPv6地址占据。这样,只剩8个字节可供其他报头信息使用。
Version(版本,4位)
这是一个4位长的字段,其中包含了协议的版本。在IPv6中,该数目为6。不能使用版本号5,因为5早已被分配给一个实验性的流协议(ST2,RFC 1819)。
Traffic Class(流量类别,1字节)
该字段代替了IPv4中的Type of Service字段,它有助于处理实时数据以及任何需要特别处理的数据。发送节点和转发路由器可以使用该字段来识别和分辨IPv6数据包的类别和优先级。
IPv6协议的结构23
RFC 2474“Definition of the Differentiated Services Field (DS Field) in the IPv4 and IPv6 Headers”(IPv4和IPv6报头中差分服务(DS)字段的定义)文档中解释了如何使用IPv6中的Traffic Class字段。RFC 2474使用术语DS来指代IPv4报头的Type of Service字段和IPv6报头中的Traffic Class字段。
Flow Label(流标签,20位)
该字段区分需要相同处理的数据包,以此来促进实时性流量的处理。发送主机能够用一组选项标记数据包的顺序。路由器跟踪数据流并更有效地处理属于相同数据流的数据包,因为他们无须重新处理每个数据包的报头。数据流由流标签和源节点的地址惟一标识。不支持Flow Label字段功能的节点需要在转发数据包时不加改变地传递该字段,并在接收数据包时忽略该字段。属于同一数据流的所有数据包必须具有相同的源IP地址和目的IP地址。
注意:Flow Label字段的使用是实验性的,在本书写作时,IETF仍然在对此进行讨论。请参考第六章了解更多信息。
Payload Length(有效载荷长度,2字节)
该字段指定了有效载荷,也就是在IP报头后携带的数据长度。IPv6中的计算与IPv4不同。IPv4中的Length字段包括IPv4报头的长度,而IPv6中的Payload Length(有效载荷长度)字段仅包含IPv6报头后的数据。扩展报头被认为是有效载荷的一部分,因此被包括在计算之内。
由于Payload Length(有效载荷长度)字段只有2个字节,因此数据包的有效载荷最大为64KB。IPv6有一个Jumbogram Extension报头,如果有需要,它可以支持更大的数据包。只有当I P v6节点连接到M T U大于64K B的链路时,Jumbogram才起作用。RFC 2675中详细说明了Jumbogram。