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