首页 > 其他分享 >IPv6 Internet Protocol version 6协议解析

IPv6 Internet Protocol version 6协议解析

时间:2023-09-20 18:03:38浏览次数:45  
标签:Protocol Header +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-

简介

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

标签:Protocol,Header,+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
From: https://www.cnblogs.com/studywithallofyou/p/17716900.html

相关文章

  • LINUX下Subversion安装配置
    Subversion1.3.2安装以及配置1.Subrsion安装#tarxvzfSubversion-1.3.2.tar.gz#cdSubversion-1.3.2#./configure--with-apxs=/usr/local/apache2/bin/apxs--prefix=/usr/local/subversion#make#makeinstall2.Subversion的建立与使用仓库使用$mkdir/var/repos......
  • AtCoder Grand Contest 023 E Inversions
    洛谷传送门AtCoder传送门首先将\(a\)从小到大排序,设\(p_i\)为排序后的\(a_i\)位于原序列第\(p_i\)个位置,\(x_i\)为要填的排列的第\(i\)个数。设\(A=\prod\limits_{i=1}^n(a_i-i+1)\),则\(A\)为排列的总方案数(考虑按\(a_i\)从小到大填即得)。套路地,统......
  • 解决安装VS2022时,出现未能安装包"Microsoft.VisualCpp.Redist.14,version=14.32.31332
    解决安装VS2022时,出现未能安装包"Microsoft.VisualCpp.Redist.14,version=14.32.31332,chip”=x86"问题描述之前安装过MSSQLServer和VS2022,但是后来又卸载了。现在重装VS2022出现两个报错:无法安装Microsoft.VisualCpp.Redist.14,version=14.32.31332,chip”=x86无法安装Micr......
  • CF1808E1 Minibuses on Venus (easy version)
    原题翻译一道数位\(dp\)题记\(S=\sum_{i=1}^{n}{a_i}\),原题即要求是否存在\(i\)满足\(S-a_i\equiva_i(\modK)\)移项得\(S\equiv2a_i(\modK)\)因此我们考虑枚举\(2a_i\)的值记作\(sm\),设\(dp_{i,j,0/1}\)表示前\(i\)个数,和为\(j\),有/没有\(2a_i\modK=sm\)转......
  • Selenium启动chrome谷歌浏览器报错 session not created: This version of ChromeDriv
    问题Selenium启动chrome谷歌浏览器报错sessionnotcreated:ThisversionofChromeDriveronlysupportsChromeversion114参考https://www.cnblogs.com/interdrp/p/17650061.html解决使用指定版本(stable)的google浏览器和配套的chromedriver驱动。https://googlechrom......
  • CF 1867 E1. Salyg1n and Array (simple version)
    Link简单版本的结论还是很容易猜到的。首先很容易想到的第一步就是尽可能地不覆盖地取尽可能多地区间,最后剩下了一小块。然后在接着原来的指针一个一个地往右问,直到不能问了为止。为什么这样是正确的呢?首先,在这样一步一步地往右查询的过程中,我们会发现总是前$k-1个数加上后面......
  • RECIST guideline (Version 1.1)
    RECISTguideline(Version1.1)......
  • 【ERROR: Could not find a version that satisfies】【ERROR: No matching distribut
    pip包安装出错真是把我烦死了,在yt上学东西,结果一直出这样的错,之前我都是把包下载到本地安装的,这也不是长久之计。然后我试了使用-i,使用--trusted-host,使用--user,使用--upgradepip...全都不管用。后来我想,究竟是什么时候出现这个问题的,好像很久之前就有了...老提示不安全的连......
  • CF1542E1 Abnormal Permutation Pairs (easy version) 题解
    CF1542E1AbnormalPermutationPairs(easyversion)题解不会Hardversion对于第一个限制字典序,我们可以考虑枚举前\(i\)位相同,然后考虑后\(n-i\)位。我们只需要保证\(p_{i+1}<q_{i+1}\)即可。我们设\(len=n-i\)。由于前\(i\)位完全相同,所以前\(i\)位内部......
  • Replacing gcc and g++ with GNU version in macOS
    AfterweinstallXcodeCommandLineTools,wewillgetgccandg++in/Library/Developer/CommandLineTools/usr/binandthesamecontentsin/usr/bin.Buttheproblemisthatgccandg++aresameasclangandclang++.Proofcanbeobtainedfromthefollowin......