纳格算法

✍ dations ◷ 2025-07-11 17:05:54 #纳格算法

纳格算法是以减少数据包发送量来增进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包并冲刷写缓存通常能起作用。


相关

  • 保罗·维拉尔保罗·于尔里克·维拉尔(法语:Paul Ulrich Villard,1860年9月28日-1934年1月13日),法国化学家和物理学家。1900年,他在研究镭的辐射时发现了伽马射线。维拉尔退休后离开了巴黎。193
  • 罗蕾莱罗蕾莱(德语:Loreley,又作Lorelei、Loreleï、Lore Lay、Lore-Ley、Lurley、Lurelei、Lurlei)是一座莱茵河中游东岸高132米的礁石,坐落在德国莱茵兰-普法尔茨州境内。罗蕾莱礁石
  • 观赏鱼观赏鱼是人类用于享受饲养及观赏乐趣的鱼种,不管是海水或淡水,可食用或不可食用,只要可供满足休闲、观赏用途,即为观赏鱼。常见观赏鱼种以热带及亚热带地区的鱼种(通称热带鱼)居多
  • 包身工《包身工》,中国现代作家夏衍所著的报告文学作品,写于1935年。《包身工》一文以报告文学的形式叙述了上海等地包身工遭遇的种种非人的待遇,以及带工老板等人对他们残忍的压榨。
  • 欧阳中鹄欧阳中鹄(1849年-1911年),字节吾,号瓣姜,湖南浏阳人,清朝政治人物、举人出身。欧阳予倩的祖父。同治十二年,乡试中举,次年考入内阁中书,教授谭嗣襄、谭嗣同、唐才常等。光绪二十九年,授
  • ReadyBoostReadyBoost是Windows Vista中的新技术,在继Windows Vista的下一代操作系统Windows 7中,同样包含了这项技术,它利用了闪存随机读写及零碎文件读写上的优势来提高计算机系统性能
  • 赵怀玉 (明朝)赵怀玉(16世纪-17世纪),字与瑶,福建漳州府龙溪县人,明朝政治人物。赵怀玉是万历四十三年(1615年)的举人,天启二年(1622年)成进士,获授肇庆推官,平反谷商的冤狱、豁免赃钱数千,保全多人。当
  • 剩余公主《剩余公主》(韩语:잉여공주,英语:The Idle Mermaid)为韩国tvN自2014年8月7日起播出的木曜连续剧,讲述来到首尔和就业生住在一起的人鱼公主在100天内找到真爱,变成真正人类的故事。
  • 桌上角色扮演游戏列表本列表列出著名的桌上角色扮演游戏系统。
  • 国际联合委员会国际联合委员会(English: International Joint Commission, Français: Commission mixte internationale)是美国和加拿大通过1909年《英(加)美边界水资源条约》(下文称《条约