TCP的关闭连接比TCP连接的建立稍微复杂一些,下面我把个人的学习和理解写下来分享。
(参考《计算机网络》,第6版,谢希仁著)。
1、TCP关闭连接的步骤
假设现有客户端A和服务端B,客户端A向服务端B发出关闭连接请求。
步骤一:客户端A主动向服务端B发送请求关闭连接报文段,FIN=1,seq=u,并进入FIN-WAIT-1状态,
步骤二:服务端B接受到客户端A的请求之后返回一个确认报文段,ACK=1,ack=u+1,seq=v进入到CLOSE-WAIT状态,并通知应用程序在传送完剩余数据之后关闭连接,
步骤三:客户端A接受到服务端B的确认报文段之后就进入FIN-WAIT-2状态,
步骤四:当服务端B的剩余数据传送完毕之后服务端B被动关闭连接,即向客户端A发送关闭连接报文段,FIN=1,ACK=1,seq=w(因为之间可能传送了一些数据消耗了一些序列号),ack=u+1,并进入到LAST-ACK状态,
步骤五:当客户端A接收到B的关闭连接报文段之后便返回一个确认报文段,ACK=1,ack=w+1,seq=u+1,并进入到TIME-WAIT状态(持续2MSL时间),
步骤六:当服务端B接收到A的确认报文段之后便进入到CLOSED状态,表示B到A这个方向的连接已关闭,
步骤七:客户端A在经历2MSL时间之后,没有接收到服务端