工作原理

  • 服务器收到 SYN 包:服务器收到客户端发来的 SYN 包,不分配内存创建连接状态。
  • 计算 SYN Cookie:服务器根据客户端的源 IP 地址、源端口号、目标 IP 地址、目标端口号以及一些其他信息,通过一个加密算法计算出一个值,这个值就是 SYN Cookie。
  • 发送 SYN-ACK 包:服务器将 SYN Cookie 的值作为 SYN-ACK 包的初始序列号 (Initial Sequence Number, ISN) 发送给客户端。
  • 客户端回复 ACK 包
    • 如果客户端是合法的,它会回复一个 ACK 包,其中包含服务器发出的 SYN-ACK 包中的序列号加 1。
    • 服务器收到这个 ACK 包后,再次使用相同的算法,验证 ACK 包中的序列号是否正确。
  • 建立连接:如果验证成功,服务器才会分配必要的资源,建立 TCP 连接。

优势

  • 无状态性:服务器不需要为每个 SYN 请求保存连接状态,减少了内存消耗,从而提高了服务器的并发连接处理能力,能有效防御 SYN 洪泛攻击。
  • 资源节约:只有在连接真正建立时才分配资源,避免了资源浪费

劣势

  • 功能受限:由于服务器在收到第一个 ACK 包之前不分配任何存储空间,这使得一些 TCP 扩展功能(例如,TCP 选项)无法使用。
  • CPU 消耗:SYN Cookie 的计算会带来一定的 CPU 消耗。