TCP和1448

1448字节是实际场景下,单个TCP包的实际运载能力。也就是说,实际场景下,上层调用send(1000KB),下层会把这1000KB封装成多个TCP包进行发送。单个TCP包每次打包1448字节的数据进行发送。
详细的TCP在传输情景wireshark截图如图1

图1

每个TCP包在理论上应该能打包更多数据才对,但是实际场景下TCP传输为什么会以这个1448作为打包单位呢?
这个实际TCP单包传输1448字节数据的根源在于“以太网Ethernet最大的数据帧是1518字节”。

1500字节的MTU

以太网Ethernet最大的数据帧是1518字节。以太网帧的帧头14字节和帧尾CRC校验4字节(共占18字节),剩下承载上层协议的地方也就是Data域最大就只剩1500字节. 这个值我们就把它称之为MTU。

我们来看看linux上MTU默认值,查证一下,如图2

图2

这个MTU值可以修改,但是现在大部分计算机网络都被以太网承载,所以修改这个值没有什么实际意义。

MSS决定TCP的单包传输量

MSS就是TCP数据包每次能够传输的最大量。为了达到最佳的传输效能,TCP协议在建立连接的时候通常要协商双方的MSS值,这个值TCP协议在实现的

时候往往用MTU值代替(需要减去IP数据包包头的大小20Bytes和TCP数据段的包头20Bytes)所以往往MSS为1460(如图1中红色方框所示的SYN包中的MSS值)。通讯双方会根据双方提供的MSS值得最小值确定为这次连接的最大MSS值。

MSS为1460是由1500-20(IP头)-20(TCP头)计算出的。
实际场景下,TCP包头中会带有12字节的选项----时间戳。
这样,单个TCP包实际传输的最大量就缩减为1448字节。1448=1500-20(IP头)-32(20字节TCP头和12字节TCP选项时间戳)

回到我们开篇的问题

“每个TCP包在理论上应该能打包更多数据才对,但是实际场景下TCP传输为什么会以这个1448作为打包单位呢?”
理论上,单个TCP包能打包的数据量远远多于1448字节,现在为了适应MTU,只要在以太网上跑TCP,系统就默认最大以1448字节打包TCP。
假如我们用更大的数据量来打包会有什么结果呢?
答案是降低了传输效率。
超过MTU的大包反而降低效率的原因如下:

IP层非常关心MTU,因为IP层会根据MTU来决定是否把上层传下来的数据进行分片。就像一条运输线路的承载能力是有限的,碰到大东西要运输,只能把大东西拆开成为散件,分开运输,到达目的地之后还必须能再次组装起来。

当两台远程PC互联的时候,它们的数据需要穿过很多的路由器和各种各样的网络媒介才能到达对端,网络中不同媒介的MTU各不相同,就好比一长段的水管,由不同粗细的水管组成(MTU不同 :))通过这段水管最大水量就要由中间最细的水管决定。

对于网络层的上层协议而言(我们以TCP/IP协议族为例)它们对水管粗细不在意它们认为这个是网络层的事情。网络层IP协议会检查每个从上层协议下来的数据包的大小,并根据本机MTU的大小决定是否作“分片”处理。分片最大的坏处就是降低了传输性能,本来一次可以搞定的事情,分成多次搞定,所以在网络层更高一层(就是传输层)的实现中往往会对此加以注意!
这个就是在以太网上,TCP不发大包,反而发送1448小包的原因。只要这个值TCP才能对链路进行效能最高的利用。

TCP传输的单个报文最大字节(MSS和MTU)相关推荐

  1. 什么是MTU?MSS?为什么要有MTU?对应以太网、TCP传输最小值?

    系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目 文章目录 系列文章目录 1.什么是MTU.MSS 2.为什么会有MTU? 3.为什么会有MSS? 4.MTU为什么是1500? 5.MSS ...

  2. 【网络】网络的基础知识--TCP/IP协议、IP分组、TCP传输

    1.OSI参考模型: OSI(Open System Interconnect),即开放式系统互联.一般都称为OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互联模型.该体系结构标 ...

  3. 以太网帧、IP 帧、UDP/TCP帧、http 报文结构解析

    我们从 OSI/RM 参考模型入手,来看 OSI/RM 七层模型中的每一层数据帧结构. 一 OSI/RM 结构 OSI 是不同制造商的设备和应用软件在网络中进行通信的标准,此模型已经成为计算机间和网络 ...

  4. TCP传输协议如何进行流量控制?

    TCP流量控制,简单来说就是让数据传输端传输的速率不要太快,让数据接收端来得及接收,利用滑动窗口机制可以很方便的在TCP连接上实现对数据传输端的流量控制.TCP的窗口单位是字节,不是报文段,数据传输端 ...

  5. 网络:七层,HTTP应用层、TCP传输层、IP网络层,拔网线TCP还在,三次握手保证双向与减少因延时传输错误

    网络七层 应,表,会,传,网,数,物 HTTP应用层 TCP传输层 IP网络层 应用层 与其它计算机进行通讯的一个应用,它是对应应用程序的通信服务的.例如,一个没有通信功能的字处理程序就不能执行通信的 ...

  6. s6-7 TCP 传输策略

    TCP 传输策略 防止黏包现象的出现 当窗口数为 0 时,发送者不能正常发送数据段,除非: -Urgent数据.比如,用户想杀掉远端机器上的进程的时候,可以发送数据 -发送者可以发送一个字节的数据段, ...

  7. TCP传输连接建立与释放详解

    一直以来有许多读者朋友对TCP的传输连接建立和释放过程不是很理解,而这又是几乎网络认证中必考的知识点,包括软考.CCNA\CCNP.H3CNA\H3CNE等,为此再把笔者年度巨作,广受好评的--< ...

  8. nginx工作笔记005---nginx配置负载均衡_在微服务中实现网关集群_实现TCP传输层协议__http协议的负载均衡

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 我们在微服务中,由于网关的存在,后来,在nginx中都不需要在配置其他服务的地址了,只需要,配置一 ...

  9. Java基础23 网络编程 socket套接字流 TCP传输总结

    一.网络编程的概念 1.计算机网络:将不同地区的计算机,使用网络来进行连接 实现不同地区的数据的交互与共享(互联时代) 2. 网络编程的三要素:IP地址 端口号 协议 3. ip地址:是在网络连接中 ...

最新文章

  1. 回溯java算法_聊聊算法——回溯算法
  2. 基于owncloud构建私有云储存网盘
  3. 机器学习-吴恩达-笔记-6-应用机器学习的建议
  4. BackgroundWorker简单实用(简便的异步操作)
  5. 多进程和线程的区别【转】
  6. 自定义view跟手移动android,Android自定义view圆并随手指移动
  7. Mac 软件汉化教程(一)
  8. span 禁止选中_网页代码常用小技巧(禁止另存为)
  9. 谷歌账号Gmail邮箱修改密码提示需要手机设备验证码如何处理
  10. 安装配置Axis2,为Eclipse安装配置Axis2插件教程
  11. vmware虚拟机 配置动态 静态 固态IP 三种模式: 桥接模式 nat模式和仅主机模式 Host-only模式
  12. 提高效率必备软件合集
  13. EOS核心特点是什么?
  14. 2020 China Collegiate Programming Contest Weihai Site H.Message Bomb
  15. Android 加密之文件加密(FBE)
  16. 红米redmi X系列和荣耀智慧屏X1哪个好
  17. 华三交换机IRF堆叠配置及MAD配置
  18. 小结:云架构中的IAAS层体系
  19. 模拟CMOS 基础知识4——短沟道效应
  20. font在html语言中是什么意思,font在html中的意思

热门文章

  1. 关于 Java 性能调优的 11个简单技巧,多少人知道?
  2. 深度探秘 Java 8 函数式编程(下)
  3. 提升用户体验的必杀器——A/B实验统计方法解密
  4. springboot集成prometheus
  5. map:erase删除元素之后迭代器失效的问题!(iterator not incrementable)
  6. margin 0 auto 什么意思
  7. python定义链表节点_Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】...
  8. excel制作录入和查询系统_excel表格制作成绩查询系统攻略:让学生隐私更安全!
  9. python文件处理,python文件处理
  10. Dataset:GiveMeSomeCredit数据集的简介、下载、使用方法之详细攻略