[ih] TCP RTT Estimator
Jack Haverty
jack at 3kitty.org
Sun Apr 13 13:40:01 PDT 2025
Instead of "formats and meanings", I should have said "formats and
interactions". The required sequences of messages, and the meanings of
those sequences, were part of the Protocol and the Standard, captured in
details such as the State Diagram included in RFC793 as part of the
Specification.
At one of the early TCP meetings, Vint explained to all of us what
"protocol" meant. It was derived from the Greek word "protokolon"
(sorry, can't remember how to make my computer type Greek
characters...). Vint explained that the protokolon was the section of
ancient scrolls at the very beginning of any such "document". It
described what the entire scroll contained - something like a table of
contents or Executive Summary or today perhaps the TLDR. That was
apparently useful in ancient times as a way to avoid having to unroll an
entire scroll when searching for some particular piece of information.
We recognized it of course as The Header.
Internal algorithms within host implementations, such as calculation of
retransmission timers, were explicitly not specified as a Standard at
that point, although we hoped they could be someday after more
experience and experimentation.
It wasn't so much that we had to consult with somebody more
knowledgeable. Rather we had experienced the unpredictable behavior of
paths that traversed multiple networks, and didn't think that anyone
knew how to characterize or model such behavior so that suitable methods
for error detection and correction could be chosen.
It's also important to remember that the Standardization effort that
resulted in RFC793 et al was an unexpected surprise. Vint gave a short
introductory talk at the beginning of each meeting. At one of them he
announced that DoD had decided to establish TCP as a DoD Standard, which
had all sorts of consequences beyond the research community of ARPA.
For example, such a Standard would then influence all sorts of military
procurements of hardware and software for anything that used computers
and communications.
That announcement led to Jon getting the assignment to quickly create
some required documentation, since Standards feed on paper rather than
code. That led to a lot of discussion as we tried to help Jon figure
out what all the existing code actually did. There was also a lot of
whining about "It's not ready yet!" or "It's too soon!" and "but we
don't know what the algorithm should be" (guilty!).
I recall having lots of discussions with Jon during that period. Jon was
enamored with the notion that implementations "be conservative in what
you do, be liberal in what you accept from others." It's in the RFC793
spec.
I argued against that, on the principle that incorrect behavior was
indicative of a bug, either in the specification or implementation, and
should be reported so that it could be fixed. Otherwise it just left a
"time bomb" in some deployed system that would probably explode at some
very inopportune time in the future.
I lost.
There weren't a lot of TCP implementations at the time. Bill Plummer at
BBN did Tenex. Jim Mathis at SRI did the LSI-11 version used in Packet
Radio experiments. I suspect those two were the first implementations,
used in the early Packet Radio experiments. Before my time.
I used Jim's code (e.g., implementation of the state diagram) as the
core for my PDP-11/40 Unix implementation, which was part of a Network
Security project at BBN in 1977. Dave Mills had his Fuzzballs. Bob
Braden did the IBM 360 implementation at UCLA. Dave Clark and Noel
Chiappa handled Multics at MIT. There may have been one or two more,
but it was a small group. In between meetings, lots of debate and
discussion was carried out by email, much of which is probably lost
now. Jon collected it all and distilled it into words and Specifications.
He had some earlier experience with such a task. The first "TCP
Bakeoff" was held at ISI on a weekend (January 27, 1979 IIRC) when lots
of offices and their terminals were unoccupied. We all had TCP
implementations that could talk to themselves, but none of them could
talk to anyone else. Checksums were the primary culprit. But after a
while we all got our TCPs to talk to each other. Jon then captured the
exact checksumming algorithm that reflected what all our code actually
did to compute and verify checksums. We had achieved Consensus at the
Bakeoff, after starting with just Running but incompatible Code. Jon
wrote it down.
(BTW, all the time I was interacting with Jon, he was at USC-ISI, in an
office tower in Marina Del Rey. I didn't know he had ever been at UCLA)
Out of all that, and a Herculean effort by Jon, documentation for the
DoD Standard emerged. It wasn't a pretty process. RFC 793/791 specify
Version 4, which grew out of previous versions we had named things like
"2.5" or "2.5+", or "2.5+epsilon". All such versions were documented
purely in email exchanges.
There was even an early definition of Version 3, which was quickly found
to be incorrect and replaced by Version 4. Unfortunately, someone in
the DoD contractor community (Ford Aerospace IIRC) had been contracted
to implement Version 3. They had their TCP working, but couldn't find
anybody to talk to. We had all gone on to Version 4.
Standards are messy. Formal standards organizations usually debate for
years, refining documents with new ideas and epiphanies. Code comes
later. The TCP community believed in "rough consensus and running
code" as the first step. Experience and experimentation drove changes.
Documentation came later.
It was fun too!
Jack Haverty
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature.asc
Type: application/pgp-signature
Size: 665 bytes
Desc: OpenPGP digital signature
URL: <http://elists.isoc.org/pipermail/internet-history/attachments/20250413/19f5030d/attachment.asc>
More information about the Internet-history
mailing list