数据传输结束后,通信的双方都可释放连接。
1.现在客户端和服务器端都处于ESTABLISHED状态。客户端的应用进程先向其TCP发出连接释放报文段,并停止发送数据,主动关闭TCP连接。释放报文段首部的终止位FIN 置1,序号seq = u,它等于前面已传送过的数据的最后一个字节的序号加1。这时,客户进程进入FIN-WAIT-1(终止等待1)状态,等待服务器端的确认。
注:TCP规定,FIN = 1 的报文段即使不携带数据,它也消耗掉一个序号。
2.服务器端收到连接释放报文后即发出确认报文,确认号ack = u + 1,序号seq = v,等于服务器进程前面已传送过的数据的最后一个字节序号加1。这时,服务器进程进入CLOSE-WAIT(关闭等待)状态。
注:TCP服务进程这时应通知高层应用进程,从客户端到服务器端这个方向的连接释放了,这时的TCP连接处于半关闭状态,即客户端已经没有数据要发送了,但服务器端若发送数据,客户端仍要接收。也就是说,从服务器端到客户端这个方向的连接并未关闭,这个状态可能会持续一段时间。
3.客户端收到来自服务器端的确认后,就进入FIN-WAIT-2(终止等待2)状态,等待服务器端发出的连接释放报文段。
4.若服务器端已经没有要向客户端发送的数据,其应用进程就通知TCP释放连接