TCP 三次握手过程?

发布于

一、过程

  1. 第一次:客户端发送 SYN=1, seq=x,进入 SYN_SENT 状态。
  2. 第二次:服务端回复 SYN=1, ACK=1, seq=y, ack=x+1,进入 SYN_RCVD 状态。
  3. 第三次:客户端回复 ACK=1, seq=x+1, ack=y+1,双方进入 ESTABLISHED 状态。

二、为什么是三次

  • 两次无法确认客户端的接收能力和服务端的发送能力。
  • 三次是最少能确认双方收发能力都正常的次数。
  • 防止已失效的连接请求到达服务端导致错误建立连接。

三、为什么不是四次

服务端的 SYN 和 ACK 可以合并在一次发送,所以三次足够。

四、SYN 攻击

攻击者发送大量 SYN 但不回 ACK,占满服务端半连接队列。防护:SYN cookies、增大半连接队列、缩短 SYN 超时。