TCP 三次握手和四次挥手协议
TCP 链接协议概述
建立 TCP 需要三次握手才能建立,而断开连接则需要四次握手。整个过程如下图所示:
建立连接的过程
首先 Client 端发送连接请求报文,Server 段接受连接后回复 ACK 报文,并为这次连接分配资源。Client 端接收到 ACK 报文后也向 Server 段发生 ACK 报文,并分配资源,这样 TCP 连接就建立了。
断开连接的过程
断开连接端可以是 Client 端,也可以是 Server 端。假设 Client 端发起中断连接请求,就先发送 FIN 报文。Server 端接到 FIN 报文后,但是如果还有数据没有发送完成,则不必急着关闭 Socket,可以继续发送数据。所以服务器端先发送 ACK,告诉 Client 端:请求已经收到了,但是我还没准备好,请继续等待停止的消息。这个时候 Client 端就进入 FIN_WAIT 状态,继续等待 Server 端的 FIN 报文。当 Server 端确定数据已发送完成,则向 Client 端发送 FIN 报文,告诉 Client 端:服务器这边数据发完了,准备好关闭连接了。Client 端收到 FIN 报文后,就知道可以关闭连接了,但是他还是不相信网络,所以发送 ACK 后进入 TIME_WAIT 状态, Server 端收到 ACK 后,就知道可以断开连接了。Client 端等待了 2MSL 后依然没有收到回复,则证明 Server 端已正常关闭,最后,Client 端也可以关闭连接了至此,TCP 连接就已经完全关闭了!关闭连接的过程如下图所示: