在 Linux 网络编程和系统管理中,backlog 最常见的含义是 listen() 系统调用中的连接队列长度参数,它的作用主要涉及 TCP 连接建立过程中的排队机制。
下面分点说明:
在服务器端调用:
listen(sockfd, backlog);
backlog 用来指定 内核为该 socket 维护的“未完成连接”和“已完成连接”队列的总长度上限(历史含义),用来控制:
TCP 建立连接的过程:
SYNSYN+ACKACK在这个过程中,内核通常维护两个队列(不同内核版本实现不同):
accept()backlog 曾被认为是两者之和。
backlog 主要限制全连接队列(Accept Queue)/proc/sys/net/ipv4/tcp_max_syn_backlog
控制accept()backlog 太小:
backlog 太大:
常见设置:
listen(sockfd, 128); // 或 512
Web 服务器(Nginx / Redis)常设为:
listen 128; // Nginx
# 半连接队列上限
net.ipv4.tcp_max_syn_backlog
# 全连接队列是否忽略 backlog
net.core.somaxconn
# 端口范围
net.ipv4.ip_local_port_range
backlog 实际生效值:
min(backlog, somaxconn)
在 Linux 其他语境下,“backlog”也可能指:
但在 Linux 网络编程中,90% 情况指 listen backlog。
Linux 中的 backlog 用来限制服务器在 accept 之前,内核能临时容纳的已完成 TCP 连接数量,是保护服务器、应对并发连接的重要措施。
如果你愿意,我也可以结合 Nginx / Redis / 自写 C 服务 给你具体示例。