三次握手
首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了。
前两次确定客户端的收发数据可以正常使用;
第一次确定服务器可以正常收数据;
第三次可以确定第二次成功发送数据,即可以正常发数据;
四次挥手
【注意】中断连接端可以是Client端,也可以是Server端。
第一次挥手:Client端主动断开连接,并发送一个包含FIN=1,SEQ=u(等于前面已经传送过来的数据的最后一个字节的序号加1,因为TCP协议规定FIN报文段即使不携带数据,也要消耗一个序号)的请求断开报文,发送完后进入FIN-WAIT-1状态;
第二次挥手:Server端收到了断开请求报文,便发送一个包含ACK=u+1,SEQ=z的确认报文,发送完后进入CLOSE-WAIT状态。Client端收到Server端的确认报文后,Client端进入FIN-WAIT-2状态,继续接受Server端发送的最后的报文;
第三次挥手:等所有的数据传送完毕后,Server端发送一个包含FIN=1,SEQ=w,ACK=u+1的连接断开报文,此时Server端进入LAST-ACK状态。
第四次挥手:Client端收到断开连接报文后,必须要发送一个包含ACK=w+1,SEQ=u+1的确认断开报文,此时Client端进入TIME-WAIT状态,Server端进入CLOSED状态,等待2MSL(最长报文寿命)时间后,Server端进入CLOSED状态,双方正式断开连接。
1、客户端请求中断,发送FIN,服务器接收到FIN,意为:客户端无数据要发送,但服务器没有发送完,可以继续发送,不用关闭socket,先发送ACK;
2、服务器发送ACK,意为:中断请求接收到了,但是中断没有准备好,继续等待;客户端接收到ACK,进入FIN_WAIT状态,等待服务器的消息;
3、服务器准备好后,发送FIN,意为:服务器端数据发送完成,可以中断;(正常的话服务器关闭)
4、客户端发送ACK,用于判断服务器是否正常关闭,若在2MSL后,没有接到来自服务器的返回,则认为服务器正常关闭,客户端关闭;(2MSL的MSL有30秒,1分钟,2分钟)