- 建立连接(三次握手)
- 第一次握手:客户端发包(SYN = 1),服务端收到了,然后服务端可以得出结论:客户端的发送能力正常,服务端接收能力正常。(注意,此时服务端只是知道自己的接收能力正常)
- 第二次握手:服务端发包,客户端收到了,然后客户端可以知道:客户端自身的发送能力和接收能力正常,服务端的发送能力和接收能力正常。
- 第三次握手:客户端发包,服务端收到了,然后服务端可以得出结论:服务端自己的发送能力也是正常的。(即第三次握手之后服务端才能确定自己接收和发送能力都是正常的)
-
断开连接(四次挥手)
中断连接的请求既可以是客户端也可以是服务端,以客户端发起中断请求为例:
- 客户端发送FIN报文(FIN = 1),然后进入FIN-WAIT-1(终止等待1)状态
- 服务端收到连接释放报文,发出确认报文(ACK = 1),此时服务器就进入CLOSE-WAIT(关闭等待)状态。这个时候处于半关闭状态,即客户端没有数据要发送了,但服务器若还有数据要发送,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT(关闭等待)状态。
- 客户端收到服务端的确认报文之后,进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在此之前服务器可能还有数据要发送)。 服务器将最后的数据发送完之后,就向客户端发送连接释放报文 (FIN = 1),此时服务器进入 LAST-ACK(最后确认)状态,等待客户端的确认。
- 客户端收到服务器连接释放的报文后,也必须要发送确认(ACK = 1)报文,此时客户端进入TIME-WAIT(时间等待)状态。此时TCP连接还未释放,客户端等待2 个MSL(最长报文段寿命) 后没有收到服务器的回复就可以关闭连接了,而服务端只要收到了客户端的确认报文,就关闭连接。所以服务器结束时间要早于客户端。
网友评论