版权声明:本文图片为CSDN博主「狂奔的乌龟」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
图片原链接:https://blog.csdn.net/xy010902100449/article/details/48274635
1、TCP的连接建立
初始状态时,客户端与服务器处于CLOSED(关闭 )状态,在建立连接过程中客户端主动打开建立连接,服务器是被动连接。
三次握手过程分析:
(1)客户端向服务器发出请求连接的报文段 ,同步位SYN=1,初始序列号seq=x,期待序列号为x+1,此时,客户端处于SYN-SENT(同步已发送)状态。
(TCP规定,SYN报文段不能携带数据,但要消耗一个序号。序号指的是TCP报文段首部20字节里的序号,TCP连接传送的字节流的每一个字节都按顺序编号)
(2)服务器收到来自客户端的请求之后,向客户端发送确认ACK=1,确认客户端的序列号ACK=x+1。服务器向客户端发送请求连接的请求,同步位SYN=1,初始序列号seq=y,期待序列号为y+1。此时客户端处于SYN-RCVD(同步收到)状态。
(3)客户端收到服务器的确认之后,还要给服务器发送确认。确认收到请求ACK=1,确认序列号ACK=y+1,此时客户端的序列号seq=x+1。这时TCP连接已建立,客户端进入 ESTABLISHED(已建立连接)状态,当服务器收到客户端的确认之后,也会进入ESTABLISHED(已建立连接)状态。
2、TCP连接释放
数据传输结束后,客户端与服务器断开连接,初始状态时,客户端与服务器处于ESTABLISHED的状态,客户端在断开连接过程中是主动关闭,服务器则被动关闭。
四次挥手过程分析:
(1)客户端向服务器发送请求释放报文段,并停止发送数据。释放连接报文段FIN=1,序列号seq=u,期待序列号seq=u+1,此时客户端处于FIN-WAIT-1(终止等待1)状态。
(2)服务器确认收到请求ACK=1,确认序列号seq=u+1,向客户端作出回应。此时客户端处于CLOSE-WAIT(关闭等待)状态。
(3)客户端收到来自服务器的确认之后,就进入了FIN-WAIT(终止等待2)状态,当服务器将客户端的请求全部回应完后才开始请求关闭,服务器向客户端发送请求释放报文段FIN=1,序列号seq=w,期待序列号w+1,此时服务器最后等待客户端的接收。
(4)客户端确认收到来自服务器的请求ACK=1,确认序列号ACK=w+1,此时客户端处在TIME-WAIT(时间等待),客户端向服务器做出回应,服务器收到回应后立即关闭,服务器关闭后客户端需等待两个最长报文段寿命的时间(2*MSL),防止服务器接收不到来自客户端的回应,以便服务器重新发送请求。