当前位置:网站首页>详解TCP分段与IP分片
详解TCP分段与IP分片
2022-07-23 05:45:00 【可能我浪荡】
- MTU(Maximum Transmission Unit 最大传输单元)
MTU是链路层中的网络对数据帧的一个限制,以太网的MTU是1500个字节。一个IP数据报在以太网中传输,如果它的长度大于该MTU值,就要进行分片传输,使得每片数据报的长度小于MTU。分片传输的IP数据报不一定按序到达,但IP首部中的信息能让这些数据报片按序组装。IP数据报的分片与重组是在网络层完成的。 - MSS(Maximum Segment Size 最大分段大小)
MSS是TCP里的一个概念(首部的选项字段中)。MSS是TCP数据包每次能够传输的最大数据分段,TCP报文段的长度大于MSS时,要进行分段传输。TCP协议在建立连接的时候通常要协商双方的MSS值,每一方都有用于通告它期望接收的MSS选项(MSS选项只出现在SYN报文段中,即TCP三次握手的前两次)。MSS的值一般为MTU值减去两个首部大小(需要减去IP数据包首部20字节和TCP数据段的首部20字节)。所以如果用链路层以太网,MSS的值往往为1460字节。而Internet上标准的MTU(最小的MTU,链路层网络为x2.5时)为576,那么如果不设置,则MSS的默认值就为536字节。很多时候,MSS的值最好取512的倍数。(TCP报文段的分段与重组是在运输层完成的) - TCP分段的原因是MSS,IP分片的原因是MTU,由于一直有MSS<=MTU,分段后的每一段TCP报文段再加上IP首部后的长度不可能超过MTU,因此也就不需要在网络层进行IP分片了。因此TCP报文段很少会发生IP分片的情况
- 由于UDP数据报不会自己进行分段,因此当长度超过了MTU时,会在网络层进行IP分片。同样,ICMP在网络层中同样会出现IP分片情况。
- 总结:UDP不会分段,就由IP来分;TCP会分段,当然就不用IP来分了。
- IP数据报分片后,只有第一片带有UDP首部或ICMP首部,其余的分片只有IP头部。到了端点后根据IP头部中的信息在网络层进行重组。而TCP报文段的每个分段中都有TCP首部,到了端点后根据TCP首部的信息在传输层进行重组。IP数据报分片后,只有到达目的地后才进行重组,而不是像其他网络协议,在下一站就要进行重组。
- 对于IP分片的数据报来说,即使只丢失一片数据也要重新传整个数据报(既然有重传,说明传输层使用的是具有重传功能的协议,如TCP)。这是因为IP层本身没有超时重传机制——由更高层来负责超时和重传。当来自TCP报文段的某一段(在IP数据报的某一片中)丢失后,TCP在超时后会重发整个TCP报文段,该报文段对应于一份IP数据报(可能有多个IP分片),没有办法只重传数据报中的一个数据分片。
边栏推荐
- [fee of AUTOSAR (difference between nonvolatile memory flash and EEPROM)]
- TCP的粘包问题代码说明
- golang for range遍历并赋值给字典后出现所有值相同的问题
- B树 和 B+树
- Flask项目中创建数据库表db.create_all()
- 桌面远程协议-编解码
- Unity3d:特效对象池,超时删除池内GameObject,GC权值
- C#:快速排序,有相同的数字会忽略,然后继续先前的寻找方向去找下一个满足要求的数字进行替换
- Vs attribute configuration related knowledge
- Simply realize the function of stack
猜你喜欢

堆的实现与堆排序实现
博客搭建一:框架选择

二叉树基础oj练习-

Blog Building II: next theme related settings beta

socket基础知识以及各种使用场景

Three versions and optimization of quick sorting by interval -- friends may not know it

表格个人简历

A comprehensive and detailed summary of the basic principles of steel structure

【学习总结】

Blog building six: the method of binding your own domain name
随机推荐
Unity3d:UGUI,UI与特效粒子层级,2018.2以上版本BakeMesh,粒子在两个Image之间且在ScrollView
动态规划——“换硬币问题”
(1)ASIO
剑*offer—— 链表逆序
VS属性配置相关知识
(1)ASIO
Redis——配置及应用
0数组 LeetCode605. 种花问题
Prometheus Operator使用指南笔记
Unity3d+GameFramework:资源分析,资源依赖,循环依赖检测
理解不能的锁们
博客搭建四:将自己的博客加入百度和谷歌收录的方法
golang for range遍历并赋值给字典后出现所有值相同的问题
0动态规划 LeetCodde313. 超级丑数
简单实现栈的功能
大白话说说synchronized关键词的三种用法
[AUTOSAR com 2. Advanced introduction to communication protocol stack]
0动态规划 LeetCode1024. 视频拼接
并发编程1-2
合成中文识别数据集的相关repo