TCP的三次握手目的是为了让客户端与服务器建立连接,便于以后一系列的数据传输。
三次握手
第一次握手:客户端向服务器发送一个标识为SYN的一个可连接请求数据包(该包序列号随机产生,即seq number=x),请求与服务器进行连接。
第二次握手:服务器确认接收到客户端发来的SYN报文后,回以自己的SYN报文(seq number=y序列号的一个SYN连接请求包)作为应答,并向客户端发送带有ACK标识的一个应答数据包(ack=y+1)。
第三次握手:客户端接收到服务器发来的SYN+ACK的数据包后,会向服务器发送一个带有ACK标识的确认包(ack=y+1),发送完毕后,客户端与服务器进入ESTABLISHED状态,即连接成功。
四次断开
第一次断开:客户端需要给服务器传输的数据传输完毕后,客户端会向服务器发送一个带有FIN标识的数据包(FIN=1,seq number=x),要求与服务器断开连接。
第二次断开:服务器收到带有FIN标识的数据包后,向客户端回以带有ACK标识的数据包,即ACK报文(ACK=1,ack=x+1),表明服务器已经收到客户端的报文了,此时服务器停止接受连接,即服务器为CLOSE_WAIT状态。
第三次断开:服务器会给客户端发送一个带有FIN标识的数据包(FIN=1,seq number=y) ,并且发送一个带有ACK标识的确认包(ACK=1,ack=x+1)以此来表示服务器需要给客户端传输的数据已经传输完毕,用来停止服务器向客户端发送数据。
第四次断开:客户端收到FIN标识的数据包后,依旧会回以一个ACK标识的报文作为应答(ACK=1,ack=y+1),此时客户端停止接受连接,即客户端为CLOSE_WAIT状态。