拥塞控制和流量控制

滑动窗口的解释:

答案截图备份

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

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表示关闭这种行为

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 运输层协议概述 从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是...
    srtianxia阅读 7,330评论 0 2
  • 本篇文章主要是从运输层协议概述、UDP、TCP、可靠传输的工作原理、TCP首部格式、TCP可靠传输的实现、TCP流...
    SeanMa阅读 9,485评论 2 13
  • 六、TCP可靠传输的实现 首先介绍以字节为单位的滑动窗口。为了讲述可靠传输原理的方便,假定数据传输只在一个方向进行...
    dmmy大印阅读 6,070评论 0 1
  • 0. 基本要点 运输层是为相互通信的应用进程提供逻辑通信。 端口和套接字的意义 什么是无连接UDP 什么是面向连接...
    安安zoe阅读 5,288评论 0 1
  • 直到今天我才真正的释怀了。不为什么?突然明白了。这种感觉真可怕,我宁愿自己还是当年的那个傻子。可是,我连骗自己的谎...
    小八妞妞阅读 1,761评论 0 0