从今天开始我将介绍一下IPv6的相关内容,今天首先来介绍一下IPv6的报文格式。在本文中,我讲首先介绍IPv6的报文标准格式及其报文中各字段的差异。之后,将介绍IPv6报文头部在设计时的科学性以及相对于IPv4的进步性。
本文精华在于第三章,从中我们可以更深入的了解到IPv6报文的细节特性,即为什么IPv6要对IPv4进行改动,也可以从中体会出IPv6在设计时的考量。

一、IPv4与IPv6报文格式对比
首先,用一张图来说明IPv4和IPv6的报文格式:





在上图中,很清晰的说明了IPv6报文的格式和相对于IPv4报文头部的区别,今天我们的讲解就从这两张图的区别开始。
不同于IPv4报文,IPv6报文头部是固定的40byte。(IPv4报文头部长度在)

二、IPv6报文字段讲解
首先来介绍一下IPv6报文字段的作用。
1、version
与IPv4报文头部相同,用于标记版本(表明报文时IPv4还是IPv6),一共4bit,值为0110。
2、Traffic Class
流分类字段,占8bit。类似于IPv4中的TOS,可以应用在QoS中。
3、Flow Label
流标签字段,可有用来标记报文的数据类型。该字段占20bit,因此一共可以有2^20个标签,如果使用IPv6使用MPLS或者是QoS,可以很方便的使用该字段作为标签。
4、Payload Length
有效载荷长度,该字段指的是IPv6报文中除了基本报头外其他剩余部分的长度。由于该字段只有20bit,因此当IPv6超出这个长度时,必须要进行分片。
5、Next Header
下一跳头部,占8bit,表明下一个头部(可能是上层协议或者是扩展报头)的类型。
6、Hop Limit
跳数限制,共8bit,类似于IPv4中的TTL,用于三层防环。
7、Source Address
源IPv4地址,共128bit。
8、Destination Address
目的IPv6地址,共128bit

三、IPv6报文科学性讲解
以上我们了解了IPv6的报文格式,下面我就几个问题对IPv6报文头部设计的科学性进行讲解
(一)为什么IPv6报文要设计成固定长度的,并且引入了基本报头和扩展报头的概念?
IPv6基于这样原理是由很深的开发和数据包处理上的考量的,从开发的角度讲,将IPv6的报头设计成固定格式的,会很大程度上降低了网络设备网络层软件开发的难度,更重要的是,设计成固定长度后,可以加快网络设备CPU的树立速率。(这一点读者如果有一定的开发设计经验会对上述内容有更深入的了解,如果没有开发设计经验只需要知道上述内容就可以了)此外,将IPv6设计成基本报头+扩展报头的形式,可以使得删除掉一些IPv4头部中一些并不是对每个数据包都有用的字段,而当IPv6的数据包又需要这些字段时,可以使用扩展报头来完成上述功能,从而简化了网络流量的传输。(关于这一点可以看一下本章第三点)
(二)为什么IPv6没有了检验和字段
这属于设计层面考考虑的问题,对于网络层的下一层——数据链路层而言,其自身有校验的功能,而对于网络层的上一层——传输层而言,其自身也有校验的功能。(注:传输层中,TCP有检验的功能,UDP也有校验的功能,但是可以选择不使用)。基于网络层的上一层和下一层都提供了数据校验功能,因此IPv6的设计方认为没有必要在网络层加入校验功能。此外,对于IPv4而言,其报文每次经过一个三层设备,其报文中的TTL字段会减一,这就导致了要重新计算校验和,无形之中降低了数据包的转发速率。而IPv6取消了网络层校验功能之后,自然可以很大的较快了数据包转发速率。另一方面,现在光纤的大规模使用使得链路传输的误码率本来就已经下降到了很低的水平,因此更加没有必要在网络层上再做一次校验了。
(三)为什么IPv6要将本来在IPv4报头中的分片用的字段删除?
前面我们提到了,IPv6设计成了基本报头+扩展报头的形式,可以把一些不需要的功能“踢出”数据报头,在需要该功能时加入扩展报头,使得IPv6报头更加灵活,而IPv4中的分片字段就很好的说明了这一点。
在IPv4报文中,有Identification、Flags和FragmentOffset三个字段用于数据包的分片。而在IPv6中,如果要发送超大型的数据包,需要进行分片传输时,就需要使用扩展报头。为什么IPv6要把原本IPv4在网络层头部的这三个字段转移到扩展报头呢?原来,在网络中,并不是所有的数据包都要分片,而当一个数据包不需要分片时,该字段就显得非常多余,也在一定程度上占用了网络带宽。IPv6这样设计,使得原本不需要分片的数据包不需要携带分片的字段,而需要分片的数据包又使用了扩展报头实现,从而使得网络数据包转发更加灵活。
另外,IPv6只有发送数据包的一方需要处理分片问题,而中间的路由器只需要将报文原样转发即可,这就避免了以下问题:


假设在一个网络中网络拓扑如上所示,如果R1要对R4发送数据包,由于每个链路的MTU值都不同,并且每次都是递减,因此该数据包每次经过一个路由器就会再次进行分片。而在IPv6中,由于只有数据源才会处理分片问题,因此中间的路由器就不用对报文进行再次分片了。
(四)为什么IPv6要加入流标签字段
如果您仔细看了上面的图,就会发现,相比于IPv4,IPv6唯一增加了一个字段,就是——Flow Lable,流标签。其实在IPv4中的MPLS、QoS等业务中也使用了流标签,只不过他们是使用其他的协议将流标签放置在合适的位置,对报文进行了额外的封装。而在IPv6中,流标签字段属于网络层封装,直接在网络层报头中出现了,这就给数据包转发带来了很大的遍历,因为这样做可以使得中间的路由器在转发数据包时只需要查看IP层头部的Flow Lable字段就可以了,而不用对将数据包拆开,做深层次分析,这也会加快数据包的转发速度。
从上面的分析,我们可以看出,相对于IPv6,我们的报文头部满足了多种通信需求,简化了报文处理流程和难度,加快了网络设备对IPv6报文转发处理效率,从而更加的适应现代社会物联网、低延时、大数据等新需求的出现。
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200/article/details/118614561
————————————————




点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部