龙空技术网

IPv6报文格式详解,总结与IPv4的区别

IT老良 493

前言:

而今小伙伴们对“ipv6转发ipv4”都比较着重,咱们都需要了解一些“ipv6转发ipv4”的相关资讯。那么小编同时在网上网罗了一些有关“ipv6转发ipv4””的相关资讯,希望同学们能喜欢,看官们快快来学习一下吧!

IPv6除了能够给我们提供更广阔的网络地址空间,它还有很多地方区别于上一个版本的IPv4。本篇内容我们通过对IPv6报头的介绍分析,并针对IPv6和IPv4报头两者的特点进行一个对比,看看IPv6报头与IPv4有多少不同之处,从而明白IPv6能够给我们的网络带来的新的功能,具备了多少优势。

IPv6基本报头

IPv6数据包由一个IPv6报头、零或多个扩展报头和一个上层协议数据单元组成。每一个IPv6数据包报头其长度是固定的,为40bytes,包含该报文的基本信息。IPv6报头格式如下图所示:

各个字段说明如下:

版本(Version):4 bits,IP协议版本号,固定值为6。流量类别(Traffic Class):8 bits,该字段功能和IPv4报头中的ToS(Type of Service,服务类型)字段类似,表示IPv6数据报文的类或优先级,主要应用于QoS。流标签(Flow Label):20 bits,也与QoS 相关。与IPv4相比,该字段是新增的。它用来标识这个数据报属于源节点和目标节点之间的一个特定数据报序列。简单来说, IPv6 的“流”指的是互联网络上特定源点到特定终点的一系列数据报,而在这个“流”所经过的路径上的路由器都保证服务质量。所有属于同一个“流”的数据报都有相同的“流”标签。

流标签的作用?

在没有流标签时,路由器会根据五元组:源IP + 目的IP + 协议(TCP/UDP等)+ 源端口 + 目的端口选择路由,而五元组中涉及到传输层的端口号,所以路由器必须要看到传输层的报头。那么这会增加路由器转发处理的复杂性,而增加了流标签字段,路由器便可以根据源IP+流标签来确定一条流,只需看到网络层报头即可。

有效载荷长度(Payload Length):16 bits,有效载荷是指IPv6基本报文头后的数据部分长度(即扩展报头和上层协议数据单元),以字节为单位。该字段只能表示最大长度为65535字节的有效载荷。如果有效载荷的长度超过这个值,该字段会置0,而有效载荷的长度用逐跳选项扩展报头中的超大有效载荷选项来表示。下一报头(Next Header):8 bits,指示基本报文头后的扩展报文头,如果没有扩展报文头,则指示数据部分所承载的协议。跳数限制(Hop Limit):8 bits,与IPv4的TTL相同。用于设置一个数据报可经过路由器数量的上限,最大跳数为255跳。该字段的作用是确保数据报不会永远在网络中循环传输。每经由一台路由器处理数据报时,该字段的值减一。若该字段的值减至0便丢弃此数据报。源IPv6地址(Source IPv6 Address):128 bits,发送数据报文节点的IPv6地址。目的IPv6地址(Destination IPv6 Address):128 bits,接收数据报文节点的IPv6地址。IPv6扩展报头

在 IPv6 报头设计中,对原IPv4报头所做的一项重要改进就是将所有可选字段移出IPv6报头,置于扩展头中。在IPv4中,IPv4报头包含可选字段,内容涉及安全、时间戳、记录路由等,这些可选字段可以将IPv4报头长度从20字节扩充到60字节。在转发过程中,处理携带这些可选字段的IPv4报文会占用路由器很大的资源,因此实际中也很少使用。IPv6将这些可选字段从IPv6基本报头中剥离,放到了扩展报头中,扩展报头被置于IPv6报头和上层协议数据单元之间。基于这种设计,IPv6头部固定为40字节,扩展头部仅在需要时添加。

扩展报头格式增强IPv6的功能,使其具有极大的扩展性。与IPv4报头中的选项不同,IPv6扩展报头没有最大长度的限制,可以具有不同的长度,因此可以容纳IPv6通信所需要的所有扩展数据。当使用多个扩展报头时,IPv6报头中的“下一报头”字段指明下一个扩展报头的类型。IPv6扩展报头如下图所示。

字段说明:

下一报头(Next Header):8bit;与基本报头的 Next Header 的作用相同,指明下一个扩展报头(如果存在)或上层协议的类型。

报头扩展长度(Extension Header Length):8 bit;表示扩展报头数据部分的字节数。

扩展报头数据(Extension Header Data):长度可变;扩展报头的内容,为一系列选项字段和填充字段的组合。

扩展报头类型

通常典型的 IPv6包并没有扩展头。仅当需要路由器或目的节点做某些特殊处理时,才由发送方添加一个或多个扩展头。与IPv4不同,IPv6扩展头长度任意,不受40字节的限制,但是为了提高处理选项头和传输层协议的性能,扩展头总是8字节长度的整数倍。另外在 IPv4报头中包含所有的选项,每个中间路由器都必须检查这些选项是否存在,如果存在,就必须处理它们。这种设计方法会降低路由器转发IPv4数据包的效率。而在IPv6中,相关选项被移到了扩展报头中。中间路由器就不需要处理每一个可能出现的选项,这种处理方式提高了路由器处理数据包的速度,也提高其转发性能。

扩展报头可以在需要提供可选功能时,只要将需要的信息加载到扩展报头中即可。例如,一个数据包需要使用源路由选择、分段和认证等可选功能,那么就将它们各自需要增加的功能信息加载到3个扩展报头中。

一些扩展报头如下:

逐跳可选项(下一报头值为0):传送必须被转发路径中每个节点都检测处理的信息。目的地可选项(下一报头值为 60):用于传送只被目的节点或可能时路由选择报头中列出的节点检测处理的消息。路由选择(下一报头值为43):通过列出在到达目的地的路径中,数据包所经过的所有节点列表来提供路由选择功能。分段选项(下一报头值为44):为被分段的数据包在接收点重组提供必要信息。头部认证(AH,下一报头值为51):用于数据包在源与目的之间必须认证的情况。封装安全有效负载(ESP,下一报头值为 50):用于有效负载的加密封装。

注:没有下一报头时,下一头部的值为59。另外若一个IPv6报文中有多个扩展首部,则必须按以上顺序进行封装。

IPv4和IPv6报头比较

通过上述的IPv6报头格式的介绍,以及之前IPv4报文格式介绍,详见《计算机网络传输中IP数据报文格式详解并结合Wireshark深入分析》。我们可以总结出两者的一些区别:

Version(版本) 字段在两种协议中没有变化,只是值不同,IPv4为4,IPv6为6;IPv6 丢弃了IPv4的Internet Header Length(首部长度) 、Type of Service(服务类型) 、Identification(标识) 、Flags(标志)、Fragment Offset(片偏移)和Header Checksum(首部校验和)字段;Total Lenght(总长度)、Time to Live (生存时间)和Protocol(协议)字段在IPv6中有了新名字Payload Length(有效载荷长度)、Next Header(下一报头)和Hop Limit(跳数限制),功能稍微进行了重新定义;IPv4中的Option(选项)字段已从IPv6报头中消失,改为 Extension(扩展)功能;IPv6加入了两个新字段:Traffic Class(流量类别)和Flow Label(流标签)。

那么这些不同给IPv6带来哪些改进和优势呢?

砍掉首部长度的原因是IPv6的基本报头长度是固定的;关于分片的标识、flag、片偏移三个字段砍掉,因为IPv6对包进行分片的过程在报头的扩展部分而不是报头本身进行,出现在IPv6的扩展报头中;丢弃包的报头校验和是为了提高路由效率。可由IP层的上下层:数据链路层和传输层会检查错误,因而IPv6认为头部校验和不再必需;IPv6扩展报头取代option字段实现的功能。IPv6不是把这种增强的功能添加到IPv6报头当中,而是设计了可插在IP报头和较高层协议报头之间的扩展部分。这使没有扩展部分的包处理起来更快,还提供了一系列可扩充选项,如加密、验证、分片、源路由、段和目标选项等。正如前文所述,这些扩展部分计算在包总的有效载荷长度里面;在基本IP报头中增加流标签,提高QoS效率。

因此可以看出IPv6报文格式设计更加精简,这些与IPv4不同设计的格式特点一定程度上降低了对路由器性能的要求,并且大大提升路由效率。大家看出还有啥不同呢?欢迎在评论区讨论咯~

标签: #ipv6转发ipv4