我在一台高性能的TCP服务器上工作,当我使用TCP客户端发送高流量时,我发现服务器的处理速度不够快。仔细观察;Δ时间";在TCP服务器上。而且,我看到服务器发送了一个ACK,0.8秒后发送了PSH,ACK,用于相同的seqno。我在pcap中多次看到这种模式。专家们能评论一下为什么服务器发送ACK,然后是PSH,ACK之间有延迟吗?
TCP服务器PCAP
简化ACK
和PSH
的含义
ACK
将始终存在,它只是通知客户端服务器最后接收到的字节是什么PSH
告诉客户端/服务器将字节推送到应用层(字节形成完整消息(
您习惯的通常情况或多或少如下:
- 操作系统有一个缓冲区,用于存储从客户端接收的数据
- 一旦接收到数据包,就会将其添加到缓冲区中
- 应用程序调用套接字接收方法并从缓冲区中取出数据
- 应用程序将数据写回套接字(响应(
- 操作系统发送带有标志
PSH,ACK
的数据包
现在想象一下这些场景:
-
步骤4没有发生(应用程序不写回任何数据,或写数据花费太长时间(
=>操作系统只使用
ACK
(数据包中没有任何数据(来确认接收,如果应用程序稍后决定发送内容,则将使用PSH,ACK
发送。 -
服务器发送的消息/数据太大,无法容纳在一个数据包中:
- 第一个数据包将没有
PSH
标志,而只有ACK
标志 - 最后一个分组将具有标志
PSH,ACK
以通知消息的结束
- 第一个数据包将没有