Nagle算法
Posted mfcheer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nagle算法相关的知识,希望对你有一定的参考价值。
纳格算法是以减少数据包发送量来增进TCP/IP网络的性能。它是由约翰.纳格任职于Ford Aerospace时命名。
纳格的文件描述了他所谓的“小数据包问题”-某个应用程序不断地提交小单位的数据,且某些常只占1字节大小。因为TCP数据包具有40字节的标头信息(TCP与IPv4各占20字节),这导致了41字节大小的数据包只有1字节的可用信息,造成庞大的浪费。这种状况常常发生于Telnet工作阶段-大部分的键盘操作会产生1字节的数据并马上提交。更糟的是,在慢速的网络连接下,这类的数据包会大量地在同一时点传输,造成壅塞碰撞(Congestion Collapse)。
纳格算法的工作方式是合并(coalescing)一定数量的输出数据后一次提交。特别的是,只要有已提交的数据包尚未确认,发送者会持续缓冲数据包,直到累积一定数量的数据才提交。
算法过程:
if有新資料要傳送
if訊窗大小>= MSS and可傳送的資料>= MSS
立刻傳送完整MSS大小的segment
else
if管線中有尚未確認的資料
在下一個確認(ACK)封包收到前,將資料排進緩衝區佇列
else
立即傳送資料
以上是关于Nagle算法的主要内容,如果未能解决你的问题,请参考以下文章
socket.setNoDelay([noDelay]) 用的是Nagle算法
使用 webSockets 避免 Nagle 算法影响的最佳方法?