TCP/IP中的Payload概念以及由此引申出的一些问题

TCP报文一次性最大运输的货物量(Payload),大体可以这么来计算:

IP报文头长度  +  TCP报文头长度  +  Payload长度  ≤ MTU

即左边的三者之和,要小于等于右边MTU的长度,其中:

Internet 路由器接口标准MTU = 1500

IP报文头长度 = 20

TCP报文头长度 = 20

所以

Payload长度≤ MTU – IP报文头长度 – TCP报文头长度

                    ≤ 1500 -20 -20

                    ≤ 1460

TCP为了提高传输效率,通常会使用最大上限1460字节来传输应用层数据,如http,除非http待传输数据小于1460。

但是TCP没有那么简单,所以还需要考虑得更多一点。

TCP报文通常有3部分组成:IP Header + TCP Header + Payload

但是,当前主流操作系统的TCP/IP协议栈,为了提高传输性能,通常还会使用 TCP Option选项。

一个例子

客户端在TCP握手连接,告诉服务器自己支持以下三个option:

(1)   Maximum Segment Size

(2)   SACK Permitted

(3)   Timestamp

服务器接收到该报文,却有不同的意见,服务器只支持这三者中的Maximum Segment Size

Option,翻译成中文是选项。所谓选项,不是强制标准,对方如果不支持或不理解,完全可以忽略。

在这里服务器并没有打算支持选项2 ,3, 所以双方共同支持双方的交集,即选项1。

Maximum Segment Size

MSS的存在是为了通信双方交换各自TCP Payload最大传输长度,这个长度上限一般为1460,即上文计算的方法。

如果双方的MSS不一样,将选择较小的MSS值,作为接下来通信Payload的长度上限。

假如服务器支持选项2,“Timestamp”,那么TCP报文将会包含4部分:

IP Header + TCP Header + TCP Option +Payload

这里的TCP Option为“Timestamp”,长度为 10字节,看看 Payload最大可以传输多少字节?

IP Header + TCP Header + TCP Option +Payload ≤ 1500

 

IP Header + TCP Header + Timestamp +Payload ≤ 1500

 

Payload ≤ 1500 - IP Header -TCP Header – Timestamp

              ≤ 1500 -20 -20 -10

              ≤ 1450

简而言之,没有携带option的TCP报文,最大可以支持1460字节的Payload长度。

一旦携带option,由于option需要占用空间,留给payload的空间将会相应减少,具体减少的空间等于option占用的空间。

Payload长度和Window Size有关系吗?

有一点点关系。

如果把Payload 1460看成一个标准的集装箱,Window Size可以看作双方的仓库大小,用于临时堆放对方运过来的集装箱,在集装箱被客户运走之前,一直会呆在TCP仓库里。

为了更高效地利用仓库,最理想的方法就是,仓库的大小是集装箱的整数倍,这样就不会产生零星的空间。

零星的空间一直无法使用,因为不够容纳一个标准集装箱,势必会造成仓库空间的浪费。

空间浪费只是直接后果,还有一个间接后果,更加严重。

假设接收方的仓库空间还有200字节,于是通过window size update消息告诉发送方。

发送方心急火燎发200字节,那么一个标准1460报文,将会分成8个小报文发送,这样的传输效率会非常低下。

为了避免这种低效传输场景,TCP协议有了新的严格规定:

如果 window size < MSS , 不允许更新自己的window。

上文用通俗语言表达为,一旦接收方的仓库空间小于一个标准集装箱,window size update = 0 , 即善意欺骗对方,仓库已经用完,不允许再发货物过来。

以上是从接收方入手,万一接收方没有遵守规定,那就让发送方严格执行另外一个规定。

发送方一旦发现对方的window size < MSS,理解为对方的仓库已经占满(剩余空间不足以容纳一个标准集装箱),不会发送任何集装箱。

原文地址:https://www.cnblogs.com/gaoshaonian/p/12610728.html

时间: 2024-10-14 05:02:19

TCP/IP中的Payload概念以及由此引申出的一些问题的相关文章

已经在TCP/IP中禁用IPv6,为什么邮件头中仍然显示IPv6呢?

有时会出现尽管我们在TCP/IP中禁用了IPV6,但是邮件头中仍然有IPV6地址,如何来解决呢?好的首先如果您的IPv6是在安装完Exchange后才禁止的,那么我们在TCP/IP中禁止,或许有的时候不能奏效.我建议您通过注册表来禁止IPv6,试试是否还会出现问题: a. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters b. 新建DWORD(32-bits)并以"DisabledComponents&q

TCP/IP中最高大上的链路层详解(二)

引言 对于程序猿来讲,似乎越接近底层,就越显得高大上.这也算是程序猿们的共同认知吧,虽然不是所有人.今天LZ就和各位一起探讨一下TCP/IP中最高大上的一层,也就是最底层的链路层. 这一层LZ了解的还不够深刻,但是LZ还没有做硬件的打算,因此LZ觉得只要能够大致明白其原理即可,有的时候太执着了并不是好事,别忘了执着的同义词中有一个叫钻牛角尖. 链路层是什么 这个问题其实很好回答,在上一章LZ就提到过,直观的说,链路层就是我们平时接触的网卡和网卡的驱动程序(当然,也可以指其它的网络接口和驱动,比如

TCP/IP中链路层的附加数据(Trailer数据)和作用

1.TCP/IP中链路层的附加数据是什么 在用wireshark打开报文时,链路层显示的Trailer数据就是附加数据,如图 2.如何产生 1.例如以太网自动对小于64字节大小的报文进行填充(未实验). 2.使用链路层套接字写数据时,实际数据大小 > (ip头标示报文大小 + 链路层头部) 3.生存周期 ? 4.作用 假设二层交换机下有2个设备A和B 1.增添了一条操作系统与外界通信的额外通道 试想下,怎么在协议不支持的情况下从A设备处获得B设备的系统时间? 在B设备向A设备发数据时(任何协议)

wireshark的使用教程--用实践的方式帮助我们理解TCP/IP中的各个协议是如何工作的

 wireshark的使用教程 --用实践的方式帮助我们理解TCP/IP中的各个协议是如何工作的 wireshark是一款抓包软件,比较易用,在平常可以利用它抓包,分析协议或者监控网络,是一个比较好的工具,因为最近在研究这个,所以就写一下教程,方便大家学习. 这里先说Wireshark的启动界面和抓包界面 启动界面: 抓包界面的启动是 按file下的按钮 之后会出现 这个是网卡的显示,因为我有虚拟机所以会显示虚拟网卡,我们现在抓的是真实网卡上的包所以在以太网卡右边点击start 开始抓包 这个就

TCP/IP 协议大致的概念

最近在看<图解HTTP>和<HTTP权威指南>,对TCP/IP大致过了一下. TCP/IP 不仅仅是TCP 和 IP  TCP/IP 是协议族,与之相对的事IEEE等标准组织设定的OSI七层.这里面涉及到的协议有: TCP   传输控制协议                   传输层. IP    网际协议                         网络层. ARP    地址解析协议                        数据链路层协议. UDP    用户数据报协

TCP/IP中的TIME_WAIT状态

毫无疑问,TCP中有关网络编程最不容易理解的是它的TIME_WAIT状态,TIME_WAIT状态存在于主动关闭socket连接的一方. TIME_WAIT状态存在的理由: TCP/IP协议就是这样设计的,是不可避免的.主要有两个原因: 1)可靠地实现TCP全双工连接的终止 TCP协议在关闭连接的四次握手过程中,最终的ACK是由主动关闭连接的一端(后面统称A端)发出的,如果这个ACK丢失,对方(后面统称B端)将重发出最终的FIN,因此A端必须维护状态信息(TIME_WAIT)允许它重发最终的ACK

TCP/IP详解系列 --- 概念总结01

UDP协议  .vs.  TCP协议:  原理上:(TCP报文段. vs . UDP用户数据报) TCP协议的特性: TCP是面向连接的运输层协议,应用程序在使用TCP协议之前,必须先建立TCP连接.在传送数据完毕之后,必须释放已建立的TCP连接. 每一条TCP连接只能有两个端点,每一条TCP协议只能是点对点的. TCP提供可靠交付的服务.通过TCP连接传送的数据,无差错.不丢失.不重复并且按序到达. TCP提供全双工通信.TCP允许通信双方的应用进程在任何时候都能发送数据.TCP连接的两端都设

TCP/IP中的传输层协议TCP、UDP

TCP提供可靠的通信传输,而UDP则常用于让广播和细节控制交给应用的通信传输. 传输层协议根据IP数据报判断最终的接收端应用程序. TCP/IP的众多应用协议大多以客户端/服务端的形式运行.客户端是请求的发起端,而服务端表示提供服务的意思,是请求的处理端.因此,作为服务端的程序有必要提前启动,准备接收客户端的请求.传输协议根据接收数据中的目标端口号识别目标处理程序. TCP.UDP比较 TCP提供可靠性传输.实行顺序控制或重发控制机制,还有流量控制和拥塞控制,提高网络利用率. UDP是不具备可靠

TCP/IP中你不得不知的十大秘密

这段时间 有一点心很浮躁,不过希望自己马上要矫正过来.好好学习编程!这段时间我想好好地研究一下TCP/IP协议和网络传输这块!加油 一.TCP/IP模型 TCP/IP协议模型(Transmission Control Protocol/Internet Protocol),包含了一系列构成互联网基础的网络协议,是Internet的核心协议. 基于TCP/IP的参考模型将协议分成四个层次,它们分别是链路层.网络层.传输层和应用层.下图表示TCP/IP模型与OSI模型各层的对照关系. TCP/IP协