Nagle算法和'stop and wait'有什么区别?

What is the difference between Nagle algorithm and 'stop and wait'?

我看到了socket选项TCP_NODELAY,它是用来打开或关闭Nagle算法的。

查了一下Nagle算法是什么,好像和'stop and wait'差不多。

谁能告诉我这两个概念之间的明显区别?

Nagle Algorithm 用于控制套接字提供者是否以降低网络传输效率为代价立即按原样发送传出数据(关闭),或者是否缓冲传出数据以提高效率以速度为代价的网络传输(上)。

Stop and Wait是一种用于确保传输数据完整性的机制,通过让发送方发送一帧数据,然后在发送另一帧之前等待接收方的确认,从而确保接收到帧按照发送顺序。

这两个功能相互独立运行。

在停止和等待协议中,一个

  • 向对等方发送消息
  • 等待对该消息的确认
  • 发送下一条消息

(即在前一条消息得到确认之前不能发送新消息)

TCP 中使用的 Nagle 算法正交于此概念。当 TCP 应用程序发送一些数据时,协议会缓冲数据并等待一段时间以查看是否有更多数据要发送,而不是立即将数据发送给对等方。

如果应用程序在这个小时间范围内有更多数据要发送,协议栈会将这些数据合并到当前缓冲区中,并可以将其作为一条大消息发送。

这个概念也可以很好地应用于走走停停协议。 (注意 TCP 不是停止和等待协议)