PSH是通过TCP发送数据的一种方式。除此之外,我很难找到如何正确实现它的信息。
以下是我感兴趣的内容:
假设服务器窗口为8000字节,我发送了两个请求,分别为150和600字节。我会收到确认数据已经被接收的通知吗?我能否触发确认?
我看到了一些ACK数据包,它们不包含PSH但包含某种有效载荷数据(Wireshark将其标记为“TCP段数据”)。这些数据是否传递给用户,如果是的话,我们为什么需要PSH标志?
PSH是通过TCP发送数据的一种方式。除此之外,我很难找到如何正确实现它的信息。
以下是我感兴趣的内容:
假设服务器窗口为8000字节,我发送了两个请求,分别为150和600字节。我会收到确认数据已经被接收的通知吗?我能否触发确认?
我看到了一些ACK数据包,它们不包含PSH但包含某种有效载荷数据(Wireshark将其标记为“TCP段数据”)。这些数据是否传递给用户,如果是的话,我们为什么需要PSH标志?
TCP PSH一般来说根本不起作用。基于伯克利的TCP实现完全忽略它。
来源:W.R. Stevens,《TCP/IP Illustrated》卷I:20.5 PUSH标志。
@Arsen: 回答你的第二个问题 "为什么我们需要PSH标志?" TCP头部中的PSH标志通知接收主机数据应立即推送到接收应用程序。 我们使用PSH标志在两个服务器之间交换时间戳值。
我假设,如果我们设置了推送标志,数据包就不会等待在接收缓冲区中,而是直接发送给接收者。
select()
立即解除阻塞,完全不需要参考PSH标志。它是多余的。它是为一种从未问世的中断API设计的。 - user207421