TCP 协议的三次握手和四次握手

时间:2022-11-04 08:15:14

一、 TCP协议的在建立连接时三次握手和关闭连接时的四次握手


如下图所示:

TCP 协议的三次握手和四次握手

在建立连接阶段:

1:客户端向服务器发送SYN包,并进入SYN_SEND状态

2:服务器接收到SYN包,确认客户端的SYN包并发送自己的SYN包给客户端,即(SYN+ACK),进入SYN_RCVD状态

3:客户端收到服务器的SYN+ACK, 向服务器发送确认包ACK,服务器和客户端建立连接完成,并都春雨ESTABLISHIED状态。


传输数据======


断开连接:

可以由服务器请求断开连接也可以由客户端请求。我们以图中的客户端请求终止连接为例

1:客户端发送FIN包给服务器,告诉服务器“我这里已经没有需要传送的数据,但是我不会关闭连接,你数据没有传送完的话继续传输”,进入FIN_WAIT状态

2:服务器收到FIN包,但是自己的数据还没有传输完毕,向客户端发送确认包ACK "收到你的FIN包了,但是请等我一下,我的数据没有传输完成"

3:服务器的数据全部发送完成了,发送FIN包给客户端“我的数据全部传输完成,可以关闭连接啦” 

4:客户端收到FIN包,知道自己可以关闭连接了,但是担心服务器担心自己没有收到FIN的消息,就发送ACK给服务器"我收到你的消息了,准备关闭了"

5:服务器收到ACK包之后关闭连接 

6:客户端等了T时间之后没有收到回复,说明服务器端正常关闭。此时客户端也关闭了。


注:

1: 在TIME_WAIT状态中,如果客户端最后一个发送的ACK丢失,将会重新发送。等待T之后正式关闭连接,释放所有的资源(包括端口号)

2:为什么连接三次握手,关闭四次握手?

当服务器收到客户端的SYN请求之后,可以直接发送SYN+ACK应答以及同步。在关闭连接的时候,服务器收到FIN报文时,因为数据可能没有全部传送完毕,不会立刻关闭SOCKET,因此只能先回复ACK包,当所有报文发完之后,才会发送FIN包。