发送FIN后继续发送数据包

发送FIN后继续发送数据包

我的 wireshark 捕获了以下数据包:

2009    773 src dst TCP 1514    [TCP Retransmission] 51940 > http [ACK] Seq=11680 Ack=559 Win=3847 Len=1448
2010    775 src dst TCP 1514    [TCP Retransmission] 51940 > http [ACK]  Seq=11680 Ack=559 Win=3847 Len=1448
2011    779 src dst TCP 1514    [TCP Retransmission] 51940 > http [ACK] Seq=11680 Ack=559 Win=3847 Len=1448
2012    781 src dst TCP 66  51940 > http [FIN, ACK] Seq=15579 Ack=559 Win=3847 Len=0 <====FIN
2013    786 src dst TCP 1514    [TCP Retransmission] 51940 > http [ACK] Seq=11680 Ack=559 Win=3847 Len=1448 
2014    802 src dst TCP 1514    [TCP Retransmission] 51940 > http [ACK] Seq=11680 Ack=559 Win=3847 Len=1448 
2029    833 src dst TCP 1514    [TCP Retransmission] 51940 > http [ACK] Seq=11680 Ack=559 Win=3847 Len=1448

所以我有几个问题,当应用程序发送 FIN 时,TCP 连接状态是否会变为 fin_wait_1?那为什么它仍在发送数据包?

或者我误解了 fin_wait_1?

谢谢。

答案1

一个有趣的问题。首先,您说得对,当应用程序在套接字上调用 close() 时,会发送 FIN,套接字会进入 FIN-WAIT-1 状态。在此状态下,套接字将不再接受任何发送调用,但是发送的数据包FIN 尚未被确认,将继续被重新传输。这似乎是你的情况。

来源:https://www.rfc-editor.org/rfc/rfc793#section-3.5

相关内容