TCP 服务器发送 [ACK] 后跟 [PSH,ACK]
TCP Server sends [ACK] followed by [PSH,ACK]
我正在使用高性能 TCP 服务器,当我使用 TCP 客户端传输高流量时,我发现服务器处理速度不够快。仔细检查后,我发现 TCP 服务器上的“增量时间”出现峰值。而且,我看到服务器发送一个 ACK,0.8 秒后发送 PSH,ACK 相同的 seqno。我在 pcap 中多次看到这种模式。专家能否评论为什么服务器发送 ACK 后跟 PSH,ACK 之间有延迟?
TCP SERVER PCAP
简化 ACK
和 PSH
的含义
ACK
将始终存在,它只是通知客户端服务器最后接收到的字节是什么。
PSH
告诉client/server将字节推送到应用层(字节形成完整的消息)。
您习惯的通常情况大致如下:
- OS 有一个缓冲区,用于存储从客户端接收到的数据。
- 一旦收到数据包,就会将其添加到缓冲区。
- 应用程序调用socket receive方法,从缓冲区中取出数据
- 应用程序将数据写回套接字(响应)
- OS 发送一个带有标志
PSH,ACK
的数据包
现在想象一下那些场景:
第 4 步没有发生(应用程序没有写回任何数据,或者写入时间太长)
=> OS 只用 ACK
确认接收(数据包中没有任何数据),如果应用程序稍后决定发送一些东西,它将被发送PSH,ACK
.
服务器发送的message/data太大,一个数据包放不下:
- 第一个包不会有
PSH
标志,只有ACK
标志
- 最后一个数据包将具有标志
PSH,ACK
,以通知消息结束。
我正在使用高性能 TCP 服务器,当我使用 TCP 客户端传输高流量时,我发现服务器处理速度不够快。仔细检查后,我发现 TCP 服务器上的“增量时间”出现峰值。而且,我看到服务器发送一个 ACK,0.8 秒后发送 PSH,ACK 相同的 seqno。我在 pcap 中多次看到这种模式。专家能否评论为什么服务器发送 ACK 后跟 PSH,ACK 之间有延迟?
TCP SERVER PCAP
简化 ACK
和 PSH
的含义
ACK
将始终存在,它只是通知客户端服务器最后接收到的字节是什么。PSH
告诉client/server将字节推送到应用层(字节形成完整的消息)。
您习惯的通常情况大致如下:
- OS 有一个缓冲区,用于存储从客户端接收到的数据。
- 一旦收到数据包,就会将其添加到缓冲区。
- 应用程序调用socket receive方法,从缓冲区中取出数据
- 应用程序将数据写回套接字(响应)
- OS 发送一个带有标志
PSH,ACK
的数据包
现在想象一下那些场景:
第 4 步没有发生(应用程序没有写回任何数据,或者写入时间太长)
=> OS 只用
ACK
确认接收(数据包中没有任何数据),如果应用程序稍后决定发送一些东西,它将被发送PSH,ACK
.服务器发送的message/data太大,一个数据包放不下:
- 第一个包不会有
PSH
标志,只有ACK
标志 - 最后一个数据包将具有标志
PSH,ACK
,以通知消息结束。
- 第一个包不会有