13 | 小数据包应对之策:理解TCP协议中的动态数据传输
该思维导图由 AI 生成,仅供参考
调用数据发送接口以后……
流量控制和生产者 - 消费者模型
- 深入了解
- 翻译
- 解释
- 总结
TCP协议中的动态数据传输涉及发送窗口、接收窗口和拥塞窗口等概念,构成了TCP的生产者-消费者模型,确保数据传输的协同速率。文章还探讨了Nagle算法和延时ACK机制的组合,以及如何通过禁用Nagle算法和合并写操作来优化数据传输。通过对TCP流量控制的生产者-消费者模型的讲解,强调了发送窗口和阻塞窗口的重要性,以及小数据包对网络带宽的影响。最后,提出了两个思考题,引发读者对TCP拥塞控制算法的进一步思考。 总的来说,本文深入探讨了TCP协议的复杂性和需要考虑的多方面因素,以及如何有效利用网络带宽。同时,通过具体的例子和代码演示,使读者更容易理解TCP协议中的关键概念和优化方法。
《网络编程实战》,新⼈⾸单¥59
全部留言(30)
- 最新
- 精选
- 张立华非阻塞socket,对于write和send, 返回实际发送的字节数。所以一般在while里不断发送,直到全部发送完毕。 send根据只要根据要发送的buf做个偏移,很方便。 而writev 就很繁琐了啊
作者回复: 你说的不错,一般我们只在合并缓冲区的时候才需要,绝大多数都是使用write和send 。
2019-08-3023 - Donkey请教老师一个愚钝问题:大数据循环发送时,那接收方怎么接收才能接收完整的包?不会发生粘包等现象呢?
作者回复: 我觉得这个问题不愚钝。 每个包都有一个序列号,通过序列号按顺序就可以还原这个数据流;这个数据流本身也有例如checksum,序号大小等数据,这个数据流所有序列号的包都收到了,就可以完成数据流的拼装了。 解决粘包问题的关键是区分出数据的边界,我在第16降:如何理解TCP的“流”里讲到了这部分内容,你可以参考一下。
2019-09-18518 - 许童童TCP 拥塞控制算法,我知道最新的有BBR算法,这个算法在网络包填满路由器缓冲区之前就触发流量控制,而不在丢包后才触发,有效的降低了延迟。
作者回复: 嗯,我也是刚知道这个算法。
2019-08-30412 - 一凡telnet是使用Nagle 算法的吗,但是远程操作是实时性的呀?额
作者回复: 默认是使用的,批量发送小数据包在系统层面显然是得到充分的优化的,并不是我们想象中的经过很长时间之后才会发送出来,在telnet操作下,这个时间对操作人员是无感的。
2020-04-1329 - mgxian问题1 : grep 'IOV_MAX' /usr/include/limits.h
作者回复: 赞
2019-09-1847 - 衬衫的价格是19美元拥塞控制算法的话,应该是bbr吧,已经被合入linux 4.9内核了。与传统的reno, cubic等策略相比,最大的不同是,bbr不会因为链路噪声而执行乘性减窗,导致延迟过大。实际上,目前gwf的随机丢包的策略也是链路噪声。
作者回复: Google出品,名声不小。
2019-10-046 - 不动声色满心澎湃writev是减少write的使用次数吧。一次writev中的数据也有可能分多个包发出去。我说的对吗老师
作者回复: 当然,我们决定不了发包的次数。只不过合并写的方式,让操作系统可以一次性发送出去的几率更大。
2019-08-316 - D就拥塞控制算法这块,记得前一阵阿里发布一个HPCC算法,盛老师点评一下?谢谢
作者回复: 哈哈,研究性质的算法,应该还不错吧,不知道什么时候可以实际使用
2019-08-306 - LDxy下载软件通常使用多线程建立多个TCP连接来下载一个大文件,是不是也是为了尽量避免TCP拥塞控制带来的影响,从而充分利用带宽?因为从实际使用来看,下载软件一旦跑满带宽,其他软件基本是是抢不过它的
作者回复: 这是为了加速下载的时间,说白了就是抢带宽。
2019-08-304 - 锦问题一:Linux中最多允许1024个元素 请教一个问题,tcp中有各种窗口,很头晕,比如,发送窗口,接收窗口,通告窗口(Advertised window),滑动窗口,拥塞窗口。为什么要弄这么多窗口呢?都是为了做流量控制吗?如何去理解呢?
作者回复: 发送窗口和接收窗口都是通过滑动窗口机制来实现的,这是为了流量控制而引入的概念;而拥塞窗口则是为了拥塞控制而引入的概念。
2019-08-3033