10,000 BOTSREAL.21.87.140.203SYNSYN-ACKSYN-ACKSYN-ACKSYN-ACKSYN-ACKFAKE SYNFAKE SYNFAKE SYNFAKE SYN60 B · SRC = SERVERANSWER 3,000 BANSWER 3,000 BANSWER 3,000 B
Pink: the attacker's botnet and everything it sendsSlots: the server's half-open backlog, one record eachEnvelopes: packets; big ones are amplified answersCloud: the internet, ending in the server's linkA real visitor (192.0.2.7) opens a TCP connection to 203.0.113.10:443. Each SYN makes the server keep a half-open record in its backlog until the ACK arrives. Forged SYNs fill every slot, their SYN-ACKs go nowhere, and the real visitor's SYN is dropped. A botnet of 10,000 devices can also overflow the server's link, or bounce small queries off an open resolver with the server's address forged, so 50× bigger answers land on it. SYN cookies, ingress filtering (BCP 38), rate limiting and closed resolvers stop these; the next lesson shows them working. 192.0.2.7, 203.0.113.10 and 192.0.2.53 are RFC 5737 documentation addresses; the forged sources come from 198.51.100.0/24, another documentation range.

What gets used up

  1. A server has limited resources: memory, processor time and the bandwidth of its link. Each visitor uses a little. Here a client opens a TCP connection with SYN, SYN-ACK and ACK, and is served.

SYN flood

Distributed and amplified

Defences

The packets, step by step

;; step 1/10 · normal-visit
;; client → server
TCP 192.0.2.7:51514 → 203.0.113.10:443  SYN
TCP 203.0.113.10:443 → 192.0.2.7:51514  SYN-ACK
TCP 192.0.2.7:51514 → 203.0.113.10:443  ACK
state  ESTABLISHED: the server now serves the page
cost   a little memory, processor time and link bandwidth per visitor

Illustrative numbers: a 4-slot backlog (real servers hold hundreds or more), 10,000 bots at 1 Mbit/s against a 1 Gbit/s link, and a 60-byte DNS query drawing a 3,000-byte answer (50×, inside the 28 to 54× that US-CERT alert TA14-017A measured for DNS). This lesson shows how the attacks work, not how to run them. The defence lesson that follows shows SYN cookies (RFC 4987), ingress filtering (BCP 38, RFC 2827), rate limiting and scrubbing working against them.