A small warning about UDP based protocols

The Gemini protocol [1] has inspried others to implement “simple” protocols, like Mercury [2] (alternate link [3]), Spartan [4] (alternate link [5]) and Nex [6] (alternate link [7]). But there's another protocol being designed that has me worried—Guppy [8] (alternate link [9]), which based on UDP (User Datagram Protocol) instead of TCP (Transmission Control Protocol).

Yes, UDP is simpler than TCP. Yes, you can get results with just one exchange of packets. But the downside of UDP is that you will be exploited for amplification attacks! I found this out the hard way [10] a few years ago and shut down my UDP QOTD (Quote Of The Day) service. Any time you have a UDP-based protocol where a small packet to the server results in a large packet from the server will be exploited with a constant barrage of forged packets. That's one reason for the TCP three-way handshake.

Also, the Guppy protocol spec states, “it's an experiment in designing a protocol simpler than Gopher and Spartan, which provides a similar feature set but with faster transfer speeds (for small documents) and using a much simpler software stack,” but there's a downside—you can easily over-saturate a link with data, which is another reason UDP is popular for amplification attacks. Congestion control is one reason why TCP exists (some say it's the only reason and the other benefits, like a reliable, stream-oriented connection is a side effect of the design).

My intent here isn't to discourage experimentation. I like the fact that people are experiementing with this stuff. But I do want to pass along some painful experiences I had when playing around with UDP on the open Internet.

[1] https://geminiprotocol.net/

[2] gemini://zaibatsu.circumlunar.space/~solderpunk/gemlog/the-mercury-protocol.gmi

[3] http://portal.mozz.us/gemini/zaibatsu.circumlunar.space/~solderpunk/gemlog/the-mercury-protocol.gmi

[4] spartan://spartan.mozz.us/

[5] https://portal.mozz.us/spartan/spartan.mozz.us/

[6] nex://nex.nightfall.city/nex/info/specification.txt

[7] http://portal.mozz.us/nex/nex.nightfall.city/nex/info/specification.txt

[8] gemini://gemini.dimakrasner.com/guppy-v0.3.1.gmi

[9] https://portal.mozz.us/gemini/gemini.dimakrasner.com/guppy-v0.3.1.gmi

[10] /boston/2019/05/13.1

Discussions about this entry

A small warning about UDP based protocols | Hacker News

A small warning about UDP based protocols - ZeroBytes

A small warning about UDP based protocols - derp.foo

The Guppy Protocol Specification v0.3.2

A small warning about UDP based protocols - Smeargle Fans

Lazy Reading for 2023/11/12 – DragonFly BSD Digest

Gemini Mention this post

Contact the author