TCP服务器先发送[ACK],然后发送[PSH,ACK]

时间:2020-09-28 01:52:37

标签: networking tcp wireshark pcap tcpdump

我正在使用高性能TCP服务器,但是当我使用TCP客户端进行大量流量传输时,我发现服务器的处理速度不够快。经过仔细检查,我发现TCP服务器上的“增量时间”出现峰值。而且,我看到服务器发送一个ACK,然后在0.8秒后发送相同的seqno的PSH,ACK。我在pcap中多次看到此模式。专家能否评论为什么服务器要先发送ACK,然后再发送PSH,ACK,两者之间有延迟?

TCP SERVER PCAP

1 个答案:

答案 0 :(得分:0)

为简化ACKPSH的含义

  • ACK将始终存在,它仅通知客户端服务器最后收到的字节是什么。
  • PSH告诉客户端/服务器将字节推送到应用程序层(这些字节形成完整的消息)。

您惯常使用的场景大致如下:

  1. 操作系统具有一个缓冲区,用于存储从客户端接收的数据。
  2. 接收到数据包后,立即将其添加到缓冲区。
  3. 应用程序调用套接字接收方法,并将数据从缓冲区中取出
  4. 应用程序将数据写回套接字(响应)
  5. 操作系统发送带有标志PSH,ACK的数据包

现在想象一下这些情况:

  • 步骤4不会发生(应用程序不会回写任何数据,或者写入时间太长)

    => OS仅用ACK确认接收(数据包中没有任何数据),如果应用程序稍后决定发送某些内容,则将使用PSH,ACK发送。

  • 服务器发送的消息/数据太大,无法放入一个数据包:

    • 第一个数据包将不具有PSH标志,而仅具有ACK标志
    • 最后一个数据包将带有标志PSH,ACK,以通知消息的结尾。