三次握手
三次握手是指在建立TCP连接时,需要client端和server端共进行三次信息确认。
第一次握手:建立连接。client发送连接请求报文段(SYN位置为1,Sequence Number为x),然后,client端进入SYN_SEND状态,等待server端的确认;
第二次握手:server端收到client端的SYN报文段,需要对这个SYN报文段进行确认,若同意连接,将ACK位置为1,Acknowledgment Number为x+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给client端,此时server端进入SYN_RCVD状态;
第三次握手:client端收到server端的SYN+ACK报文段,向服务器发送ACK报文段(ACK位置为1,Acknowledgment Number设置为y+1,Sequence Number为x+1),这个报文段发送完毕以后,client端和server端都进入ESTABLISHED状态,完成TCP三次握手。
四次挥手
四次挥手是指在释放TCP连接时,需要client端和server端共进行四次信息确认。
第一次挥手:client端数据传输完毕需要断开连接,client端通过TCP向server端发出连接释放报文段(FIN位置为1,Sequence Number为u),并停止再发送数据,主动关闭TCP连接,进入FIN-WAIT-1状态,等待server端的确认;
第二次挥手:server端收到连接释放报文段后即发出确认报文段(ACK位置为1,Acknowledgment Number为u+1,Sequence Number为v),server端进入CLOSE-WAIT关闭等待状态,此时的TCP处于半关闭状态,client端到server端的连接释放。而client端收到server端的确认后,进入FIN-WAIT-2状态,等待server端发出的连接释放报文段;
第三次挥手:当server端数据传输完毕后,server端发出连接释放报文段(FIN位置为1,ACK位置为1,Sequence Number为w,Acknowledgment Number为u+1),server端进入LAST-ACK(最后确认)状态,等待client端的最后确认;
第四次挥手:client端收到server端的连接释放报文段后,对此发出确认报文段(ACK位置为1,Sequence Number为u+1,Acknowledgment Number为w+1),client端进入TIME-WAIT(时间等待)状态。此时TCP未释放掉,需要经过时间等待计时器设置的时间2MSL后证明server端进入CLOSED状态,client才进入CLOSED状态。