TCP三次握手和四次挥手详解

TCP三次握手

TCP三次握手和四次挥手详解

最初客户端C和服务器S都处于CLOSED(关闭)状态,客户端C主动打开连接,而服务器S被动打开连接。S进程先创建传输控制模块TCB,准备接受客户进程的连接请求,然后服务器进程处于LISTEN(收听)状态,等待客户端C的请求。

(1)第一次握手:建立连接时,客户端发送SYN包(syn=x)到服务器,并进入SYN_SENT(同步已发送)状态,等待服务器确认;

(2)第二次握手:服务器收到SYN包,必须确认客户的SYN(ack=x+1),同时发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV(同步接收)状态;

(3)第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1,seq=x+1),客户端进入ESTABLISHED(已建立连接)状态,服务器接收到ACK包后也进入ESTABLISHED状态。

TCP四次挥手

TCP三次握手和四次挥手详解

(1)第一次挥手:客户端向服务器发送FIN包(连接释放报文),并停止发送数据,进入FIN_WAIT_1(终止等待1)状态,等待服务器确认;

(2)第二次挥手:服务器接收到连接释放报文后发送ACK(确认包),并进入CLOSED_WAIT(关闭等待)状态;此时,TCP服务器进程通知高级应用进程,是否还有数据发送给客户端(此时TCP连接处于半关闭状态,C没有数据发送给S,但若S发送数据,C仍要接收);客户端收到服务器的ACK包后,就进入FIN_WAIT_2(终止等待2)状态,等待服务器的连接释放报文;

(3)第三次挥手:一段时间后,若服务器没有要向客户端发送的数据,其应用进程就通知TCP释放连接,发送FIN包,并进入LAST_WAIT(最后确认)状态。

(4)第四次挥手:客户端收到服务器的FIN包后,向服务器发送ACK包,并进入TIME_WAIT(时间等待)状态;服务器收到ACK包后,进入CLOSED(关闭)状态;而客户端必须等待2MSL后进入CLOSED状态。