一、三次握手
所谓三次握手即建立TCP连接,在由客户端与服务器之间发送三次数据包来确认连接
第一次握手
刚开始客户端处于 Closed(关闭) 的状态,服务端处于 Listen(监听) 状态。客户端给服务器发送一个 SYN=1的 报文,随机产生一个值seq=x,此时,客户端进入SYN_SENTZ状态,等待服务器确认。
第二次握手
服务器收到客户端的 SYN 报文之后,会将自己的 SYN 报文发送给客户端作为应答,同时会把的 ACK 的值在客户段初始序列号基础上加1,即ACK=1表示自己已经收到了客户端的 SYN,此时服务器进入 SYN_REVD 的状态。
第三次握手
客户端收到 SYN 报文之后,会发送一个 ACK 报文,当然,也是一样把服务器的 初始序列号 + 1 作为 ACK 的值,表示已经收到了服务端的 SYN 报文,此时客户端处于 ESTABLISHED 状态。服务器收到 ACK 报文之后,也处于 ESTABLISHED 状态,此时,双方就建立起了连接。
二、 四次断开
第一次挥手
客户端发送一个 FIN 报文,并停止发送数据,主动关闭TCP连接,进入FIN_WAIT1(终止等待1)状态,等待服务器的确认。此时客户端处于 FIN_WAIT1 状态。
第二次挥手
服务器收到 FIN 之后,会发送 ACK确认 报文,且把客户端的序列号值 +1 作为 ACK 报文的序列号值,表明已经收到客户端的报文了,此时服务器处于 CLOSE_WAIT 状态。
第三次挥手
服务器再次向客户端发给一个 FIN 报文,停止数据传输。服务端进入 LAST_ACK 的状态。
第四次挥手
客户端收到服务器的连续释放的报文段后,对此发出确认报文段(ACK=1,seq=u+1,ack=w+1),客户端进入TIME_WAIT(时间等待)状态。等待2MSL后客户端进入CLOSED状态。
|