解密IP分片与重组:数据传输中的关键技术

本文涉及的产品
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,数据同步 1个月
简介: 本文介绍了IP分片与重组的工作原理及其在数据传输中的重要性。IP分片将大数据包分割为小分片进行传输,重组则将其重新组合为完整数据包。这种技术能适应不同网络链路的传输单元限制,提高传输效率和可靠性。随着IPv4地址枯竭,IPv6的采用越来越普遍,了解IP分片与重组对于网络优化和IPv6部署至关重要。

引言

在上一章节中,我们详细讨论了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字节的大数据报。

image

在分片传输中,一旦某个分片丢失,则会造成整个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层进行分片,特别是在链路中的中间设备上进行分片。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
相关文章
|
6月前
|
网络协议 API 开发者
无线通信模块通过TCP/IP协议实现与PC端的数据传输
本文介绍了无线通信模块借助TCP/IP协议向PC端传输数据的过程,包括数据封装、发送和接收,并以WIFI模块为例,讨论了在QT平台下实现无线数据传输的方法。通过QTcpSocket类,开发者能轻松建立WIFI模块与PC间的连接。随着无线通信技术的进步,未来将有更多创新应用出现。
|
网络协议 网络安全 网络架构
网络TCP/IP基础(数据传输)
数据封装与解封装过程、数据封装过程、应用层封装过程、传输层封装过程、网络层封装过程、数据链路层封装过程、物理层封装过程、数据解封装过程、物理层解封装过程、数据链路层解封装过程、网络层解封装过程、传输层解封装过程、应用层解封装过程、数据传输的一些基本概念、PDU、常见硬件设备与五层模型对应关系
264 1
|
7月前
|
SQL 分布式计算 监控
在数据传输服务(DTS)中,要查看每个小时源端产生了多少条数据
【2月更文挑战第32天】在数据传输服务(DTS)中,要查看每个小时源端产生了多少条数据
72 6
|
7月前
|
存储 SQL NoSQL
数据传输DTS同步问题之同步失败如何解决
数据传输服务(DTS)是一项专注于数据迁移和同步的云服务,在使用过程中可能遇到多种问题,本合集精选常见的DTS数据传输问题及其答疑解惑,以助用户顺利实现数据流转。
|
7月前
|
Cloud Native NoSQL 关系型数据库
数据传输DTS校验问题之校验报错如何解决
数据传输服务(DTS)是一项专注于数据迁移和同步的云服务,在使用过程中可能遇到多种问题,本合集精选常见的DTS数据传输问题及其答疑解惑,以助用户顺利实现数据流转。
|
7月前
DTS数据传输延迟可能有多种原因
【1月更文挑战第16天】【1月更文挑战第79篇】DTS数据传输延迟可能有多种原因
299 2
|
7月前
|
NoSQL Redis 数据库
数据传输DTS中金融云跨账号同步Redis,增量校验报错了
【1月更文挑战第16天】【1月更文挑战第80篇】数据传输DTS中金融云跨账号同步Redis,增量校验报错了
111 1
|
4月前
|
存储 安全 关系型数据库
跨越地域的数据传输大冒险!如何轻松更换DTS实例地域,全面攻略揭秘!
【8月更文挑战第15天】在数字时代的浪潮中,数据传输服务(DTS)是企业跨地域扩张的重要桥梁。然而,更换DTS实例地域就像是一场冒险旅程,充满了未知和挑战。本文将带你踏上这场跨越地域的数据传输大冒险,揭示如何轻松更换DTS实例地域的秘密。无论你是追求速度的迁移高手,还是成本敏感的手动操作者,这里都有你需要的答案。让我们一起探索这个神秘的世界,解锁数据传输的无限可能!
51 0
|
4月前
|
关系型数据库 MySQL OLAP
数据传输DTS是什么?
【8月更文挑战第30天】数据传输DTS是什么?
347 3
|
6月前
|
关系型数据库 MySQL 分布式数据库
PolarDB操作报错合集之当使用DTS(数据传输服务)同步的表在目标库中进行LEFT JOIN查询时遇到异常,是什么导致的
在使用阿里云的PolarDB(包括PolarDB-X)时,用户可能会遇到各种操作报错。下面汇总了一些常见的报错情况及其可能的原因和解决办法:1.安装PolarDB-X报错、2.PolarDB安装后无法连接、3.PolarDB-X 使用rpm安装启动卡顿、4.PolarDB执行UPDATE/INSERT报错、5.DDL操作提示“Lock conflict”、6.数据集成时联通PolarDB报错、7.编译DN报错(RockyLinux)、8.CheckStorage报错(源数据库实例被删除)、9.嵌套事务错误(TDDL-4604)。