最大传输单元MTU【Maximum Transmission Unit】
以太网和IEEE 802.3对数据帧的长度都有一个限制,其最大值分别是1500和1492字节,链路层的这个特性称作MTU,最大传输单元,不同类型的网络大多数都有一个上限。
如果IP层有一个数据报要传,而且数据的长度比链路层的MTU还大,那么IP层就需要进行切片(fragmentation),把数据报分成若干片,这样每一片都小于MTU。
netstat打印出网络接口的MTU
netstat -in Kernel Interface table Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg eth0 1500 0 57041517853 0 0 0 56483114419 0 0 0 BMRU lo 65536 0 12010204282 0 0 0 12010204282 0 0 0 LRU
路径MTU
当在同一个网络上的两台主机互相通信时,该网络的MTU是非常重要的。但是如果两台主机之间的通信需要通过多个网络,那么每个网络的链路层就可能有不同的MTU。重要的是两台通信主机路径中的最小MTU,它被称作路径MTU。路径MTU在两个方向上不一定是一致的。RFC 1191描述了路径MTU的发现机制。
tracepath -n 10.25.23.58 1?: [LOCALHOST] pmtu 1500 1: 10.10.23.252 0.365ms 1: 10.10.23.252 0.333ms 2: 10.25.101.109 0.683ms 3: 10.25.100.154 0.928ms 4: 10.25.23.58 0.689ms reached Resume: pmtu 1500 hops 4 back 4
IP分片
物理层网络一般要限制每次发送数据帧的最大长度,任何时候IP层接受到一份要发送的IP数据报是,它要判断向本地哪个接口发送数据(选路),并查询该接口获取其MTU。IP把MTU与数据报长度进行比较,如果需要则进行分片。分片可以发生在原始发送端主机上,也可以发生在中间路由上。
把一份IP数据报分片后,只有到达目的地才进行重新组装。重新组装由目的端的IP层来完成,其目的是使分片和重组过程对运输层(TCP和UDP)是透明的,以及防止某些可能的性能减低。已经分片过得数据报有可能会再次进行分片(可能不止一次)。IP首部中包含的数据为分片和重组提供了足够的信息。
尽管IP分片的过程看起来是透明的,但有一点让人不想使用它:即使只丢失一片数据也要重传整个数据报。因为IP层本身没有超时重传机制--由更高层负责超时和重传(TCP有重传和超时机制,但UDP没有,一些UDP应用程序本身也执行超时和重传)。事实上,如果对数据报分片的是中间路由,而不是起始端系统,那么起始端系统就无法知道数据报是如何被分片的,就是这个原因,经常要避免分片。
分片参数
标识符(identifier)、TTL、DF和MF标志(flags)以及偏移量都是直接服务于将分片重组成元消息的过程。
- 分组的接收端使用标识符字段识别同一个分组的所有分片,发送组的IP模块用户对当前唯一的值来填充标识符字段。在分组存在于IP互联网中的全过程必须符合该条件,为了确保符合条件,发送组的IP实体可以跟踪指定的标识符。
- 发送端指定分组存活于网络中的时间TTL
- 分组分片的偏移量(offset)字段通知接收端此分片在源分组中的位置。因此第一个分片总是拥有0偏移值,若分组没有被拆分,其偏移量也是0.
- MF标志设置为1表明着刚到达的分片不是最后一个,发送一个未被分片的分组时,IP实体将MF标志为0
- DF标志设置为1表明在任何条件下当前分布都不允许分片,如果为不能被分片的分组无法再部分片的 情况下达到目的节点,那么IP实体将丢弃它同时向发送端发送一条前档的ICMP消息。
分片和重组的过程
将新抵达的分组分割成分片之前,安装在路由上的IP为新分片分配多个缓存,然后从源分组的IP头部中拷贝多个字段内容存入这些缓存,从而创建出新分片分组的IP“哑”头部。IP头部的某些参数被拷贝进所有分片头部,其他只保留在第一个分片的头部。 分片过程会改变分片IP头部的某些字段值,因此每个分片都有他自己的头部校验和的值、分片偏移地址,以及分钟总长度,除去最后一个分片外,其他所有分片的MF标志都被设为1,最后一个分片设置为0.
分片大小不能超过其下层技术协议的MTU值,其次除去最后一个分片以外,其他分片的数据字段必须是8字节的倍数,最后一部分的数据大小等同于剩余数据的大小。
当源分组的第一个分片抵达目的主机是,该主机启动组装计时器以计算允许等待其他分片抵达的最晚时间,IP的不同实现应用不同规则来进行超时期限的选择。数据字段中空白间隙和最后分片的抵达(MF=0)意味着组装完成,数据组装完成之后,才有可能传往上层协议。
分片例子
一个在路由上进行分片的示例
假设发送端主机连接在MTU为17914字节的网络上,可以把它当成一个令牌环网络。原则上传输层知道下层技术的MTU并且以恰当的方式选择分片的大小。假设此例子中,6600字节的消息从传输层传递到IP层,IP在此消息的基础上形成IP分组的数据字段,并为之提供了头部。请格外留心与分组分片相关的头部字段是如何填充的。首先,分组被指派一个唯一的标识符,如:123456.其次,既然分组还没有被分片,那么偏移量(offset)字段设为0,MF标志也被设置为0,标识后续不存在分片。第三,DF标志被设为1,意味着该分组可以分片。IP分组的总长度为6600+20(IP头部大小)----也就是6620字节,该分组的总长度符合令牌帧的数据字段。然后发送端主机的IP实体将这个帧传送到他的网络接口,由接口负责将帧送往下一个路由。
在帧路过路由器网络接口的网络层同时令牌环头部被剥离后,路由器的IP实体将从分组中检索出目的网络地址。根据该地址,它判断出新抵达的IP分组必须被传送到MTU值为1492的以太网。该值远远小于抵达输出接口的分组大小。因此,IP分组必须拆分成段。路由器从分组中检索出数据字段并将它拆分成下列大小的部分:四个各个包含1400个字符分段以及一个包含1000字节的分片。注意:最后一个分组为1000+20=1020字节。这些值均低于1500字节,因此,这些分组符合以太网帧的数据字段要求。
最后,连接到以太网的目的主机接收到五个拥有共同标识符123456的IP分片,如果这些分片在一定的时间间隔内抵达,那么运行在目的主机上的IP就可以组装出源消息来。如果这些分组的抵达顺序与发送时不一致,则偏移量(offset)字段会指明他们组装时的正确顺序。
分片偏移量计算
一个有4000字节数据的数据报被划分为三个分片。在原始数据报中,数据字节从0到3999编号。
第一个分片携带的是字节0-1399,对于这个数据报,分片偏移是0/8=0.
第二个分片携带的是字节1400-2799,对于这个数据报,偏移值是1400/8=175.
最后一个分片携带的字节2800-3999,对于这个数据报,偏移值是2800/8=350
偏移值是以8字节为单位,这样做是因为分片偏移字段的长度只有13位,它不能表示超过8191个字节。
如果分片本身再进行一次分片时会发生什么,这种情况下,分片偏移值永远是相对于原始数据报的。在本图中第二个分片后来又被划分为两个分片,长度分别为800字节和600字节,但他们的偏移量所表示的位置都相对于原始数据的。很显然即使各个分片采取不同的路径并失序到达,最终的目的主机也能够收到的分片(假设分片没有丢失)重装成原始的数据报,使用策略如下:
a、第一个分片的分片偏移字段值为0
b、把第一个分片的长度除以8,这个就是第二个分片偏移值
c、把第一个和第二个分片的总长度除以8,这个结果就是第三个分片的偏移值。
d、继续以上 过程,最后一个分片的“还有分片”位的值是0.
http://packetlife.net/blog/2008/aug/18/path-mtu-discovery/
https://en.wikipedia.org/wiki/Path_MTU_Discovery
相关推荐
### IP分片与重组的分析与整理 #### 1. 原理 ##### 1.1 为一个数据包片再次分片 为数据包分片和为数据包片再次分片之间的主要区别在于网关如何处理MF(More Fragments)比特。当一个网关对未分片的数据包进行首次...
### IP分片与重组的分析与整理 #### 1. 原理 ##### 1.1 为一个数据包片再次分片 在互联网通信过程中,数据包可能需要通过不同最大传输单元(MTU)的网络进行传输。当一个数据包过大无法直接通过某个网络时,就...
### IP分片重组算法(RFC815)的实现及其改进 #### 一、引言 随着互联网技术的发展,IP分片与重组成为了IP机制中不可或缺的一部分。IP数据报在网络传输过程中,可能会遇到不同网络之间的最大传输单元(MTU)差异...
在深入探讨“ip分片重组及tcp分段重组具体实现”这一主题之前,首先要明确IP分片和TCP分段的概念。IP分片是IP层的一种机制,用以将一个较大的IP数据包分割成多个小的数据包以便在网络中传输。因为不同的网络链路可能...
IP分片是互联网协议(IP)中处理网络层传输的一个重要过程,它将大数据报分割成更小的片段,以适应不同网络的MTU(最大传输单元)。在RFC 791文档中,规定了互联网协议的正式规范,其中包括了关于分片和重组的详细...
IP 分片和 TCP 分段原理 IP 分片是指在数据传输过程中,为了避免数据超过网络的 MTU(Maximum Transmission Unit),将数据分割成多个小的数据包,以便在网络中传输。这是因为,某些协议如 UDP 和 ICMP,它们不支持...
这段代码是用于模拟和处理IP分片的程序,主要针对虚拟网络教学系统。IP分片是在IP层(网络层)为了适应传输层的数据报文过大,无法通过某些网络的MTU(最大传输单元)限制时,将数据包分割成较小的部分进行传输的...
IP分片是网络通信中的一个重要概念,特别是在TCP/IP协议栈中。它涉及到当一个大型的数据报文无法在单个IP数据包中传输时,如何将其分割成多个小块以便通过网络进行传输。这些小块被称为IP分片。当接收端接收到这些分...
《高效IP分片重组的设计与实现》一文深入探讨了IP分片及重组技术在FPGA中的实现,这是TCP/IP协议栈中IP层的关键功能之一。文章首先剖析了网络环境中导致IP分片产生的原因,接着详述了IP分片重组的具体流程,并提出了...
基于FPGA的IP分片重组实现 一、背景介绍 在计算机网络中,IP分片问题是指一个较大的IP数据报在网络中传输时,可能因传输路径中的最大传输单元(MTU)限制而被拆分成多个小的数据片进行传输。这些小的数据片在网络...
用于分析IP分片的wireshark抓包文件,IP分片解析文章地址:https://blog.csdn.net/Firefly_cjd/article/details/110366657
亲自写的,很有用,希望能对大家有帮助,里面主要介绍了IP分片重组的概念、方法以及在Linux下进行操作所需要的代码
基于fpga的ip分片重组的实现,文中详细介绍了相关内容
本实验的目标是理解和实现IP分片与重组的过程,以确保数据的完整传输。 IP分片是指当一个IP数据包的总长度超过了沿途某个网络节点的MTU时,路由器会将该数据包拆分成若干个较小的片段进行传输。每个分片都包含原...
《IP分片:原理、影响与安全》 IP分片是TCP/IP协议栈中的一个重要机制,主要用于解决因网络层数据包大小超过链路层的最大传输单元(MTU)而导致的传输问题。本文将深入探讨IP分片的概念、原因、工作原理,以及由此...
### IP分片技术详解 #### 引言 在互联网通信中,数据的传输并非一帆风顺,尤其是在不同网络间的数据传递过程中。由于各网络的物理特性与技术限制,如链路层的最大传输单元(Maximum Transmission Unit,MTU),...
This document provides software architecture information, development environment information and optimization guidelines.For programming examples and for instructions on compiling and running each ...
摘要:因为IP不允许分片而导致报文丢弃的故障现象通常是:绝大部分网站和应用都可以正常使用,但个别网站打不开,某些应用(如收发邮件等)无法正常使用,通过ping命令测试到目的...关键词:IP分片原理; 故障分析; 修改; 值;
IP协议在处理大数据包时,可能会遇到网络路径中最大传输单元(Maximum Transmission Unit, MTU)的限制,这时就需要将大包分成若干小片进行传输,这个过程称为IP分片。而在接收端,这些数据片需要重新组合成原始的...