TCP的三次握手
* 第1次握手:
客户端向服务器发出连接请求。由客户端向服务器端发送一个SYN同步标志的TCP报文,客户端进入SYN_SENT状态,SYN同步报文会指定客户端使用的端口以及TCP链接的初始序号,服务器进入LISTEN状态。
* 第2次握手:
服务器端向客户端回送一个响应,通知客户端收到连接请求。服务器在收到客户端的SYN报文后,会返回一个SYN+ACK报文,表明客户端的请求被接受,服务器进入SYN_RCVD状态。同时TCP序号被加1。客户端进入ESTAB-LISHED状态。
* 第3次握手:
客户端再次向服务器发送确认信息,确认连接。客户端返回一个确认报文给ACK给服务器端,服务器端进入ESTAB-LISHED状态。同样TCP序号被加1,至此一个TCP连接完成;然后才开始通信第二步,数据处理。
TCP的四次挥手
* 第1次挥手:
客户端打算关闭连接,此时会发送一个TCP首部FIN标志位被置为1的报文,也即FIN报文,之后客户端进入FIN_WAIT-1状态。
* 第2次挥手:
服务器收到该报文后,就向客户端发送ACK应答报文后,之后进入FIN_WAIT_2状态。
* 第3次挥手:
等待服务器端处理完数据后,也向客户端发送FIN报文,之后服务器端进入LAST_ACK状态。
* 第4次挥手:
客户端收到服务器端的FIN报文后,回一个ACK应答报文,之后进入TIME_WAIT状态。
服务器收到ACK应答报文之后,就进入CLOSE状态,至此服务端已经完成连接的关闭。
客户端在经过2MSL一段时间后,自动进入CLOSE状态,至此客户端也完成连接的关闭。