纳格算法

✍ dations ◷ 2025-07-11 15:28:27 #纳格算法

纳格算法是以减少数据包发送量来增进TCP/IP网络的性能。它由约翰·纳格任职于Ford Aerospace(英语: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      立即傳送資料  

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


相关

  • 德涅斯特河沿岸面积以下资讯是以2012年估计国家领袖立国历史德涅斯特河沿岸摩尔达维亚共和国(俄语:Приднестровская Молдавская Республика;乌克兰语:Пр
  • 460110 数学 120 信息科学与系统科学 130 力学 140 物理学 150 化学 160 天文学 170 地球科学 180 生物学210 农学 220 林学 230 畜牧、兽医科学 240 水产学310 
  • 二六第八第十埃及第二十六王朝,或称塞易斯王朝,是最后一个埃及本土王朝。亚述人入侵埃及之后,把埃及交给了普萨美提克一世统治,在亚述发生战乱时,他于是就把他对亚述的关系消除,雇佣来
  • 洪流玄武岩洪流式玄武岩(英语:Flood basalt)为一种不同于中央爆发,而从线状裂缝喷发的爆发型态,常发生于裂谷,并因为热柱中黏滞性小的岩浆短时间内喷发而产生。
  • 陈昊苏陈昊苏(1942年5月-),男,四川乐至人,祖籍湖南新宁,生于江苏阜宁,原中国人民对外友好协会会长。陈毅长子。陈昊苏幼时曾在上海华东保育院、南京汉口路小学读书。1953年小学毕业后回上
  • 等离子体电路等离子体电路,为表面等离子体于光子网络上之应用。 表面等离子体-电磁极化子(Surface Plasmon Polariton、SPP)由于具有和电磁波类似但不受衍射极限所限制之特性,因此近年来已有
  • 二本松藩二本松藩(日语:二本松藩/にほんまつはん  */?)是日本江户时代的一个藩。位于陆奥国,藩厅是二本松城。在丰臣政权统治时期二本松城曾经成为蒲生氏乡、上杉景胜、蒲生秀行及蒲生
  • TripleATripleA是一款基于GNU通用公共许可证的自由回合策略游戏,规则基于桌面图版游戏轴心国与同盟国。TripleA使用Java语言编写,可以在任何支持Java的平台(包括Microsoft Windows、L
  • 半穹冰原岛峰坐标:82°27′S 159°14′E / 82.450°S 159.233°E / -82.450; 159.233半穹冰原岛峰(英语:Half Dome Nunatak),是南极洲的冰原岛峰,位于沙克尔顿海岸,处于科巴姆山脉以南4公里,由新
  • The Ultimate -International Best-《The Ultimate -International Best-》是韩国男子音乐组合BIGBANG的日本精选辑,由日本环球音乐制作发行,于2011年5月25日在日本推出,而这张专辑在推出后登上日本公信榜专辑周