解密IP分片与重组:数据传输中的关键技术
引言
在上一章节中,我们详细讨论了IP的分类和无分类原则的原理以及其在网络通信中的应用。IP分片与重组是在数据包传输过程中起到关键作用的机制。当数据包的大小超过网络链路的MTU(最大传输单元)限制时,IP分片将数据包分割为多个较小的分片进行传输。这些分片在网络中独立传输,到达目的地后,通过IP重组机制将它们重新组合成完整的数据包。这种分片和重组的过程确保了大尺寸的数据包能够在网络中进行传输,同时保证了数据的完整性和可靠性。在本章节中,我们将深入探讨IP分片与重组的工作原理。
IP 分片与重组
不同的数据链路具有不同的最大传输单元(MTU),例如FDDI数据链路的MTU为4352字节,以太网的MTU为1500字节。MTU代表最大传输单元(Maximum Transmission Unit),指的是网络中可以传输的最大数据包大小。
FDDI(Fiber Distributed Data Interface)是一种高速局域网(LAN)标准,使用光纤作为传输介质。MTU(Maximum Transmission Unit)是指一个数据链路层协议所能传输的最大数据包大小。在FDDI网络中,MTU的大小是4352字节。这意味着在FDDI网络中,数据链路层协议能够传输的最大数据包大小为4352字节。如果要传输的数据包超过这个大小,就需要进行分片,将数据包分割成适合MTU大小的多个分片进行传输,并在接收端进行重组。
对于以太网来说,MTU的大小通常是1500字节。这意味着以太网可以传输最大为1500字节的数据包。如果数据包的大小超过了MTU的限制,那么数据包将被分片为更小的片段进行传输,并在目的地重新组装。分片后的IP数据报在重新组装时只能由目标主机进行,路由器不会进行重组操作。
之前我们还说过TCP报文段,不知道还有没有印象,MSS是最大段大小(Maximum Segment Size)的缩写,它在TCP协议中扮演着重要的角色。MSS指的是在TCP连接中允许发送的最大数据段的大小。与MTU类似,MSS也是用来限制数据包的大小,但是它是在传输层,即TCP协议层进行限制。TCP协议通过将应用层的数据分成多个数据段来传输,而每个数据段的大小受到MSS的限制。
每种数据链路的MTU之所以不同,是因为每个不同类型的数据链路的使用目的不同。使用目的不同,可承载的MTU也就不同。
假设发送方要发送一个4000字节的大数据报,在以太网链路上传输,就需要将该数据报分片成3个小数据报进行传输。这是因为每个小数据报的大小不能超过MTU限制,即1500字节。接收方在收到这3个小数据报后,会根据每个数据报的序号和偏移量,将它们重组成原始的4000字节的大数据报。

在分片传输中,一旦某个分片丢失,则会造成整个IP数据报作废。为了避免这种情况,TCP引入了MSS,即在TCP层进行分片,而不是由IP层进行分片。这样做的好处是,TCP可以更加精确地控制每个数据段的大小,避免了IP层分片可能引发的问题。
对于UDP协议来说,我们尽量不要发送一个大于MTU的数据报文。这是因为UDP是面向无连接的传输协议,它不提供像TCP那样的可靠性和重传机制。如果我们发送一个大于MTU的UDP数据报文,它将被IP层进行分片传输。一旦其中某个分片丢失,UDP协议无法进行重传,导致数据的丢失。因此,为了确保数据的可靠传输,我们应尽量将UDP数据报文的大小控制在MTU之内,避免分片传输。
为什么IP层会分片,TCP还要分段
由于在网络传输中,IP层会自动对数据包进行分片,即使TCP层不对数据进行分段,数据包也会被IP层自动分片并正常传输。因此,TCP为什么还需要进行分段呢?难道这不是多此一举吗?
假设有一份较大的数据在TCP层不进行分段,在传输过程中发生了丢包现象,TCP会进行重传,但重传的单位却是整个大份数据(尽管IP层会将数据切分为多个小包,每个小包的长度为MTU)。这是因为IP层并不关心数据的可靠性传输。
换句话说,在一台机器的传输层到网络层这条链路上,如果传输层对数据进行分段,那么IP层就不会再进行分片。如果传输层没有进行分段,那么IP层就有可能进行分片。
简单来说,TCP对数据进行分段的目的是为了让IP层不再进行分片,并且在发生重传时只重传已经分段的小份数据。这样可以提高传输效率和可靠性。
TCP分段了,IP层就一定不会分片了吗
在上述讨论中,我们提到了在发送端进行TCP分段后,IP层就不会再进行分片。然而,在整个传输链路中,可能还存在其他网络层设备,这些设备的最大传输单元(MTU)可能小于发送端的MTU。因此,即使数据包在发送端已经进行了分段,但在经过这些设备的IP层时,仍会再次进行分片。最终,所有的分片将在接收端进行组装。
如果我们能够确定整个链路上的最小MTU,并以此长度发送数据,那么无论数据传输到哪个节点,都不会发生分片。这个整个链路上的最小MTU被称为路径MTU(PMTU)。当IP数据包到达某个路由器时,如果该路由器的MTU小于数据包长度,并且设置了DF(Do not Fragment)标志为1,该路由器将无法对数据包进行分片,只能将其丢弃。在这种情况下,路由器会生成一个ICMP(Internet Control Message Protocol)错误消息,称为“分片需要但被禁止(Fragmentation Needed But DF Set)”。该ICMP错误消息将被发送回源地址,并携带路由器的MTU值。发送端收到该ICMP错误消息后,可以根据其中的MTU值来调整发送的数据包大小,以避免再次发生被禁止分片的情况。
IP分片是一种不得已的行为,我们应尽量避免在IP层进行分片,特别是在链路中的中间设备上进行分片。因此,在IPv6中,已经禁止了中间设备对IP报文进行分片,分片只能在链路的起始和终点进行。
IPv6 基本认识
IPv6是Internet协议第6版,它是IPv4的继任者。IPv6采用128位地址长度,相比IPv4的32位地址长度,可以提供更多的IP地址。这是因为IPv4的地址空间正在逐渐枯竭,而IPv6的地址空间非常庞大,可以满足未来互联网的需求。
当谈论IPv6时,除了提到更多的地址空间外,它还带来了更好的安全性和扩展性,这意味着IPv6相比于IPv4能提供更加出色的网络体验。
虽然IPv6已经存在很长时间,但其在全球范围内的部署仍然相对较慢。这主要是因为IPv6需要与现有的IPv4网络兼容,需要进行过渡和迁移。然而,随着IPv4地址的枯竭以及对IPv6的需求增加,越来越多的互联网服务提供商和组织正在逐步采用IPv6,并逐渐实现IPv6与IPv4的双栈运行。
总结
本章节中,我们深入探讨了IP分片与重组的工作原理。不同的数据链路具有不同的最大传输单元(MTU),当数据包的大小超过MTU限制时,IP分片将数据包分割为多个较小的分片进行传输,到达目的地后通过IP重组机制重新组合成完整的数据包。TCP分段的目的是为了让IP层不再进行分片,并在发生重传时只重传已经分段的小份数据,提高传输效率和可靠性。然而,在整个传输链路中可能存在其他网络层设备,它们的MTU可能小于发送端的MTU,因此数据包仍会在这些设备的IP层进行再次分片。我们应尽量避免在IP层进行分片,特别是在链路中的中间设备上进行分片。
解密IP分片与重组:数据传输中的关键技术的更多相关文章
- DPDK IP分片及重组库(学习笔记)
1 前置知识学习 1.1 MTU MTU是最大传输单元( Maximum Transmission Unit)的缩写,指一个接口无需分片所能发送的数据包的最大字节数. MTU范围在46 ~ 1500 ...
- IP分片与重组详解
大家对IP数据包头,应该不陌生吧 分片便是与图中圈出来的两个地址有关,本文也是将主要围绕他们展开. 那我们先来了解他们的概念. 标志一个三比特字段遵循与用于控制或识别片段.他们是(按顺序,从高分以低位 ...
- 《BI那点儿事》ETL中的关键技术
ETL(Extract/Transformation/Load)是BI/DW的核心和灵魂,按照统一的规则集成并提高数据的价值,是负责完成数据从数据源向目标数据仓库转化的过程,是实施数据仓库的重要步骤. ...
- IP分片详解
IP分片是网络上传输IP报文的一种技术手段.IP协议在传输数据包时,将数据报文分为若干分片进行传输,并在目标系统中进行重组.不同的链路类型规定有不同最大长度的链路层数据帧,称为链路层MTU(最大传输单 ...
- TCP/IP 协议难点之一—— IP分片
1 IP协议简单介绍 就个人而言,网络中,抛开网络安全加密这些,就只单单讨论协议本身,比较难的有三个地方: IP分片与重组 TCP滑动窗口与TCP状态的改变 TCP定时器 其实协议本身根据<TC ...
- IP分片浅析
在TCP/IP分层中,数据链路层用MTU(Maximum Transmission Unit,最大传输单元)来限制所能传输的数据包大小,MTU是指一次传送的数据最大长度,不包括数据链路层数据帧的帧头, ...
- IP Fragmentation(IP分片)
https://www.cisco.com/c/en/us/tech/ip/index.html IP协议在传输数据包时,将数据报文分为若干分片进行传输,并在目标系统中进行重组,这一过程称为分片(Fr ...
- 数据帧、MTU、MSS、IP分片
1.以太网帧 在以太网链路上的数据包称作以太帧,在802.3标准里,规定了一个以太帧的数据部分(Payload)的最大长度是1500个字节(MTU),再加上14字节链路头和4字节的FCS,所以以太网帧 ...
- IP分片 与 TCP分段的区别 !!!!careful========以及udp中一个包大小究竟为多大合适 ==========三次握手四次挥手细节
首先声明:TCP分片应该称为TCP分段 TCP/IP详解--TCP的分段和IP的分片 分组可以发生在运输层和网络层,运输层中的TCP会分段,网络层中的IP会分片.IP层的分片更多的是为运输层的UDP服 ...
- IP分片重组的分析和常见碎片攻击 v0.2
IP分片重组的分析和常见碎片攻击 v0.2http://www.nsfocus.net/index.php?act=magazine&do=view&mid=584 作者:yawl ( ...
随机推荐
- elementUi+table实现表格数据滚动
elementUi+table实现表格数据滚动 引用vue和elementUI CDN // 引用elementUI CDN <script src="https://unpkg.co ...
- Spark架构与运行流程
1. 阐述Hadoop生态系统中,HDFS, MapReduce, Yarn, Hbase及Spark的相互关系. 2. Spark已打造出结构一体化.功能多样化的大数据生态系统,请简述Spark生态 ...
- 【python基础】函数-模块
函数的优点之一是,使用它们可将代码块与主程序分离.通过给函数指定函数名称,可让主程序容易理解的多.我们还可以更加细化,将函数存储在被称为模块的独立文件中,再将模块导入到主程序中.import关键字作用 ...
- 【后端面经-Java】Java创建线程的方法简介
目录 1. 线程的基本概念 1.1 线程 1.2 线程状态和生命周期 2. 创建线程的四种方法 2.1 继承Thread类 2.2 实现Runnable接口 2.3 实现Callable接口 2.4 ...
- 【tvm解析】 Operator Strategy 机制
本文地址:https://www.cnblogs.com/wanger-sjtu/p/15082871.html Relay Operator Strategy是建立Relay IR与TOPI算子库的 ...
- 机器翻译技术的发展趋势:从API到深度学习
目录 机器翻译技术的发展趋势:从API到深度学习 随着全球化的发展,机器翻译技术在各个领域得到了广泛的应用.机器翻译技术的核心是将源语言文本翻译成目标语言文本,其中涉及到语言模型.文本生成模型和翻译模 ...
- 2023-07-01:redis过期策略都有哪些?LRU 算法知道吗?
2023-07-01:redis过期策略都有哪些?LRU 算法知道吗? 答案2023-07-01: 缓存淘汰算法(过期策略) 当Redis的内存超出物理内存限制时,内存中的数据就会频繁地与磁盘进行交换 ...
- Openjob 1.0.5 发布,新增 Agent
什么是 Openjob? Openjob 基于Akka架构的新一代分布式任务调度框架.支持多种定时任务.延时任务.工作流设计,采用无中心化架构,底层使用一致性分片算法,支持无限水平扩容. 完善的任务日 ...
- python 导出项目需要的库
输入命令: pip freeze > requirements.txt 产生的文件内容如下: asgiref==3.4.0 Django==3.2.4 django-debug-toolbar= ...
- SpringBoot 启动流程追踪(第二篇)
上一篇文章分析了除 refresh 方法外的流程,并着重分析了 load 方法,这篇文章就主要分析 refresh 方法,可以说 refresh 方法是 springboot 启动流程最重要的一环,没 ...