RFC 865: Quote of the Day Protocol

2026-04-30

RFC: RFC 865

Published: 1983

Authors: Jon Postel

RFC 865 is one of the shortest RFCs ever published — barely a page long — and defines one of the simplest protocols imaginable: connect to port 17 (TCP or UDP), receive a quote, connection closes. No request format. No headers. No negotiation. You connect, you get a string of characters, you're done.

To understand why this exists, you need to understand the small services philosophy of the early internet. In the early 1980s, Jon Postel defined a family of tiny protocols, all published on the same day in May 1983:

These weren't toys. They were diagnostic infrastructure. In an era before ping was standardized (ICMP echo came later in RFC 792's widespread adoption), these services were how you verified that a host was reachable, that TCP worked end-to-end, that data wasn't being corrupted in transit. Echo let you test round-trip integrity. Discard let you test if a host could receive. Character Generator let you stress-test a link. Quote of the Day gave you a human-readable proof-of-life from a remote machine.

The QOTD spec is remarkably minimal. The entire protocol section for TCP reads: a server listens on port 17, and once a connection is established, it sends a quote then closes the connection. For UDP, a server receives a datagram and sends back a datagram containing the quote. The quote itself is left entirely to the implementer — the RFC suggests it should be fewer than 512 characters to fit in a single UDP datagram, but otherwise gives no guidance on content, encoding, or format.

What makes this historically fascinating is what it reveals about design philosophy. Postel's approach embodied a principle that modern protocol designers have largely abandoned: make the simplest possible thing that works, document it in a page, ship it. There's no versioning scheme. No capability negotiation. No content-type headers. No authentication. The protocol is so simple it can be implemented in a few lines of code in any language.

Several Unix systems shipped with QOTD servers enabled by default through inetd, typically wired to the fortune program. If you ran telnet some-host 17 on a university network in the late 1980s, you'd often get a pithy quote or joke. It was the internet's first ambient, low-stakes social feature — a machine saying hello in its own voice.

These small services also introduced a pattern that persists today: well-known ports for well-known functions. Ports 1–1023 are reserved precisely because of this era's convention of assigning fixed ports to fixed services. Every time you see port 80 for HTTP or 443 for HTTPS, you're seeing the descendant of the same system that gave port 17 to QOTD.

Security eventually killed most of these services. Chargen and Echo became amplification vectors for DDoS attacks. QOTD servers were abused for UDP reflection. By the late 1990s, best practice was to disable all small services. Modern systems don't ship with them enabled. But their DNA lives on in health check endpoints, /ping routes, and the principle that every service should have a trivial way to confirm it's alive.

The RFC itself is also a beautiful artifact of Postel's writing style: no jargon, no committee-speak, just a clear description of a simple idea in plain English. It's the kind of specification a single person writes in an afternoon and the internet runs for decades.

Why it matters: QOTD and its sibling "small services" established the pattern of minimal diagnostic protocols and well-known ports that still underpins how we think about network service design, health checks, and infrastructure testing today.

All newsletters