CS PAPERS DEEP-READ · PAPER 65
Vinton G. Cerf & Robert E. Kahn · IEEE Transactions on Communications · May 1974
In 1974 two people — Vint Cerf and Bob Kahn — wrote a paper answering a question nobody then had a good answer to: how do you stitch several mutually incompatible networks into one network? Their answer later acquired a name you have certainly heard: TCP/IP. Every message you send from your phone and every web page you open still follows the rules laid down in this paper. The reason the internet is an inter-net starts here.
By the early 1970s there was more than one working network: the military research network ARPANET, a packet radio network that carried data over the air, a satellite network spanning the Atlantic. Each ran perfectly well inside itself, and not one byte could pass between them.
Think of railways: several countries each built one, but the track gauges differ, the ticketing differs, the signalling differs — so a train reaching the border simply stops. Networks differed even more. One could carry about a thousand bytes per packet, another barely a hundred. One guaranteed that whatever you handed it would arrive; another dropped things and never mentioned it. And each had its own way of writing house numbers.
The obvious move is to standardize: make every network adopt the same design. That road was closed — each network had its own owner, its own equipment and its own temperament, and nobody had the authority to make everyone start over.
Cerf and Kahn went the other way: nobody has to change anything. Just put a relay station at the border between two networks (they called it a gateway), and agree on one inner envelope that everybody recognizes.
Whatever you are sending goes into that common inner envelope, addressed in a format the whole internet understands. Whichever network it enters then wraps its own local envelope around the outside, in its own style. At the border the gateway strips off the local envelope and puts on a new one in the next network's style — and the inner envelope is never opened from one end of the journey to the other. Every network keeps speaking its own dialect; there is simply a translator at the border.
Here comes the stranger decision: the networks and gateways in the middle are not responsible for delivery at all.
They only try their best: deliver if they can, drop it when overloaded, never mind the order — and a gateway does not even remember how far along any given conversation is. It glances at the address and throws the packet onward. All responsibility sits at the two ends.
It works like mailing a stack of postcards: the sender numbers every card; the receiver writes back "I have everything up to number k"; and if that acknowledgement never comes back in time, the sender simply mails the unacknowledged ones again. The receiver also adds "I have room for N more, don't send faster than that" — that is the speed limit.
Why design it this way? Because a middle that remembers nothing can be simple and fast, and if one gateway dies you swap it out without disturbing conversations in flight. And whether everything actually arrived is something only the two ends can really know anyway.
This network of networks can grow outward without limit: build a new network and you need nobody's permission and no changes to anyone's existing equipment — hang a gateway off the side, honor that inner envelope, and you are in. Wi-Fi, 4G, fiber, satellite broadband are all networks invented decades later, and every one of them drops straight into the picture drawn in 1974.
One honest cost: this design places all trust at the two ends, and the paper contains no mechanism whatsoever against impersonation or eavesdropping — a great deal of today's internet insecurity traces back to a design written when everyone on the network knew everyone else and nobody was thought of as an adversary.
Don't try to unify the networks. Put a translating gateway at each border, wrap the data in one inner envelope everyone recognizes, let the middle do its best and keep no records, and rebuild reliability at the two ends out of numbering, acknowledgements and retransmission — so any new network can join at any time. That is the internet.
Want the gateway and encapsulation diagrams, the address format, and the potholes it left behind? → Switch to the deep read
The paper proposes connecting mutually incompatible packet networks at their borders with gateways, and defining one common internetwork packet format and global address that every network honors; the networks and gateways in between provide only best-effort forwarding and keep no per-conversation state, while reliability — sequence numbers, acknowledgements, timeout retransmission, windows — is pushed entirely to the TCP running on the two end hosts. This "gateway + encapsulation + end-to-end reliability" design is the origin of TCP/IP and the skeleton of today's internet.
The authors are Vinton G. Cerf (then at Stanford) and Robert E. Kahn (then at ARPA); the paper appeared in IEEE Transactions on Communications, May 1974. It follows ARPANET (1969) and Louis Pouzin's French CYCLADES network, whose pure-datagram philosophy directly shaped the choice that the network guarantees nothing. It leads to RFC 675 (the first TCP specification, late 1974), the 1978 split of TCP and IP into two layers, and the January 1983 cutover of ARPANET to TCP/IP. Cerf and Kahn received the 2004 Turing Award for this work.
The situation in 1974 was this: packet switching itself had been proven — ARPANET had been running for five years, and packet radio and satellite networks existed too. The open question had moved from "how do you build a network" to "how do several networks talk".
And their differences were structural, not the kind you tune away with a parameter:
The two visible roads were both dead ends. The first was unification: require every network to adopt one protocol — politically impossible, since each had its own owner, budget and installed equipment. The second was pairwise translation: write a dedicated converter for every pair of networks — that is on the order of n² converters for n networks, and every newcomer forces everyone else to go back and change something.
The paper's motivation is to find a third road: one that requires no network to change itself, and no converter per pair. Kahn had set out ground rules for this (later known as the principles of open-architecture networking): no internal change to any constituent network; communication between networks on a best-effort basis; a black box (the gateway) to join them; and no global control at the operational level.
At the junction of two networks you place a device the paper calls a gateway. Its shape is unusual: a gateway is made of two halves, each belonging to one of the networks it joins. To network 1 it is just an ordinary local host speaking network 1's dialect; to network 2, likewise. The two halves meet inside the box.
Why design it that way? Because neither network then has to know the other exists, and neither has to change a line of its own code to "join the internet" — it simply gained one more local neighbor. All the change is compressed into that single point on the border.
Translation alone is not enough; something has to be common to everyone. The paper specifies a common internetwork packet format with its own header carrying a global address, a sequence number, a byte count, flags and a checksum, followed by the actual data.
This packet never travels bare inside any network. It is embedded in whatever local packet format the current network uses — a letter placed inside the local post office's envelope. At each border the gateway strips the old envelope and applies the next network's, leaving the letter inside completely untouched. Today we call this encapsulation, and it is the most fundamental mechanism of layered networking.
Addressing is the decisive step. The paper makes the global address two-part: a network number plus an identifier for the TCP within that network — first which network, then who inside it. A gateway only has to read the network number to know where to forward; it never needs to know every host in the world. This is hierarchical addressing in embryo, and today's IP address structure of "network prefix + host part", along with routers forwarding on prefixes rather than on individual hosts, descends directly from it. (The paper allotted the network number only 8 bits — at most 256 networks in the entire internet — which became the most-mocked number in the design.)
Now comes the paper's most influential and most counterintuitive decision. Since the constituent networks offer wildly different guarantees, the internetwork demands none at all: the networks and gateways in between forward on a best-effort basis — free to drop, reorder and duplicate — and a gateway holds no state for any conversation. It reads an address and forwards.
So where does reliability come from? Entirely from the TCP on the two end hosts (note that TCP in 1974 was the Transmission Control Program, a program; the split into protocols came later). Four things together make "reliable":
Add an end-to-end checksum, recomputed at the destination rather than trusted from any intermediate hop, and you have a reliable byte stream built over an unreliable path.
Why this division of labor? Two reasons. First, only the ends can know whether everything arrived: even if every hop guarantees its own leg, a gateway crash or a path change can still lose data in the seams, so the end-to-end check can never be skipped — and if the ends must do it anyway, doing it again in the middle is duplicated work. Second, stateless intermediaries are cheap, fast and scalable: a gateway allocates no memory per connection, can crash and restart without disturbing conversations in flight, and does not care if the path reroutes midstream. Ten years later Saltzer, Reed and Clark distilled this reasoning into the famous end-to-end arguments.
For the collision of packet-size limits, the answer is to let a gateway cut an internetwork packet into fragments when needed, each carrying enough header to travel the rest of the way on its own, with reassembly at the destination.
Why not reassemble at the next gateway? Because then a gateway would have to hold half a packet and wait — allocating buffers per partial packet, setting timers, handling the pieces that never arrive. That is state smuggled back into the middle. Destination reassembly is the price paid to keep gateways stateless.
The last piece: a host runs many programs at once, so who gets the arriving data? Beneath the TCP address the paper introduces the port, identifying a connection by the pair of (host address, port) at each end. Many conversations then run side by side over one machine and one wire without interfering — the mechanism underneath your video call and your download running at the same time.
To be honest: this is not an experimental paper. There are no benchmarks and no performance numbers in it. It is a design proposal, and its "result" is that it was later implemented and actually worked.
Three steps count as validation. First, it was turned into an implementable specification: RFC 675, in December 1974, gave the first full specification of TCP. Second, independent implementations interoperated: in the mid-1970s Stanford, BBN and University College London each built one and connected them successfully — which matters, because it showed the specification was precise enough that separately written code could understand itself. Third, a genuine heterogeneous demonstration: in 1977 data left a moving packet radio van, crossed ARPANET, then a transatlantic satellite network, and reached the destination host — three utterly different networks chained into one path with no bits lost end to end.
The final result was a cutover: on 1 January 1983 ARPANET replaced its old NCP protocol with TCP/IP wholesale. The internet's growth curve ever since is this paper's real experimental data.
It turned "a network" into "a network of networks", and made that network able to grow without permission. Building a new network requires nobody's approval and no change to anyone's installed equipment — attach a gateway and honor the common packet format. Wi-Fi, cellular, fiber, satellite broadband all appeared decades later and all slot unchanged into the 1974 picture.
It also established the internet's hourglass waist: a single thin layer in the middle that everyone agrees on (later, IP), with any application above it and any link technology below. Precisely because the waist is thin and carries no intelligence, both ends were free to explode.
And the principle of putting intelligence at the edges and keeping the network dumb became the deepest dividing line between the internet and the traditional telephone network: the latter concentrates intelligence inside the network with dumb terminals at the edge; the former makes the network a dumb pipe and hands the right to innovate to anyone at either end.
① In one line: translate at the borders with gateways, plus one internetwork packet format and global address everyone honors, stitching incompatible networks into a network of networks — with reliability handed entirely to the ends.
② The pain: by 1974 several packet networks existed with different packet sizes, addressing, reliability assumptions and delays; unification was politically impossible and pairwise translation is an n² dead end.
③ Gateway and encapsulation: a gateway is built in two halves, one belonging to each network, so to each it is merely a local host; the common packet rides inside each network's local packet and only the outer envelope is swapped — so neither network has to change itself.
④ Addressing: two-part "network number + identifier within that network", so a gateway forwards on the network number alone; today's prefix-based IP routing is its direct descendant.
⑤ The decisive cut: the middle is best-effort and gateways keep no conversation state; a reliable byte stream is built at the ends from per-byte sequence numbers, cumulative acknowledgements, timeout retransmission, windows and an end-to-end checksum. Because only the ends know whether everything arrived, and stateless intermediaries are faster and more scalable.
⑥ Supporting pieces: gateways fragment when needed and the destination reassembles (to keep gateways stateless); ports let many programs on one host communicate in parallel.
⑦ Validation: not an experimental paper — RFC 675, interoperating implementations from Stanford, BBN and UCL, the 1977 packet-radio / ARPANET / satellite demonstration, and the 1983 ARPANET cutover to TCP/IP.
⑧ Impact and limits: it created the internet's hourglass waist — thin and unintelligent, so both ends could grow without permission. The costs: an address field far too small (8-bit network number → IPv4 exhaustion → IPv6); TCP and IP fused until the 1978 split made UDP possible; gateway fragmentation as a lasting liability; flow control without congestion control (collapse in 1986, fixed in 1988); no security at all; and routing left open.