The TCP SYN backlog became a security boundary in September 1996, when a SYN flood knocked the New York ISP Panix offline for days and CERT followed with advisory CA-1996-21. It still matters because every TCP listener still has one, it is still finite, and a DDoS test still finds deployments where it is the first thing to break.
The backlog is the kernel queue of half-open connections: a SYN has arrived, the server has answered with a SYN-ACK, and the entry waits for the client's final ACK. When the queue is full, the kernel either drops new SYNs or, if enabled, falls back to SYN cookies.
How long a slot stays taken
The size of the queue is only half of its capacity. The other half is how long each entry lives, and for an ACK that never comes that is set by the SYN-ACK retry timer. On Linux the default tcp_synack_retries is 5, with the retransmit interval doubling from one second, so an unanswered entry is held for roughly 63 seconds before the kernel gives up on it.
Occupancy is arrival rate multiplied by residence time. A 1,024-entry queue with 63-second residence fills at about 16 spoofed SYNs a second. That is a few kilobits per second, far below anything a bandwidth alarm will notice, which is why a SYN flood is an attack on this queue and not on the pipe.
The same arithmetic shows the tuning levers. Cutting tcp_synack_retries to 2 brings residence down to about 7 seconds and raises the rate needed to fill the queue ninefold. A bigger queue raises it in proportion. Neither removes the problem; both move the knee.
Which number actually caps it
The size is not one knob. On recent Linux kernels the half-open queue for a listener is bounded by the backlog argument the application passes to listen(), clamped to net.core.somaxconn, while tcp_max_syn_backlog adds a further limit when SYN cookies are off. somaxconn defaulted to 128 until kernel 5.4 raised it to 4096, so the same application can get a queue thirty-two times larger on a newer host, and a hardcoded listen(fd, 128) can quietly pull it back down.
That is how a kernel upgrade, a container base-image change or a new reverse proxy opens or closes a gap with no one touching a firewall rule. Connections that do complete move on to a separate queue, the accept queue, which fails for different reasons.
What a DDoS test measures about it
A test drives SYN rate as an explicit axis against each listener that matters and records:
- The knee. The SYN rate at which half-open entries hit the cap, read from
ss -n state syn-recvand checked against the arithmetic above. - Overflow behaviour. Whether the kernel logs "Possible SYN flooding on port ... Sending cookies" and keeps serving, or drops new SYNs because cookies are off or a middlebox in front keeps its own smaller table.
- The counters.
TcpExtSyncookiesSent,SyncookiesRecvandSyncookiesFailedfromnstatshow cookies doing their job; a climbingListenDropsshows connections being lost. - Backscatter. Under the default retry count, every spoofed SYN can earn up to six SYN-ACKs aimed at addresses that never asked. That outbound packet rate is part of the cost, and part of what upstream filtering sees.
- Real handshakes completed. The only number a user feels: the share of legitimate clients that connect while the flood runs, with cookies on and with them off.
Where the SYN backlog sits among the other state tables an attacker can fill is laid out in understanding DDoS attack vectors.