我试图了解 TCP PSH 和 URG 标志之间的区别。到目前为止,我知道当设置 PSH 标志时,接收设备不会等到缓冲区已满 - 它只是将数据发送到设备。
但是有人可以给我一个真实的例子,以便我更好地理解这个概念吗?
我正在浏览https://packetlife.net/blog/2011/mar/2/tcp-flags-psh-and-urg/文章,虽然解释很好,但我无法理解给出的示例。
它说,
在数据包 #4 中,我们看到初始 HTTP 请求设置了其 PSH 标志,表明客户端没有更多数据要添加,请求应立即发送到应用程序(在本例中为 Web 守护程序)
如果在上述情况下,客户端没有进一步的数据要发送,为什么不发送设置了 FIN 标志的数据包?
客户现在没有更多数据,但这并不意味着它将来不会有任何数据。
您假设协议只有一个来自客户端的请求(并且只有一个响应)。很长一段时间以来,HTTP 都不是这种情况——多个请求的连接重用甚至在 HTTP/1.1 之前就已经存在,并且现在无处不在。客户端提交请求,等待响应,然后通过同一个连接提交另一个请求,等等。这些长寿命连接的优点是它允许 TCP 流控制达到最佳状态。
许多其他协议也不是这种情况。例如,为了发送电子邮件,SMTP 交换不少于 5 个命令/响应,并且协议规范明确禁止“流水线”(一次发送所有命令而不等待响应)。这意味着客户端需要推送一条线并让服务器响应,推送另一条线并让服务器响应,等等。
当然,许多协议都是交互式的——Telnet 和 SSH 要求服务器响应每次击键;VNC 和 RDP 对每一次鼠标点击做出反应。