我的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?
谢谢。
一个有趣的问题。 首先,当应用程序在套接字上调用close()时,你是正确的,发送一个FIN并且套接字进入FIN-WAIT-1状态。 在这种状态下,套接字将不会接受进一步的发送呼叫,但在FIN 之前发送并且尚未被确认的分组将继续被重新发送。 这似乎是你的情况发生了什么。
来源: https : //tools.ietf.org/html/rfc793#section-3.5