概述:

IPv6(Internet Protocol Version 6)是网络层协议的第二代标准协议,也被称为IPng(IP Next Generation)。它是Internet工程任务组IETF(Internet Engineering Task Force)设计的一套规范,是IPv4(Internet Protocol Version 4)的升级版本。

IPv6的优势:

  1. 地址空间巨大
    相比 IPv4的地址空间而言,IPv6可以提供2^128个地址空间,几乎不会被耗尽,可以满足未来网络的任何应用,比如物联网等新应用。
  2. 层次化的路由设计
    IPv6地址规划设计时,吸取了IPv4地址分配不连续带来的问题,采用了层次化的设计方法,前3位固定,第4~16位是顶级聚合,理论上,互联网骨干设备上的IPv6路由表只有213=8192条路由信息。
  3. 效率高,扩展灵活
    相对于IPv4报头大小的可变成20~60Byte,IPv6报头采用定长设计,大小固定为40Byte。相对IPv4报头中数量多达12个的选项基本头中只包含选路所需要的8个Nq据新的需求设计出新的扩展头,具有良好的扩有利于路由器的转发效率,同时可以根据新的需展性。
  4. 支持即插即用
    设备连接到网络中,可以通过自动配置的方式获取网络前缀和参数,并自动结合设备自身的链路地址生成IP地址,简化了网络管理
  5. 更好的安全性保障
    由于IPv6协议通过扩展头的形式支持IPSEC 协议,无需借助其他安全加密设备,可以直接为上层数据提供加密和身份验证,保障数据传输的安全。
  6. 引入了流标签的概念
    使用IPv6新增加的FLOW LABEL字段,加数据包同属于某个相同的流量,业务可以根掂个的双犯质是有特姆要求的通信,诸如级控制,比如基于流的QOS等应用,适合于对连音频或视频等实时数据传输。

IPv6地址表示:

IPv6基础知识-编程知识网
需要注意的是,在一个IPv6地址中只能使用一次双冒号“::”,否则当计算机将压缩后的地址恢复成128位时,无法确定每段中0的个数。
IPv6基础知识-编程知识网
一个IPv6地址可以分为如下两部分:

  1. 网络前缀:n比特,相当于IPv4地址中的网络ID。
  2. 接口标识:128-n比特,相当于IPv4地址中的主机ID。

注意:对于IPv6 单播地址来说,如果地址的前三bit不是000,则接口标识必须为64位,如果地址的前三位是000,则没有此限制,这里注意,只有本地回环地址和未分配地址才为128位,其他单播地址必须为64位。IPv6中没有对应的掩码了,只有前缀标识,标识多少位为前缀,ipv4中为什么有掩码?为了告诉机器网络位为多少,但是机器又无法直接识别网络位,所以只能通过掩码的方式了。

要生成一个接口IP地址,我们需要关心前缀怎么获取,接口标识怎么获取。只要这两个标识获取了,一个完整的IPv6地址也就生成了。这里我们只关系单播地址怎么生成,组播地址不能直接在接口上配置,任播地址必须全部手工配置,不能通过其他方式生成。具体配置在后面描述。

单播地址前缀生成方式:

单播地址前缀可以通过四种方法生成:手工配置,无状态地址获取,DHCP获取,系统通过软件自动生成,其中无状态地址获取最为常用。

  1. 手工配置:也就是前缀完全由手工进行配置。
  2. 无状态地址获取:通过RS,RA报文与路由器进行交互获得对应的前缀。
  3. DHCPv6获取(也称作有状态获取):通过DHCPv6服务器获取对应的前缀(接口标识可以获取,但是几乎没有这样做,很不方便)或者其他信息。
  4. 系统通过软件自动生成:设备连接一个服务器,然后从一个专门的服务器中进行分配获取相应的前缀,有点类似于DHCPv6服务器,但是一般通过系统软件自动生成还会同时生成后缀。

单播地址后缀生成方式:

单播地址接口标识可通过三种方法生成:手工配置、系统通过软件自动生成或IEEE EUI-64规范生成。其中,EUI-64规范自动生成最为常用。

EUI-64:IEEE EUI-64规范是将接口的MAC地址转换为IPv6接口标识的过程(网络前缀必须自己手动配置或者通过其他方式获取,)。如图所示,MAC地址的前24位(用c表示的部分)为公司标识,后24位(用m表示的部分)为扩展标识符。从高位数,第7位是0表示了MAC地址本地唯一。转换的第一步将FFFE插入MAC地址的公司标识和扩展标识符之间,第二步将从高位数,第7位的0改为1表示此接口标识全球唯一。
IPv6基础知识-编程知识网
这种由MAC地址产生IPv6地址接口标识的方法可以减少配置的工作量,尤其是当采用无状态地址自动配置时,只需要获取一个IPv6前缀就可以与接口标识形成IPv6地址。但是使用这种方式最大的缺点是任何人都可以通过二层MAC地址推算出三层IPv6地址,并且生成的接口标识没有规律性,管理时有一定的弊端,并且通过EUI生成的地址,前缀必须为64位,并且 EUI只能生成全球单播地址或者本地链路地址,全球单播地址和本地链路地址前缀必须要求为64位,所以肯定都支持。现在一般IPV6用户都是通过这个方式生成单播的IP地址。

手工配置:可以手工配置前缀,当然也可以接口标识都由手工进行配置了,优点是比较灵活,但是如果地址过多,配置就比较麻烦。

系统通过软件自动生成:通过去访问对应的资源池 服务器获取,一般分配的是有规律的后缀,例如01,02,03,并且带有软件的身份标识,并且能够根据IP地址来直接管理权限。

一般组合方式:全部自己手工配置,无状态/有状态前缀/手工前缀+EUI生成后缀,全部由系统生成。对于不同的应用场景或者不同类型的地址,选择适用的方式,产生对应的地址。

例如:
单播地址中,本地链路地址可以通过手工配置获取本地自动生成(也可以看作EUI的方式生成),而全局单播地址主要可以通过无状态+EUI自动生成,当然在一个企业中为了方便管理,也可以通过系统软件进行生成。注意,单播地址可以配置多个,但是同一个设备上只能配置一个同一个网段的地址。

IPv6地址分类:

IPv6基础知识-编程知识网
IPv4地址分为:单播地址、组播地址、广播地址。而IPv6中没有广播地址(由组别代替),反而增加了任播地址。也就是说IPv6地址被分为:单播地址、组播地址、任播地址。并且一个接口上可以配置多个单播、组播、任播地址。

单播地址分类:

一、全球单播地址:
不一定需要配置,如果你想从其他链路找到这台设备,就必须配置全局单播地址,并且在IPv6中很少用NAT,在很多情况下不同节点可以直接通过全球单播地址进行通信即可,当然这些地址相当于公网地址,也是需要去申请的)一个接口可以配置多个全球单播地址,与同网段通信的时候使用对应的同一网段的作为源地址,如果是不同网段就使用最后配置的IPv6地址作为源IP地址。
IPv6基础知识-编程知识网
全球单播地址是带有全球单播前缀的IPv6地址,其作用类似于IPv4中的公网地址。这种类型的地址允许路由前缀的聚合,从而限制了全球路由表项的数量。

全球单播地址由全球路由前缀(Global routing prefix)、子网ID(subnet ID)和接口标识(Interface ID)组成。

  1. Global routing prefix:全球路由前缀。由提供商(Provider)指定给一个组织机构,通常全球路由前缀至少为48位,最多64位,由Subnet ID的长度决定。目前已经分配的全球路由前缀的前3bit均为001,所以第一个数字不是2就是3。
  2. Subnet ID:子网ID。组织机构可以用子网ID来构建本地网络(Site),这个字段长度是可变的,可以将其部分分配到全球路由前缀中去。子网ID通常最多分配到第64位。子网ID和IPv4中的子网号作用相似。
  3. Interface ID:接口标识。用来标识一个设备(Host)。

全球单播地址的地址规划:在ipv4中,因为最初始的地址规划有一定的问题,导致路由很难进行有效的汇总,所以在IPv6中一定要重视地址的规划,也就是规划Global routing prefix字段,比如一个区域规划为一类,方便汇总。其中Global routing prefix分为如下几个部分:

  1. TLA (Top Level Aggregation)顶级聚合:13bit,IPv6的管理机构根据TLA分配不同的地址给某些骨干网的ISP,最大可以得到8192个顶级路由。
  2. RES: 8bit,保留使用,为未来扩充TLA或者NLA预留。NLA (Next Level Aggregation)次级聚合:24bit,骨干网ISP根据NLA为各个中小ISP分配不同的地址段,中小ISP也可以针对NLA进一步分割不同地址段,分配给不同用户。
  3. SLA (Site Level Aggregation)站点级聚合: 16bit,公司或企业内部根据SLA把同一大块地址分成不同的网段,分配给各站点使用,一般用作公司内部网络规划,最大可以有65536个子网。

二、链路本地地址:
一个接口上必须要有一个链路本地地址,链路本地地址是不能在作为路由的目的条目的,它的用处是在同一个网段中进行通信,有点类似于MAC地址。链路本地地址也需要在同一网段中唯一。
IPv6基础知识-编程知识网
链路本地地址是IPv6中的应用范围受限制的地址类型,只能在连接到同一本地链路的节点之间使用。它使用了特定的本地链路前缀FE80::/10(最高10位值为1111111010),这里并不是说明前缀必须为FE80,实际上因为有/10的标记,计算出本地链路地址的范围为FE80::-FEBF::都是这个链路本地地址,同时将接口标识添加在后面作为地址的低64比特。

当一个节点启动IPv6协议栈时,启动时节点的每个接口会自动配置一个链路本地地址(其固定的前缀+EUI-64规则形成的接口标识,在模拟器上需要配置了全局单播地址才会自动产生,或者自己输入相应自动产生的命令或手动自己配置)。这种机制使得两个连接到同一链路的IPv6节点不需要做任何配置就可以通信。所以链路本地地址广泛应用于邻居发现,无状态地址配置等应用。

以链路本地地址为源地址或目的地址的IPv6报文不会被路由设备转发到其他链路。

三、唯一本地地址:
用于构建私网前缀为FC00::–FDFF:: ,用来取代已作废的RFC3879定义的站点本地地址(Site-local
地址)。
IPv6基础知识-编程知识网
唯一本地地址是另一种应用范围受限的地址,它仅能在一个站点内使用。

唯一本地地址的作用类似于IPv4中的私网地址,任何没有申请到提供商分配的全球单播地址的组织机构都可以使用唯一本地地址。唯一本地地址只能在本地网络内部被路由转发而不会在全球网络中被路由转发。如果需要的话必须做IPv6的NAT。但是我们知道,IPv6地址完全够用,为什么设计出私网地址呢?这是因为NAT可以隐藏IP地址,提高安全性,并且也不需要去申请那么多IPv6地址,虽然申请还是比较方便的。但是现在没有进行使用,因为很不方便,需要NAT技术。为了安全性我们完全可以直接使用全球单播地址进行通信(地址个数完全够用),并且将想要对方知道的网段通告进入路由器协议让对方能够于只通信,其实也对内部不想让人知道的地址有保密的作用。

端到端的特性也就是说两个设备直接可以通信(设备-设备),不需要其他NAT等技术进转换地址(这样就是先与设备-网关-设备,所以也称不上端到端了)

字段解释:

  1. Prefix:前缀;固定为FC00::/7。
  2. L:L标志位;值为1代表该地址为在本地网络范围内使用的地址;值为0被保留,用于以后扩展。
  3. Global ID:全球唯一前缀;通过伪随机方式产生。
  4. Subnet ID:子网ID;划分子网使用。
  5. Interface ID:接口标识。

唯一本地地址具有如下特点:

  1. 具有全球唯一的前缀(虽然随机方式产生,但是冲突概率很低)。
  2. 可以进行网络之间的私有连接,而不必担心地址冲突等问题。
  3. 具有知名前缀(FC00::/7),方便边缘路由器进行路由过滤。
  4. 如果出现路由泄漏,该地址不会和其他地址冲突,不会造成Internet路由冲突。
  5. 应用中,上层应用程序将这些地址看作全球单播地址对待。
  6. 独立于互联网服务提供商ISP(Internet Service Provider)。

四、未指定地址和回环口地址:
IPv6基础知识-编程知识网
未指定地址:
Pv6中的未指定地址即 0:0:0:0:0:0:0:0/128 或者::/128。该地址可以表示某个接口或者节点还没有IP地址,可以作为某些报文的源IP地址(例如在NS报文的重复地址检测中会出现)。源IP地址是::的报文不会被路由设备转发。类似与IPv4中没有获取地址时的169开口的地址作为临时地址,在自己没地址时坐临时的代替。

环回地址:
IPv6中的环回地址即 0:0:0:0:0:0:0:1/128 或者::1/128。环回与IPv4中的127.0.0.1作用相同,主要用于设备给自己发送报文。该地址通常用来作为一个虚接口的地址(如Loopback接口)。实际发送的数据包中不能使用环回地址作为源IP地址或者目的IP地址。

组播地址:

IPv6基础知识-编程知识网
一、IPv6组播地址:
IPv6的组播与IPv4相同,用来标识一组接口,一般这些接口属于不同的节点。一个节点可能属于0到多个组播组。发往组播地址的报文被组播地址标识的所有接口接收。

一个IPv6组播地址由前缀,标志(Flag)字段、范围(Scope)字段以及组播组ID(Global ID)4个部分组成:

  1. 前缀:IPv6组播地址的前缀是FF00::/8(1111 1111)。
  2. 标志字段(Flag):长度4bit,目前只使用了最后一个比特(前三位必须置0),当该位值为0时,表示当前的组播地址是由IANA所分配的一个永久分配地址;当该值为1时,表示当前的组播地址是一个临时组播地址(非永久分配地址)。
  3. 范围字段(Scop):长度4bit,用来限制组播数据流在网络中发送的范围。
  4. 组播组ID(Global ID):长度112bit,用以标识组播组。目前,RFC2373并没有将所有的112位都定义成组标识,而是建议仅使用该112位的最低32位作为组播组ID,将剩余的80位都置0。

二、预定义组播地址:
目前常用的预定义组播地址:flag字段为0,表示已经定义的地址,理解为永久生效的地址,例如IPv4中的224.0.0.0/8字段。不能自己去分配了。然后范围字段为1,表示只能在自己本设备上使用,2表示的是链路范围,表示在设备相连的链路上可以使用(一个广播域中)。还有4,5等,但是使用的很少,这里掌握链路本地和设备本地地址即可。
IPv6基础知识-编程知识网
三、被请求节点组播地址(一种预定义组播地址):
被请求节点组播地址通过节点的单播或任播地址生成。当一个节点具有了单播或任播地址,就会对应生成一个被请求节点组播地址,并且加入这个组播组(一对一生成)。一个单播地址或任播地址对应一个被请求节点组播地址。该地址主要用于邻居发现机制和地址重复检测功能。

IPv6中没有广播地址,也不使用ARP。但是仍然需要从IP地址解析到MAC地址的功能。在IPv6中,这个功能通过邻居请求NS(Neighbor Solicitation)报文完成。当一个节点需要解析某个IPv6地址对应的MAC地址时,会发送NS报文,该报文的目的IP就是需要解析的IPv6地址对应的被请求节点组播地址;只有具有该组播地址的节点会检查处理。(被请求节点组播地址在后面实际运用时着重分析)

被请求节点组播地址由前缀FF02::1:FF00:0/104和单播地址的最后24位组成。

如何产生:被请求节点组播地址的前104位固定,将单播IP地址的后24位移下来填充到后面就可以了。例如:IPv6—2001::1234 :5678/64, 被请求节点组播地址—FF02::1:FF34:5678/104其中FF02::1:FF为固定部分,共104位

任播地址:

IPv6基础知识-编程知识网
任播的概念最初是在RFC1546 (Host Anycasting Service)中提出并定义的,主要为DNS和 HTTP提供服务。IPv6中没有为任播规定单独的地址空间,任播地址和单播地址使用相同的地址空间。IPv6任播地址可以同时被分配给多个设备,也就是说多台设备可以有相同的任播地址,以任播地址为目标的数据包会通过路由器的路由表被路由到离源设备最近的拥有该目标地址的设备。

如下图所示,服务器A、B和C的接口配置的是同一个任播地址,根据路径的开销,用户访问该任播地址选择的是开销为3的路径。
IPv6基础知识-编程知识网
如图所示,任播技术的优势在于源节点不需要了解为其提供服务的其体节尽士川可以接收特定服务,当一个节点无法工作时,带有任播地址的数据包又被发往其他两个主机节点,从任播成员中选择合适的目的地节点取决于路由协议重新收敛后的路由表情况。

任播可以分为基于网络层的任播和基于应用层的任播。两者主要的区别是网络层的任播仅仅依靠网络本身(比如路由表)来选择目标服务器节点,而应用层任播是基于一定的探测手段和算法来选择性能最好的目标服务器节点。RFC2491和 RFC2526定义了一些保留的任播地址格式,如子网路由器任播地址,用来满足不同的任播应用访问需求。

IPv6报文格式:

IPv6基础知识-编程知识网

IPv6数据包由一个IPv6报头、多个扩展报头和一个上层协议数据单元组成。

IPv6基本报头(IPv6 Header):
• 每一个IPv6数据包都必须包含报头,其长度固定为40bytes。
• 基本报头提供报文转发的基本信息,会被转发路径上面的所有路由器解析。

扩展报头(Extension Headers):
• IPv6扩展报头是可能跟在基本IPv6报头后面的可选报头。IPv6数据包中可以包含一个或多个扩展报头,当然也可以没有扩展报头,这些扩展报头可以具有不同的长度。IPv6报头和扩展=报头代替了IPv4报头及其选项。新的扩展报头格式增强了IPv6的功能,使其具有极大的扩展性。与IPv4报头中的选项不同,IPv6扩展报头没有最大长度的限制,因此可以容纳IPv6通信所需要的所有扩展数据。
• 扩展报头提供报文转发的扩展信息,并不会被路径上所有的路由器解析,一般只会被目的路由器解析处理。

上层协议数据单元(Upper Layer Protocol Data Unit):
• 上层协议数据单元一般由上层协议包头和它的有效载荷构成,有效载荷可以是一个ICMPv6报文、一个TCP报文或一个UDP报文。

IPv6报头格式中主要字段解释如下:

  1. Version:版本号,长度为4bit。对于IPv6,该值为6。(此字段用处不大,因为在MAC层就有上层数据的版本的信息了)
  2. Traffic Class:流类别,长度为8bit。等同于IPv4中的TOS字段,表示IPv6数据报的类或优先级,主要应用于QoS。
  3. Flow Label:流标签,长度为20bit。IPv6中的新增字段,用于区分实时流量(可以通过流量标签知道上层的应用层是什么数据,不用拆到应用层,方便分类并且直接转发),不同的流标签+源地址可以唯一确定一条数据流,中间网络设备可以根据这些信息更加高效率的区分数据流。
  4. Payload Length:(头部长度固定,所以只需要标识负载长度)有效载荷长度,长度为16bit。有效载荷是指紧跟IPv6报头的数据报的其它部分(即扩展报头和上层协议数据单元)。该字段只能表示最大长度为65535字节的有效载荷。如果有效载荷的长度超过这个值,该字段会置0,而有效载荷的长度用逐跳选项扩展报头中的超大有效载荷选项来表示。
  5. Next Header:下一个报头,长度为8bit。该字段定义紧跟在IPv6报头后面的第一个扩展报头(如果存在)的类型,或者上层协议数据单元中的协议类型。
  6. Hop Limit:跳数限制,长度为8bit。该字段类似于IPv4中的Time to Live字段,它定义了IP数据报所能经过的最大跳数。每经过一个路由器,该数值减去1,当该字段的值为0时,数据报将被丢弃。
  7. Source Address:源地址,长度为128bit。表示发送方的地址。
  8. Destination Address:目的地址,长度为128bit。表示接收方的地址。

与IPv4报头比较:
IPv6基础知识-编程知识网
IPv4报头中包含13个字段,如图所示。IPv6和IPv4相比,去除了IHL、identifiers、Flags、Fragment Offset、Header Checksum、 Options、Paddiing域,只增了流标签域,因此IPv6报文头的处理较IPv4大大简化,提高了处理效率。另外,IPv6为了更好支持各种选项处理,提出了扩展头的概念,新增选项时不必修改现有结构就能做到,理论上可以无限扩展(IPv4中有60个最大字节长度的限制),体现了优异的灵活性。下面介绍IPv6扩展报头的一些信息。

拓展报头格式:
IPv6基础知识-编程知识网
IPv6扩展报头中主要字段解释如下:

  1. Next Header:下一个报头,长度为8bit。与基本报头的Next Header的作用相同。指明下一个扩展报头(如果存在)或上层协议的类型。
  2. Extension Header Len:报头扩展长度,长度为8bit。表示扩展报头的长度(不包含Next Header字段)。拓展报文总长度一定钥匙8字节的整数倍,如果不是整数倍,就会进行相应的填充。
  3. Extension Head Data:扩展报头数据,长度可变。扩展报头的内容,为一系列选项字段和填充字段的组合。

IPv6的扩展头被当作IPv6静载荷的一部分,计算在 IPv6基本头的Palyload Length字段内。

拓展报头种类:
IPv6基础知识-编程知识网
当超过一种扩展报头被用在同一个分组里时,报头必须按照下列顺序出现:

  1. IPv6基本报头
  2. 逐跳选项扩展报头
  3. 目的选项扩展报头
  4. 路由扩展报头
  5. 分段扩展报头
  6. 认证扩展报头
  7. 封装安全有效载荷扩展报头
  8. 上层协议数据报文

路由设备转发时根据基本报头中Next Header值来决定是否要处理扩展头(需要中间路由器处理的报文头部其实也就是逐条选项拓展报头,所以如果存在就放在第一个,字段号为0,方便被查看,其他报头中间路由器一律不进行处理,增加转发的速率),并不是所有的扩展报头都需要被转发路由设备查看和处理的。

一.逐跳选项报头:
Next Header值=0。作用是用于携带在报文发送路径上必须被每一跳路由器检查和处理的可选信息,类似IPv4中的ROUTER ALERT选项。
IPv6基础知识-编程知识网

  1. Next Header:8bit,作用同基本头的Next Header 相同。

  2. Hdr Ext Len: 8bit,标识Options头的长度。该长度以8Byte为单位,不包含扩展头的第一个8Byte,即如果该扩展头只有8Byte 长,该字段值即为0。

  3. Options:可以携带不定数量采用TLV格式的选项,目前唯一定义的选项是巨型静载荷选项(类型为194)。使用巨型静载荷选项,要求IPv6头的16位净荷长度字段值必须为0,扩展头中的巨型净荷长度字段值不小于65535。此外还有一个限制:如果包中有分段扩展头,就不能同时使用巨型净荷选项,因为使用巨型净荷选项时不能对包进行分段。

静载荷=100000Byte 的IPv6数据包如下:
IPv6基础知识-编程知识网
二.目的选项拓展报头:
Next Header值=60。用在移动IPv6,承载数据包目的节点所需要的可选信息,给宿主机解释和使用的,目前这个选项为空用途:IETF暂时建议使用该扩展头在移动节点和家乡代理之间交换注册信息。
IPv6基础知识-编程知识网

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

三.路由选择扩展头:
Next Header值=43,作用是包含IPv6数据包到达目的地所要经过的中间节点,使源端可以强制数据包经过哪些节点,类似IPv4中的宽松源站选路。
IPv6基础知识-编程知识网

  1. Next Header: 8bit,作用同基本头的Next Header。
  2. Hdr Ext Len: 8bit,标识Options头的长度。该长度以8Byte为单位,不包含扩展头的第一个8Byte,即如果该扩展头只有8Byte长,该字段值即为0。
  3. Routing Type: 8bit,目前只定义了类型0,表示数据包需要经过的中间路由器的地址。

四.分段扩展头
Next Header值=44,作用是如果源端需要发送的数据包超过Path MTU的大小,源端在发送前需要将数据包先分段。在 IPv4中,数据包超过接口MTU值,中间节点路由器将对数据包进行分段处理;而在 IPv6中,中间路由器不能对数据包分段,如果中间路由器需要发送的报文超过本接口的 MTU 值,数据包将被丢弃同时路由器会发送一个ICMPv6的错误信息报文给源端。IPv6分段扩展头如下图所示:
IPv6基础知识-编程知识网

  1. Next Header:8bit,作用同基本头的Next Header。
  2. Reserved: 8bit,保留目前未用为0。
  3. Fragment Offset: 13bit,等同于IPv4中的分段偏移字段,以8Byte为单位。如该值为150,表示该报文的数据是位于原报文的1200Byte处后。
  4. Res: 2bit,保留目前未用为0。
  5. M: 1bit,表示后续是否还有分段,如为1表示后续还有分段报文,为0表示该报文是最后一个分段报文。
  6. Identification: 32bit,该字段等同于IPv4的标识字段,为32位。源节点为每个被分段的IPv6包都分配一个标识符,用来唯一标识同一组分段的报文,便于接收端根据相同标识重组报文。

由于分段扩展头采用定长8Byte的设计,所以扩展头长度这一字段无任何意思,8bit保留为0。

在IPv4中,中间路由器对于超过接口MTU的数据包可以进行分段处理,这样操作会降低数据包的转发效率,而且数据包在转发过程中可能被多次分段。而在IPv6中,只有源端数据包发送方才能对数据包进行分段处理,如果中间路由器转发的数据包大于MTU将被丢弃掉,并向源端发送一个ICMPv6的错误信息报文。

如图所示,假设源端要发送2000Byte的IP报文数据,分段标识为1111,MTU值为1400Byte。由于IPv6基本头定长40Byte,所以数据包的有效静载荷长度为1360,由于要分段,加入分段扩展头8Byte,所以有效静载荷的数据部分为1352Byte,2000Byte的数据被分为2段,第一段的有效静载荷长度是1360,有效静载荷数据部分是1352Byte;第二段的有效静载荷长度是656,有效静载荷数据部分为648Byte,这两段的分段标识同为1111。
IPv6基础知识-编程知识网

五.认证报头扩展头(Authentication Header)
Next Header值=51。作用是为报文提供完整性验证,在传输过程中不被改变的字段会被用作认证信息的计算,在传输过程中可能改变的字段如Hop limit字段,作为0处理。如果有多个扩展头,必须置于由中间节点路由器处理的扩展头之后,以及由目的地址处理的扩展头之前。认证报头扩展头的格式如图所示:
IPv6基础知识-编程知识网

  1. Next Header:8bit,作用同基本头的Next Header。Payload Len: 8bit,标识认证报头的总长度,单位是4Byte,最大为255。
  2. RESERVED: 16bit,保留,填充为0。
  3. SPI: 32bit,与目的地址和AH协议组合,唯一标识本数据包的SA。
  4. Sequence Num: 32bit,是一个单调递增的数,可用作防重放攻击。
  5. Integrity Check Value:可变长,必须是4字节的整数倍,其内容用作完整性检查。

六.ESP扩展头(Encapsulating Security Payload)
Next Header值=50。作用是提供对数据包的完整性验证和加密,ESP将需要加密保护的字段加密后放入ESP头的数据部分,ESP与AH联合使用,用来提供认证和加密。ESP扩展头的格式如图所示:
IPv6基础知识-编程知识网

  1. SPI:32bit,与目的地址和ESP协议组合,唯一标识本数据包的SA。
  2. Sequence Num: 32bit,是一个单调递增的数,可用作防重放攻击。Payload Data:可变长,加密数据。
  3. Padding:填充,由于加密数据必须是4Byte的整数倍,所以有时候需要填充,内容依据加密算法,最大为255Byte。
  4. Pad Length: 8bit,标识Padding 部分长度,О表示无填充。Next Header:8bit,作用同基本头的Next header。
  5. Authentication Data:可变长,身份验证。

参考资料:HCIE培训文档、《HCIE路由交换学习指南》

IPv6基础知识-编程知识网创作打卡挑战赛赢取流量/现金/CSDN周边激励大奖