windows下关闭TCP的Nagle纳格算法

session 1 Nagle算法
      Nagle算法,纳格算法:nagle算法是为了解决TCP传出过程中出现的“愚笨窗口综合症”的一种TCP传输算法,该算法是在TCP发送小数据包(telnet、ssh等)时候,在收到对端设备的ack确认包之前会将多小数据包缓存起来,直到足够多个小数据包的大小已经达到MSS(tcp分段最大值,一般是L3的MTU值1460)或者收到对端发来的ack确认包的时候会将小包组成一个大数据包进行发送出去,从而减少了每个小数据包都要进行ip头封装(20byte)+TCP头封装(20byte)的步骤,从而节省了网络带宽(因为有可能你每个小数据包还不到20byte,然后光ip+tcp头要40byte,这样的数据包发送是非常浪费带宽资源,这种情况被称为tcp的愚笨窗口中综合症)

      但是这种情况在一些开启了延迟确认(为了减少大量tcp的ack确认包而进行延迟回复ack,也就是说在延迟的时间内可能会收到多个tcp数据包,延迟过后就可以只回复一个ack来确认在延迟时间内收到的多个tcp数据包,赐从而减少了网络带宽开销)的设备上是致命的,比如开启了Nagle的windows和开启了延迟确认的AIX服务器之间备份数据时候,会因为AIX的TCP延迟确认导致windows要延迟才能收到AIX的ack确认包,而windows服务器也会因为Nagle算法而在收到AIX服务器给的ack确认包之前不会给AIX发送小数据包,从而导致数据传输过慢的问题,解决方法也就是2种,要么在windows上关闭Nagle算法,要么在AIX上关闭延迟确认功能。


session 2 windows上关闭Nagle算法
      下面的设置可以调整或禁用 nagel 算法。禁用 nagel 算法以后, 允许很小的包没有延迟立即发送。建议对某些游戏关闭 nagel 算法, 这样做对文件传输/吞吐量有负面影响。默认状态( 开启nagel )为了提高性能, 会把几个小数据包合并一起, 为了有效传输更大的数据包。虽然这提高了整体性能,并降低了TCP/ IP开销, 但可能会短暂延迟较小的数据包的传输。切记禁用 Nagle 算法可能对文件传输有一些负面影响, 只能帮助某些游戏减少延迟, 为了实现这个调整,在注册表编辑器(开始>运行> REGEDIT)找到:

此设置配置最大数量的ACKs ( Windows XP/2003/Vista/2008 )
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{NIC-id}
将有多个网卡接口有列出,例如: {1660430C-B14A-4AC2-8F83-B653E83E8297}. 找到与你 IP 地址相同的地址, 创建一个新的 DWORD 值:
TcpAckFrequency=1 
解释:(DWORD value, 1=disable, 2=default, 2-n=send ACKs if outstanding ACKs before timed interval. Setting not present by default).

      对于游戏性能,推荐的是1(禁用)。对于纯吞吐量和数据流,您可以尝试值超过2。如果您尝试较大的值,只要确保 TcpAckFrequency* MTU 小于 RWIN 就行, since the sender may stop sending data if RWIN fills witout acknowledgement. 

      此外,找到下面的键(win7 下需要 开始→控制面板→程序→程序和功能→打开或关闭windows功能, 开启 Microsoft Message Queue 才能看见 Parameters):
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSMQ\Parameters
添加一个新的DWORD值:
TCPNODELAY=1
解释:(DWORD值为0启T用Nagle算法,1禁用,默认情况下不存在)

要配置的ACK间隔超时(只有启用 Nagel 的时候才有效),找到(新增)以下注册表项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{NIC-id}

TcpDelAckTicks=0 
解释:(DWORD value, default=2, 0=disable nagling, 1-6=100-600 ms). 

你可以设置为 1 来将 NAGLE 的延迟时间从默认的 200ms 缩减进行缩减


你可能感兴趣的:(windows下关闭TCP的Nagle纳格算法)