RFC 1122 · · Internet Standard

Ten years of TCP/IP bug reports, written down.

The official title is "Requirements for Internet Hosts, Communication Layers." What it actually is: a correction sheet for everything below the application, compiled in 1989 from a decade of TCP/IP implementations quietly disagreeing with each other.

Status
✓ Still current
Also known as
STD 3
Updates
RFC 793

Written by Noel Lang · IT trainer

TL;DR

RFC 1122 tells an internet host what it must do below the application layer. It defines no protocol. Instead it walks through IP, ICMP, UDP and RFC 793 and pins down, clause by clause, the behaviour that a decade of independent implementations had been quietly disagreeing about. It is half of STD 3 (the other half is RFC 1123 ), it is the home of the Robustness Principle, and it is still an Internet Standard.

The problem it solves

By the late 1980s, TCP/IP had been implemented dozens of times by people who had never met, from specifications written a decade earlier. Those specifications were clear about the wire format and vague about behaviour. What should a host do with an ICMP message it does not understand? How long may it wait before acknowledging? What counts as a valid IP option?

Everyone answered slightly differently, and the answers only collided when two stacks met on a real network. The internet did not have a protocol problem, it had an interpretation problem.

RFC 1122 is the answer. It goes through each layer and, for each open question, writes down a rule with exact force: this you must do, this you should, this you may. It needed those words so badly that it defined them itself, in section 1.3.2, eight years before RFC 2119 made that vocabulary standard for every RFC that followed.

The building code

A specification is an architect’s drawing. It tells you what the building is: the shape, the dimensions, where the load-bearing walls go. It cannot tell you everything, because it was drawn before anyone had lived in one.

RFC 1122 is the building code, and building codes are written after the collapses. Every rule in it is a scar. Somebody’s host once ignored an ICMP redirect and blackholed its own traffic, so now there is a clause. Somebody’s stack once fragmented a packet it should have dropped, so now there is a clause about that too. The document reads dry because a list of scars always does.

That is also why it is not a replacement for the drawings. You still read RFC 793 to learn what TCP is. You read RFC 1122 to learn what a TCP that survives contact with strangers must actually do. The famous line in section 1.2.2, be conservative in what you send and liberal in what you accept, is not a slogan. It is the philosophy of a document written by people picking through wreckage.

What the RFC actually says

Long, and organised as a walk down the stack. Nobody reads it end to end; people look up the clause they are arguing about:

Section In plain words
1 · Introduction Why the document exists, and the famous section 1.2.2: be conservative in what you send, be liberal in what you accept.
1.3.2 · Requirement words Defines MUST, SHOULD and MAY, eight years before RFC 2119 made that vocabulary universal.
2 · Link Layer The short one. Mostly about ARP, and about not assuming every network looks like Ethernet.
3 · Internet Layer IP and ICMP, clause by clause: fragmentation, the time-to-live, and which ICMP messages a host must answer rather than ignore.
4 · Transport Layer The heart of it. Four pages on UDP, thirty on TCP: retransmission timers, urgent data, keep-alives, and the rules for closing a connection cleanly.

Things people get wrong

  • "RFC 1122 defines TCP."

    It defines nothing. defines TCP; RFC 1122 is the document that went back through it after ten years and said, clause by clause, what implementers had been getting wrong. Think specification versus errata. A stack that implements 793 alone will mostly work and will surprise you at the edges, which is precisely why 1122 was written.

  • "STD 3 is a document."

    STD 3 is a pair. RFC 1122 covers the communication layers and covers the applications, and the standard number refers to both together. Standard numbers name a requirement, RFC numbers name a document, and one requirement can span several documents. The same is true of STD 6, which is just alone.

  • "Be liberal in what you accept is timeless advice."

    It was written when the danger was two university stacks failing to talk. Thirty years of experience have shown the other side of it: every implementation that quietly accepts malformed input teaches senders that the malformation is fine, until the tolerance becomes the de-facto protocol and a strict parser is the one that looks broken. The IETF has since revisited the principle. Being liberal is a kindness with a long invoice.

Where you'll meet RFC 1122

Rarely by name, often by consequence. Where it surfaces:

You see What it means
"Postel's Law" in a code review Someone is quoting section 1.2.2, usually to justify accepting input that a stricter parser would have rejected.
MUST and SHOULD in a 1990s RFC The vocabulary RFC 1122 defined for itself, before RFC 2119 turned it into a site-wide convention.
"Compliant with STD 3" in a datasheet A claim that the device follows both RFC 1122 and RFC 1123. Whether anyone checked is another matter.
A TCP stack with a two-minute TIME-WAIT One of the many operational constants that RFC 1122 pinned down where RFC 793 had left room for argument.

Questions people actually ask

What is RFC 1122? +

RFC 1122 is a requirements document from 1989 that says what an internet host must, should and may do at the link, IP and transport layers. It does not define any protocol; it corrects and clarifies the ones that already existed, based on ten years of implementation experience. Together with RFC 1123 it forms STD 3, and both are still Internet Standards.

What is the difference between RFC 1122 and RFC 1123? +

They are two halves of one document, published the same day by the same editor. RFC 1122 covers the communication layers: link layer, IP, ICMP, UDP and TCP. RFC 1123 covers the application layer: Telnet, FTP, SMTP and DNS. Together they are STD 3, the requirements every internet host is measured against.

What is the Robustness Principle? +

"Be conservative in what you send, be liberal in what you accept." RFC 1122 states it as a design rule for hosts: emit only strictly correct output, but tolerate input that is technically malformed if its meaning is clear. It is often called Postel's Law after Jon Postel, who first phrased it. Modern practice treats it with more suspicion than 1989 did.

Is RFC 1122 still current? +

Yes. It is an Internet Standard and part of STD 3, and it has never been obsoleted. Individual clauses have been updated by later RFCs, for example the TCP rules by RFC 9293, but the document itself still stands. When a specification says a host "must follow STD 3", this is half of what it means.

Referenced by

Other explainers on this site that point back to this RFC:

How RFC 1122 connects

Part of a guided cluster: The networking basics, explained