美文网首页日常刻书
TCP 中的 Nagle 算法

TCP 中的 Nagle 算法

作者: F_wind | 来源:发表于2021-12-24 08:17 被阅读0次

《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 分组,来避免网络性能的下降。

相关文章

  • TCP之Nagle、Cork、Delay ACK(延迟确认)

    [TOC] 参考资料 TCP协议中的Nagle算法 TCP中的Nagle算法 Linux下TCP延迟确认(Dela...

  • 详解Socket编程---TCP_NODELAY选项

    Nagle算法描述 Socket编程中,TCP_NODELAY选项是用来控制是否开启Nagle算法,该算法是为了提...

  • TCP 中的 Nagle 算法

    《HTTP 权威指南》阅读随笔 为什么要使用 Nagle 算法TCP 有一个数据流接口,应用程序可以通过它将任意尺...

  • Nagle算法在TCP

    使用 Nagle 可以尽可能发送大块数据的包,从而减少发包个数,以此降低网络负载。 如果调试过 telnet 之类...

  • TCP之Nagle算法

    [TOC] Small Packet Problem 在使用一些协议通讯的时候,比如Telnet,会有一个字节字节...

  • HTTP连接管理

    Http事务的时延:(1)TCP建立连接握手(2)TCP慢启动拥塞控制(3)数据聚集的Nagle算法(4)用于捎带...

  • TCP_NODELAY 和 TCP_CORK主要区别

    tcp_nodelay:禁止nagle算法,有需要发送的就立即发送,比较常见。 tcp_cork:它是一种加强的n...

  • tcp-粘包浅析

    在运输层用的最多的就是tcp 和udptcp面向连接udp非面向连接tcp使用了优化方法(Nagle算法),将多次...

  • Tcp参数 tcp_nodelay tcp_quickAck

    1.Nagle算法 例子:使用telnet的时候,可能发送的字节只有1,但是在网络传输中还是要加上tcp head...

  • 如何在用C语言写的TCP程序中关闭Nagle算法

    TCP为了防止在网络中过多的小分组会导致阻塞,因此提供了Nagle算法:要求一个TCP连接上最多只能有一个未被确认...

网友评论

    本文标题:TCP 中的 Nagle 算法

    本文链接:https://www.haomeiwen.com/subject/vaqlqrtx.html