The client sends a request, the server returns a response that may be big that also contains a random value. The client must return this random value in a thank you message.
If the server doesn't receive the thank you message, it slows down responses to that ip address and eventually blacklist it if it's repeated.
From the client perspective, the answer is obtained in one round trip time. The price to pay on the server is the need to keep track of the expected thank you messages, and the throttled or blacklisted addresses.
Then there’s the issue of low power and/or battery-powered devices. You want people to be able to use your protocol without draining the battery. But by lowering the computational cost to accomodate that, you’re enabling the bad guys that can afford a fast GPU to go back to abusing the protocol cause the cost isn’t sufficiently high to deter them anymore.
And I’m sure there are plenty of other things I haven’t thought of.
The server's first response should be much smaller in size than the client's request.
The basic idea is to make the client (attacker) use more bandwidth and CPU time than the server, at least during the connection handshake phase. This makes the server unappealing as a target for attack, even through it does not downright prevent the attack.
Most protocols already employ such schemes in connection handshake and crypto key exchange.