Wireshark TCP Dup ACK - 很奇怪

时间:2011-10-01 11:16:43

标签: sockets tcp connection wireshark

我在服务器的计算机上运行了Wireshark,我有一个奇怪的传输:

客户端(X:src端口65509)连接到我的服务器(Y:dst端口9999)。

1)正常的TCP握手

15:47:41.921228 XXX.XXX.XXX.XXX 65509   YYY.YYY.YYY.YYY 9999    65509 > distinct [SYN] Seq=0 Win=8688 Len=0 MSS=1460 WS=0 SACK_PERM=1 TSV=66344090 TSER=0
15:47:41.921308 YYY.YYY.YYY.YYY 9999    XXX.XXX.XXX.XXX 65509   distinct > 65509 [SYN, ACK] Seq=0 Ack=1 Win=8192 Len=0 MSS=1460 SACK_PERM=1 TSV=69754693 TSER=66344090
15:47:42.176823 XXX.XXX.XXX.XXX 65509   YYY.YYY.YYY.YYY 9999    65509 > distinct [ACK] Seq=1 Ack=1 Win=8688 Len=0 TSV=66344350 TSER=69754693

2)服务器向客户端发送加密密钥,客户端ACK接收它:

15:47:42.180755 YYY.YYY.YYY.YYY 9999    XXX.XXX.XXX.XXX 65509   distinct > 65509 [PSH, ACK] Seq=1 Ack=1 Win=65160 Len=24 TSV=69754719 TSER=66344350
15:47:42.452606 XXX.XXX.XXX.XXX 65509   YYY.YYY.YYY.YYY 9999    65509 > distinct [ACK] Seq=1 Ack=25 Win=8664 Len=0 TSV=66344630 TSER=69754719

3)突然面板由于某种原因重置连接

15:47:42.948618 XXX.XXX.XXX.XXX 65509   YYY.YYY.YYY.YYY 9999    65509 > distinct [RST] Seq=28 Win=0 Len=0

4)但对我来说奇怪的事情就在这里。服务器发送TCP Dup ACK。可能是什么原因?我以为这个消息只能在重传或者发送后发送。我从未见过它在RST之后发送。

15:47:42.948654 YYY.YYY.YYY.YYY 9999    XXX.XXX.XXX.XXX 65509   [TCP Dup ACK 5856#1] distinct > 65509 [ACK] Seq=25 Ack=1 Win=65160 Len=0 TSV=69754796 TSER=66344630**

5)客户端再次发送RST。

15:47:43.227269 XXX.XXX.XXX.XXX 65509   YYY.YYY.YYY.YYY 9999    65509 > distinct [RST] Seq=1 Win=0 Len=0

感谢您的任何建议。

1 个答案:

答案 0 :(得分:1)

步骤(4)中来自服务器的 Dup-ACK 是由步骤(3)中的Seq 28 引起的:

      65509 > distinct [RST] Seq=28 Win=0 Len=0

因为服务器期待Seq#25但是收到了#28。当seq 25~27在网络中丢失时会发生这种情况。 Dup-ACK通知客户端在RST之前重新发送丢失的数据;但是,在步骤(5)中,我们看到客户端响应服务器的dup-ack,再次重置。因此,客户数据#25~27从未到达服务器并且已经消失。

您可以通过在服务器和客户端上执行数据包捕获来验证这一点。

有关详细信息,请阅读一些TCP重新传输文档。