IPv6 Internet Protocol version 6协议解析

简介

1883定义了ipv6的协议,不过作废了,在2460又重新做了定义,区别不大,只是有个别字段做了扩充。后面8200又做了新的定义,废弃了2460。

2373和2374对ipv6的格式做了规定。

ipv6是下一代ip地址协议,比ipv4的地址更长,可以表示更多地址段。不过由于ipv6地址太长,不方便记忆,并且ipv4的基础设施太过根深蒂固,所以目前还没有完全普及。虽然很多企业或者高校都使用或者支持了ipv6,但是目前还是以ipv4为主。

ipv6还会带来性能问题,因为地址从32位变成128位,增加了匹配解析的时间。

但是ipv6精简了head,一些不是必须的标识都放置到扩展字段,比如ip分片,因为并不是每一个数据包都需要ip分片,所以ipv4 head中必须包含分片字段就浪费了很多空间。

由于ipv6地址变长,可表达的ip地址增多,理论上可以为地球上所有介入的设备分配一个ip地址,也就是大家都可以直接互联,而不需要ipv4这种有一个跳板机,只能通过跳板机连接其他机器。ipv4之所以有跳板机和中间路由,就是因为不能为每个设备分配唯一ip地址,因为地址有重复,只能通过路由器等设备,一层层分发。从这方面来说,ipv6减少了中间步骤,有更好的传输率。

这里按照最新的8200做介绍。

协议头

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

version 版本 4bit

内容是6,标识ipv6

Traffic Class 数据流类型 8bit

1883与2460的区别也就是这个标识。标识当前数据流是视频,还是音频等分类。

Flow Label 流标识符 20bit

Payload Length 数据长度 16bit 无符号

表示有多少字节。这里需要注意,payload长度不包括ipv6的固定头,但是包括扩展的头长度。按照rfc2460所述,是从固定头向后所有数据都叫做payload(有效载荷)。

Next Header 下一个头 8-bit

就是指明ipv6包含的payload是什么协议,在这里会说明(tcp/udp)。

Next Header数值对应的协议可以参考 https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml

Hop Limit 8-bit

每转发一次,减1,当为0时,丢掉改包。

Source Address 源地址 128-bit

Destination Address 目标地址 128-bit

ipv6 扩展头

ipv6扩展头有几种类型,数据格式都会有一个next header,标明下一个扩展是什么内容,或者说下一块数据是什么内容

   +---------------+------------------------
   |  IPv6 header  | TCP header + data
   |               |
   | Next Header = |
   |      TCP      |
   +---------------+------------------------
标准的ipv6头,next header是tcp,下面紧跟的是tcp数据

   +---------------+----------------+------------------------
   |  IPv6 header  | Routing header | TCP header + data
   |               |                |
   | Next Header = |  Next Header = |
   |    Routing    |      TCP       |
   +---------------+----------------+------------------------
增加了一个routing扩展,所以固定头的next header是routing。routing header后面是tcp,所以next header是tcp

   +---------------+----------------+-----------------+-----------------
   |  IPv6 header  | Routing header | Fragment header | fragment of TCP
   |               |                |                 |  header + data
   | Next Header = |  Next Header = |  Next Header =  |
   |    Routing    |    Fragment    |       TCP       |
   +---------------+----------------+-----------------+-----------------
增加了routing和分片

除了Hop-by-Hop的扩展头,其余的扩展头在传输路径上都不可被修改。

Hop-by-Hop也不可被插入或者删除,只是允许在途径的每个节点进行检查和处理。如果有Hop-by-Hop扩展头,必须紧跟ipv6固定头后面。

每个扩展头长度必须是8的倍数。目前有如下扩展

      Hop-by-Hop Options
      Fragment
      Destination Options
      Routing
      Authentication
      Encapsulating Security Payload

前4个会在当前文档中介绍,后两个由4302和4303定义。

ipv6扩展头顺序

ipv6如果有多个扩展头,需要按照以下顺序设置:

      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

扩展头设置,必须严格按照顺序,解析也同样要严格按照顺序执行,不可跳过特定扩展而解析下一个。

除了表示路由的,每种扩展头只能有一个。

扩展头必须字节对齐,具体对齐规则,请参考rfc4303

所有的扩展头只能出现一次,只有Destination Options header可以出现两次,如上面展示的,一次出现在Routing header前,一次出现在Upper-Layer header前。

Hop-by-Hop Options Header 逐跳选项头

逐跳扩展会携带一些信息,每一个路由都需要对信息进行检测

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

Next Header

8-bit selector
下一个数据的类型

Hdr Ext Len

8-bit unsigned integer
扩展数据长度,表示几个字节,不包含第一个字节。

Options

可变长度。扩展内容。必须字节对齐。

Routing Header 路由扩展头

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

Next Header

8-bit selector
下一个数据类型

Hdr Ext Len

8-bit unsigned integer
数据长度,表示多少字节。不包括第一个字节。

Routing Type

8-bit
路由类型

Segments Left

8-bit unsigned integer
剩余路由数量

type-specific data

可变长度

Fragment Header 分片扩展头

从分片扩展头可以看出,其是比较特殊的,没有指定扩展头的长度,是一个固定长度的扩展。


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

Next Header

8-bit selector

Reserved

8-bit reserved field
保留字段,填充0

Fragment Offset

13-bit unsigned integer
距离原始数据开头的字节数偏移

Res

2-bit reserved field
保留字段,填充0

M flag

1 = more fragments
0 = last fragment.

Identification

32 bits
用来标识是哪一组分片,或者说是属于哪一个数据包。必须与其他分片id区分,在可能存活的声明周期内不可以重复。

Destination Options Header 目的扩展头

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

用来为接收数据端传递额外信息

Next Header

8-bit selector

Hdr Ext Len

8-bit unsigned integer
表示多少字节长度,不包括第一个字节

Options

可变长度

No Next Header

表示后续没有Next Header了

https://www.rfc-editor.org/rfc/rfc1883.html
https://www.rfc-editor.org/rfc/rfc2373.html
https://www.rfc-editor.org/rfc/rfc2374.html
https://www.rfc-editor.org/rfc/rfc2460.html
https://www.rfc-editor.org/rfc/rfc2402
https://www.rfc-editor.org/rfc/rfc2406
https://en.wikipedia.org/wiki/IPv6
https://datatracker.ietf.org/doc/html/rfc8200
https://datatracker.ietf.org/doc/html/rfc4303
https://datatracker.ietf.org/doc/html/rfc4302
https://www.iana.org/assignments/ipv6-parameters/ipv6-parameters.xhtml

posted @ 2023-09-20 17:51  秋来叶黄  阅读(117)  评论(0编辑  收藏  举报