如果第一个“FIN”数据包在TCP连接中丢失会发生什么?
问题描述:
我有一个代理,说A
,运行和发送信息到我的服务器,说S
。 A
的套接字配置为keepalive
,并且当A
和S
之间的网络很差时,A
将检测到连接错误并尝试重新连接到S
。我可以看到有时A
上的TCP连接状态是FIN_WAIT1
,意思是A
发送一个FIN
数据包并等待。但这FIN
数据包似乎丢失,因为在S
我可以看到A
和S
之间的许多ESTABLISHED
连接,通常应该只有一个。如果第一个“FIN”数据包在TCP连接中丢失会发生什么?
在这种情况下TCP是否失败,或者我错过了什么?
答
它在没有ACK的情况下被重发,就像任何其他TCP段一样。
+0
所以我想重发的FIN也丢失了? –
如果所有数据包丢失,套接字将最终超时,关闭并被删除。但是,超时可能需要很长时间,如果它们被调整的话 –