一:TCP的三次握手过程:
客户端和服务器端建立一条TCP连接主要分为一下四步:
第一步:客户端--->服务器,发送一段特殊的TCP报文段,其中:SYN位置为1,seq=client_isn(客户随机选择)。这时,服务器处于SYN_SENT状态;
第二步:服务器端接收到客户端发来的SYN报文段之后,就会发送一段允许连接的报文段给客户端,其中:SYN=1,seq=server_isn(服务器自己的初始序号),ack=client_isn+1。这时,服务器端由Listen状态 ---> SYN_RCVN状态;
第三步:客户端接收到服务器发来的SYNACK报文段,然后客户端也会发送一段ACK报文段给服务器端,其中:SYN=0,seq=client_isn+1,ack=server_isn+1。这时,客户端由SYN_SENT状态 ---> ESTABLISHED状态。
第四步: 服务器端接收到客户端发来的ACK报文段后,就由SYN_RCVD状态 ---> ESTABLISHED状态。
如下图所示:
二:TCP的四次挥手过程:
第一步: 客户端发送FIN为1的报文段给服务器端,并由ESTABLISHED ---> FIN_WAIT_1;
第二步:服务器端接收到报文段后,这个时候,服务器端可能还有数据没有发送完毕,所以它会先发送ACK为1的报文段给客户端,并由ESTABLISHED ---> CLOSN_WAIT;客户端接收到该报文之后,也由FIN_WAIT_1 ---> FIN_WAIT_2;
第三步:服务器端数据都发送完毕,可以关闭连接了,就会发送FIN=1的报文段给客户端,并由LAST_ACK ---> CLOSED;
第四步:客户端接收到报文段后,发送ACK=1的报文段给服务端,并由FIN_WAIT_2 ---> TIME_WAIT(等待30S之后转为CLOSED);服务器端收到后,由 LAST_ACK ----> CLOSED。 至此,这一个TCP连接结束了它的生命周期。
如下图:
参考书籍:《计算机网络自顶向下方法》