TCP三次握手,四次挥手
![](https://img.haomeiwen.com/i16230922/c96ed15e001002af.png)
1、三次握手
![](https://img.haomeiwen.com/i16230922/8562319f9e2cb5a0.png)
1)第一次握手:建立连接时,客户端发送syn包到服务器,并进入SYN_SEND状态,等待服务器确认;SYN(Synchronize Sequence Numbers)同步序列编号。
2)第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
3)第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端进入ESTABLISHED状态,当服务器接收到这个包时,服务器端也进入ESTABLISHED(TCP连接成功)状态,完成三次握手(TCP握手),可以开始数据传输。
2、四次挥手
![](https://img.haomeiwen.com/i16230922/c1645d740ee9fff8.png)
1)第一次挥手:客户端进程发出链接释放报文,并且停止发送数据。此时客户端进入FIN-WAIT-1(终止等待1)状态。
2)第二次挥手:服务器接收到连接释放报文,发出确认报文ACK=1,ack=u+1,并且带上了自己的序列号,此时服务器端进入CLOSE-WAIT(关闭等待)状态。客户端接收到服务器的确认请求后,此时,客户端进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接收服务器发送最后的数据)。
3)第三次挥手:服务端将最后的数据发送完毕后,就向客户端发送连接释放报文,由于在半关闭状态,服务器很可能又发送了一些数据,此时服务器进入了LAST-ACK(最后确认)状态,等待客户端的确认。
5)第四次挥手:客户端接收到来自服务器端的关闭请求,发送一个确认包,并进入 TIME_WAIT状态,等待了某个固定时间(两个最大段生命周期,2MSL,2 Maximum Segment Lifetime)之后,没有收到服务器端的 ACK ,认为服务器端已经正常关闭连接,于是自己也关闭连接,进入 CLOSED 状态。服务器端接收到客户端这个确认包之后,立即关闭连接,进入 CLOSED 状态。
详情请参考: