TCP网络通信的Nagle算法概述

它减少了由小数据包引起的网络拥塞问题

Nagle算法以工程师John Nagle的名字命名,旨在减少小数据包问题引起的网络拥塞TCP应用程序。UNIX实现在20世纪80年代开始使用Nagle算法,直到今天它仍然是TCP的标准特性。

Nagle算法是如何工作的

Nagle算法通过一种称为nagling的方法处理TCP应用程序发送端的数据。它检测较小的消息,并在通过网络发送数据之前将这些消息积累到较大的TCP包中。这个过程避免产生不必要的大量小数据包。

Nagle算法的技术规范发表于1984年RFC 896.积累多少数据和发送之间等待多长时间的决定对它的整体性能至关重要。

唠叨的好处

Nagling可以有效地利用带宽以增加延迟为代价的网络连接延迟.RFC 896中描述的一个例子说明了潜在的带宽好处和创建它的原因:

  • 如果拦截键盘击键的TCP应用程序想要将输入的每个字符传递给接收者,它可以生成一系列消息,每个消息包含1字节的数据。
  • 在这些消息可以通过网络发送之前,每个消息必须按照TCP/IP的要求打包TCP报头信息。每个头的大小范围在20到60字节之间。
  • 如果没有nagling,这个示例应用程序将生成由95%或更多的头信息(21字节中至少有20个)和来自发送者键盘的5%或更少的实际数据组成的网络消息。使用Nagle算法,可以使用更少的消息传递相同的数据,从而节省大量带宽。

应用程序通过tcp_nodea控制Nagle算法的使用套接字编程选项。Windows、Linux和Java系统通常默认启用Nagle。因此,为这些环境编写的应用程序需要指定TCP_NODELAY来关闭算法。

TCP (Transmission Control Protocol)头
乐动体育赞助Lifewire /布拉德利·米切尔

限制

需要快速网络响应的应用程序,如视频通话和在线游戏,在启用Nagle时可能无法正常工作。当算法需要额外的时间来组装更小的数据块时,会引起明显的延迟滞后视觉上显示在屏幕上或在数字音频流中。这类应用程序通常禁用Nagle。

这个算法最初是在计算机网络支持比今天更少带宽的时候开发的。上面描述的例子是基于约翰·纳格尔(John Nagle)上世纪80年代早期在福特航空航天公司(Ford Aerospace)的经验,在福特缓慢、负载沉重、长途的网络上,令人烦恼的权衡是有道理的。如今,网络应用程序可以从他的算法中受益的情况越来越少。

Nagle算法只适用于TCP。其他协议,如UDP,不支持它。

这个页面有用吗?