我正在为一个类(class)项目自己实现 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
。
关于networking - TCP中的FIN+ACK报文是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30043126/