当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++进阶与实例

什么是Nagle algoritm

      简而言之,nagle算法主要目的是减少网络流量,当你发送的数据包太小时,TCP并不立即发送该数据包,而是缓存起来直到数据包
       到达一定大小后才发送。(improving the efficiency of TCP/IP networks by reducing the number of packets that need to
       be sent over the network.)
       关于这个算法,我觉得wikipedia上讲的比较好。具体点说,当上层提交数据给TCP时,TCP觉得你的数据太小了(套用一般的例子,
       如果你要发送1一个字节的数据,当附加上TCP和IP头后,数据包通常就会增加到41字节,那么这显然是低效的),就缓存你的数据,
       当数据缓存到一定长度后,如果之前发送的数据得到了ACK确认且接收方有足够空间容纳数据,就发送这些数据,否则继续等待。

       wikipedia上给了一段nagle的伪代码:


    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


       TCP socket提供了关闭nagle算法的接口,你可以通过TCP_NODELAY选项决定是否开启该算法。不过MSDN上建议不要关闭此算法。如果
       你发送的数据不至于很小的话(<40byte),我也不建议你关闭。

相关内容
赞助商链接