美文网首页
Nagle算法与delay-ack

Nagle算法与delay-ack

作者: kindol | 来源:发表于2018-07-22 23:15 被阅读0次

    tcp数据传输分为两种:

    • 交互数据传输

      交互数据就是发送控制命令的数据流,如telnet、ftp等;利用Nagle算法与delay-ack进行拥塞避免

    • 块数据传输

      块数据是用来发送控制命令的包;利用滑动窗口进行流控、利用“慢启动与拥塞避免算法、快速重传算法”进行拥塞避免

    为何Nagle算法和delay-ack可以使交互数据避免拥塞

    交互数据流属于多而小的数据流,如果是在局域网内则没什么问题,但如果是在广域网上,时刻充斥着大量TCP小分组,那么可能会造成网络的拥塞。此二算法就是为了减少TCP小分组而产生的,目的即是为了提高网络效率。

    Nagle算法

    Nagle要求一个TCP连接上最多只能有一个未被确认的小分组,在该分组的确认到达之前不能发送其他小分组。TCP会搜集这些小的分组,然后在之前小分组的确认到达后将刚才搜集的小分组合并发送出去。

    该算法的优越之处在于它是自适应的,确认到达的越快,数据也就发送的越快;而在希望减少微小分组数目的低速广域网上,则会发送更少的分组。

    当然,有些时候是需要禁用Nagle算法的,如远程连接时的鼠标移动操作

    delay-ack

    通常Server在接收到从Client发送过来的数据时,并不马上发送ACK,而是等一个规定时延,看看本机是否有数据要反馈给Client,如果有,就将数据包含在此ACK包中,以前发送给Client。一般情况下这个时延为200ms。

    好处:

    • 避免糊涂窗口综合症
    • 捎带ack,减少小分组

    当Nagle遇上延迟ACK

    试想:通过多个写小片数据向对端发送单个逻辑的操作,两次写数据长度小于MSS,当第一次写数据到达对端后,对端延迟ack,不发送ack,而本端因为要发送的数据长度小于MSS,所以nagle算法起作用,数据并不会立即发送,而是等待对端发送的第一次数据确认ack;这样的情况下,需要等待对端超时发送ack,然后本段才能发送第二次写的数据,从而造成延迟

    相关文章

      网友评论

          本文标题:Nagle算法与delay-ack

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