纳格算法

更新时间:2024-09-18 19:26

纳格算法是以减少数据包发送量来增进TCP/IP网上的性能。它由约翰·纳格任职于Ford Aerospace时命名。

简介

纳格算法是以减少数据包发送量来增进TCP/IP网上的性能。它由约翰·纳格任职于Ford Aerospace时命名。

纳格的文件描述了他所谓的“小数据包问题”-某个应用程序不断地提交小单位的数据,且某些常只占1字节大小。因为TCP数据包具有40字节的标头信息(TCP与IPv4各占20字节),这导致了41字节大小的数据包只有1字节的可用信息,造成庞大的浪费。这种状况常常发生于Telnet工作阶段-大部分的键盘操作会产生1字节的数据并马上提交。更糟的是,在慢速的网上连线下,这类的数据包会大量地在同一时点传输,造成拥塞碰撞。

纳格算法的工作方式是合并(coalescing)一定数量的输出数据后一次提交。特别的是,只要有已提交的数据包尚未确认,发送者会持续缓冲数据包,直到累积一定数量的数据才提交。

算法

MSS =最大分段大小

该算法与TCP延迟确认会有不好的相互作用,例如当程序发送端进行两次连续的小段写再跟着读时,接收端接收到第一次写后因TCP延迟确认而等待第二次写后一并发送ACK,发送端则因第二次写数据长度小于MSS而等待第一次写的ACK(如上算法所示),最终将导致两对端都进入等待直到ACK延迟超时。因为这个原因,TCP实现通常为应用程序提供一个禁用Nagle算法的接口(通常称为TCP_NODELAY选项)。用户级解决方案是避免套接字上的 写-写-读 序列。 写-读-读 和 写-写-写 都是没问题的。但 写-写-读 则是性能杀手。所以,如果可以的话,缓冲你对TCP的小段写,然后一次发送它们。在每次读之前使用标准的UNIXI/O包并冲刷写缓存通常能起作用。

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}