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

e23162bae8731204827276e19e5af45d.gif

前言

RFC2460定义了IPv6数据报格式。

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

但在IPv6数据报数据部分还可以包括0个或者多个IPv6扩展报头(Extension header)。

正文

1IPV6报文格式
如下图所示。IP报头部分固定为40字节长度,而有效载荷部分最长不得超过65535字节。
1a1538984f9076d18a45e2ecbbb95a12.png

IPv6和IPv4之间的最大差别在于:IP地址的长度从32位到128位。

  • 通过裁剪IPv4报头中的某些字段,或把一些字段移入到扩展报头中,IPv6基本报头的总长度大大减小了。

  • IPv6使用固定长度的基本报头,从而简化了转发设备对IPv6报文的处理,提高了转发效率。

  • 尽管IPv6地址长度是IPv4地址长度的4倍,但IPv6基本报头的长度只有40字节,为固定的IPv4报文头长度(不包括选项字段)的2倍。

IPv6报头格式如下图所示:

c9d0f47aa9b8d5663e412c231d66e7f1.png
2IPV6报文各字段作用
  • 版本(Version)

版本字段用来表示IP数据报使用的是IPv6协议封装,占4位,对应值为6(0110)。

  • 通信分类(Traffic Class)

通信分类字段用来标识对应IPv6的通信流类别,或者说是优先级别,占8位,类似于IPv4中的ToS(服务类型)字段。

  • 流标签(Flow Label)

流标签字段时IPv6数据报中新增的一个字段,占20位,可用来标记报文的数据流类型,以便在网络层区分不同的报文。

流标签字段有源节点分配,通过流标签、源地址、目的地址三元组方式就可以唯一标识一条通信流,而不用像IPv4那样需要使用五元组方式(源地址、目的地址、源端口、目的端口和传输层协议号)。

这样发动的最大好处有两点:

一是流标签可以和任意的关联,需要标识不同类型的流(可以是非五元组)时,无需对流标签做改动;

二是流标签在IPv6基本头中,使用IPSec时此域对转发路由器可见,因此转发路由器可以在使用IPv6报文IPSec的情况下仍然可以通过三元组(流标签、源地址、目的地址)针对特定的流进行QoS(质量服务)处理。

  • 有效载荷长度(PayLoad Length)

有效载荷长度字段是以字节为单位的标识IPv6数据报中有效载荷部分(包括所有扩展报头部分)的总长度,也就是除了IPv6的基本报头以外的其他部分的总长度,占20位。

  • 下一个头部(Next Header)

下一个头部字段用来标识当前报头(或者扩展报头)的下一个头部类型,占8位。

每种扩展报头都有其对应的值。下一个头部字段内定义的扩展报头类型与IPv4中的协议字段值类似,但在IPv6数据报中,紧接着IPv6报头的可能不是上层协议头部(当没有扩展报头或者为最后一个扩展报头时才是上层协议头),而是IPv6扩展报头。

这一机制下处理扩展报头更搞笑,因为标识了数据报中对应的上层协议或者扩展报头类型,转发路由器只需处理必须处理的扩展报头,提高了转发效率。

  • 跳数限制(Hop Limit)

跳数限制于IPv4报文中的TTL字段类似,指定了报文可以有效转发的次数,占8位。报文每经过一个路由器结点,跳数值就减1,当此字段值减到0时,则直接丢弃该报文。

  • 源地址(Source IP Address)

源IP地址字段标识了发送该IPv6报文源节点的IPv6地址,占128位。

  • 目的IP地址(Destination IP Address)

目的IP地址字段标识了IPv6报文的接受节点的IPv6地址,占128位。

3IPv6扩展报头
在各字段介绍中我们讲到了,IPv6报文中可以携带可选的IPv6扩展报头

IPv6扩展报头是跟在IPv6基本报头后面的可选报头。由于在IPv4的报头中包含了几乎所有的可选项,因此每个中间路由器都必须检查这些选项是否存在。

在IPv6中,这些相关选项被统一移到了扩展报头中,这样中间路由器不必处理每一个可能出现的选项(仅有“逐跳选项”报头是必须要处理的),提高了处理器处理数据报文的速度,也提高了其转发的性能。

IPv6扩展报头附加在IPv6报头目的IP地址字段后面,可以有0个,或者多个扩展报头。

IPv6扩展报头分类:

  • 逐跳选项头(Hop-by-hop Options Header)

本扩展报头类型值为0(在IPv6报头下一个头部字段中定义,下同)。

此扩展报头须被转发路径所有节点处理。

目前在路由告警(RSVP和MLDv1)与Jumbo帧处理中使用了逐跳选项头,因为路由告警需要通知到转发路径中所有结点,而Jumbo帧是长度超过65535字节的报文,传输这种报文需要转发路径中所有结点都能正常处理。

  • 目的选项头(Destination Options Header)

本扩展报头类型值为60。只可能出现在两个位置:
1. 路由头前,这是此选项头被目的节点和路由头中指定的结点处理;
2. 上层头前(任何的ESP头后),此时只能被目的结点处理。

移动IPv6中使用了目的选项头,称为家乡地址选项。

家乡地址选项由目的选项头携带,用以移动结点离开“家乡”后通知接受节点此移动结点对应的家乡地址。

接受节点收到带有家乡地址选项的报文后,会把家乡地址选项中的源地址(移动节点的家乡地址)和报文中源地址(移动节点的转交地址)交换,这样上层协议始终认为是在和移动节点的家乡地址通信,实现了移动漫游功能。

  • 路由头(Routing Header)

本扩展报头类型值为43,用于源路由选项和移动IPv6。

  • 分段头

本扩展报头类型值为44,用于标识数据报的分段,在IPv4中就有对应的字段。当源节点发送的报文超过传输链路MTU(源节点和目的节点之间传输路径的MTU)时,需要对报文进行分段时使用。

  • 认证头

本扩展报头类型值为51,用于IPSec,提供报文验证,完整性检查。

  • 封装安全有效载荷头

本扩展头类型值为50,用于IPSec,提供报文验证、完整性检查差和加密。

  • 上层头

这是用来标识数据报中上层协议类型,如TCP、UDP、ICMP等。

注意:

  • 目的选项头最多出现两次,一次在路由头前,一次在上层协议头前,其他选项头最多只能出现一次。

  • IPv6节点必须能够处理选项头(逐跳选项头除外,它固定只能紧随基本报头之后)在任意位置出现,以保证互通性。

总结

1、对比IPv4数据报头部格式可以看出,IPv6去除了IPv4报头中的头部长度、标识、标志、段偏移、校验和、选项、填充这么多字段,却只增加了流标签这一个字段,因此IPv6报头处理和IPv4报头处理相比大大简化,提高了处理效率。

2、IPv6为了更好地支持各种选项处理,提出了扩展头的概念,新增选项时不必修改现有的结构就能做到,理论上可以无限扩展,体现了优异的灵活性。

以上来源网络,如有侵权,联系删除!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/557949.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

曲面设计步骤pdf_3dmax模渲大师|室外设计师怎么用3dmax疯狂模渲大师制作室内设计效果图的外景天空?...

3dmax模渲大师|室外设计师怎么用3dmax疯狂模渲大师制作室内设计效果图的外景天空?这次食住玩讲的是第十三章的第1节,3dmax疯狂模渲大师室外设计篇的第1课——“外景天空”的使用方法。在室内设计效果图领域,也有要涉及室外的时候。…

go 修改结构体方法_Go36-13-结构体及其方法

结构体及其方法结构体类型表示的是实实在在的数据结构。一个结构体类型可以包含若干个字段,每个字段通常都需要有确切的名字和类型。结构体类型也可以不包含任何字段,这样并不是没有意义的,因为我们还可以为这些类型关联上一些方法&#xff0…

iphone日历显示周视图_用敬业签记录放假安排 2021年放假安排日历

2021年已经踏着轻快的步伐向我们一路小跑而来,新的一年中,除了可以做更多的成绩之外,还有很多假期伴随而来。做好放假安排就可以让假期更加充实,为了能够更好的记录放假安排和相关事项可用敬业签这款便签软件。使用敬业签记录放假…

oracle删除orcl库_oracle删除数据文件

在我们详细介绍之前,我们必须说清楚一点:Oracle不提供如删除表、视图一样删除数据文件的方法,数据文件是表空间的一部分,所以不能“移走”表空间。一、使用offline数据文件的方法非归档模式使用:alter database datafi…

datagridview取消默认选中_winform datagridview中的 combobox如何选中默认值?

看了半天,我终于知道你是在添加行,并不是绑定——你是试图从数据库中逐行读取数据,然后赋值到Combobox中,对不?请不要这样做!请直接把DataTable作为数据源赋值给GridView!public partial class …

人工智能的炒作_为什么人工智能被过度炒作?

像任何新技术一样,人工智能也经历了称为“炒作周期”的各个阶段。它们从技术触发器开始。如果超过了人们设定的期望值(过度夸大),那么就会带来技术未达到预期的幻灭感,然后就是带来启发的成功案例,最后是生产力的稳定期。有了人工…

opencv轮廓周长原理_opencv轮廓逼近的精度参数与周长cvContourPerimeter的汇总

1)CV_Assert():若括号中的表达式值为false,则返回一个错误信息。函数原型是:#define CV_Assert( expr ) if((expr)) ; else cv::error( cv::Exception(CV_StsAssert, #expr, "", __FILE__, __LINE__) )2)cvContourPerimeter&#x…

Eclipse 导入项目乱码问题

Eclipse 导入项目乱码问题 1.编码不对 a.对某文件或某工程更改编码: 鼠标移到工程名或文件名,右键->Properties->Resource->Text file enCoding ->更改编码(GBK、UTF-8等)->Apply->OK退出 b.修改整个命名空…

mysql的所有聚合函数_MySQL 聚合函数(一)聚合(组合)函数概述

MySQL版本:5.7+ 一、MySQL 5.7中的聚合函数 MySQL 5.7中的聚合函数如下: 除非另有说明,否则组合函数会忽略NULL值。 如果在不包含Group By子句的语句中使用组合函数,就等效于对所有行进行分组。(个人理解是,结果总是只有一行。)关于这点的更多信息,后面的小节“MySQL处理…

mysql中的comment用法

mysql中的comment用法 在MySQL数据库中,字段或列的注释是用属性comment来添加。 创建新表的脚本中, 可在字段定义脚本中添加comment属性来添加注释。 示例代码如下: create table test( id int not null default 0 comment ‘用户id’ ) 如…

docker 安装mysql_Docker安装MySQL完整版流程

我们自己在linux上安装mysql的话,超级麻烦,安装完后还要进行各种各样的配置,之前在docker专题写了用docker安装mysql的快速版本以及修改编码的方式,这里总结一下安装流程和命令。环境Linux version 3.10.0-693.2.2.el7.x86_64dock…

mysql 转型_MySQL的未来在哪?

阿里云 MySQL&MariaDB 数据库产品结合开源社区,提供了稳定、可靠、便捷、弹性的在线数据库服务,帮助全球企业客户进行数字化转型。MySQL发展经历了一系列变化,从Sun到Oracle,发展也经过了几个阶段。MySQL从5.7版本开始走上了代…

mongoose换成mysql_如何将MongoDB数据库的数据迁移到MySQL数据库中

FAQ v2.0终于上线了,断断续续忙了有2个多月。这个项目是我实践的第一个全栈的项目,从需求(后期有产品经理介入)到架构,再到设计(有征询设计师的意见)、构建(前端、后台、数据库、服务器部署),也是第一次独立负责一个项目&#xff…

java虚拟机——JVM

JVM:java虚拟机,简称JVM,是运行所有java程序的假想计算机,是java程序的运行环境,是java最具吸引力的特征之一。我们编写的java代码,都运行在JVM之上。 跨平台:任何软件的运行,都必须…

mysql 5.0.37.tar.gz_Linux下MySQL5.0.37安装配置步骤

Linux下安装MySQL5.0.37需要以下面三个包:MySQL-client-community-5.0.37-0.rhel3.i386.rpmMySQL-server-community-5.0.37-0.rhel3.i386.rpmperl-DBI-1.53-2.fc7.i386.rpm(以下步骤需要root权限)1.验证是否已经安装过MySQLrpm -qa|grep MySQL如果发现有安装过,并需要卸载,使用…

JRE和JDK

JRE:是java程序的运行时环境,包含JVM和运行时所需要的核心类库。 JDK:时java程序开发工具包,包含JRE和开发人员使用的工具。 我们想要运行一个已有的java程序,那么只需要安装JRE即可。 我们想要开发一个全新的java程序…

mysql index subquery_[慢查优化]慎用MySQL子查询,尤其是看到DEPENDENT SUBQUERY标记时

它的执行计划如下,请注意看关键词“DEPENDENT SUBQUERY”:id select_type table type possible_keys key key_len ref rows Extra------ ------------------ ------ ------------…

java程序开发步骤

java程序开发步骤 开发环境搭建完毕后,可以开发第一个程序了 java程序开发三个步骤:编写,编译,运行。

mysql数据库rp集群_MySQL集群入门(PXC)

目标:1.掌握PXC集群MySQL方案的原理;2.掌握PXC集群的强一致性;3.掌握PXC集群的高可用方案;硬件要求:1.Win10x64企业版/linux/MacOS;2.Docker虚拟机;3.内存8GB以上;单节点数据库的弊端…

标识符、命名规则

标识符:是指在程序中,我们自己定义的内容。比如:类的名字、方法的名字和变量的名字等等; 命名规则:(硬性要求) 标识符可以包含英文字母26个(区分大小写),0-9…