TCP会话的终止需要经过四次握手断开连接,原因是TCP的会话是双向的,会话两端独立地发送和接收数据,那么终止会话就需要双向断开连接。
例如,主机A和主机B建立TCP会话后两端都开始发送数据,如果现在主机A的数据发送完了,主机A向主机B提出断开连接,这只是个单方向的行为,只会断开主机A到主机B的连接,而主机B到主机A的连接还保持正常,主机B还可以向主机A继续发送数据;如果现在主机B的数据也发送完了,主机B向主机A提出断开连接,连接双向断开后TCP会话终止。
TCP四次握手终止会话过程如图1所示。
图1 TCP四次握手终止会话过程
在图1中,主机A向主机B发送完数据后,主机A断开与主机B的连接;主机A向主机B发送一个FIN置位的TCP报文,主机B收到该报文后,回复一个ACK置位的TCP报文以确认收到了主机B发送的报文。
由于主机B也没有数据再发给主机A,随后主机B也向主机A发送一个FIN置位的TCP报文,断开与主机A的连接。
主机A收到主机B发送的FIN置位的TCP报文后,回复一个ACK置位的TCP报文以确认收到主机B发送的报文。