一文详解IPv4与IPv6协议

news2024/12/21 23:04:42

前段时间的工作大多与通信协议相关,随着协议相关工作的不断深入,相关数据包的分析占据了不少工作时间。在数据报文分析中,发现大学期间IP协议内容已经重新还给了老师,相关知识完全没有了印象,这篇文章算是一篇复习文,对相关IP协议进行重学习。

  • IPv4 协议详解
  • IPv6 协议详解
  • IPv4 IPv6 报文对比

一、IPv4

  • IPv4 协议简介
  • IPv4 地址数量
  • IPv4 协议特点
  • IPv4 报文结构
  • IPv4 报文最大长度

1.1 IPv4 简介

IPv4(Internet Protocol version 4)是网际协议的第四个修订版本,也是该协议第一个被广泛部署和使用的版本。其在1981年9月由IETF发布的RFC791中被描述,是一种面向无连接的协议,可以在使用分组交换的链路层(如以太网)上运行。在数据传输方面,IPv4协议会尽最大努力交付数据包,但不能保证所有数据包能够成功到达目的地,或者按照正确的顺序到达,这些方面由上层的传输协议(如TCP协议)处理

IPV4协议报文结构

1.2 IPv4 地址数量

IPv4协议使用32位(4字节)地址,其地址空间为4,294,967,296(2^32)个。其中一些地址被保留用于特定用途,如专用网络(约1800万个地址)和多播地址(约2.7亿个地址),这减少了可供互联网路由的地址数量。
随着地址被分配给最终用户,IPv4地址枯竭问题也日益严重。虽然基于分类网络、无类别域间路由和网络地址转换的地址结构重构减缓了地址枯竭的速度,但在2019年11月26日,全球近43亿个IPv4地址已分配完毕

IPv4地址数量的限制刺激了IPv6的部署,IPv6是唯一的长期解决方案。
IPv6使用128位地址空间,提供了更多的地址,以及更好的安全性和性能。IPv6的广泛部署需要时间和努力,但已经成为解决IPv4地址短缺问题的主要途径。

1.3 IPv4 协议特点

  • 面向无连接
    IPv4是一种面向无连接的协议,每个数据包都是独立的,数据包的传输不需要建立和维护连接状态。这使得IPv4的数据包传输速度较快,但同时也增加了数据包传输的可靠性和安全性方面的挑战。
  • 分组交换
    IPv4协议采用分组交换的技术,将数据分割成一系列小的数据包进行传输,每个数据包都包含了目标地址和源地址等必要的控制信息,这使得数据传输更加高效和灵活。同时,IPv4协议还支持多种传输协议,如TCP、UDP等,可以适应不同的数据传输需求。
  • 简单、可靠、稳定
    IPv4协议的设计非常简单、可靠、稳定,已经被广泛应用于互联网和局域网等各种网络环境中,具有良好的兼容性和稳定性。
  • 地址格式
    IPv4地址是一个32位的二进制数,通常用点分十进制表示法来表示,被分为四段,每段可以取0-255之间的整数。IPv4地址的短缺成为了一个问题,因此引入了私有地址和网络地址转换等技术来缓解IPv4地址短缺的问题。
  • 安全性
    IPv4协议的安全性较低,容易受到各种网络攻击,如IP欺骗、数据包伪造等。因此,为了提高IPv4协议的安全性,通常需要通过路由器、防火墙等网络安全设备来进行加强和保护。

1.4 IPv4 报文结构

IPv4报文的最大长度是65,535字节,这个长度是由IP报文中的16位总长度字段决定的,下图为IPv4报文的结构:

IPv4协议首部报文结构

IPV4协议首部报文抓包

  • 版本(Version)
    占用4比特位,表示IP协议的版本号,IPv4的值为4。
  • 首部长度(Internet Header Length)
    占用4比特位,表示IP首部的长度,首部长度说明首部有多少32位字(4字节,也就是说单位为4字节)。这个字段的最小值是5(二进制0101),相当于5*4=20字节;最大十进制值是15,相当于15*4=60字节
  • 服务类型(Type of Service,TOS)
    占用8比特位,表示IP报文的服务类型,用于指定QoS(Quality of Service)和流量控制等参数。
  • 总长度(Total Length)
    占用16比特位,表示整个IP数据报的长度,包括IP首部和数据部分,单位为字节。这个字段的最小值是20(20字节首部+0字节数据),最大值是2^16-1=65,535。
  • 标识(Identification)
    占用16比特位,这个字段主要被用来唯一地标识一个报文的所有分片,因为分片不一定按序到达,所以在重组时需要知道分片所属的报文。每产生一个数据报,计数器加1,并赋值给此字段。
  • 标志(Flags)
    占用3比特位,用于标识IP分片的状态。
    • 位0:保留,必须为0;
    • 位1:禁止分片(Don’t Fragment,DF),当DF=0时才允许分片;
    • 位2:更多分片(More Fragment,MF),MF=1代表后面还有分片,MF=0 代表已经是最后一个分片。
  • 分片偏移(Fragment Offset)
    占用13比特位,用于表示分片相对于原始数据报的偏移量。
  • 生存时间(Time to Live)
    占用8比特位,表示数据报在网络中最多可以被经过的路由器数量,用于防止数据报在网络中无限循环。
  • 协议(Protocol)
    占用8比特位,表示数据报中的数据部分使用的协议类型,例如TCP、UDP、ICMP等。
  • 校验和(Header Checksum)
    占用16比特位,用于检测IP头部在传输过程中是否出现了错误。
  • 源地址(Source Address)
    占用32比特位,表示数据报的发送者IP地址。
  • 目标地址(Destination Address)
    占用32比特位,表示数据报的接收者IP地址。
  • 选项(Options)
    附加的首部字段可选的跟在目的地址之后,但这并不被经常使用,从1到40个字节不等如果首部长度大于5,那么选项字段必然存在

1.5 IPv4 报文长度

IPv4报文的最大长度是65,535字节,这个长度是由IP报文中的16位总长度字段决定的。该字段的最大值是65535,因为它是一个16位无符号整数,所以IP报文的最大长度不能超过该值

需要注意的是,在实际情况下,IP报文的长度通常会受到网络设备(如路由器、防火墙等)和网络链路的限制,另外,由于网络传输存在MTU(Maximum Transmission Unit)的限制实际上能够传输的最大数据长度通常不会超过MTU值,一般为1500个字节左右,因此实际传输的IP报文长度可能会比最大长度小得多

网络传输MTU(Maximum Transmission Unit)大小并不是固定的,它的大小取决于底层网络传输协议和网络设备的配置。不同的网络传输协议和设备可能会有不同的MTU大小限制。
以太网是最常见的网络传输协议之一,其MTU大小通常为1500字节。在以太网上传输的数据包如果超过1500字节,就会被分割成多个小块进行传输。其他网络传输协议的MTU大小可能会有所不同,例如PPP协议的MTU大小通常为1480字节,ATM网络的MTU大小通常为48字节等。
此外,MTU还受到网络设备的配置影响。例如,路由器和交换机等网络设备可以通过配置MTU大小来优化网络传输效率和减少延迟。在实际应用中,为了保证网络传输的稳定性和效率,需要根据具体的网络环境和需求来设置MTU大小,并进行必要的优化和调整。

二、IPv6

  • IPv6 协议简介
  • IPv6 地址数量
  • IPv6 协议特点
  • IPv6 报文结构
  • IPv6 载荷长度

2.1 IPv6 简介

IPv6(Internet Protocol version 6)是网际协议的最新版本,主要是为了解决IPv4地址枯竭问题,同时它也在其他方面对于IPv4有许多改进,协议由1998年12月公布的 RFC2960 定义。

IPv6的设计目的是取代IPv4,然而长期以来IPv4在互联网流量中仍占据主要地位,IPv6的使用增长缓慢。在2022年4月,通过IPv6使用Google服务的用户百分率首次超过40%。
虽然IPv6在1994年就已被IETF指定作为IPv4的下一代标准,由于早期的路由器防火墙及相关应用程序皆须改写,所以在世界范围内使用IPv6部署的网络服务与IPv4相比相对较少,技术上仍以双架构并存居多

2.2 IPv6 地址数量

IPv6地址总长度为128比特位(16字节)分为8组(每组2个字节),每组以4个十六进制数形式表示,组间用冒号分隔。例如:FC00:0000:130F:0000:0000:09C0:876A:130B

因为IPv6地址使用128位(16字节)表示,其可以支持约3.4×10²³(2^128)个唯一地址。这个数量比IPv4地址空间(43亿个地址)大得多,可以满足未来数十年互联网的发展需求。IPv6地址空间的巨大规模不仅可以支持更多的设备连接到互联网,而且还可以提供更好的网络安全性和性能。

2.3 IPv6 协议特点

  • 更大的地址空间
    IPv6地址使用128位长度表示,可以支持约3.4×10²³(2^128)个唯一地址,这个数量比IPv4地址空间(43亿个地址)大得多,可以满足未来数十年互联网的发展需求。
  • 改进的寻址和路由机制
    IPv6协议引入了一些新的寻址和路由机制,包括多播寻址、任播寻址和移动IPv6等,使得网络路由更加高效和灵活。
  • 简化的头部结构
    IPv6协议头部长度固定为40字节,相比于IPv4头部结构更加简化,可以提高网络数据传输效率。
  • 可选的扩展首部
    IPv6定义了许多可选的的扩展首部,不仅可提供比IPv4更多的功能,而且还可以提高路由器的处理效率,因为路由器对逐跳扩展首部外的其他扩展首部都不进行处理。
  • 更好的安全性和隐私保护
    IPv6协议提供了更好的安全性和隐私保护,包括IPsec协议的强制支持、地址隐私扩展等,可以有效地保护网络和用户的隐私。
  • 更好的流量控制和服务质量
    IPv6协议引入了流量控制和服务质量(QoS)机制,可以更好地管理网络流量和提供不同的服务质量,提高用户体验。

2.4 IPv6 报文结构

IPv6数据报首部长度固定的40字节,在IPv6中所有的扩展首部并不属于IPv6数据报的首部,扩展首部与其后面的数据部分合起来构成有效载荷

 IPv6报文首部与有效载荷

IPv6协议首部报文结构

IPV6协议首部报文抓包

  • 版本号(Version)
    占用4比特位,用于指示报文使用的IPv6协议版本号,固定为6。
  • 流量类别(Traffic Class)
    占用8比特位,用于区分不同的IPv6数据报的类别或优先级。。
  • 流量标签(Flow Label)
    占用20比特位,IPv6提出了流的抽象概念,就是因特网上从特定源点到特定终点(单播或多播)的一系列IPv6数据报(如实时音视频数据的传送)。所有属于同一个流的IPv6数据报都具有同样的流量标签(相同的流量标签可进行同样的数据优先级设定)。因此,流标号对于实时音视频数据的传送特别有用,对于传统的非实时数据,流标号用处不大。
  • 负载长度(Payload Length)
    占用16比特位,用于指示IPv6报文中载荷(Payload)的长度,不包括IPv6头部的长度
  • 下一个报头(Next Header)
    占用8比特位,用于指示IPv6头部后面的下一个报头类型,如TCP报头、UDP报头、ICMPv6报头等。
  • 跳数限制(Hop Limit)
    占用8比特位,类似于IPv4中的生存时间(TTL)字段,用于限制报文在网络中经过的最大跳数。
  • 源地址(Source Address)
    占用128比特位,表示发送端的IPv6地址。
  • 目标地址(Destination Address)
    占用128比特位,表示接收端的IPv6地址。

2.5 IPv6 载荷长度

关于 IPv6 有效载荷长度

  • IPv6报文有效载荷长度主要由Payload Length字段决定,Payload Length字段占用16比特位,用于表示载荷Payload的长度,即除去IPv6报头(固定为40字节)之外的部分。鉴于此字段为16比特,其最大值为2^16 - 1,即65,535字节
  • 然而,IPv6还支持一种叫做Jumbo Payload的选项。当使用这个选项时,载荷长度可以通过一个名为 Jumbo Payload Option 的扩展报头表示,该扩展报头中有一个32比特(4字节)的字段表示载荷长度。因此,最大载荷长度可以达到2^32 - 1,即4,294,967,295字节。

尽管IPv6有效载荷最大长度可达到4294967295字节,但其承载的传输层协议数据(如TCP、UDP)仍然受到IPv6网络中MTU的限制,因此仍然需要遵循最大报文长度65,535字节的限制

三、IPv4、IPv6 报文比较

IPv4报文首部结构

IPv6报文首部与有效载荷

IPv6数据报首部长度固定的40字节,所有的扩展首部并不属于IPv6数据报的首部,扩展首部与其后面的数据部分合起来构成有效载荷

由于IPv6地址的长度扩展到了128比特位,使得IPv6数据报基本首部的长度增大到了40字节,比IPv4数据报首部固定部分的长度(20字节)增大了20字节。

其相比于IPv4报文:

  • 取消了首部长度字段:IPv6数据报的首部长度是固定的40字节
  • 取消了服务类型字段:IPv6数据报首部中的流量类别和流量标签字段实现了区分服务字段的功能。
  • 取消了总长度字段:改用有效载荷长度字段。这是因为IPv6数据报的首部长度是固定的40字节,只有其后面的有效载荷长度是可变的。
  • 取消了标识、标志和片偏移字段:这些功能已包含在IPv6数据报的分片扩展首部中。
  • 把生存时间TTL字段改称为跳数限制字段:这样名称与作用更加一致。
  • 取消了协议字段:改用下一个首部字段。
  • 取消了首部检验和字段:可以加快路由器处理IPv6数据报的速度。
  • 取消了选项字段:改用扩展首部来实现选项功能。

参考

百科IPv4:
https://zh.wikipedia.org/wiki/IPv4

RFC791 IPV4:
https://datatracker.ietf.org/doc/html/rfc791

百科IPv6:
https://zh.wikipedia.org/wiki/IPv4

RFC2460 IPV6:
https://datatracker.ietf.org/doc/html/rfc2460

= THE END =

文章首发于公众号”CODING技术小馆“,如果文章对您有帮助,欢迎关注我的公众号。

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

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

相关文章

Day05 04-MySQL分库分表介绍

文章目录 第十七章 MySQL分库分表17.1 什么是分库分表17.2 为什么要分库分表17.3 垂直切分17.3.1 垂直分库17.3.2 垂直分表 17.4 水平切分17.4.1 水平分库17.4.2 水平分表17.4.3 常见的水平切分规则 第十七章 MySQL分库分表 17.1 什么是分库分表 MySQL数据库常见的优化方案中…

新的管理中心应用

大家好,才是真的好。 Notes/Domino 14 Drop1如约而至,让我们有了很多内容要写。首先是管理新特性,就像上篇和大家介绍的,感受最直接的就是新的管理中心应用AdminCentral。 以目前的Drop1环境来看,管理中心应用主要功…

plus.runtime.version总是13.8.4

引言 最近在uniapp中使用到了plus.runtime.version,但是在开发环境下一直无法获取到真正的版本号,他的值一直都是13.8.4,在全局进行搜索也没有发现哪里设置了13.8.4,后来查阅了相关资料才知道这并不是自己写错了。 场景复现&…

你知不知道ai如何绘画的

有没有想要自己能绘画一幅有艺术感的画呢?想自己也能将自己所想的事、物或景绘画出来呢?其实你不用担心你的绘画功底不行,因为现在有一门ai绘画的技术,它可以将你提供的信息用智能技术自动绘画,你也可以把它当做一门新…

数字IC前端学习笔记:仲裁轮询(一)

相关文章 数字IC前端学习笔记:LSFR(线性反馈移位寄存器) 数字IC前端学习笔记:跨时钟域信号同步 数字IC前端学习笔记:信号同步和边沿检测 数字IC前端学习笔记:锁存器Latch的综合 数字IC前端学习笔记&am…

【面试必问】Spring核心之面向切面编程(AOP)

tip:作为程序员一定学习编程之道,一定要对代码的编写有追求,不能实现就完事了。我们应该让自己写的代码更加优雅,即使这会费时费力。 💕💕 推荐:体系化学习Java(Java面试专题&#…

【数据结构】八大排序算法

目录 一、直接插入排序 二、希尔排序 三、选择排序 四、堆排序 五、冒泡排序 六、快速排序 1、递归版本 1.1 hoare 法 1.2 挖坑法 1.3 前后指针法 2、非递归版本 3、快速排序的优化 3.1 三数取中 3.2 小区间优化 七、归并排序 1、递归版本 2、非递归版本 八、计数排序 …

【Spring Security】的RememberMe功能流程与源码详解

文章目录 前言原理 基础版搭建初始化sql依赖引入配置类验证 源码分析 进阶版集成源码分析疑问1疑问2 鉴权 升级版集成初始化sql配置类验证 源码分析鉴权流程 扩展版 前言 之前我已经写过好几篇权限认证相关的文章了,有想复习的同学可以查看【身份权限认证合集】。今…

Ada Tutorial(3)SPARK2——Post condition + Loop Invariant 后置条件 + 循环不变量

文章目录 divmod循环不变量 v.s. 后置条件扩展思考 divmod -- divmod.adb package body DivMod with SPARK_Mode isprocedure DivMod(X : Positive; N : Positive; K : out Natural; Remainder : out Natural)isY : Natural : X;beginK : 0;while Y > N loopY : Y - N;K : …

MySQL 日期与时间函数

一、获取日期、时间 函数用法CURDATE(),CURRENT_DATE()返回当前日期,只包含年、月、日CURTIME() , CURRENT_TIME()返回当前时间,只包含时、分、秒NOW() , SYSDATE(),CURRENT_TIMESTAMP() , LOC…

为什么企业和品牌一定要创建百度百科词条呢?

在企业和品牌宣传推广方面,百度百科作为一个权威的知识平台,早已成为了宣传阶段非常重要的一环。本文伯乐网络传媒将从以下几个方面探讨为什么企业和品牌一定要创建百度百科词条。 一、提升企业和品牌知名度 在信息时代,信息的获取渠道变得更…

PySpark简单使用(零)

介绍 Spark是Apache基金会旗下的顶级开源项目,用于对海量数据进行大规模分布式计算。PySpark是Spark的Python实现,是Spark为Python开发者提供的编程入口,用于以Python代码完成Spark任务的开发PySpark不仅可以作为Python第三方库使用&#xf…

【深入浅出 Spring Security(九)】解决跨域问题和 Axios 所需配置

跨域 一、SpringMVC 跨域的解决方案CrossOrigin(注解的方式解决)addCorsMappings(实现WebMvcConfigurer接口,重写方法) 二、Spring Security 跨域的解决方案前后端跨域测试(前端相关配置) 啥是跨…

计算机提示“找不到vcruntime140.dll,无法继续执行代码可”以这样子修复

首先,对于那些不熟悉的人来说,vcruntime140.dll是一个关键文件,用于在Windows操作系统上运行使用C语言编写的大型应用程序。如果你正在运行或安装这样的应用程序,但找不到vcruntime140.dll文件,那么你的应用程序可能无…

word插入图片为何无法显示?

word是我们常用的软件,在使用过程中,我们难免会遇到这样或那样的问题,解决问题的思路我认为首先要找出原因,然后再想办法解决才是最好的方案。 如果在 Word 文档中插入的图片无法显示,可能是以下原因之一:…

安装ORB-SLAM2纯记录(caffe)

ubuntu20.04 显卡配置3050TI 显卡驱动: NVIDIA-SMI 525.116.04 Driver Version: 525.116.04 cuda:Cuda compilation tools, release 11.0, V11.0.221 eigen:3.4.0 opencv 3.4.9 opencv下载链接 pangolin :高翔SLAM十四讲中的 没有安装最新版本 安装pangolin时候出…

有趣的图(二)(56)

小朋友们好,大朋友们好! 我是猫妹,一名爱上Python编程的小学生。 和猫妹学Python,一起趣味学编程。 今日主题 咱们书接上回,上次学了图的基本概念,你都学会了吗? 咱们今天要学习内容如下&a…

通过Appium Desktop实现录制功能并导出自动化脚本

1、我们进入下面这个界面 图中红色标记1为 “top by coordinates” 按钮, 这是一种通过坐标定位元素的方式。 图中红色标记2为 “Start Recording” 按钮, 选中表示处理录制状态。 2、点击“top by coordinates” 按钮,再点击 “Start Recor…

vue3基础知识的简单应用

vue3基础知识的简单应用 vue3基础知识的简单应用运行结果 vue3基础知识的简单应用 父组件代码 <template><div class"home"><img alt"Vue logo" src"../assets/logo.png"><HelloWorld msg"Welcome to Your Vue.js A…

linux opencv4.2静态库编译及链接

1. 编译静态库 拉取opencv源码&#xff1a; https://github.com/opencv/opencv.git进入源码根目录&#xff0c;在platforms/linux目录下创建编译脚本build_linux.sh cd platforms/linux vi build_linux.sh脚本里配置cmake编译参数&#xff0c;这里编译静态库需要将 -DBUILD_S…