From owner-freebsd-hackers Wed Mar 25 10:17:02 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id KAA00278 for freebsd-hackers-outgoing; Wed, 25 Mar 1998 10:17:02 -0800 (PST) (envelope-from owner-freebsd-hackers@FreeBSD.ORG) Received: from phoenix.its.rpi.edu (dec@phoenix.its.rpi.edu [128.113.161.45]) by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id KAA00251 for ; Wed, 25 Mar 1998 10:16:53 -0800 (PST) (envelope-from dec@phoenix.its.rpi.edu) Received: from localhost (dec@localhost) by phoenix.its.rpi.edu (8.8.8/8.8.7) with SMTP id NAA20576; Wed, 25 Mar 1998 13:16:43 -0500 (EST) (envelope-from dec@phoenix.its.rpi.edu) Date: Wed, 25 Mar 1998 13:16:43 -0500 (EST) From: "David E. Cross" To: "Ron G. Minnich" cc: freebsd-hackers@FreeBSD.ORG Subject: Re: ARP REQUEST question In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-freebsd-hackers@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG On Wed, 25 Mar 1998, Ron G. Minnich wrote: > On Wed, 25 Mar 1998, Niall Smart wrote: > > The "ascent" and "descent" through the protocol stacks, e.g., the > > demultiplexing of an ethernet packet to IP to TCP, is done entirely in > > software (or "reliable" hardware). Any corruption here is due to bugs > > in the networking code which should be eliminated. The reason IP has > > checksum field is that it cannot rely on the underlying network, be it > > ethernet, token ring or a VPN, to reliably deliver the data. That is > > the raison d'etre of TCP/IP. > > I don't think that is the whole story. Checksums or CRCs should be > end-to-end. We've learned that the hard way often enough. Ethernet CRCs > are not end-to-end. It's not an issue of reliable delivery. It's an issue > of being able to detect data corruption. That's why udp checksums are > always left turned on for NFS in so many sites. > > Niall is right that corruption "should not" happen. The real question is > whether it does (and it does). So you need some sort of end-to-end > checking. > > The first time I saw this was a router with an undetected memory error. > Of course, it was in high memory, and of course, only occasionally did > packets get tromped, since high memory was only used heavily under heavy > offered load. Turning UDP checksums on for NFS would catch the problem, > when there was enough load. > I see what you are saying with corrupted packets being introduced by a flaky ethernet card, but keep in mind that true 'end to end' detection and reliability is not possible, if you have a bad memory circut, in the place wher you are building the packet in the kernel, you are going to get a bogus packet no matter what, since you will compute the checksum on the corrupted packet. It is also of note how laughable the Internet checksums are, they are 16 bit modulo 2^16 checksums, they are NOT CRCs... a simple byte swap can confuse them, or inserting 0s into the stream. They are not 'reliable' in any real sense of the word anyway. I do not have the statistics in front of me, but it is many orders of magnitude more like for something to slip through a simple checksum, than it is for CRC. Finally, if you have an ethernet card that munging packets (especially ARP packets), I doubt the netowkr on that computer will work at all; very directly pointing the finger that something is wrong. PS: Is anyone here in a position to rewrite the ARP RFC? -- David Cross UNIX Systems Administrator GE Corporate R&D To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message