我正在开发一个高性能的TCP服务器,当我使用TCP客户端进行高流量传输时,有时会看到服务器无法快速处理。经过仔细检查,我发现TCP服务器中存在“时间差”峰值。我还看到服务器发送了一个ACK,0.8秒后发送相同seqno的PSH,ACK。在pcap中,我看到了这种模式出现了多次。请专家们评论一下为什么服务器会发送一个ACK,然后在之后延迟一段时间再发送PSH,ACK?
TCP服务器的PCAP:链接。
TCP服务器的PCAP:链接。
ACK
和 PSH
的理解:
ACK
始终存在,它仅告知客户端服务器最后接收的字节。PSH
告诉客户端/服务器将字节推送到应用层(这些字节形成一个完整的消息)。PSH,ACK
发送数据包。步骤4没有发生(应用程序没有将数据写回,或者需要很长时间才能写回)
=> 操作系统仅使用 ACK
确认接收(数据包中将不会有任何数据),如果应用程序稍后决定发送内容,则会使用 PSH,ACK
发送。
服务器发送的消息/数据太大,无法放入一个数据包中:
PSH
标志,并且仅具有 ACK
标志。PSH,ACK
,以通知消息的结束。
当我使用TCP客户端进行高流量传输时,我会看到服务器时而无法快速处理。
虽然我建议您添加更多细节,但Stack Overflow专注于编程问题,因此如果您是网络专业人员,应该在Server Fault或networkengineering.stackexchange.com上提出这个扩展问题。 - Ross Jacobs