我正在为一个班级项目自己实现 TCP,有一个细节我似乎无法理解。什么是FIN+ACK消息?在我在这里包含的图表中,收到 FIN+ACK 将使主机从 FIN_WAIT_1 状态进入 TIME_WAIT 状态。然而,整个图中没有状态转换发送 FIN+ACK。那么如果没有任何东西发送它,怎么可能收到 FIN+ACK 呢?

当应用程序调用时,close它会移动到FIN_WAIT_1
可能FIN_WAIT_1发生多种事情:
应用程序收到ACK:
这意味着对等方已确认最后发送的数据包。本地应用程序移至FIN_WAIT_2
应用程序收到FIN:
这表明对等方已调用close。本地应用程序应该承认这一点。因此 ACK 会发送到对等点。本地应用程序移至CLOSING
应用程序收到FIN + ACK:
正如FIN+ACK您所说,这意味着对等方已调用close 并且在同一 TCP 段中正在确认最后收到的数据。本地应用程序将确认 FIN,这会将状态带到TIME_WAIT。