SYN Cookie 在队列溢出时作答
Linux TCP 监听端区分尚未完成的握手请求,以及已经建立但等待应用 accept() 的连接,通常称为 SYN 队列和 accept 队列。两者容量限制与溢出路径不同,排查连接故障时应先确定压力发生在哪个阶段,不能把所有等待都归到同一个 backlog 数字。 SYN Cookie 减少握手未完成期间需要保留的逐请求状态。服务器把可恢复信息编码到 SYN-ACK,收到有效回复后重建连接状态。节省的是待完成请求的内存,不代表处理没有开销,也不取消已建立连接的状态,更不保证一定准入或保持正常应用性能。 SYN Cookie 作用于握手。校验不会绕过 accept 队列,也不会增加应用接受能力。 两个队列,两种症状 普通有状态路径会保留请求,等待最后一个 ACK。Linux 文档将 tcp_max_syn_backlog 描述为每个监听端记住的请求上限;随内存变化的默认值与请求大小估算,不是所有机器的分配实测。等待应用接受的已建立连接,则由 listen() backlog 及 somaxconn 上限约束。Linux 从 5.4 起将 somaxconn 默认设为 4096,但部署值可以不同。 ...