IPv6扩展头(四)——分片头

分片头部(Fragment Header)用于IPv6源节点向目的节点发送一个大于路径MTU的数据报。

一、优势

IPv6 分片头具有多种优势,可提高网络效率,包括减少数据包延迟和减少网络拥塞。使用 IPv6 分片头,数据包在源处而不是中间路由器进行分段,从而节省时间和资源。此外,此过程可确保将数据有效传送到预期目的地,而不会在整个网络中造成不必要的流量或延迟。

IPv6 分片头的另一个显着优势是它们能够处理比 IPv4 更大的数据包。此功能降低了与打包相关的开销成本,并有助于保证在带宽容量较低的网络上传输大文件时获得更好的性能。例如,用户可以将高清视频文件作为一个整体发送,而不是将其分成较小的块并在收到后重新组装它们。

总之,由于其在跨网络高效传输数据包方面具有众多优势,同时通过优化使用每个数据报(数据包)内的可用空间来最大限度地降低基础设施成本,因此任何现代互联网协议实现都应该包括对 IPv6 分片头的支持。

二、结构与原理

1280字节是整个网络中针对IPv6定义的链路层最小MTU(见[RFC2460]的第五节)。在IPv4中,这个值可能是576。在IPv4中,如果数据报大小超过下一跳MTU,任何主机或路由器可将该数据报分片,IPv4头部中第二个32位字段标识分片信息。如下图
在这里插入图片描述

在IPv6中,仅数据报的发送者可以执行分片操作。这就是说,中间路由器或着主机不再需要处理分片报文,这样会提高分片报文处理效率,因为分片报文的重组和分片都是耗cpu的。在这种情况下需要添加一个分片头部。
在这里插入图片描述

  • 下一个标头(Next Header):下一个标头是一个 8 位字段,用于标识分段标头之后存在的标头类型。
  • 保留(Rserved):这是一个 8 位字段,目前完全为零。将来,我们可能会在这里找到一些有用的东西来填充。另外,还保留了一个额外的 2 位字段以供以后使用。
  • 片段偏移量(Fragment Offset):它与IPv4中的大小完全相同,大小为 13 位。正如我们在 IPv4 中扩大分段偏移一样,我们也会在 IPv6 中做同样的事情。
  • 更多片段(M):这里的更多片段位用“M”表示。这是一个一位字段,告诉我们后面是否有更多片段。如果更多片段位为零,则表示其最后一个片段,如果为 1,则它可以是除最后一个之外的任何数据包。
  • 识别号(Identification Number):特定数据包的所有片段的识别号字段都相同,其大小是 IPv4 中的两倍。在数据包标识符字段中为 32 位,在 IPv4 中为 16 位。

分片头部包括的信息与IPv4头部中的相同,只不过标识符字段变成32位,而不是IPv4采用的16位。这个更大的字段提供了在网络中容纳更多分片的能力。图显示了分片头部采用的格式

IPv6分片头部包含一个32位的标识符字段(是IPv4中标识符字段的两倍).M位字段表明该分片是否为原始数据报的最后一个分片。与IPv4一样,分片偏移字段给出了有效载荷在原始数据报中以8字节为单位的偏移量。

上图中,保留字段和2位的Res字段都为0,并且都会被接收方所忽略。分片偏移字段表明数据以8字节为单位的偏移量放置在分片头部之后(相对于原始IPv6数据报的“可分片部分”),如果M字段设置为1,表示在数据报中包含更多分片。如果该值为0,表示该分片是原始数据报的最后一个分片。

在分片过程中,输入的数据报称为"原始数据报",它由两部分组成:“不可分片部分"和"可分片部分”。不可分片部分包括IPv6头部和任何到达目的地之前需要由中间节点处理的扩展头部(即包括路由头部之前的所有头部,如果有逐跳选项扩展头部,则是该头部之前的所有头部)。可分片部分包括数据报的其余部分(即目的选项头部,上层头部和有效载荷数据)。简单说,就是有些扩展头部是不允许分片的,需要每个分片报文都携带不允许分片的部分。

分片头部尝试通过支持 1280 字节的最小数据包大小来尽可能减少分段的使用。如上图所示,如何根据发送方知道的 MTU 进行分片。IPv6 和其他扩展标头是不可分段的部分,因为每个分段都必须经过节点或路由器,并且在每个路由器处都需要存储在这些扩展标头中的信息。这就是 IPv6 数据包分为两部分的原因。一个是不可碎片部分,另一个是可碎片部分。不可分片的部分在其间不会遇到任何修改,而可分片的另一部分则被分为许多小片段,如片段 1、片段 2,依此类推。创建小片段后,片段标头和特定片段(如片段 1)连接到不可分段部分并发送到目的地。有效负载长度在分片后可能会发生变化,并且在添加分片标头后,相应的字段(如下一个标头、标识号、分片偏移量)和更多分片位会被适当填充

当原始数据报被分片后,将会产生多个分片,其中每个分片都包含一个原始数据报综合那个不可分片部分的副本,但是需要修改每个IPv6头部的负载长度字段,以反映它所描述的分片报文大小。在不可分片部分之后,每个新的分片都包含一个分片头部,其中包含一个分片相应的分片偏移字段(例如第一个分片的偏移量为0),以及一个原始分组的标识符字段的副本,最后一个分片的M(更多分片)位字段设置为0。

三、分片示例分析

在这里插入图片描述

假设我们有一个正好 370 字节宽的 IPv6 数据报。IPv6数据报由一个40字节的IP报头、四个30字节的扩展报头和210字节的数据组成。其中两个扩展标头是不可分段的,而两个是可分段的。我们必须通过 MTU 仅 230 字节的链路发送此信息。需要三个片段,而不是您可能期望的两个片段,因为每个片段必须包含两个 30 字节的不可片段扩展标头,并且长度是 8 的倍数。在此 IPv6 片段示例中,一个 370 字节的 IPv6 数据报包含四个 30 字节的 IPv6 数据报。扩展头分为三个片段。

分片的概念与IPv4中的相同。但是,碎片发生的位置不同。在 IPv4 中,如果数据报的大小大于数据报传输的网络的 MTU,则需要源或路由器进行分段。在 IPv6 中,只有原始源可以分段。源必须使用路径 MTU 发现技术来查找路径上任何网络支持的最小 MTU 路径上任何网络支持的 MTU。然后使用这些知识对源进行碎片化。如果源不使用路径 MTU 发现技术,它将数据报分段为 1280 字节或更小,这是连接到互联网的最低限度。

四、安全性分析与建议

IPv6 分片头部用于 IPv6 数据包的分段和重组。虽然分段/重组机制的许多安全隐患在 IPv4 世界中已为人所知,但一些相关问题已经渗透到 IPv6 实现中。这些范围从 DoS 攻击到信息泄漏,如[ RFC7739 ]、[ Bonica-NANOG58 ]和[ Atlasis2012 ]中讨论的。
在这里插入图片描述

在检查 IPv6 分段示例时,主要问题之一是第一个分段可能没有所需的上层(TCP 和 UDP)信息。安全设备需要此信息来确定数据包是否符合其配置的策略和规则。碎片可能会混淆数据,使其能够通过安全设备。路由器和无状态设备通常只查看包含标头信息的第一个片段。许多小片段用于隐藏或 DoS 攻击节点。攻击者将数据包分解成许多小碎片数据包,绕过安全设备。每个小片段看起来都是合法的,但一旦重新组装,整个数据包就会被用来发起攻击。攻击者通过将攻击内容压缩成许多小片段来隐藏他的真实意图。这些可能会被仅查看未碎片部分的设备传递并且看不到。

碎片和碎片重组可能会在中间节点中产生意外且有害的行为。网络碎片化过程可能导致IP 安全问题。 碎片可用于各种攻击,例如指纹识别、IPS 插入/规避、防火墙规避和远程代码执行。分片攻击:攻击者利用 IPv6 分片过程中的漏洞,导致网络设备花费过多的资源来重组分片数据包。其他攻击包括 重叠片段、不完整片段集、隧道内片段和嵌套片段。嵌套片段是具有多组片段标头的数据包,这在标准 IP 网络中绝不会出现。源仅创建一个片段标头。重叠片段可用于操作系统指纹识别和 IPS/IDS 规避。碎片攻击可用于 DoS(终端主机)。如果主机无法正确处理碎片数据包,攻击者可以发送许多碎片数据包,这些碎片数据包将由内核内存处理,从而耗尽内核处理合法碎片的能力。Whisker、Fragrouter 和 Scapy 等许多工具都可以制作这些数据包。

RFC 5722 建议禁止重叠片段。RFC 规定,如果 IPv6 主机执行重组并包含确定重叠的片段,则整个数据报将被默默丢弃。没有错误消息被发送回发送主机。Antonios Atlasis 进行的测试证明,没有一个操作系统符合 RFC 5722。

与 IPv4 世界一样,IPv6 安全功能由带有 “fragments”关键字 的 ACL 组成。ACL 匹配非初始 IPv6 分片。初始 IPv6 分段包含第 3 层和第 4 层的信息。Cisco IOS 具有称为虚拟重组的功能,可检查分段数据包。它是输入 ACL 的次要对象,这意味着输入 ACL 有第一次机会检查传入数据包。它重新组装碎片数据包,检查任何无序的碎片,将它们放回正确的顺序,然后向上发送协议栈。

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

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

相关文章

Uninty 鼠标点击(摄像机发出射线-检测位置)

平面来触发碰撞,胶囊用红色材质方便观察。 脚本挂载到胶囊上方便操作。 目前实现的功能,鼠标左键点击,胶囊就移动到那个位置上。 using System.Collections; using System.Collections.Generic; using UnityEngine;public class c6 : MonoBe…

数据结构-线段树

📑前言 本文主要是【线段树】——线段树简单使用的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 🌄每日一句&…

PyCharm Community Edition 2023.3.3,UI界面设置成旧版

File->Settings->Appearance & Behavior->New UI->Enable new UI(取消勾选)->重启PyCharm 旧版UI: 新版UI:

对 JVM 的类加载机制以及寻找字节码文件的“双亲委派模型”的理解

目录 1、JVM 的类加载机制 1.1、加载 1.2、验证 1.3、准备 1.4、解析 1.5、初始化 2、双亲委派模型 2.1、工作过程 1、JVM 的类加载机制 类加载指的是 Java 进程运行的时候,需要把 .class 文件从硬盘读取到内存,并进行一系列的校验解析的过程。…

人民日报:用好“人工智能+” 赋能产业升级

以下文章来源:北京日报 文生视频、智能家居、智慧工厂……近年来,人工智能发展速度之快、应用范围之广备受瞩目。 政府工作报告提出,深化大数据、人工智能等研发应用,开展“人工智能”行动,打造具有国际竞争力的数字产…

力扣589、590、102、107、429、199、637、515、116、117、104、111、226、101-Java刷题笔记

一、589. N 叉树的前序遍历 - 力扣(LeetCode) 1.1题目 给定一个 n 叉树的根节点 root ,返回 其节点值的 前序遍历 。 n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例&#xff09…

使用Python制作自己的wheel文件

平时自己利用Python制作一个个小工具后想分享给别人,但又嫌分享一堆项目代码很麻烦,那么你可以考虑将自己的项目打包成一个wheel文件,别人拿到文件后只需pip install安装即可使用,非常方便。 在上一篇博文中,利用nvid…

在maven多模块之间调用报错

错误信息为:不能解决maven_02_ssm项目的依赖问题,找不到maven_03_pojo这个jar包。 为什么找不到呢? 原因是Maven会从本地仓库找对应的jar包,但是本地仓库又不存在该jar包所以会报错。 在IDEA中是有maven_03_pojo这个项目,所以…

使用 Python 字典向 SQLite 插入数据

将Python字典数据插入SQLite数据库中其实有很多好处,例如使用字典的结构可以简化插入数据的代码,使其更加紧凑和易于理解。这降低了代码的复杂性,并使代码更易于维护。那么在我们日常使用中会有哪些问题呢?一起看看我是如何解决的…

华为配置DHCP Snooping防止DHCP Server仿冒者攻击示例

配置DHCP Snooping防止DHCP Server仿冒者攻击示例 组网图形 图1 配置DHCP Snooping防止DHCP Server仿冒者攻击组网图 DHCP Snooping简介配置注意事项组网需求配置思路操作步骤配置文件 DHCP Snooping简介 在一次DHCP客户端动态获取IP地址的过程中,DHCP Snoopi…

机器学习知识点复习 上(保研、复试、面试)百面机器学习笔记

机器学习知识点复习上 一、特征工程1. 为什么需要对数值类型的特征做归一化?2. 文本表示模型3. 图像数据不足的处理方法 二、模型评估1.常见的评估指标2.ROC曲线3.为什么在一些场景中要使用余弦相似度而不是欧氏距离?4.过拟合和欠拟合 三、经典算法1.支持…

✅ Windows11 系统 I 卡独显 A770 安装 深度学习 Pytorch 环境

📋 文献参考 这里非常感谢知乎上的 ‘丢丢’ 的[**Windows系统下英特尔独显Pytorch的历程**] 为我提供了一开始的 I 卡安装想法!但是文中并未介绍如何进行额外的环境变量操作问题,导致很多软件直接安装至系统盘,占用系统盘空间&am…

19.相机,棱镜和光场

一、成像方法 Imaging Synthesis Capture 1.Synthesis(图形学上)合成:比如之前学过的光线追踪或者光栅化 2.Capture(捕捉):把真实世界存在的东西捕捉成为照片 二、相机 1.小孔成像 利用小孔成像的相…

【数据结构】矩阵的压缩存储

矩阵的压缩存储 5.1 普通矩阵的存储 用二维数组存储 分为行优先和列优先: 行优先:优先存放一行的数据。 列优先:优先存放一列的数据。 注意下标是从0还是1开始的! 5.2 对称矩阵的存储 对称矩阵定义 若n阶方阵中任意一个元素 a i …

Sqoop “hcatalog does not exist!” 提示信息消除方法

sqoop运行的时候老是有这个报错提示,看着可烦,解决消除一下 解决方法: 1、在$SQOOP_HOME/bin目录下面修改configure-sqoop文件 1)进文件夹 cd /training/sqoop-1.4.7/bin2)编辑文件 vi /configure-sqoop3&#xff…

K8s Pod控制器

目录 前言: 1.Deployment 查看控制器配置 查看历史版本 2.SatefulSet 安装CoreDNS,仅二进制部署环境需要安装CoreDNS 方法一 方法二 查看statefulset的定义 清单定义StatefulSet 创建pv 定义PV 创建statefulset 滚动更新 总结 扩展伸缩…

【MySQL | 第三篇】MySQL索引及两种索引分类方法总结

文章目录 3.MySQL索引及两种索引分类方法3.1索引的概念3.1.1相关定义3.1.2查询例子 3.2索引的底层3.2.1二叉树(1)满二叉树(2)完全二叉树(3)二叉查找树(4)二叉平衡树(AVL&…

HTML静态网页成品作业(HTML+CSS)——电影网首页网页设计制作(1个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有1个页面。 二、作品演示 三、代…

Vue3_2024_6天【回顾上篇watch常见的前三种场景】另两种待补

第一种情况:监视【ref】定义(基本数据类型) 1.引入watch2.格式:watch(基本数据类型数据,监视变化的回调函数) 注意点: 2.1.watch里面第一个参数,是数据~~【监视的基本类…

[Buuctf] [MRCTF2020] Xor

运行 1.查壳 32位exe文件,没有壳 2.用32位IDA打开 找到main函数,F5查看伪代码,但是这里会弹出一个窗口 函数分析失败!! 这里我在看别人的题解时发现一种玄学方式解决了这个问题 窗口里面弹出了一个地址401095&…