delayed ack与nagle's算法

delayed ack和nagles算法都能减少tcp传输过程中的小数据包的问题

tcpip卷二25章中提到tcp为每个连接建立7个定时器:

1.connection established

2.restransmission

3.delayed ack(https://en.wikipedia.org/wiki/TCP_delayed_acknowledgment)

4.persist

5.keepalive

6.fin_wait_2

7.time_wait

下面是wikipedia对nagle’s算法描述的url,

https://en.wikipedia.org/wiki/Nagle%27s_algorithm

最主要的应该就是这段代码:

if there is new data to send
  if the window size >= MSS and available data is >= MSS
    send complete MSS segment now
  else
    if there is unconfirmed data still in the pipe
      enqueue data in the buffer until an acknowledge is received
    else
      send data immediately
    end if
  end if
end if

MSS(maximum segment size)

(今天才知道这是两个概念,之前以为是一个意思呢O(∩_∩)O~),

如果实际中就是小数据包很多而且实时要求很高的话,可以设置socket的tcp_nodelay选项来关闭nagles算法(nginx中就有此设置).(这里还有两个参数tcp_cork和tcp_quickack和本文有关系有时间可以研究一下这两个参数。)

delayed ack与nagle's算法

时间: 2024-10-14 12:31:07

delayed ack与nagle's算法的相关文章

Linux下TCP延迟确认(Delayed Ack)机制导致的时延问题分析

版权声明:本文由潘安群原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/105 来源:腾云阁 https://www.qcloud.com/community 案例一:同事随手写个压力测试程序,其实现逻辑为:每秒钟先连续发N个132字节的包,然后连续收N个由后台服务回显回来的132字节包.其代码简化如下: char sndBuf[132]; char rcvBuf[132]; while (1) { for (int i

Linux下TCP延迟重庆时 时 彩源码下载确认(Delayed Ack)机制导致的时延问题分析

重庆时 时 彩下载联系方式:QQ:2747044651 网址在实际测试中发现,当N大于等于3的情况,第2秒之后,每次第三个recv调用,总会阻塞40毫秒左右,但在分析Server端日志时,发现所有请求在Server端处理时耗均在2ms以下. 当时的具体定位过程如下:先试图用strace跟踪客户端进程,但奇怪的是:一旦strace attach上进程,所有收发又都正常,不会有阻塞现象,一旦退出strace,问题重现.经同事提醒,很可能是strace改变了程序或系统的某些东西(这个问题现在也还没搞清

What is Delayed ACK and how can it be a bottleneck

Before explaining what Delayed ACK is, lets start by clarifying some concepts.TCP/IP is used to refer to two different things. On one side TCP/IP is a suite of protocols that rule the Internet containing protocols like HTTP, Telnet,ICMP,SSH and many

TCP/IP Delay ack 和 Nagle算法

Delay ack(延迟确认) 正常情况下服务器收到一个请求时就会立即回复ACK确认给客户端,然后客户端再发送下一个包,服务器再进行回复.有时候服务器回复的ACK包有长度,但实际内容长度为0,这也没关系属于正常的.不过一次发送一次确认效率比较低,能不能收多次批量确认一次呢?这就是延迟确认. Delay ack是说收到包不立即回复ack,而是等一会儿默认200毫秒,看看这段时间是否有还有包发过来(属于同一客户端)如果有就一起发送ACK确认,如果超时了还没有等到那么就直接发送这一个确认包.在延迟确认

TCP Nagle算法以及延迟确认(即延迟回复ACK)的学习

TCP/IP协议中,无论发送多少数据,总是要在数据前面加上协议头,同时,对方接收到数据,也需要发送ACK表示确认.为了尽可能的利用网络带宽,TCP总是希望尽可能的发送足够大的数据. (一个连TCP接会设置MSS参数,因此,TCP/IP希望每次都能够以MSS尺寸的数据块来发送数据). Nagle算法就是为了尽可能发送大块数据,避免网络中充斥着许多小数据块.(尤其在广域网中)(减少大量小包的发送) Nagle算法的基本定义是任意时刻,最多只能有一个未被确认的小段.所谓"小段",指的是小于M

socket 选项 TCP_NODELAY 和 NAGLE 算法

当我们通过 TCP socket 分多次发送较少的数据时,比如小于 1460 或者 100 以内,对端可能会很长时间收不到数据,导致本端应用程序认为超时报错.这时可能是受到了 TCP NAGLE 算法的影响. 关于 TCP NAGLE 算法,可以参考这篇文章<TCP NAGLE算法和实现>以及<网络编程中Nagle算法和Delayed ACK的测试> ,这里只说程序上如何实现.代码如下: [cpp] view plaincopy int on = 1; /* make socket

TCP Nagle算法&amp;&amp;延迟确认机制

收藏 秋风醉了 发表于 3年前 阅读 1367 收藏 0 点赞 0 评论 0 [腾讯云]买域名送云解析+SSL证书+建站!>>>   摘要: TCP Nagle算法&&延迟确认机制 TCP Nagle算法 http://baike.baidu.com/view/2468335.htm 百度百科:TCP/IP协议中,无论发送多少数据,总是要在数据前面加上协议头,同时,对方接收到数据,也需要发送ACK表示确认.为了尽可能的利用网络带宽,TCP总是希望尽可能的发送足够大的数据.

socket.setNoDelay([noDelay]) 用的是Nagle算法

Nagle算法是以他的发明人John Nagle的名字命名的,它用于自动连接许多的小缓冲器消息:这一过程(称为nagling)通过减少必须发送包的个数来增加网络软件系统的效率.Nagle算法于1984年定义为福特航空和通信公司IP/TCP拥塞控制方法,这是福特经营的最早的专用TCP/IP 网络减少拥塞控制,从那以后这一方法得到了广泛应用.Nagle的文档里定义了处理他所谓的小包问题的方法,这种问题指的是应用程序一次产生一字节数据, 这样会导致网络由于太多的包而过载(一个常见的情况是发送端的"愚蠢

Nagle算法

用于自动连接许多的小缓冲器消息;这一过程(称为nagling)通过减少必须发送包的个数来增加网络软件系统的效率 优 点 减少拥塞控制 用 于 自动连接许多的小缓冲器消息 简介 Nagle算法是以他的发明人John Nagle的名字命名的,它用于自动连接许多的小缓冲器消息;这一过程(称为nagling)通过减少必须发送包的个数来增加网络软件系统的效率.Nagle算法于1984年定义为福特航空和通信公司IP/TCP拥塞控制方法,这使福特经营的最早的专用TCP/IP网络减少拥塞控制,从那以后这一方法得