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



我在一台高性能的TCP服务器上工作,当我使用TCP客户端发送高流量时,我发现服务器的处理速度不够快。仔细观察;Δ时间";在TCP服务器上。而且,我看到服务器发送了一个ACK,0.8秒后发送了PSH,ACK,用于相同的seqno。我在pcap中多次看到这种模式。专家们能评论一下为什么服务器发送ACK,然后是PSH,ACK之间有延迟吗?

TCP服务器PCAP

简化ACKPSH的含义

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

您习惯的通常情况或多或少如下:

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

现在想象一下这些场景:

  • 步骤4没有发生(应用程序不写回任何数据,或写数据花费太长时间(

    =>操作系统只使用ACK(数据包中没有任何数据(来确认接收,如果应用程序稍后决定发送内容,则将使用PSH,ACK发送。

  • 服务器发送的消息/数据太大,无法容纳在一个数据包中:

    • 第一个数据包将没有PSH标志,而只有ACK标志
    • 最后一个分组将具有标志PSH,ACK以通知消息的结束

最新更新