Maximum Segement Size (MSS) 最大分段长度

tcp会将应用层交付下来的数据分为tcp认为最适合发送的数据块(这里的最适合指的是用户可以自己配置mss长度),单位为字节,发送端的传输层进行数据分块,这些数据块的大小就是mss,在接受端端传输层对分块的tcp报文段的数据部分进行重组。注意,mss不包含tcp首部的20字节,只是数据块长度。

如果tcp接收到的数据包超过mss就会进行分段。

Maximum Transmission Unit (MTU) 最大传输单元

数据链路层所能传输的最大数据包大小,单位为字节,大小由具体的网络来定。一般情况下,以太网的 MTU=1500字节。

ip所在的网络层是离数据链路层较近的,所以如果ip接收到的传输层的数据包超过MTU就会进行分片,分片的行为传输层是不知道的。

如果传输层使用tcp会引起分片吗?使用udp会引起分片吗?

  • tcp可以避免ip分片,因为tcp会主动分成刚好放进MTU的MSS大小的段交付给网络层最大的MSS相当于MTU刨去IP首部和TCP首部之后的长度,所以一个MSS刚好可以放进MTU中。

  • udp是没有主动分段的行为的,udp会直接将应用层的数据包交付给网络层,因此很可能会被ip进行分片。

分片和重组都会影响数据包传输的效率,所以能够尽量避免肯定是最好的。

那么发送端和接受端是如何确定对方的MSS?

  1. 首先客户端会发送一个SYN请求报文,这个SYN报文的"选项"字段中会有MSS值(MSS是计算过了的,MSS=MUT-IP首部长度-TCP首部长度),告知对方自己最大能发送的数据大小。
  2. 当服务端收到带MSS的SYN报文后,就可以确定当前对话所使用的MSS值了,也就是从自己的MSS和客户端的MSS中选一个最小的。然后服务端会向客户端发送SYN+ACK的同步确认报文,报文中的"选项"字段也会有MSS值,告知客户端自己能够发送的最大数据包长度。
  3. 客户端收到服务端带有服务端MSS的同步确认报文后,就可以确定和服务端对话使用的MSS了,也就是从自己的MSS和服务端MSS选取一个最小的。然后客户端向服务端发送ACK报文。
  4. 服务端接收到客户端的ACK报文,完成三次握手。

因此,在tcp三次握手过程中的第二次握手可以确定MSS。

tcp真的可以彻底避免分片吗?

不能。

因为在根本上,MTU是受到了数据链路层的限制,报文传输的路径上经常会有MTU值小于该TCP连接协商得到的MTU值的链路,在转发至该段链路之前转发设备仍需分片,所以说TCP分段并不能完全避免IP分片。

那么如何彻底避免分片?

参考:TCP分段与IP分片的区别与联系 - 云+社区 - 腾讯云

答案其实不难想到:如果能在TCP连接双方正式通信之前,就能通过某种方式预先知道端到端路径的MTU,即路径中包含的各条链路的MTU最小值(称为路径MTU,Path MTU),这一预先获知路径MTU的过程,称为路径MTU发现(Path MTU Discovery),这样此后每次通信都会基于此MTU推导得到的MSS值在发送方TCP层处执行分段。

路径MTU发现如何实现呢?

大家都记得IP首部中有三个标志位,第一位预留,第二位DF(Don't Fragment),第三位MF(More Fragments)。其中DF如果为1,意思是这个IP数据报在传输的过程中不能分片,如果此IP数据报大于网络接口的MTU,请直接丢弃,并发送消息告诉源主机已丢包。

什么消息呢?ICMP的消息,告诉包因为太大了,因为不能分片所以丢弃了,并告诉源主机请重新发送不超过MTU的数据报,那发什么样的ICMP消息呢?再回顾一下ICMP首部结构,有一个Type字段,还有Code字段,发送Type=3, Code=4, MTU=该接口的MTU值X的消息既可以了。当这个ICMP消息到达IP数据报的源主机,源主机知道原来是IP数据报太大了,那最大可以发送多大的包呢?ICMP消息里有,那就是MTU=丢弃该包的网络接口的MTU值X,于是源主机再次发送不超过MTU=X的数据报就可以避免在传输路径上的IP分片。

有人会说,如果这个大小不超过X的IP数据报在传输过程中又遇到更小的MTU怎么办?重复以上步骤即可~

路径MTU发现看似完美避免了IP分片的问题,但同时又带来了新的问题:如果ICMP消息最终没能到达源主机怎么办?很显然该IP数据报就被静静丢弃了,TCP连接超时而被断开。ICMP为什么回不来?一般是被防火墙或路由器的访问控制列表(Access Control List, ACL)给无情拒绝了。如果你可以管理并配置这些设备,只要允许ICMP Type=3, Code=4 的消息可以通过即可,否则只有老老实实关闭路径MTU发现功能了,因为至少分片还能通信,而避免分片则彻底无法通信了…

总结:

  1. 分段和分片行为发生在不同的协议层,分段是在传输层,由tcp规定,分片是在网络层,是被数据链路层限制,由ip协议规定。
  2. 传输层的协议不同会发生不同的划分行为,比如tcp分段不分片,udp和icmp等由于不分段会引起分片。
  3. 分段仅仅会发生在发送端,但是分片不仅可能发生在发送端,也有可能发生在路径上任何工作在三层或以上的设备中,但分段和分片引起的数据包重组只会发生在接收端。

参考资料:

TCP分段与IP分片的区别与联系 - 云+社区 - 腾讯云

详解IP分片与TCP分段的区别_造夢先森的博客-CSDN博客_ip分片 分段

关于tcp分段和ip分片相关推荐

  1. 【网络协议】TCP分段与IP分片

    参考:https://www.cnblogs.com/xfgnongmin/p/10612647.html MTU前面已经说过了,是链路层中的网络对数据帧的一个限制.依旧以以太网为例,MTU为1500 ...

  2. TCP分段与IP分片

    我们在学习TCP/IP协议时都知道,TCP报文段如果很长的话,会在发送时发生分段,在接受时进行重组,同样IP数据报在长度超过一定值时也会发生分片,在接收端再将分片重组. 1,MTU(Maximum T ...

  3. 详解IP分片与TCP分段的区别

    首先注意:一般听到的TCP分片应该称为TCP分段.IP分片与TCP分片是两个不同概念,别把IP分片与TCP分片别弄混淆了, 接下来直接划重点,两者主要区别: 1.IP分片产生的原因是网络层的MTU:T ...

  4. IP分片和TCP分片的区别

    前段时间要做一个关于网络嗅探的程序,里面要重组IP分片,TCP分片. 但做的时候忽视了一个很重要的东西:IP分片与TCP分片弄混淆了. 首先声明:TCP分片应该称为TCP分段. ----------- ...

  5. 二三层报头及IP分片详解

    一.报文数据格式 二.二层数据格式 二层以太帧格式 DMAC(6字节) SMAC(6字节) type(2字节) DATA(46-1500字节) CRC(4字节) 字段 长度 含义 DMAC 6字节 目 ...

  6. IP分片和TCP分段的区别

    1.MTU(Maximum Transmission Unit,MTU),最大传输单元 (1)以太网和802.3对数据帧的长度都有一个限制,其最大值分别是1500和1492个字节.链路层的这个特性称作 ...

  7. 学习笔记之IP分片抓包实验

    学习笔记之IP分片抓包实验 摘要 分片实验 identification字段 附:`MTU`和`MSS` 1,MTU(Maximum Transmission Unit,MTU),最大传输单元 2,M ...

  8. ip分片 tcp分段(转)

    为什么会有IP分片?直接原因是上层协议企图发送一段数据,其长度超过了MTU(Maxitum Transmission Unit).什么情况,或者说什么协议会尝试发送这么长的数据?常见的有UDP和ICM ...

  9. 【网络协议】TCP分段与UDP/IP分片 (MTU最大传输单元,MSS最大分段大小)

    我们在学习TCP/IP协议时都知道,TCP报文段如果很长的话,会在发送时发生分段,在接受时进行重组,同样IP数据报在长度超过一定值时也会发生分片,在接收端再将分片重组. 我们先来看两个与TCP报文段分 ...

最新文章

  1. (DNS被劫持所导致的)QQ音乐与视频网页打开很慢的解决方法
  2. 安装kinetic之后无法import cv2解决方案
  3. Android之javax.net.ssl.SSLPeerUnverifiedException: Hostname ip not verified:解决办法
  4. (搬家文) c++引用深入探讨
  5. InnoDB存储引擎相关问题整理
  6. devc编程c语言,【电子部新手教程之C语言入门篇】Dev-cpp安装与第一个程序
  7. Java排序算法——选择排序(Selection Sort)
  8. 支付宝APP支付-Android+springboot搭建后端
  9. The Apostle's Creed
  10. matlab fsolve fzero,Matlab中的fzero和fsolve函数
  11. 错误记录:java.lang.IllegalStateException:Duplicate key
  12. windows word2010 PPT
  13. 骨传导耳机有哪些品牌、最好的骨传导蓝牙耳机品牌介绍
  14. 扫描中如何实现自动纠偏
  15. 一些基于新闻表示和用户表示的新闻推荐模型总结:NPA/ NAML/ LSTUR/ NRMS
  16. 微软SSIS项目创建
  17. 期刊预警:Briefings in Bioinformatics是13.9分刊吗?今年可能只有8分
  18. 第917期机器学习日报(2017-03-23)
  19. h5 神策埋点_前端 神策埋点那点事儿
  20. 《东周列国志》第十五回 雍大夫计杀无知 鲁庄公乾时大战

热门文章

  1. Win10 一机两用
  2. 洛谷 P5306 [COCI2019] Transport 题解
  3. 计算机各个按键的功能
  4. 上海亚商投顾:三大指数均涨约1% 两市近4300股飘红
  5. Python中setattr()、getattr()、hasattr() 函数
  6. js 原生dom 操作
  7. jzoj阿里郎【数论】【贪心】
  8. 网络安全相关可研方向调研
  9. 微信小程序接入物流快递查询的接口API步骤
  10. 7 Azkaban开荒