美文网首页
nagle算法

nagle算法

作者: Felicia1993 | 来源:发表于2017-09-20 09:05 被阅读0次

选自:www.cnblogs.com/wanpengcoder/p/5366156.html 

blog.csdn.net/yuan1125/article/details/51536490 

nagle算法为了解决福特汽车公司网络拥塞问题,问题描述为:如果应用程序一次产生一个字节的数据,该数据又以网络数据包的形式发送到远端服务器,就很容易造成网络过载,比如,当用户使用Telnet连接到远程服务器时,每一次击键操作就会产生1个字节数据,进而发送出去一个数据包,所以,在典型情况下,传送一个只拥有1个字节有效数据的数据包,却要发费40个字节长包头(即ip头20字节+tcp头20字节)的额外开销,这种有效载荷(payload)利用率极其低下的情况被统称之为糊涂窗口症候群(Silly Window Syndrome)。可以看到,这种情况对于轻负载的网络来说,可能还可以接受,但是对于重负载的网络而言,就极有可能承载不了而轻易的发生拥塞瘫痪。

该算法要求一个tcp连接上最多只能有一个未被确认的未完成的小分组,在该分组ack到达之前不能发送其他的小分组,tcp需要收集这些少量的分组,并在ack到来时以一个分组的方式发送出去;其中小分组的定义是小于MSS的任何分组;

延迟ACK好处:

(1) 避免糊涂窗口综合症;

(2) 发送数据的时候将ack捎带发送,不必单独发送ack;

(3) 如果延迟时间内有多个数据段到达,那么允许协议栈发送一个ack确认多个报文段;

关闭Nagle算法:

使用TCP套接字选项TCP_NODELAY可以关闭套接字选项;

如下场景考虑关闭Nagle算法:

(1) 对端不向本端发送数据,并且对延时比较敏感的操作;这种操作没法捎带ack;

(2) 如上写-写-读操作;对于此种情况,优先使用其他方式,而不是关闭Nagle算法:

--使用writev,而不是两次调用write,单个writev调用会使tcp输出一次而不是两次,只产生一个tcp分节,这是首选方法;

--把两次写操作的数据复制到单个缓冲区,然后对缓冲区调用一次write;

--关闭Nagle算法,调用write两次;有损于网络,通常不考虑;

相关文章

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

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

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

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

  • Nagle算法

    Nagle's algorithm, is a means of improving the efficiency...

  • nagle算法

    选自:www.cnblogs.com/wanpengcoder/p/5366156.html blog.csdn....

  • Nagle算法

    TCP/IP协议中,无论发送多少数据,总是要在数据前面加上协议头,同时,对方接收到数据,也需要发送ACK表示确认。...

  • TCP协议灵魂12问(第十一问)

    011: 能不能说说 Nagle 算法和延迟确认? Nagle 算法 试想一个场景,发送端不停地给接收端发很小的包...

  • Nagle算法在TCP

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

  • TCP之Nagle算法

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

  • 网络

    TCP_NODELAY 是 禁用了 Nagle算法 允许小包发送,一般都这么做。https://www.bilib...

  • 延时确认和Nagle算法

    [TOC] 减小交互式数据 延时确认;Nagle算法 延时确认 发送ack,如果没有segment要发送给对方,等...

网友评论

      本文标题:nagle算法

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