从今天开始我将介绍一下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

IPv6报文格式讲解及其科学性探究相关推荐

  1. IPv4和IPv6报文格式介绍和对比

    IPv4和IPv6报文介绍和对比 IPv4数据报 IPv4报文详解 IPv6数据报 IPv6报文详解 扩展头部详解 IPv4和IPv6报文详细对比 IPv4数据报 IPv4报文详解 版本Version ...

  2. IPv4 和 IPv6 报文格式详解

    文章目录 1 概述 2 报文格式 2.1 IPv4 2.2 IPv6 2.3 两者区别 3 网工软考真题 1 概述 2 报文格式 2.1 IPv4 中文名 英文名 长度 bit(位) 解释 版本 Ve ...

  3. IPv4 和 IPv6 数据报格式详解

    IPv4 报文头格式及各字段功能 IPv4 报头格式 各字段功能: 1.版本号(Version):长度 4 bit .标识目前采用的 IP 协议的版本号.一般的值为 0100(IPv4),0110(I ...

  4. IPv4和IPv6报文详细和区别

    文章目录 IPv4和IPv6报文详细和区别 一.IPv4报文格式 二.IPv6报文格式 三.IPv4报文和IPv6报文区别 IPv4和IPv6报文详细和区别 一.IPv4报文格式 1.Version ...

  5. ++实现 ipv6数据报_IPV6报文格式和IPV4有什么区别?

    前言 RFC2460定义了IPv6数据报格式. 总体结构上,IPv6数据报格式与IPv4数据报格式是一样的,也是由IP报头和数据(在IPv6中称为有效载荷)这两个部分组成的. 但在IPv6数据报数据部 ...

  6. HTTP报文结构详细讲解(HTTP请求报文和响应报文格式)

    HTTP报文结构 HTTP有两类报文: 请求报文-------从客户向服务器发送请求报文,如图6-12(a) 响应报文-------从服务器到客户的回答,如图6-12(b) 由于HTTP是面向文本的, ...

  7. HTTP报文格式详细讲解

    HTTP报文格式 HTTP报文分为请求报文和响应报文,只有发送了请求报文,才会有响应报文. 常见的报文格式如下所示: 阿里云代金券1888元领取教程: https://blog.csdn.net/qq ...

  8. IPv6地址基础理论讲解

    目录 IPv4地址回顾 IPv4地址分类 IPv4地址书写格式 IPv6地址讲解 IPv6地址书写格式 IPv6单播地址 EUI-64 IPv6组播地址 IPv6任播地址 IPv6地址和IPv4地址的 ...

  9. DNS协议详解及报文格式分析

    https://blog.csdn.net/tianxuhong/article/details/74922454 目录 一. DNS协议理论知识 1.1. 域名结构 1.2. 域名服务器 1.3. ...

  10. icmp报文格式_IPV6报文格式和IPV4有什么区别?

    前言 RFC2460定义了IPv6数据报格式. 总体结构上,IPv6数据报格式与IPv4数据报格式是一样的,也是由IP报头和数据(在IPv6中称为有效载荷)这两个部分组成的. 但在IPv6数据报数据部 ...

最新文章

  1. Openresty最佳案例 | 第1篇:Nginx介绍
  2. 4岁的儿子还不会写红黑树,我该怎么办?
  3. python语言的作者是_Python是一门动态语言
  4. hrjava项目原型html_Mockplus for Mac(原型设计工具)
  5. 把握人工智能命脉的有效方法
  6. 2016年,我的和自己谈谈
  7. 安全扫描工具_固件级安全,微软安全工具新增UEFI扫描功能
  8. java+跑多线程_java项目怎么多线程跑单元测试,ide是intellij?
  9. Kruscal算法---最小生成树
  10. SVN服务更换小记(由subversion更换为VisualSVN)
  11. 惠普T620瘦客户机安装Win7时AMD显卡驱动造成Aero透明效果不能使用
  12. 腾讯云服务器的功能与优势体现在哪里?为新手选择服务器提供参考
  13. 国内B2C 26个经典购物网站商城收集
  14. [吐血推荐]超冷笑话集锦!
  15. 机器学习——朴素贝叶斯分类器
  16. RTX 3090 Ti 正式发布!30系列显卡的封顶之作!
  17. C#通用类库整理--字符串处理类
  18. 上传本地项目到github远程仓库
  19. NAT技术---网络地址转换
  20. ARFoundation

热门文章

  1. pandas—pandas.DataFrame.iterrows的使用
  2. 7.1 API:GaussianMixture
  3. 数据科学包9-pandas高级内容之数据IO
  4. 活动目录(LiveFolder)
  5. 微软全球资深副总裁张亚勤先生力作——《变革中思索》连载
  6. 需求方案撰写之售前方案
  7. 4.4 Spark SQL实现用户ip地址热度分析
  8. linux:进程管理与SELinux
  9. 梯度下降法(Gradient Descent)初识
  10. python3字典列表_python3_列表、元组、集合、字典