[comp.protocols.tcp-ip] SLIP documents

nraoaoc@nmt.edu (NRAO Array Operations Center) (02/07/91)

Where can I get some good documentation on SLIP? I have RFC1055, but it does
not state which of the actual protocols it uses (presumably because it can use
more than one). Now, I thought it used UDP in most implementations, and I'm 
trying to convince someone that he's not getting much, if any, error correction
on his SLIP connections, but he wants actual written proof. He thinks it's 
using TCP (as in "TCP/IP"), the same as Internet connections on Ethernet links.
I can't remember where I read (ages ago) that SLIP (generally) uses UDP; is 
there such a beast?

Our particular implementation is Rayan Zachariassen's streams SLIP for Suns. 
The closest thing I can find in the source code is that it includes the TCP
header definition from /usr/include/netinet/tcp.h if SLIP_FASTECHO is defined
(to give rlogin/telnet better response). But what about ftp? Does that use udp
instead, or does SLIP just use raw IP in this case? And what implications does
that have for error correction?

While enough personal testimonials would help, more formal-looking documents
would be better :-).

Thank you all.
-- 
Ruth Milner
Systems Manager                     NRAO/VLA                    Socorro NM
                            rmilner@zia.aoc.nrao.edu

jnford@handlebar.weeg.uiowa.edu (Jay Ford) (02/08/91)

In article <1991Feb6.172144.12605@nmt.edu>, nraoaoc@nmt.edu writes:
|> Where can I get some good documentation on SLIP? I have RFC1055, but it does
|> not state which of the actual protocols it uses (presumably because
it can use
|> more than one). Now, I thought it used UDP in most implementations, and I'm 
|> trying to convince someone that he's not getting much, if any, error
correction
|> on his SLIP connections, but he wants actual written proof. He thinks it's 
|> using TCP (as in "TCP/IP"), the same as Internet connections on
Ethernet links.
|> I can't remember where I read (ages ago) that SLIP (generally) uses UDP; is 
|> there such a beast?

SLIP does not "use" any transport or application protocols.  SLIP simply
provides a way to transmit IP traffic over a serial line.  In effect, it gives
you a link layer over a serial line functionally similar to that provided by
Ethernet for use on coax (or fiber, or twisted pair, or microwave...).  Once
you have a working link layer to run IP over, you can run any transport (UDP,
TCP, etc) over IP on that link.  The upper layers don't care what the medium
is.  That's the point of a layered approach to networking!

Applications use whatever transport protocol is appropriate, independent of
the link layer.  TELNET, FTP, SMTP and others use TCP;  NFS, DNS, and others
use UDP.

Basically, the only difference you should see between an Ethernet Internet
connection and a SLIP Internet connection is the speed and throughput.

------------------------------------------------------------------------
Jay Ford, Weeg Computing Center, University of Iowa, Iowa City, IA 52242
jnford@handlebar.weeg.uiowa.edu, 319-335-5555

guy@auspex.auspex.com (Guy Harris) (02/09/91)

>Basically, the only difference you should see between an Ethernet Internet
>connection and a SLIP Internet connection is the speed and throughput.

Well, I might not go *that* far.  Ethernet has a checksum, and SLIP
doesn't, so if you're, say, using UDP without checksums, Ethernet may be
more reliable than SLIP....

henry@zoo.toronto.edu (Henry Spencer) (02/09/91)

In article <5827@auspex.auspex.com> guy@auspex.auspex.com (Guy Harris) writes:
>Well, I might not go *that* far.  Ethernet has a checksum, and SLIP
>doesn't, so if you're, say, using UDP without checksums, Ethernet may be
>more reliable than SLIP....

Surely nobody would be so stupid as to use UDP without checksums. :-) :-)

(For those who don't get the point of the ":-) :-)", NFS uses UDP without
checksums.  And people wonder why NFS is so unreliable...)
-- 
"Maybe we should tell the truth?"      | Henry Spencer at U of Toronto Zoology
"Surely we aren't that desperate yet." |  henry@zoo.toronto.edu   utzoo!henry

amanda@visix.com (Amanda Walker) (02/09/91)

In article <5827@auspex.auspex.com> guy@auspex.auspex.com (Guy Harris) writes:
>Well, I might not go *that* far.  Ethernet has a checksum, and SLIP
>doesn't, so if you're, say, using UDP without checksums, Ethernet may be
>more reliable than SLIP....

On the other hand, if you're running NFS (the only common use I know of
for UDP without checksums) over SLIP, you may have worse problems :).

Of course, I'm firmly in the end-to-end-reliability-check camp, and thus
I think that running UDP without checksums is just a way of asking for
trouble.  I still fail to understand why it was done in NFS.  Sigh.

-- 
Amanda Walker						      amanda@visix.com
Visix Software Inc.					...!uunet!visix!amanda
--
If you know what you're doing, how long it will take, or how much it will
cost, it isn't research.

vjs@rhyolite.wpd.sgi.com (Vernon Schryver) (02/09/91)

In article <1991Feb8.203703.25654@zoo.toronto.edu>, henry@zoo.toronto.edu (Henry Spencer) writes:
> 
> (For those who don't get the point of the ":-) :-)", NFS uses UDP without
> checksums.  And people wonder why NFS is so unreliable...)


Everyone!  Please stop repeating this complaint.  It doesn't take much
perception or knowledge to find many real and inconvenient differences
between NFS and other UNIX file systems. If complaining about NFS brings
you joy, then complain about open-unlink, caching, security, ownership &
UID's, dates, and idempotency holes.  If you don't like using NFS, then use
something else like AFS or "the emerging standard, RFS" (AT&T press
release, 1986).

Anyone with an NFS implementation that does not use UDP checksums should
either fix or enjoy it.  The NFS on common and current workstations does
use UDP checksums by default.  Ours do.  I'm told that Sun's does as
of the NFS 3.2 source release.

I personally think the choice made in 1984 (85?) was correct for 1982
thru 1988.  The fact that for years (!) NFS has used UDP with checksums
turned on makes our disagreement about the correctness of the original
decision almost as interesting today as the old arguments whether "HLL's
will replace assembly language".


Vernon Schryver,  vjs@sgi.com

peiffer@umn-cs.cs.umn.edu (Tim Peiffer (the net guy)) (02/09/91)

In article <5827@auspex.auspex.com> guy@auspex.auspex.com (Guy Harris) writes:
   Well, I might not go *that* far.  Ethernet has a checksum, and SLIP
   doesn't, so if you're, say, using UDP without checksums, Ethernet may be
   more reliable than SLIP....

This sounds like you are willing to compare apples to oranges.  IP
differs not at all whether it originates on a coaxial Ethernet, or a
slow speed serial line.  UDP without checksums is only mentioning that
you are willing to disallow checksums at the transport level.  This
option exists under both Ethernet and SLIP connections.  The network 
level (IP) still has a checksum that resides at byte 12.  I believe
that V. Jacobsen (RFC 1144) states that the COMPRESSED_IP checksum
will be accomplished at byte 5.  RFC1055 refers one back to the
IP document for the content of the IP header.

Tim Peiffer
-----------
Tim Peiffer				peiffer@cs.umn.edu 	or
Computer Science Dept			..!rutgers!umn-cs!peiffer
University of Minnesota
MPLS MN 55455


** Internet Protocol
  A summary of the contents of the internet header follows:
    0                   1                   2                   3   
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Version|  IHL  |Type of Service|          Total Length         |
   |         Identification        |Flags|      Fragment Offset    |
   |  Time to Live |    Protocol   |         Header Checksum       |
   |                       Source Address                          |
   |                    Destination Address                        |
   |                    Options                    |    Padding    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

barmar@think.com (Barry Margolin) (02/09/91)

In article <84702@sgi.sgi.com> vjs@rhyolite.wpd.sgi.com (Vernon Schryver) writes:
>> (For those who don't get the point of the ":-) :-)", NFS uses UDP without
>> checksums.  And people wonder why NFS is so unreliable...)
>Everyone!  Please stop repeating this complaint.  

I agree that the complaint is wrong, but not for the same reason you do.
It isn't NFS that uses unchecksummed UDP, it's SunOS (or maybe BSD Unix) in
general (in its default configuration).  In fact, SunOS doesn't provide a
way for a UDP-based application protocol to control whether it uses
checksums -- it's a single, system-wide parameter.  Even worse, this one
parameter controls both whether checksums are generated during sending and
whether they are checked when receiving.

>Anyone with an NFS implementation that does not use UDP checksums should
>either fix or enjoy it.  The NFS on common and current workstations does
>use UDP checksums by default.  

I think Suns would count as "common and current workstations", and by
default SunOS doesn't enable UDP checksums.  In fact, until SunOS 4.1.1,
enabling UDP checksums required patching the kernel; in the latest release
they've finally moved it into a configuration file used during the kernel
build process.

>				Ours do.  I'm told that Sun's does as
>of the NFS 3.2 source release.

Since the socket library doesn't provide a way to enable or disable UDP
checksums (I could be wrong -- I simply searched for "checksum" in the
setsockopt man page), I don't see how the NFS source release can do this.
--
Barry Margolin, Thinking Machines Corp.

barmar@think.com
{uunet,harvard}!think!barmar

brian@ganglion.Canada.Sun.Com (Brian Onn) (02/10/91)

Tim Peiffer (the net guy) <peiffer@umn-cs.cs.umn.edu> writes:
|> In article <5827@auspex.auspex.com> guy@auspex.auspex.com (Guy Harris) writes:
|>    Well, I might not go *that* far.  Ethernet has a checksum, and SLIP
|>    doesn't, so if you're, say, using UDP without checksums, Ethernet may be
|>    more reliable than SLIP....
|> 
|> This sounds like you are willing to compare apples to oranges.  IP
|> differs not at all whether it originates on a coaxial Ethernet, or a
|> slow speed serial line.  UDP without checksums is only mentioning that
|> you are willing to disallow checksums at the transport level.  This
|> option exists under both Ethernet and SLIP connections.  The network 
|> level (IP) still has a checksum that resides at byte 12.  I believe
|> that V. Jacobsen (RFC 1144) states that the COMPRESSED_IP checksum
|> will be accomplished at byte 5.  RFC1055 refers one back to the
|> IP document for the content of the IP header.

*sigh* .  The net guy should read the RFC he mentions.  The IP checksum
is only for the IP header, and does not include the *data*.  IP relies
on the upper layer protocols (UDP, TCP) to provide checksumming of the
data.


What Guy is saying is that running UDP without checksums is more
reliable on an Ethernet due to the fact that the Ethernet frame
includes a checksum (CRC, actually) for all of the frame.  A SLIP frame
does not include a frame checksum, and this will allow bad data to be
passed up the protocol stack.  If the SLIP layer doesn't catch bad data
(ie, a bad SLIP frame), and the IP layer also doesn't checksum the
data, and higher up the UDP layer doesn't checksum the data, you've
just received bad data.


Brian.
-- 
_____________________________________________________________________
Brian Onn.                  Inet  : Brian.Onn@Canada.Sun.Com
Sun Microsystems of Canada. Uucp  : uunet!sun!suncan!brian
Product Support Specialist. Voice : (416) 477-6745.
---------------------------------------------------------------------

guy@auspex.auspex.com (Guy Harris) (02/11/91)

>It isn't NFS that uses unchecksummed UDP, it's SunOS (or maybe BSD Unix) in
>general (in its default configuration).  In fact, SunOS doesn't provide a
>way for a UDP-based application protocol to control whether it uses
>checksums -- it's a single, system-wide parameter.  Even worse, this one
>parameter controls both whether checksums are generated during sending and
>whether they are checked when receiving.

The latter two statements are true of BSD, as it comes from Berkeley,
from 4.3BSD to 4.3-reno.  Whether UDP checksumming is enabled or not in
BSD as it comes from Berkeley is, by default, under the control of the
COMPAT_42 #define; that doesn't seem to be on in most of the
configuration files, so I don't think the first statement is true of
BSD, although it is true of SunOS (SunOS != BSD).

>>				Ours do.  I'm told that Sun's does as
>>of the NFS 3.2 source release.
>
>Since the socket library doesn't provide a way to enable or disable UDP
>checksums (I could be wrong -- I simply searched for "checksum" in the
>setsockopt man page), I don't see how the NFS source release can do this.

It can if the default configuration of the NFS source release turns the
system-wide parameter on; he didn't say the NFS 3.2 source release lets
you arbitrary control whether UDP checksumming is done, he just said
that he was told that it *DID* UDP checksumming as of the NFS 3.2 source
release.

The NFS 4.0 source release is derived from 4.3BSD, and behaves like
4.3BSD in this regard - "udpcksum" is turned on only if COMPAT_42 is
defined, and it's not defined in the GENERIC configuration file. 

guy@auspex.auspex.com (Guy Harris) (02/11/91)

>This sounds like you are willing to compare apples to oranges.  IP
>differs not at all whether it originates on a coaxial Ethernet, or a
>slow speed serial line.

Yes, I know IP doesn't differ, but how reliably the link level checks
the link-level packets in which IP packets are wrapped *DOES* differ -
Ethernet has a checksum, and SLIP doesn't, as I said.

>UDP without checksums is only mentioning that you are willing to disallow
>checksums at the transport level.  This option exists under both Ethernet
>and SLIP connections.

If you disable UDP checksumming, the transmission of your UDP datagrams
will be checked by checksum when the transmission goes over Ethernet,
but not when it goes over SLIP, so if the transmission includes a SLIP
connection, that connection won't have any checksumming other than the
IP checksum you mention, which does *NOT* checksum the entire packet,
just the IP header. If the transmission includes only Ethernet
connections, it will be checksummed on each one of those hops.  (It
won't necessarily be checksummed as it's moved internally to any of the
intermediate machines, of course....)

>The network level (IP) still has a checksum that resides at byte 12.

Which only checksums IP headers; it doesn't check the entire datagram.

>I believe that V. Jacobsen (RFC 1144) states that the COMPRESSED_IP checksum
>will be accomplished at byte 5.

He also states that:

   This compression is specific to TCP/IP datagrams./2/  The author
   investigated compressing UDP/IP datagrams but found that they were too
   infrequent to be worth the bother and either there was insufficient
   datagram-to-datagram coherence for good compression (e.g., name server
   queries) or the higher level protocol headers overwhelmed the cost of
   the UDP/IP header (e.g., Sun's RPC/NFS).

so it's irrelevant to the discussion of UDP anyway.

vjs@rhyolite.wpd.sgi.com (Vernon Schryver) (02/12/91)

In article <1991Feb9.051623.29415@Think.COM>, barmar@think.com (Barry Margolin) writes:
> In article <84702@sgi.sgi.com> vjs@rhyolite.wpd.sgi.com (Vernon Schryver) writes:
> >> (For those who don't get the point of the ":-) :-)", NFS uses UDP without
> >> checksums.  And people wonder why NFS is so unreliable...)
> >Everyone!  Please stop repeating this complaint.  
> 
> I agree that the complaint is wrong, but not for the same reason you do.
> It isn't NFS that uses unchecksummed UDP, it's SunOS (or maybe BSD Unix) in
> general (in its default configuration).  In fact, SunOS doesn't provide a
> way for a UDP-based application protocol to control whether it uses
> checksums -- it's a single, system-wide parameter.  Even worse, this one
> parameter controls both whether checksums are generated during sending and
> whether they are checked when receiving.

Isn't this the right way to do it?  With a "single, system-wide parameter"
controlling whether UDP is checksummed or not?  We argued among ourselves
years ago whether the NFS switch should be the same as the global UDP
switch.  Ultimately, we decided that those who want no UDP checksums on NFS
would not want them on anything else, including RPC, and conversely.  Some
might like a per-link switch, turning it on for SLIP lines and off for
Ethernet and FDDI.  (Having seen many checksums errors in FDDI frames with
good CRC and E-bit, I'm not one.)  Unfortunately, that idea does not work
with routers; you'd need a UDP-cksum-is-a-good-idea-discovery protocol.

The source from BSD has UDP checksums turned on by default.  I haven't
looked at the Reno NFS, but would be surprised if it's off there.

> >Anyone with an NFS implementation that does not use UDP checksums should
> >either fix or enjoy it.  The NFS on common and current workstations does
> >use UDP checksums by default.  
> 
> I think Suns would count as "common and current workstations", and by
> default SunOS doesn't enable UDP checksums.  In fact, until SunOS 4.1.1,
> enabling UDP checksums required patching the kernel; in the latest release
> they've finally moved it into a configuration file used during the kernel
> build process.

I finally used the source, and found I'm wrong about NFS3.2, which still
set the checksum=0.  In the NFS4.0 reference code, they follow the 4.3BSD
convention of obeying "udpcksum".  Poking around with `adb /vmunix` on a
vanilla Sun that says "SunOS Release 4.1-GFX-Rev.1 (GFXRev1)" finds the
horrifying fact that udp_cksum=0.  Thus, Sun appears to be disabling all
UDP checksums, not just NFS.  I hope someone from Sun will dispute this,
since I'd hate to have to tell everyone to sell their solar hardware and
buy flowers.***

> >				Ours do.  I'm told that Sun's does as
> >of the NFS 3.2 source release.
> 
> Since the socket library doesn't provide a way to enable or disable UDP
> checksums (I could be wrong -- I simply searched for "checksum" in the
> setsockopt man page), I don't see how the NFS source release can do this.

The NFS 3.2 source I meant was the kernel code received by NFS vendors who
pay maintenance or royalties to Sun.  It is in lib/libc/rpc/kdup_fastsend.c


Vernon Schryver,  vjs@sgi.com


*** Silicon Graphics has called our products "IRIS" for about as long as
  other machines have had solar labels.  That I feel compelled to append
  this says a lot about the validity of my claim about "common and current
  workstations."  Oh, well.

barmar@think.com (Barry Margolin) (02/12/91)

In article <84878@sgi.sgi.com> vjs@rhyolite.wpd.sgi.com (Vernon Schryver) writes:
>In article <1991Feb9.051623.29415@Think.COM>, barmar@think.com (Barry Margolin) writes:
>> Even worse, this one
>> parameter controls both whether checksums are generated during sending and
>> whether they are checked when receiving.
>Isn't this the right way to do it?  With a "single, system-wide parameter"
>controlling whether UDP is checksummed or not?

From p.78 of RFC1122:

   An application MAY optionally be able to control whether a UDP checksum
   will be generated, but it MUST default to checksumming on.

   If a UDP datagram is received with a checksum that is non-zero and
   invalid, UDP MUST silently discard the datagram.

4.2BSD-based UDP implementations violate both these requirements.  First,
it is supposed to be the application that decides whether it wants
checksumming; in BSD, either all applications get it or none do.  Second,
it is not permitted to disable checking of received packets.

>  We argued among ourselves
>years ago whether the NFS switch should be the same as the global UDP
>switch.

I wasn't only complaining about the fact that it affects all applications.
I was complaining about the fact that you can't disable generation of
checksums but still enable checking of checksums.  Thus, even though my
client does checksumming correctly, errors will still get through if the
server has them disabled.
--
Barry Margolin, Thinking Machines Corp.

barmar@think.com
{uunet,harvard}!think!barmar

vjs@rhyolite.wpd.sgi.com (Vernon Schryver) (02/13/91)

In article <1991Feb11.233102.24222@Think.COM>, barmar@think.com (Barry Margolin) writes:
> 
> From p.78 of RFC1122:
> 
>    An application MAY optionally be able to control whether a UDP checksum
>    will be generated, but it MUST default to checksumming on.
> 
>    If a UDP datagram is received with a checksum that is non-zero and
>    invalid, UDP MUST silently discard the datagram.
> 
> 4.2BSD-based UDP implementations violate both these requirements.  First,
> it is supposed to be the application that decides whether it wants
> checksumming; in BSD, either all applications get it or none do.  Second,
> it is not permitted to disable checking of received packets.


The important word in the first paragraph is "MAY".  1122 does not require
that an application be able to disable UDP checksumming.  4.3BSD does not
have such a switch, and does not violate 1122 by not having it.

As long as you don't break it by changing udpcksum, 4.3BSD does not violate
the second paragraph.

The fact that 4.3BSD has additional characteristics cannot rationally be
considered a violation of the standard.  If the characteristic of being
able to change to non-conforming behavior is sufficient to be non-standard,
then only ROM based systems can be standard, since there are always
bozos--err--valued customers who can, will, and do change things in ways
you and I consider obviously stupid and non-conforming.  Does the fact that
many people installed their own implementations of TCP/IP (often BSD
derived) on popular workstations by itself make those systems non-1122
compliant even when running the vendor supplied system?  If the answer to
that question were yes, then 1122 and 1123 would be uninteresting to
workstation vendors and our customers.

Please keep standards carping rational.  It appears that some common
workstations (not my employer's) violate the above quoted part of 1122.
Their "feet should be held to the fire".  You are putting out the flame
when you lump 4.3BSD checksumming behavior with theirs.


(I'm assuming you mean 4.3BSD base UDP implementations, which follow the
rules you criticize, not 4.2 BSD.)


Vernon Schryver,   vjs@sgi.com

barmar@think.com (Barry Margolin) (02/13/91)

In article <85079@sgi.sgi.com> vjs@rhyolite.wpd.sgi.com (Vernon Schryver) writes:
>> 4.2BSD-based UDP implementations violate both these requirements.
>(I'm assuming you mean 4.3BSD base UDP implementations, which follow the
>rules you criticize, not 4.2 BSD.)

No, I meant 4.2BSD, since that is the release whose default value of
udpcksum is wrong.  Since the latest release of SunOS has this default
wrong, I assumed it is 4.2-based (but perhaps they changed the default in
the process of porting 4.3 TCP/IP, due to another of their misguided ideas
about backward-compatibility (the same misguidedness that causes them to
continue to default the broadcast address wrong)).  I'm not sure what the
latest Ultrix does, but I think 3.5 had the wrong default.  These are the
only BSD-based systems I have access to (we've got an SGI box, but it won't
let me login because it doesn't mount my home directory (I've never before
used a Unix system that didn't say something like "can't access home
directory, using /").
--
Barry Margolin, Thinking Machines Corp.

barmar@think.com
{uunet,harvard}!think!barmar

guy@auspex.auspex.com (Guy Harris) (02/14/91)

>Since the latest release of SunOS has this default wrong, I assumed it
>is 4.2-based (but perhaps they changed the default in the process of
>porting 4.3 TCP/IP,

They did change the default; SunOS 4.0's networking is somewhere between
4.3BSD and 4.3-tahoe based, and 4.1's networking is closer to tahoe.

lars@spectrum.CMC.COM (Lars Poulsen) (02/14/91)

In article <1991Feb6.172144.12605@nmt.edu> Ruth Milner
   <nraoaoc@nmt.edu> (NRAO Array Operations Center) writes:
>Where can I get some good documentation on SLIP? I have RFC1055, but it does
>not state which of the actual protocols it uses (presumably because it can use
>more than one). Now, I thought it used UDP in most implementations, and I'm 
>trying to convince someone that he's not getting much, if any, error correction
>on his SLIP connections, but he wants actual written proof. He thinks it's 
>using TCP (as in "TCP/IP"), the same as Internet connections on Ethernet links.
>I can't remember where I read (ages ago) that SLIP (generally) uses UDP; is 
>there such a beast?

SLIP sits *UNDER* IP, and will carry any and all IP traffic that the
router sends to the SLIP interface.

The user executes the FTP client program. The FTP specification
(RFC-959) will tell you that FTP uses two simultaneous TCP connections
to do the work. It is possible to use a UDP based protocol to transfer
files. Two examples of UDP based file transfer protocols are TFTP (RFC-783)
and NFS.

Be aware, however, that the error detection capabilites of SLIP are
somewhat weaker than those of Ethernet (or HDLC).

-- 
/ Lars Poulsen, SMTS Software Engineer
  CMC Rockwell  lars@CMC.COM