Table of Contents
---------------------
基础概念
MSS:Maximum Segment Size,TCP一次传输发送的最大数据段长度。
RTT:往返时延,表示从发送端发送数据开始,到发送端收到来自接收端的确认(接收端收到数据后便立即发送确认),总共经历的时延。
--------------------
举例说明
一个RTT内tcp可以传输的数据量由流量控制和拥塞控制决定。流量控制,tcp中使用的是滑动窗口,即滑动窗口决定了一个RTT内发送端可以发送的TCP数据包个数,同时滑动窗口的大小由接收端的窗口决定,具体的滑动窗口的解释:点我。拥塞控制管理发送端的网络负载,减少丢包、拥塞等事故的发生,具体的解释:点我。
考虑以下场景,使用tcp来传输一个大的数据,需要将数据进行分段。每个tcp数据包可携带的最大分段长度为MSS,需要分1000段,则存在以下两种传输方式。
1、每次发送一个,对端确认之后,再发送下一个,发送1000次。
2、一次发送1000个,一次发完。
方式一,每个RTT内可传输一个MSS大小的数据;方式二,每个RTT内可传输100个MSS大小的数据。但这两种方式都比较极端,方式1速率太慢,方式2超过网络负载能力,接收端的缓存也不一定发的下那么多数据。
--------------------
详细说明
此时就需要谈谈窗口与带宽的关系了。如方式二,之所以该方法不现实,就是因为发送端和接收端的窗口不可能设置那么大,窗口的大小需要考虑接收方的处理能力和需求,同时也需要考虑二者的网络传输能力。再假如,接收方有这个需求且有这个处理能力,那么此时的约束条件就是二者之间的网络传输能力。二者之间的传输速率可通过带宽体现出来,如上文所知,一个数据包的数据最大负载为MSS,而带宽则表示二者之间的网络支持一次可以发送多少个数据包。
参考:TCP速率与窗口,带宽,RTT之间的关系,我们可以得到公式 W < B * Rtt 和 W > B * Rtt,如果满足前者,则说明当前网络的传输能力收到滑动窗口的约束;满足后者则受带宽的约束。在W < B * Rtt 时,影响TCP发送数据速率的最直接的因素是滑动窗口的大小,TCP的流量控制策略(比如超时时窗口设置为1,重复ACK时窗口减半)最终都是通过控制窗口大小来控制速率,而慢启动,拥塞避免这些流量控制算法实际上就是控制窗口增长方式的算法,也就是控制的是加速度大小。具体的滑动窗口与拥塞窗口的区别见博客:https://blog.csdn.net/qq_37437983/article/details/108651806
MSS的百度定义连接:https://baike.baidu.com/item/MSS/3567802?fr=aladdin
IPV4中MSS大小默认为536字节
IPV6中MSS大小默认为1220字节