On this page

Denial of Service Mitigation

A networking engineer's account of why game denial-of-service attacks happen, why filtering packets at the network layer is not enough, and the relay architecture Valve shipped (Steam Datagram Relay) in response to the 2014-2015 wave of attacks on Dota and CS:GO.

The talk's lessons

What the kit took, and where

What it did not take, and why

Measured numbers (this kit)

A junk-UDP flood against the tests/soak-fixture ENet server's own port on 127.0.0.1, Godot 4.7.2 standard, a 4-core Linux machine, 4 clients, 20 s. From soak's own metrics (input_loss_pct from gaps in each client's input sequence; client round-trip rtt_max_ms):

Junk rate Server input loss Client round trip (worst) Outcome
none (baseline) 0.6% 14-24 ms all clients fine
1,000 pps 0.1% 7-23 ms no measurable effect
10,000 pps 0.2% 7-14 ms no measurable effect
50,000 pps 38% up to 5.9 s server stops answering a client; soak-failed
100,000 pps 50-57% 0.3-1.2 s one or two clients dropped; soak-failed

The degradation cliff is between 10,000 and 50,000 junk packets a second: a Godot 4.7.2 ENet server (one poll draining at most 256 datagrams per service call, on the main thread) copes with tens of thousands of junk packets a second, then collapses, which sits between the talk's "naive 100-1,000" and "well-written ~250,000". These are derived figures for this machine and fixture, not the talk's.