我正在为一个课程项目自己实施TCP,而且我似乎无法理解其中的一个细节。什么是FIN + ACK消息?在此处包含的图表中,接收FIN + ACK将使主机从FIN_WAIT_1状态进入TIME_WAIT状态。然而,整个图中的NO状态转换发送FIN + ACK。那么如果没有发送任何东西,怎么能收到FIN + ACK?
答案 0 :(得分:2)
当应用程序调用{{1}}时,它会移至close
从FIN_WAIT_1
可以发生多种事情:
应用程序收到ACK:
这意味着对等体确认最后发送的数据包。本地申请移至FIN_WAIT_1
应用程序收到FIN:
这表示对等方已调用FIN_WAIT_2
。当地的申请应该承认这一点。因此,ACK发送给同行。本地申请移至close
应用程序收到FIN + ACK:
您提出的CLOSING
意味着对等方已调用FIN+ACK
以及同一TCP段确认最后收到的数据。本地应用程序将确认FIN,并将状态转换为close
。
答案 1 :(得分:2)
TCP的定义不仅仅是该状态图,基本规范可以在RFC 793中找到。一个特别的陈述如下(第15页,ACK
字段的描述):
建立连接后,始终会发送。
所以基本上这表示在初始三次握手后必须始终存在ACK,包括在四路断开阶段。随后只有2条消息不包含ACK:
所以回答你的问题:在该图中,无论何时发送FIN,ACK标志也将被设置并且ACK nr将出现,即使没有明确说明。