← 返回首页

TCP握手 为什么是三次而不是两次?

  • 防止已失效的连接请求突然传到服务器:如果只有两次握手,客户端发出的第一个 SYN 滞留了,后来重发并建立了连接。传输结束后,滞留的旧 SYN 突然到达服务器,服务器误以为是新请求,直接建立连接(两次握手完成),但客户端并没有发起新请求,导致服务器空等资源浪费。三次握手能让客户端在收到服务器的 SYN 后,发现这不是自己发起的(因为自己没发新的 SYN),从而发送 RST 断开。
  • 同步双向序列号:TCP 是全双工的,通信双方都需要初始化自己的序列号。第一次握手客户端发了自己的 seq,第二次握手服务端发了自己的 seq 并确认了客户端的 seq,第三次握手客户端确认服务端的 seq。如果是两次,服务端无法确认客户端是否收到了自己的 seq。