我正在使用高性能TCP服务器,但是当我使用TCP客户端进行大量流量传输时,我发现服务器的处理速度不够快。经过仔细检查,我发现TCP服务器上的“增量时间”出现峰值。而且,我看到服务器发送一个ACK,然后在0.8秒后发送相同的seqno的PSH,ACK。我在pcap中多次看到此模式。专家能否评论为什么服务器要先发送ACK,然后再发送PSH,ACK,两者之间有延迟?
答案 0 :(得分:0)
为简化ACK
和PSH
的含义
ACK
将始终存在,它仅通知客户端服务器最后收到的字节是什么。PSH
告诉客户端/服务器将字节推送到应用程序层(这些字节形成完整的消息)。您惯常使用的场景大致如下:
PSH,ACK
的数据包现在想象一下这些情况:
步骤4不会发生(应用程序不会回写任何数据,或者写入时间太长)
=> OS仅用ACK
确认接收(数据包中没有任何数据),如果应用程序稍后决定发送某些内容,则将使用PSH,ACK
发送。
服务器发送的消息/数据太大,无法放入一个数据包:
PSH
标志,而仅具有ACK
标志PSH,ACK
,以通知消息的结尾。