大锤python日记(Socket中三次握手和四次挥手的过程)

184 阅读2分钟

TCP协议中三次握手和四次挥手的过程

三次握手

  1. 客户端发送一个 SYN 包(SYN=1, ACK=0)给服务器端,表示请求建立连接。
  2. 服务器收到 SYN 包后回应客户端一个 SYN 包(SYN=1, ACK=1),表示确认客户端发出的请求,并同时也向客户端发送一个请求建立连接的请求。
  3. 客户端收到服务器发来的确认包后再次向服务器发送一个确认包(ACK=1)。此时TCP连接已经建立。

帮助记忆:

  • 第一次握手:客户端说“我想要跟你说话”,发送一个SYN包。
  • 第二次握手:服务器说“好的,我准备好了,可以跟你说话”,发送一个SYN/ACK包。
  • 第三次握手:客户端说“我也准备好了,我们开始通信吧”,发送一个ACK包。

四次挥手

  1. 当客户端完成所有数据的发送后,发送一个 FIN 包给服务器端,表示请求关闭连接。
  2. 服务器收到 FIN 包后,返回一个 ACK 包来确认接收到了客户端发来的关闭请求,并进入 CLOSE_WAIT 状态等待关闭请求。
  3. 当服务器完成所有数据的发送后,发送一个 FIN 包给客户端,表示自己也准备关闭连接。
  4. 客户端收到服务器发来的 FIN 包后,返回一个 ACK 包来确认接收到了服务器发来的关闭请求,并进入 TIME_WAIT 状态等待一段时间,以确保自己发送的最后一个 ACK 包能够被对方接收到。

帮助记忆:

  • 第一次挥手:客户端告诉服务器“我发完了所有数据,可以关闭连接了”,发送一个FIN包。
  • 第二次挥手:服务器告诉客户端“好的,我知道你要关闭连接了”,发送一个ACK包。
  • 第三次挥手:服务器告诉客户端“我也发完了所有数据,可以关闭连接了”,发送一个FIN包。
  • 第四次挥手:客户端告诉服务器“好的,我知道你也要关闭连接了”,发送一个ACK包。

图示如下

image.png