IPv6学习(2) IPv6报文格式

IPv6报文格式

image

  • Version(4-bit):IP版本,该字段值为6
  • Traffic Class(8-bit):流量分类,与IPv4包头的TOS类似
  • Flow Label(20-bit):流标签,用来标记IPv6数据包的一个流
  • Payload Length(16-bit):有效载荷的长度,扩展报头也算在Payload长度里
  • Next Header(8-bit):处理选项字段,分段,安全,移动性,松散源路由,记录路由等的新方式
  • Hop Limit:(8-bit):定义IP数据包所能经过的最大跳数,每跳一次将此值减1。
  • Source Address(128-bit):IP数据包的源地址
  • Destination Address(128-bit):IP数据包的目的地址
  • Possible Extension Header(s): 扩展报头

扩展报头(RFC2460)

Value Type of Header
0 Hop-by-Hop Options Header
6 TCP (Upper Layer)
17 UDP (Upper Layer)
41 Encapsulated IPv6 Header
43 Routing Header
44 Fragment Header
50 Encapsulating Security Payload
51 Authentication Header
58 ICMPv6 (Upper Layer)
59 No next header
60 Destination Options
RFC2460推荐的Extension Header出现顺序:
  1. IPv6 main header
  2. Hop-by-Hop Options header (if present, it MUST be the first one following the main/regular header)
  3. Destination Options header(with Routing Options)
  4. Routing header
  5. Fragment header
  6. Authentication header
  7. Encapsulating Security Payload header
  8. Destination Options header
  9. Upper-layer header

    注:除了Hop-by-Hop Options header,其它的扩展头在传输过程中, 中间节点不对其做处理,处理扩展头的节点按扩展头顺序处理,而不能挑选某个header

Extension Header的组合方式:
   +---------------+------------------------
   |  IPv6 header  | TCP header + data
   |               |
   | Next Header = |
   |    6(TCP)     |
   +---------------+------------------------

   +---------------+----------------+------------------------
   |  IPv6 header  | Routing header | TCP header + data
   |               |                |
   | Next Header = |  Next Header = |
   |  43(Routing)  |    6(TCP)      |
   +---------------+----------------+------------------------

   +---------------+----------------+-----------------+-----------------
   |  IPv6 header  | Routing header | Fragment header | fragment of TCP
   |               |                |                 |  header + data
   | Next Header = |  Next Header = |  Next Header =  |
   |  43(Routing)  |   5(Fragment)  |    6(TCP)       |
   +---------------+----------------+-----------------+-----------------

Hop-by-Hop 扩展头(type=0):

   介绍:该字段由传送路径上的每个节点和路由器读取并处理,目前只定义了一个选项:要求支持超过64k的数据报文Jumbogram(RFC2675 )。

   用途:主要用于巨型数据包(RFC2675)和路由器警报(RFC 2711),e.g :RSVP,MLD report etc)

   补齐使用Pad1或者PadN

    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |  Next Header  |  Hdr Ext Len  |                               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               +
    |                                                               |
    .                                                               .
    .                            Options                            .
    .                                                               .
    |                                                               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Routing Header(type=43)

    介绍:在数据包发往目的地的途中,该包头能够被IPv6源节点用来强制数据包经过特定的路由器。当路由类型字段设为0时,在路由包头可以指定中间路由器列表,类似IPv4的松散源路由选项。

   用途:主要用于移动IP

    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |  Next Header  |  Hdr Ext Len  |  Routing Type | Segments Left |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                                                               |
    .                                                               .
    .                       type-specific data                      .
    .                                                               .
    |                                                               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Hdr ext Len(8-bit):扩展头长度,不统计前1个字节
  • Routing type(8-bit):标识路由头类型
  • Segment Left(8-bit):剩余的seg数目
  • Type-specific data(变长):由Routing type决定,Routing type=0时该段保留前4bytes,后跟沿途路由器的address-list

  补齐使用Pad1或者PadN

如何使用?举个例子,源S发数据包到目的节点D,指定要经 I1,I2,I3 则:

   As the packet travels from S to I1:

        Source Address = S                  Hdr Ext Len = 6
        Destination Address = I1            Segments Left = 3
                                            Address[1] = I2
                                            Address[2] = I3
                                            Address[3] = D

   As the packet travels from I1 to I2:

        Source Address = S                  Hdr Ext Len = 6
        Destination Address = I2            Segments Left = 2
                                            Address[1] = I1
                                            Address[2] = I3
                                            Address[3] = D

   As the packet travels from I2 to I3:

        Source Address = S                  Hdr Ext Len = 6
        Destination Address = I3            Segments Left = 1
                                            Address[1] = I1
                                            Address[2] = I2
                                            Address[3] = D

   As the packet travels from I3 to D:

        Source Address = S                  Hdr Ext Len = 6
        Destination Address = D             Segments Left = 0
                                            Address[1] = I1
                                            Address[2] = I2
                                            Address[3] = I3

Fragment Header(type=44)

    介绍:只能源节点用来将大于传输路径的PMTU的数据包进行分段,与IPv4不同,IPv6在源节点进行分段,而不能在中间的节点进行分段(使用PMTU机制进行检测路径最小的MTU)

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Next Header  |   Reserved    |      Fragment Offset    |Res|M|
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                         Identification                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Reserved(8-bit): 初值为0
  • Fragment Offset(13-bit):分片报文的偏移
  • Res(2-bits):0
  • M:1表示more frag(还有Fragment),0表示last frag(我就是最后一个了)
  • Identification:分片产生的ID,对于发往同一目的的不同分片报文,该ID不同

数据包分片:如图

image

重组:如图

image

 

Destination Options Header(type=60)

   介绍:承载数据包目的节点所需要的可选信息,给宿主机解释和使用的,目前这个选项为空

   用途:IETF暂时建议使用该扩展头在移动节点和家乡代理之间交换注册信息

    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |  Next Header  |  Hdr Ext Len  |                               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               +
    |                                                               |
    .                                                               .
    .                            Options                            .
    .                                                               .
    |                                                               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Hdr ext Len(8-bit):Header的长度,不统计前1个字节
  • Options(变长):包含一个或多个TLV(Tag,Length,Value)三元组
  • Pad1,PadN:用于填充报文Options剩余部分

No Next Header(type=59)

      介绍:用于表示后面没有扩展头跟该在该扩展头后面

Authentication header(type=51)

      介绍:由IPsec使用,以提供认证,数据完整性和重放保护,确保基本IPv6包头中一些字段的保护

Encapsulating Security Payload header(type=50)

     介绍:由IPsec使用,以提供认证数据完整性和重放保护和IPv6数据包的保密

IPv4报文头和IPv6报文头比较

image

 

Reference:

1.东南大学网络体系结构课课件

2.IPv6 学习总结

posted on 2011-11-29 13:20  Jersey  阅读(20635)  评论(0编辑  收藏  举报