TCP有限状态装机

1、TCP建立连接时的状态

 初始状态时:客户端服务器处于CLOSED(关闭)状态,在建立连接过程中客户端主动打开建立连接,服务器是被动连接。

三次握手过程分析:

(1)客户端向服务器发送请求连接报文,同步位SYN=1,初始序列号SEQ=x,期待序列号为SEQ=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,期待序列号为u+1,此时客户端处于FIN-WAIT-1(终止等待1)状态。

(2)服务器确认收到请求ACK=1确认序列号为seq=u+1,向客户端做出回应。此时客户端处于CLOSE-WAIT(关闭等待)状态。

(3)客户端收到来自服务器的确认之后,就进入了FIN-WAIT(终止等待2)状态,当服务器将客户端的全部请求全部回应完后才开始请求关闭,服务器向客户端发送请求释放报文段FIN=1,序列号为seq=w ,期待序列号seq=w+1,此时服务器最后等待客户端的接收。

(4)客户端确认收到来自服务器的请求ACK=1,确认序列号seq=w+1,此时客户端处于TIME-WAIT(时间等待),客户端向服务器做出回应,服务器收到回应后立即关闭,服务器关闭后客户端等待两个最长报文段寿命时间(2*MSL),防止服务器收不到来自客户端的回应,一边服务器重新发送请求。

原文地址:https://www.cnblogs.com/CAPF/p/11494131.html