客户端在给服务端发送数据的过程中发现服务端收到的数据时有时无,从客户端网卡上抓包发现,当客户端收到三次重复ACK后,没有立刻重发丢失的报文,而是继续不停的发送新报文,造成服务端也在不停的回复相同的ACK,由于新发送的报文迟迟没得到服务端的ACK确认,导致客户端发送缓存区迅速膨胀,客户端send开始返回-1值,等待了6-10秒后,客户端才重发丢失的报文,感觉客户端快速重传机制没有生效,但不知道问题出在哪。
在客户端网卡上的具体抓包信息如下面两张图所示,第一张图是开始时正常的发和回,第二张图后半段出现丢包,服务端一直回复ack 37431,但是客户端却一直不重发seq 37431段的包,而是继续发新包导致发送缓存区迅速膨胀。
我用wireshark又抓了一遍,从下图中可以明显看出,地址为31的客户端明明收到了很多[tcp dup ack]包,但是没有触发快速重传,而是到最后超时重传了[tcp retransmission]包