分类:
2011-09-27 10:46:06
图1 IPV6数据包头格式
IPv6数据包头格式如上图1所示所示,可知与ipv4 包头有一些相似之处,又有一些明显和细微的差别。
Traffic Class是一个8位bit的区域,同ipv4中的tos区域一样。 但是在这些年中随着TOS区域的进化,这个区域也可以用来被 Differentiated Class of Service (DiffServ)使用。 但是尽管这里这样的标识仍然符合老的Tos的格式,只不过Traffic Class这个名字更符合当前的应用。
Flow Label流量标签是在ipv6中独有的区域。 这个20个bit的区域设计的目的在于可以给一些特殊的数据做标记。也就是说尽管数据包并非是从原来的源发到目的,但是仍然包含原有的源和目的的应用。 区分数据流有很多好处,可以确保不同类别服务的处理方式得以区分,在数据流经多个路径的负载均衡时,在同一个数据流的数据包将使用经由同一个路径转发,从而避免了数据包可能继续查找路径的现象。 典型的flow(更加精确一点的说法是微流)就是在源地址和目的地址上加一个团体的源地址和目的地址。
如果使用定义源和目的端口号,路由器必须识别ip包头还要进一步识别tcp或者udp(或者其他传输层协议)的头,这样就增加了转发进程的复杂性,可能会影响路由器的处理。 因为出现扩展包头(下一段介绍),所以在ipv6数据包中查找传输层协议的头就成为一个特殊的问题。 支持ipv6的路由器必须从按照数据包格式的顺序从头到位查找,可能会经过很多扩展包头再会找到传输层地址(这样的话影响查找时间)。
负载长度Payload Length 定义了负载的长度,数据包封装的字节数。 在ipv4包头中的头长度,因为这是一个可选和填充字段,所以大小是可变的。 但是,查找ipv4中的负载长度字段,这个值必须从总长度中减少。(也就是ipv4中计算的是除去负载长度字段后的大小)。 在ipv6头长度中,从另一方面说,这个长度固定为40byte,这个长度足以从负载的开始查找到结尾。
注意ipv4的头长度字段是16bit,但是ipv6的负载长度字段是20bit。 这里隐含的意思在于因为ipv6具有一个很长的负载(有1,048,575 字节, 相对与 Ipv4是65,535)在这个区域定义,ipv6数据包本身理论上就会携带一个很大的负载。
Next Header下一个包头,定义的是ipv6数据包的包头之后是哪一个头。 这个区域非常类似与ipv4包头中的协议字段,实际上使用的目的就是标识在下一头是一个上层协议的头(就是标识上层协议)。 同ipv4这个区域类似,这个区域也是8个bit。 但是在ipv6中,在紧随在数据包头的不一定是上层协议的头(ipv4里面的数据包头后面跟的就是上层协议的头),有可能是扩展包头(再次出现这个名词,在下一段中描述)。 所以下一个头区域的命名具有很大范围的意义。
Hop limit跳数限制,在长度(8bit)和功能上都和ipv4的Time to Live (TTL)生存时间区域类似。 在你读第一章的时候,定义TTL的起初意图在与路由器转发排队的数据包的时候减少他们的时间(防止数据包长生不老),但是这个功能始终没有实现。 取而代之的是路由器将TTL值减一不考虑排队的数据包的长度(在现代网络中,很少见一个任何一个数据包会排队等待大于一秒。) 所以,TTL现在经常表示的是数据包从他的路径到达目的网络的最大路由器跳数。 如果TTL值减少到0,数据包被丢弃。 Hop limit也是同样的定义,但是命名却更加贴近本身的功能。
源和目的地址等同与ipv4的源地址和目的地址区域,但是注意这两个区域都是128bit长,为了符合ipv6的地址长度。
注意ipv6包头中取消了原来ipv4包头中的校验和区域。 现在的网络传输介质都增加了传输的可靠性(无线可能是一个特例),并且事实上上层协议常常使用自己的错误检测和修复机制,Ipv6包头中加入校验意义不打,所以就被将它剔除了。