三次握手

概述

  • TCP连接的三次握手过程
  • 为什么要三次握手
  • TCP取消连接的四次挥手
  • 为什么要四次挥手

三次握手过程

  1. 客服端向服务器发送SYN数据包
  2. 服务器向客户端发送SYN/ACK数据包
  3. 客服端向服务器发送ACK数据包

为什么要三次握手

双方确认自己与对方能收发数据

  • 第一次握手,服务端确认了自己能收数据,客服端能发数据;客服端确认了自己能发数据。
  • 第二次握手,服务端确认了自己能收、发数据,客服端能发数据;客服端确认了自己能收、发数据,服务端能收、发数据
  • 第三层握手,服务端确认了自己能收、发数据,客服端能收、发数据,客服端确认了自己能收、发数据,服务端能收、发数据

四次挥手过程

  1. 主动关闭方向被动关闭方发送FIN数据包
  2. 被关闭方向主动关闭方发送ACK数据包
  3. 被动关闭方关闭连接,并向主动关闭方发送FIN数据包
  4. 主动关闭方向被动关闭方发送ACK数据包

为什么药四次挥手

主动关闭方提出关闭连接后,被动关闭方收到FIN并确认后,TCP连接进入半关闭状态,
被动关闭方可能还有数据没有传完,需等待被动关闭方发起FIN数据包后,并收到主动关闭方的确认后,TCP连接才算完全关闭

参考链接

https://github.com/Snailclimb/Java-Guide/blob/master/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C%E4%B8%8E%E6%95%B0%E6%8D%AE%E9%80%9A%E4%BF%A1/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.md