IPv6 Internet Protocol version 6協議解析

簡介

1883定義了ipv6的協議,不過作廢了,在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減少了中間步驟,有更好的傳輸率。

協議頭

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |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)。

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和分片

每個擴展頭長度必須是8的倍數。目前有如下擴展

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

後兩個擴展由rfc2402和rfc2406定義

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

擴展頭格式

擴展頭格式定義了兩種,一個是逐跳選項頭和目標選項頭。

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

      Option Type          8-bit identifier of the type of option.

      Opt Data Len         8-bit unsigned integer.  Length of the Option
                           Data field of this option, in octets.

      Option Data          Variable-length field.  Option-Type-specific
                           data.

Opetion Type

最高的兩位表明了,如果無法解析當前擴展頭內容,如何處理。

      00 - skip over this option and continue processing the header.

      01 - discard the packet.

      10 - discard the packet and, regardless of whether or not the
           packet's Destination Address was a multicast address, send an
           ICMP Parameter Problem, Code 2, message to the packet's
           Source Address, pointing to the unrecognized Option Type.

      11 - discard the packet and, only if the packet's Destination
           Address was not a multicast address, send an ICMP Parameter
           Problem, Code 2, message to the packet's Source Address,
           pointing to the unrecognized Option Type.

最高位的第三位表明了當前擴展頭是否可以在傳輸中修改

      0 - Option Data does not change en-route

      1 - Option Data may change en-route

擴展頭設置,必須嚴格按照順序,解析也同樣要嚴格按照順序執行,不可跳過特定擴展而解析下一個。

除了表示路由的,每種擴展頭只能有一個。

擴展頭必須字節對齊,具體對齊規則,請參考rfc2460

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

可變長度

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章