拥塞控制和流量控制

滑动窗口的解释:

答案截图备份

拥塞控制窗口+慢启动+拥塞控制算法=拥塞控制

TCP特性使得每个TCP连接可以得到均等的带宽。在多用户环境下,一个用户拥有越多TCP连接,获得的带宽越大。
具体来说:
这个涉及到了TCP的拥塞控制。
我们先看一下单TCP连接的拥塞控制。
这是一个TCP连接的发送窗口。


拥塞控制窗口

绿色部分为发送者已发送,且接收者已确认(ACKed)。
黄色部分为发送者已发送,但接收者尚未确认("in-flight")。
蓝色部分为可用但尚未发送。
灰色部分为不可用。
所以在RTT(round-trip time,来回通讯延迟)不变的情况下,cwnd这个变量基本决定传输速率。


image

发送者总会试图找到不丢包情况下的最大速率。按照TCP协议,在传输开始之后,每接收到一个确认(ACK)就会把cwnd这个变量增大一倍。所以TCP连接开始之后应该是这个样子。
image

刚开始的时候传输速率应该是指数被增长的,直到丢包发生。丢包会有两种情况:
1.当接收者发送给发送者的ACK丢失了,这时会触发超时(timeout)。
2.当发送者发送给接收者的数据包丢失了,发送者会收到接收者发来的重复ACK,如果发送者收到了3个重复的ACK,也会认为发生了丢包。
具体对这两种情况采取的措施略有不同,但粗略来说,变量cwnd会被减半,也就是说传输速率减半。然后cwnd会再次增大,直到下次丢包发生。所以忽略最开始,TCP的吞吐量应该是这样。
image

MTU,MSS,滑动窗口,慢启动,拥塞算法

https://www.zhihu.com/question/48454744/answer/110946313
车小胖的回答

滑动窗口实现

https://www.zhihu.com/question/32255109

tcp流控和拥塞控制:

https://www.cnblogs.com/zlingh/p/6161088.html

tcp那些事

https://coolshell.cn/articles/11564.html

自我总结:
拥塞控制依靠:慢启动,拥塞控制算法,快速重传,快速恢复
流量控制依靠:滑动窗口

tcpnopush:一定会等到发送缓冲区>MSS才发送
tcpnodelay:delay模式是指(默认开启) = 当发送缓冲区的数据少于MSS时就等待其他包一起(>MSS)发送,除非收到了上一个包的ACK就会立即发送。当tcpnodelay为on表示关闭这种行为

你可能感兴趣的:(拥塞控制和流量控制)