[ih] Separation of TCP and IP
Jack Haverty
jack at 3kitty.org
Fri Jun 24 11:06:06 PDT 2022
Another thought about the how and why of the split of TCP into
(TCP|UDP)/IP...
IIRC, there was interest well before the TCP era (i.e., pre-1974) in
having a network that provided a "datagram" service. I wasn't involved
then except as a network user, but my impression is that the motivation
was a desire to have a "low latency" capability that wasn't necessarily
as reliable as a "connection-oriented" service. An obvious user of such
a service would be *interactive* voice, but there were other uses -
e.g., "process control" kinds of applications where timeliness was more
important than getting every piece of data. Delays due to buffering
and flow control mechanisms would be avoided, but some datagrams might
never be delivered. That was OK for some uses.
Within the ARPANET, there was such a mechanism that could be used with a
"datagram" kind of behavior. Such "uncontrolled messages" could be
sent, and it would bypass the normal ARPANET mechanisms for flow control
et al.
I was at BBN from 1977 through 1990, and I remember that, especially in
the "ARPANET group", there was a strong fear that use of uncontrolled
packets would be disastrous, likely to crash the entire ARPANET. So
"loss of datagrams" wasn't the primary concern; the perceived risk was
that uncontrolled traffic would disrupt the entire network.
As a result, it was very difficult to get permission to use this
"datagram" service. IIRC it was rarely granted, and even then only for
limited times and only between certain pairs of hosts.
Back in the early 80s, I was responsible for several "Internet
projects", including running the "core gateways". Since gateways (aka
routers) handled only IP datagrams, they were an obvious match to the
ARPANET "uncontrolled" service. So we asked for permission to use the
"uncontrolled" option for traffic passing between gateways.
We never got that permission. Too risky.
So it was very difficult to get permission to use that datagram
service. Even the "gateway group", in the same part of BBN that ran
the ARPANET, with offices just down the hall from the ARPANET NOC, was
too risky. For others seeking to experiment with datagrams I suspect it
was all but impossible.
I have a theory. More a speculation really, about how and why TCP/IP
evolved (Noel's question).
At the time, there was a longstanding desire in the research community
to try out ideas using some kind of "datagram" service. But the ARPANET
was the only available long-haul network, and it would only provide a
reliable byte-stream service. You could send individual IP datagrams
over the ARPANET, but they would always come out the other end intact
and in order, delayed by whatever buffering and retransmissions was
needed to accomplish that. Although it was possible to change the IMP
code, and a "datagram" service had actually been implemented, no one
could use it. And only BBN could change the code.
I can't remember where I saw it, but there was work done inside the
ARPANET to enable the interconnection of multiple networks. I.e., in
some document, or perhaps code, I saw packet formats that included a
"NETWORK" field, to allow packets to be addressed to different
networks. I'm not sure if that ever got implemented or used. That
"NETWORK" field may have been in one of the internal BBN documents (or
the code) that defined packet formats used between IMPs. If so,
probably few people outside BBN ever saw it.
TCP was also motivated by the need to integrate multiple networks into a
single communications system. One way to accomplish that would have
been to define mechanisms and implement them in every type of network
that needed to be interconnected. That would likely have been
difficult, especially with the experience with the ARPANET's
uncontrolled datagram mechanism.
The other approach was to put all the mechanism into the host computers
that were attached to the various networks. Host computer software was
significantly easier to change, especially since one or a few
"experimental" machines could be readily modified without fear of
somehow crashing all the other similar machines being used, by simply
not installing the experimental software (TCP) in "production"
machines. Such a technique was pragmatically difficult in a network.
So TCP (V1,2) put all of the mechanisms for flow control, reliability,
et al into the host computers, replicating the mechanisms that already
existed in the ARPANET IMPs. Experimentation could proceed inside that
computer software, constrained by the fact that the ARPANET was
providing superfluous mechanisms to create "virtual circuit" behavior.
Then we noticed that the Internet architecture was even more flexible
than it seemed. A "wire" connecting two gateways could be simply
considered as a very simple type of "network", with only two addresses -
"this end" and "the other end". So gateways could be directly connected
with just a wire (or a long-haul telephone circuit), and the Internet
would still work. The ARPANET was no longer needed. And with
gateways interconnecting via "wire networks", the core service of the
Internet evolved toward a pure datagram service, where IP datagrams
could be lost, reordered, mangled, duplicated, and in general treated
badly -- in other words, what TCP was designed to handle.
With TCP in the host computers, which could be easily modified, it was
now possible to design and actually implement a true "datagram" core
service, and experiment with applications that used it (like packet
voice), as well as the backlog of ideas about mechanisms for flow
control, congestion control, routing, etc., etc.
So it was a natural step to "split out" that datagram service and make
it separately accessible to "application" developers. IIRC, UDP
happened pretty much in conjunction with the TCP/IP split, essentially
as a mechanism for making that raw "datagram service" accessible to
application programs (by introducing the next level of addressing with
ports).
I don't remember all of the "timing" of all these changes, except that
they all happened in probably less than a year. And I'm not sure if
this patteren of events was actually orchestrated by anyone, or if it
just happened naturally. For example, did the TCP/IP split happen
because of the pent-up demand to try out ideas, and the new freedom to
implement that came from putting the software in the "hosts" rather than
in the "switches".
So, it's possible that the TCP/IP split happened simply because, with
the software now accessible in the host computers, it could, to satisfy
that longstanding desire to experiment with datagrams. Not just for
uses like packet voice, but also for all the people with ideas about
schemes for routing, window management, packetization, congestion
control, etc. etc., etc.
Jack Haverty
On 6/23/22 00:15, Noel Chiappa via Internet-history wrote:
> I'm interested in finding out more about the process by which TCP and IP were
> separated: to begin with, how it came to be recognized that this separation
> was a good thing. (This split was what enabled the later creation of UDP, of
> course.) In particular, that the basic service model (of what later became
> the internet layer) should be directly usable by applications, and that the
> complete data network be accessible not _just_ only via TCP. I am also
> interested in who drove this change (if any players in particular stand out).
>
> I have poked around a bit in the early IEN's, but I didn't find much on this
> specific area - either why, or who. From comments in IEN-22 "Internet Meeting
> Notes - 1 February 1978" (in "Introduction and Objectives) it sounds like the
> formal decision to do the split was made at the TCP meeting the day before.
> The minutes from that meeting, IEN-67 "TCP Meeting Notes - 30 & 31 January
> 1978", don't provide much, though. IEN-66 "TCP Meeting Notes - 13 & 14
> October 1977" shows that there had been a drift in this direction for a
> while; it didn't seem to be present as of IEN-3, "Internet Meeting Notes - 15
> August 1977", though.
>
> I arrived on the scene shortly after this happened (my first meeting was the
> August 1978 one), but I retain some impressions (gained no doubt from
> discussions with people like Clark and Reed). These are the impressions that
> I retain: that Danny was _a_ significant force in making this happen, because
> of his voice work - for which timeliness was important, not correctness. (In
> IEN-67, "Arrangements - Cohen" Danny "complain[ed] about TCP-3 becoming all
> things to all people".) Is that correct? (If so, it's probably his most
> significant technical legacy.) For others, I think Dave Reed may have been in
> favour too (perhaps he'd already started to think of RPC-like things). And
> perhaps some of the other voice people - e.g. Forgie? And I'm sure the PARC
> guys were trying to throw a few clues our way. Am I missing anyone? Did
> anyone stand out as being a bigger influence than the rest?
>
> Maybe there's some significan paper that discusses the architectural benefit
> of making the basic unreliable data carriage substrate accessible to _some_
> applications, but the concept didn't seem to get much coverage in the IENs.
> Maybe it was so obviously the Right Thing that not much discussion was
> needed, and the only question was when/how to do it?
>
> Noel
More information about the Internet-history
mailing list