【TCP/IP】Nagle算法

Nagle算法

1、为什么要引入Nagle算法

Nagle算法主要是为了防止网络连接中充斥着

2、Nagle算法的原理

该算法要求在TCP连接中,如果还有未被确认的分组,在收到ACK确认包之前禁止发送其他小的分组。

该算法的伪码如下:


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

由以上可以看出,Nagle算法适用于:发送发存在许多小的分组需要发送,接收方又能够及时发送ACK的场景。默认的TCP连接中,Nagle算法是打开的,为了能够禁止使用Nagle算法,你可以设置socket为TCP_NODELAY,从而能够保证,发送方的包及时地发送给接收方。

3、Nagle算法的利弊分析

利:很明显,可以减少网络中的小分组,保持较高的网络资源利用率。

弊:由于发送方会控制小的分组,并期望合并成为较大的分组一起发送给接收方,因此实时的单向的发送数据并及时获取响应的场景需要谨慎。另外,如果接收方设置了DELAY ACK,情况可能会比较糟糕:因为如果接收方设置了DELAY ACK,接收方接收到发送方发过来的小分组后,并不及时发送ACK,只有等到Delay ACK的Timer到期后,才会给发送方回ACK。

 

 

你可能感兴趣的:(TCP/IP,TCP/IP)