SYN backlog 保存未完成握手的请求
监听中的 TCP 套接字会区分未完成握手的请求,以及已经建立、等待应用 accept() 的连接。真正的参数名是 tcp_max_syn_backlog;本文保留历史 URL 中的拼写。它约束的是内核记住的半开请求,而传给 listen() 的 backlog 约束 accept 队列。先弄清压力发生在哪个阶段,再考虑处理办法,否则调大一个数字很可能没有解决真正的问题。 SYN cookies 是无法继续保存普通握手状态时的兜底机制。它不代表服务器不会过载、不保证报文送达,也不意味着 SYN 队列从此无需关注。即使启用了 cookies,丢包、过滤、资源分配失败和 accept 侧压力仍然可能让连接失败。判断时必须把握手状态、应用接收速度与最终业务响应分开。 SYN 队列保存未完成握手的请求,accept 队列保存已建立、等待 accept() 的连接。仅当 listen backlog 配置为 8192、somaxconn 为 4096 时,accept 侧上限为 4096。增加等待容量本身不会提高处理速率;原文全文仍暂缓、待审。 全文仍暂缓、待审;本图不为文中存疑论断背书。 backlog 参数管的是 accept 队列 Linux 从 2.2 起改变了 listen() backlog 的含义。配置值会受到 somaxconn 限制;只有当两者分别是 8192 和 4096 时,配置上限才是 4096。这是条件明确的配置例子,不是一次测量得到的精确接纳数量。应查看实际监听套接字与其网络命名空间,不能假定默认值,也不能根据短促突发中恰好成功的连接数反推严格容量。 ...