[ih] lack of service guarantees in the internet meaning that it cannot ever "fail"
Jack Haverty
jack at 3kitty.org
Wed Oct 28 10:23:13 PDT 2009
Aaaacck! In my list of ancient operating systems infected by the first
TCP/IP...how could I forget the Fuzzball! Nothing was like a Fuzzball!
Sorry DaveM.... /Jack
On Wed, 2009-10-28 at 09:14 -0400, Vint Cerf wrote:
> +1
>
> vint
>
> On Oct 28, 2009, at 2:39 AM, Jack Haverty wrote:
>
> > On Tue, 2009-10-27 at 20:04 -0700, Ted Faber wrote:
> >> It
> >> seems clear that the protocol was designed to allow developers access
> >> to
> >> the TCP timeout and retransmission information in this limited way
> >> when
> >> it was helpful to them in implementing their application. The base
> >> protocol has few extraneous knobs, so I assume this was carefully
> >> thought out.
> >
> > Well, I guess I have some legitimate claim to being one of the
> > designers, since I implemented the first PDP-11 Unix TCP and was
> > involved in the ongoing TCP and Internet WG meetings and ICCB/IAB way
> > back when.
> >
> > Ted's analysis is right on target. There was considerable thought and
> > discussion given to timeouts and timing in general. The specific
> > assumptions we made about timing (e.g., the maximum lifetime of a
> > packet
> > as it wandered around the net) had direct impact on design decisions
> > such as the size of the sequence space, and therefore the number of
> > bits
> > in the various fields in the TCP and IP headers. It also drove the
> > requirement for use of a random number generator to pick an initial
> > value for the TCP sequence number - if a machine rebooted before all
> > of
> > its "old" packets were flushed from the net, much confusion could
> > otherwise result.
> >
> > TCP/IP was designed to function in a military environment, where nasty
> > things could happen to the net - partitioning, destruction of nodes,
> > etc. The design criteria was that the data should get through if at
> > all
> > possible, no matter how long it took. Networks might go away and be
> > "reconstituted" as new hardware was deployed or moved into range.
> >
> > The implication of this on the TCP/IP machinery was that it should
> > never
> > give up - things might get better. Connections would be broken only
> > if
> > the "other end" responded and performed a close or abort sequence
> > (RST,
> > FIN, et al). If the other end didn't respond, the TCP/IP was to
> > continue trying, forever, with an increasing length of time between
> > retransmissions to avoid flooding the net.
> >
> > The design principle was that only the higher-level application could
> > legitimately decide that it was no longer worth trying to communicate,
> > possibly because whatever it was trying to do was no longer
> > relevant, or
> > because it had additional knowledge that further attempts were futile,
> > or because it had found an alternative way to accomplish its tasks.
> >
> > In order to help the application make the decision whether to keep
> > trying or abort, the TCP/IP implementation was supposed to make
> > information about the connection behavior available to the
> > application -
> > e.g., tell the application that it hadn't heard anything from the
> > other
> > side for a while (the "timeout"), or that the other side was
> > responsive,
> > but was not willing to take any more data (the TCP window was closed).
> >
> > The TCP/IP software was never supposed to close a connection because
> > of
> > a timeout - it would only close a connection on instructions from the
> > application that opened the connection, or on word from the other
> > end to
> > close/reset.
> >
> > These kinds of timing considerations also caused the protocol itself
> > to
> > change as we got some field experience. Early TCP protocol specs have
> > several fewer states in the state machine than the final TCPV4 because
> > of that.
> >
> > The protocol used "across the wire" between conversing TCP/IP
> > implementations was well specified. However, if I remember correctly,
> > the interface ("API") between a TCP/IP and it's user application was
> > only specified as an example. There were simply too many different
> > kinds of operating systems and computer environments around at that
> > time
> > to define a standard API. IBM 360s didn't look like Unix which didn't
> > look like Multics which didn't look like Tenex which really didn't
> > look
> > at all like the Packet Radio OS (I forget it's name...). DOS,
> > Windows,
> > and Macs weren't even around yet.
> >
> > It was left to each implementation designer to provide an appropriate
> > API which best fit into their particular machine environment.
> > Personally, the PDP-11/40 Unix environment was so limited (32K
> > memory -
> > that's K, not M or G), that there wasn't a lot of room for anything
> > fancy in my API.
> >
> > Unfortunately, I think that lack of specific standard API resulted in
> > some TCP/IP implementations that did not provide the intended kind of
> > information and control through the API, or that decided on their
> > own to
> > abort a connection that "timed out".
> >
> > The TCP/IP "service specification" was something like - "Keep trying
> > until hell freezes over." So, getting back to the original question -
> > yes, the Internet couldn't "fail" as long as it kept trying.
> >
> > HTH,
> > /Jack Haverty
> > Point Arena, CA
> >
> >
>
>
More information about the Internet-history
mailing list