ILD

IPv6 Protocols
作者:YUAN JIANPENG 邮箱:yuanjp89@163.com
发布时间:2019-7-28 站点:Inside Linux Development

IPv6 Header Format

IPv6的头有更少的域:

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Version| Traffic Class |           Flow Label                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |         Payload Length        |  Next Header  |   Hop Limit   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +                                                               +
   |                                                               |
   +                         Source Address                        +
   |                                                               |
   +                                                               +
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +                                                               +
   |                                                               |
   +                      Destination Address                      +
   |                                                               |
   +                                                               +
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

version,4位Internet协议版本号,值为6。

Traffic class,8位。

Flow Label,20位。

Payload Length,16位无符号整数。头之后剩余的包长度,单位为字节,扩展头也作为payload的一部分。

Next Header,8位,跟着IPv6头的头类型。使用IPv4 Protocol field相同的内容(RFC1700)

Hop Limit,8位,相当于TTL,每转发一次减1,为0后丢弃。

Source Address,128位源地址

Destination Address,128位目的地址


IPv6 Extension Headers

可选的internet layer信息编码在扩展头中。IPv6 packet可以包含0个或多个扩展头:

   +---------------+------------------------
   |  IPv6 header  | TCP header + data
   |               |
   | Next Header = |
   |      TCP      |
   +---------------+------------------------


   +---------------+----------------+------------------------
   |  IPv6 header  | Routing header | TCP header + data
   |               |                |
   | Next Header = |  Next Header = |
   |    Routing    |      TCP       |
   +---------------+----------------+------------------------


   +---------------+----------------+-----------------+-----------------
   |  IPv6 header  | Routing header | Fragment header | fragment of TCP
   |               |                |                 |  header + data
   | Next Header = |  Next Header = |  Next Header =  |
   |    Routing    |    Fragment    |       TCP       |
   +---------------+----------------+-----------------+-----------------


一个全整实现的IPv6包含下述头的支持:

          Hop-by-Hop Options
          Routing (Type 0)
          Fragment
          Destination Options
          Authentication

          Encapsulating Security Payload


扩展头顺序

当一个或多个扩展头出现在同一个包中时,推荐使用下面的扩展头顺序:

          IPv6 header
          Hop-by-Hop Options header
          Destination Options header (note 1)
          Routing header

          Fragment header

          Authentication header (note 2)
          Encapsulating Security Payload header (note 2)
          Destination Options header (note 3)

          upper-layer header



Options

两个扩展包含Options,option是一个TLV,

      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - -
      |  Option Type  |  Opt Data Len |  Option Data
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - -

Type,8位

Data len,8位

Data,数据


Option type的高两位有特殊的用途,表示当一个node无法识别这个Option时如何处理

00,跳过这个Option

01,丢掉这个packet

10,丢掉,回复ICMP信息

11,丢掉,如果目的地址不是多播地址,则回复ICMP信息


Hop-by-Hop options header

每个包传送路径上的每个node都必须检查一个扩展头

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


Router header

用来表示转发的时候经过哪些节点

    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |  Next Header  |  Hdr Ext Len  |  Routing Type | Segments Left |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                                                               |
    .                                                               .
    .                       type-specific data                      .
    .                                                               .
    |                                                               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

只有IPv6头中的目的地址节点可以访问这个头,当包达到目的地址后,它把目的地址和这个节点里面的地址最后一个地址交换,将segments left减1,然后继续递送到下一个目的地。


Fragment header

和IPv4不同,IPv6转发路径上的节点不需要处理分片头。Next header value是44。

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Next Header  |   Reserved    |      Fragment Offset    |Res|M|
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                         Identification                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Next Header,8位

Reserved,8位

Fragment Offset,片偏移,单位为8字节。

Res,2位保留

M,1表示还有更多的分片,0表示最后一个分片

Identification,32位。

对于每个要分片的包,源节点都为其产生一个标识符,同一个包的每个分片,其identification都相同。


Destination options header

表示表的目的节点需要的信息,类型为60


No next header
表示没有更多的头,类型为59


Packet size issues

IPv6要求最小的链路MTU是1280


Flow labels

这个头用来要求IPv6 routers做特殊的处理,如QoS等。


Upper Layer protocol issues


upper layer checksums

IPv6要求上层协议按照下述伪头计算checksum

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +                                                               +
   |                                                               |
   +                         Source Address                        +
   |                                                               |
   +                                                               +
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +                                                               +
   |                                                               |
   +                      Destination Address                      +
   |                                                               |
   +                                                               +
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                   Upper-Layer Packet Length                   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      zero                     |  Next Header  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

参考:

https://tools.ietf.org/html/rfc2460


Copyright © linuxdev.cc 2017-2024. Some Rights Reserved.