【发布时间】:2015-05-05 16:10:55
【问题描述】:
我正在为一个班级项目自己实现 TCP,但有一个细节我似乎无法理解。什么是 FIN+ACK 消息?在我在这里包含的图表中,接收到 FIN+ACK 将使主机从 FIN_WAIT_1 状态变为 TIME_WAIT 状态。然而,整个图中的 NO 状态转换会发送 FIN+ACK。那么如果什么都没有发送,怎么可能收到 FIN+ACK 呢?
【问题讨论】:
-
传说清楚地表明了这一点:当应用程序在 TCP 套接字上发出
close()操作时会发生这种情况。 -
什么意思?看起来如果应用程序在
ESTABLISHED状态下发出close()操作,它会发送FIN,而不是FIN+ACK。我错过了什么? -
客户端发送FIN,这个包上设置的ACK是最后一个数据包发送的ACK。远程以 FIN+ACK 响应,这个 ACK 是指客户端的 FIN - Ack 号将递增。大多数实现也将在随后立即 RST。
-
@BadZen 真的吗?发送 FIN-ACK-RST 的实现将被破坏。它应该将端口保持在 LAST_ACK 中,直到它收到对自己 FIN 的 ACK。
标签: networking tcp