PSH 是一种通过 TCP 发送数据的方式。除此之外,我几乎找不到有关如何正确实施它的信息。
以下是我感兴趣的:
假设服务器窗口为 8000 字节,我发送了 2 个分别为 150 和 600 字节的请求。我是否得到某种确认数据已收到?我可以以某种方式触发确认吗?
我见过一些 ACK 数据包,它们不包含 PSH,但确实包含某种有效负载数据(Wireshark 将其标记为“TCP 段数据”)。这些数据是否传递给用户,如果是,为什么我们需要 PSH 标志?
PSH 是一种通过 TCP 发送数据的方式。除此之外,我几乎找不到有关如何正确实施它的信息。
以下是我感兴趣的:
假设服务器窗口为 8000 字节,我发送了 2 个分别为 150 和 600 字节的请求。我是否得到某种确认数据已收到?我可以以某种方式触发确认吗?
我见过一些 ACK 数据包,它们不包含 PSH,但确实包含某种有效负载数据(Wireshark 将其标记为“TCP 段数据”)。这些数据是否传递给用户,如果是,为什么我们需要 PSH 标志?
TCP PSH 通常根本不起作用。伯克利派生的 TCP 实现完全忽略了它。
资料来源:WR Stevens,TCP/IP 图解,第一卷:20.5 PUSH Flag。
@Arsen:回答您问题的第二部分“为什么我们需要 PSH 标志?” TCP 标头中的 PSH 标志通知接收主机应立即将数据推送到接收应用程序。我们使用 PSH 标志在两台服务器之间交换时间戳值。
我假设,如果我们设置推送标志,数据包不会在接收缓冲区中等待,它将直接发送到接收器。
无论如何,数据不会在接收缓冲区中等待。
TCP 应用程序必须不遗余力地让 TCP 层批量处理一些数据包并提供完整的数据缓冲区。
事实上,看到应用程序分配 64KB 缓冲区来接收数据并看到它们收到大量 1480/1472 字节的消息,这有点令人沮丧。