TCP 中的 Nagle 算法

《HTTP 权威指南》阅读随笔

为什么要使用 Nagle 算法
TCP 有一个数据流接口,应用程序可以通过它将任意尺寸的数据放入 TCP 栈中,即使一次只放入一个字节也可以。但是 TCP 段中至少包含了 40 个字节的标记和首部,所以如果 TCP 发送了大量包含少量数据的分组时,网络的性能就会严重下降。此时需要引入 Nagle 算法来解决这种性能问题。
什么是 Nagle 算法
Nagle 算法(以其发明者 John Nagle 命名)试图在发送一个分组之前,将大量 TCP 数据绑定在一起,以提高网路效率。Nagle 算法鼓励发送全尺寸的段,只有当其他分组都被确认之后,Nagle 算法才允许发送非全尺寸的分组,如果其他分组仍然在传输过程中,就将那部分数据缓存起来,只有当挂起分组被确认,或者缓存中积累够一个全尺寸分组数据时,才会将缓存的数据发送出去。
Nagle 算法的弊端以及如何解决
Nagle 算法主要存在两个问题:

  1. 对于零散的小的 HTTP 报文,可能会因为等待那些永远也不会到来的额外数据而产生时延;
  2. Nagle 算法会阻止数据发送,直到确认分组抵达为止,但确认分组会被迟延确认算法延迟一小段时间(一般是 100~200 毫米)。

对于上面两种情况,HTTP 应用程序通常可以在栈中设置参数 TCP_NODELAY 来禁用 Nagle 算法以提高性能。如果这么做的话,就要尽量保证发送包含大数据块的 TCP 分组,来避免网络性能的下降。

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

推荐阅读更多精彩内容

  • Nagle算法 Nagle算法的目的在于减少广域网上小分组的数。 该算法要求一个TCP连接上最多只能有一个未被确认...
    wayyyy阅读 1,179评论 0 2
  • 作者: 雪山肥鱼 时间:20211109 06:57 目的: 了解http 的连接管理 4.1 TCP 连接(老生...
    404Not_Found阅读 343评论 0 1
  • [TOC] Small Packet Problem 在使用一些协议通讯的时候,比如Telnet,会有一个字节字节...
    tracy_668阅读 939评论 0 1
  • TCP连接 TCP/IP是全球计算机及网络设备都在使用的一种常用的分组交换网络分层协议集。客户端应用程序可以打开一...
    咖啡少年不加糖whm阅读 542评论 1 1
  • HTTP 是如何使用TCP连接的 TCP连接的时延,瓶颈以及存在的故障 HTTP 的优化,包括并行连接,keep-...
    minyue阅读 612评论 0 0