nelson@sun.soe.clarkson.edu (Russ Nelson) (03/25/88)
What's going on with the SLIP working group that started up at the last interoperability conference? Has anyone come up with anything better than Russ Hobby's ASLIP? Can we get a status report from someone?
n2dsy@hou2d.UUCP (G.BEATTIE) (03/29/88)
Summary: Alternatives to ASLIP, SLIP, KISS, et al... let add in some reliability and universality to solving the problem. References: <625@sun.soe.clarkson.edu> I remember seeing some articles here on the net regarding the use of these somewhat homegrown solutions to the problem of packet data transmission (your choice of protocol suite) over an asynchronous link. As part of the work that our non-profit Amateur Radio group (the Radio Amateur Telecommunications Society) is doing on OSI protocols we have developed a package for transmitting generic HDLC frames over an asynchronous interface. This package is based on the Asynchronous Framing Technique that was published by Toby Nixon from D. C. Hayes. This proposal has been well received in various ISO workgroups and basically offers a couple of reasonable variations. The first is basic framing, transparency, and error checking. This mode uses two characters for special purposes. The framing character (7EH) and the escape character (7DH) are all that require special handling. In the normal data flow you prefix a 5EH (corresponding to a 7EH) or a 5DH (corresponding to a 7DH) with a 7DH. The appearance of a 7EH uniquely signals a frame start or end. This mode also contains a feature not found in SLIP (and I believe ASLIP): ERROR CHECKING. There is a check calculation (I forget what type) on every frame. The second mode adds the X-ON and X-OFF characters to the list of characters transmitted transparently. The third adds in most control characters. There are several other options like 7-bit character transparency and packet forwarding characters which can be added AFTER the flag to force the packet to be forwarded. In any case, our software was written by John Howell, N2FVN and includes source code, source for some MS-DOS drivers and test programmes, binaries for everything for MS-DOS and a lot of GOOD documentation. I will post this code to the net in a few days. It will be posted in the same sequence as the RATS Open Systems Environment (ROSE, formerly COSI) software to the comp.sources.misc and comp.sources.ibmpc newsgroups. I will also post an announcement here for those who need to be signalled to the availability of the software. Thanks, J. Gordon Beattie, Jr. E-mail: ihnp4!hou2d!n2dsy (Unix) n2dsy@kd6th.a3100201.ampr Telephone: 201-615-4168 (Office) 201-615-4669 (Office FAX) Telephone: 201-387-8896 (Home)
ddp+@ANDREW.CMU.EDU (Drew Daniel Perkins) (03/30/88)
I have a couple of RFC's partially completed. One RFC deals specifically with the framing protocol on async serial lines, called the "Asynchronous Framing Protocol (AFP)". It is basically the same as Rick Adams' defacto standard but includes a type field, a 16-bit crc, and a strong suggestion to transmit an extra FRAME_END character at the beginning of a non-back-to-back packet. Another RFC defines the "Point-to-Point Protocol (PPP)" which allows option negotiations over point-to-point links. It is written in the telnet spirit and allows future extensions to be easily incorporated. Other RFC's will handle IP address negotiation (via a PPP option) as well as some simple compression schemes. I'm currently implementing PPP on 4.3 in order to find problems before they're cast in stone. I should be finished real soon now. Drew
rick@SEISMO.CSS.GOV (Rick Adams) (03/30/88)
I still maintain that in the real world, there is no need for a checksum with packet transmission. IP and TCP do it fine. This is based on 4 years experience with 8 "real world" SLIP installations including leased lines from Washington, DC to Amsterdam, San Diego, Albany, and a few "local" sites < 50 miles away. Current modem technology is such that the connection is already virtually error free. The same can be said of dialup modems if you don't buy the cheapest junk you can get. (I.e. if you're cheap buy something with MNP error correction. If you want something to work great, spend the $1000 on a Trailblazer.) The biggest virtue of "my" SLIP is that it is so trivial to implement. A big part of that reason is that it makes TCP/IP do the retransmission & error detection. Complicated protocols won't catch on no matter how nice they look on paper. (E.g. a previous RFC on Async protocols for serial lines that was never implemented (or at least widely implemented.) Does anyone REALLY have proof that it is necessary to complicate the protocol? Or is it just an obsession with what is theoretically required. Often practical engineering confounds theoretical science. --rick
ddp+@ANDREW.CMU.EDU (Drew Daniel Perkins) (03/30/88)
> I still maintain that in the real world, there is no need for > a checksum with packet transmission. IP and TCP do it fine. > Does anyone REALLY have proof that it is necessary to complicate the> > protocol? The unfortunate proof is in UDP. Adding a CRC (not a checksum!) is a necessary result of some vendors (read SUN) reluctance to use checksums. The UDP spec unfortunately allows this. Although most people disagree with this decision (not to checksum UDP), we decided to add the CRC to SLIP so that you have a lower chance of getting burned if you are following the spec. Calculating and sending the CRC really isn't a big deal. Depending on the implementation, the CRC calculation can be done incrementally with each character received thereby amortizing the cost over each character. Combined with table driven crc calculations, the cost is very low. It can also be argued that the time to send the crc is not a big deal if you use even crude compression schemes. I intend to document simple header compression schemes (similar to Noel's scheme) and probably some simple forms of run-length encoding for the data. > The biggest virtue of "my" SLIP is that it is so trivial to implement. > A big part of that reason is that it makes TCP/IP do the > retransmission & error detection. We are not making SLIP non-trivial. We are still counting of TCP/IP to do the retransmissions (error correction). We are only making it do error detection which is *much* simpler. It is not going to be anything like TCP or LAPB as was suggested by previous RFC's. Drew
rick@SEISMO.CSS.GOV (Rick Adams) (03/30/88)
Again, you haven't said that the actual line is bad enough that you have to worry about it. You've said that you think you need another checksum because some vendors stupidly doesn't use it. Do you have actual data showing the CRC16 is needed? Is so (or if not), why is a CRC16 strong enough and a "better checksum" not needed. No "feelings" or "guesses" need apply. Turning off the UDP checksums for performance reasons is VULGAR. It's really an admission that your vendor's engineering is either incapable or unwilling to fix the fundamental problem. (Besides, if you are running NFS over a 9.6 kbps line, the overhead of the UDP checksums is the least of your performance concerns.) Claiming that a low level protocol is broken because you are using lobotomized higher lever protocols is no solution. Fix the problem! Don't kludge around it! ---rick
Mills@UDEL.EDU (03/31/88)
Rick, I second your motion. I've been running fuzzballs with raw IP over everything from noisy leased lines to transcontinental dial-up circuits since 1978 with no problems. I ran my home fuzzball over a 1200-bps 15-mile dial-up circuit for five years and then a 4800-bps leased circuit for four years in raw IP. Those instances when the 24-hour dial-up circuit would drop, maybe once every month or so, plus the number of packets dropped due congestion, timeout and similar causes, easily outnumbered the number dropped due checksum errors. Yes, there is some chance that a few error bits did survive somewhere in the many megabytes of data transferred over that nine-year period, but I strongly suspect most of them were due to causes other than checksum errors. Having said that, I still would not recommend running raw IP between heavy- hitting nodes like backbone switches or gateways. The NSFNET Backbone fuzzies use DDCMP links with CRC checking and they do find significant numbers of errors sometimes on marginal trunks. I would be a little uneasy if the IP and/or TCP checksums were the only protection. However, I am completely comfortable without CRC protection on single-user PCs and workstations and would be even more comfortable if the drat Backfuzz links did NOT use retransmission (DDCMP interface retransmissions are done in hardware and cannot be disabled). Dave
bzs@BU-CS.BU.EDU (Barry Shein) (03/31/88)
>The unfortunate proof is in UDP. Adding a CRC (not a checksum!) is a necessary >result of some vendors (read SUN) reluctance to use checksums. The UDP spec >unfortunately allows this. Although most people disagree with this decision >(not to checksum UDP), we decided to add the CRC to SLIP so that you have a >lower chance of getting burned if you are following the spec. I've always thought that the optional checksum in UDP was a feature, if I choose not to use the UDP checksum I may have some good reasons (eg. I might be sending an ECC with each packet to avoid retransmission on every error.) This defeats this and would force someone to, well, even sending IP won't help, they'd have to re-write the SLIP, bother. It's straightforward to turn on UDP checksumming on a Sun, at worst you can fault them for not making it easier: % adb -w -k /vmunix /dev/mem udpcksum?W 1 $q % That could be put into a command script trivially enough. I think putting a CRC into SLIP is a rather odd way to disagree with Sun's design decision (which might still be wrong, that's irrelevant is my point.) Add that to Rick's experiences that IP and TCP seem to do the job well enough at that level, that UDP checksumming is trivial to turn on in Unix and the fact that modems which will do end to end checksumming are so common and inexpensive and we have an odd situation, let's calculate a checksum 3 or 4 times as we route all data? Seems like over-engineering, at least until someone can come up with better reasoning than doing it because the user may have turned it (left it) off at a higher layer. The user may have *wanted* it off. I'll anticipate the argument that the system admin who manages the file server may have turned it off and is out of the user's control. How is this putative user getting SLIP supported and NFS connections allowed if they have no influence with the sysadmin? Is the protocol spec the correct place to try to workaround bad personal relationships between users' and their sysadmins? &c. Of course, the real issue of simplicity of implementation has to be factored in also, as Rick points out, in the end that's a critical decision point. -Barry Shein, Boston University
jonab@CAM.UNISYS.COM (Jonathan P. Biggar) (03/31/88)
Why don't we make the new versions of SLIP upwards compatible? Add a negotiation feature to SLIP that will be ignored by the current implementations (such as a packet shorter that the minimum IP header size), and then negotiate the use of such things as checksum, CRC, header compression, etc. Everything can just default to the current SLIP usage. Jon Biggar jonab@cam.unisys.com
karn@thumper.bellcore.com (Phil R. Karn) (03/31/88)
The framing technique you describe is EXACTLY the same as SLIP, with one important difference -- the specific values of the "escape" and "frame end" characters are different. Why? Is gratuitous incompatibility with de-facto standards a prerequisite for ISO approval? I distinguish between the framing technique used by SLIP and the format of the information carried in a frame. There's nothing about SLIP framing that says you can't add a link-level CRC or checksum if you wish. It just hasn't been necessary, as there are already checksums at the IP and TCP layers. The error rate of a typical dialup link (if it works at all) is low enough that the extra software processing required to recompute a checksum over an entire packet at each hop is hard to justify. I keep a nailed-up 9600 bps V.32 modem link between work and home. In the 6 days since it was last rebooted, my machine at home has received 13,186 packets over the serial link. Of these, however, only 6 had IP header checksum errors and 8 contained TCP header checksum errors. I have also used SLIP heavily elsewhere, but I have NEVER seen a file corrupted by the failure of the TCP checksum to catch an error. The propensity of the ISORMites to reinvent the wheel (with seemingly deliberately incompatible lug-nut threads) never ceases to amaze me. Considering the popularity of SLIP, your time would be much better spent making incremental, desirable improvements (e.g., logins and passwords for switched environments) instead of devising totally new and gratuitously different protocols to do what is already being done. Phil
rick@SEISMO.CSS.GOV (Rick Adams) (03/31/88)
If you are going to add multiple protocol support to SLIP, please do it in the following manner. The first byte following a FRAME_END is the protocol type byte. If the byte is 0x40 - 0x4F the packet is considered to be an IP packet and the protocol type byte IS INCLUDED as part of the packet. (Astute observers will realize that this is an IP Version Number of 4 combined with all of the possible IP header lengths.) Otherwise, the protocol type byte selects a protocol family from the following table (stolen from socket.h on 4.3BSD) and the protocol type byte IS NOT INCLUDED as part of the packet. This will allow "old" SLIP implementations to talk to your new system without modification. It also provides all of the functionality you might need. If you feel that you MUST have error detection, error correction, header compression, or even encryption, please define a new address family number and add it to the table. That way those who feel it is not necessary will not be burdend with it and everyone is happy. It should be very easy to implement. I'd do it, but I have no need for multiple protocols. ---rick /* * Address families. */ #define AF_UNSPEC 0 /* unspecified */ #define AF_UNIX 1 /* local to host (pipes, portals) */ #define AF_INET 2 /* internetwork: UDP, TCP, etc. */ #define AF_IMPLINK 3 /* arpanet imp addresses */ #define AF_PUP 4 /* pup protocols: e.g. BSP */ #define AF_CHAOS 5 /* mit CHAOS protocols */ #define AF_NS 6 /* XEROX NS protocols */ #define AF_NBS 7 /* nbs protocols */ #define AF_ECMA 8 /* european computer manufacturers */ #define AF_DATAKIT 9 /* datakit protocols */ #define AF_CCITT 10 /* CCITT protocols, X.25 etc */ #define AF_SNA 11 /* IBM SNA */ #define AF_DECnet 12 /* DECnet */ #define AF_DLI 13 /* Direct data link interface */ #define AF_LAT 14 /* LAT */ #define AF_HYLINK 15 /* NSC Hyperchannel */ #define AF_APPLETALK 16 /* Apple Talk */
steve@cs.umd.EDU (Steven D. Miller) (03/31/88)
As of the last time I looked (SunOS 3.2), you can't turn UDP checksums on for NFS packets. A code path that is completely separate from the "normal" UDP and IP output code paths is being taken. Has this changed since 3.2 came out? How many NFS licensees are also not using checksums here? I still agree with Rick, though; why stuff additional checksumming into SLIP because of one vendor's code? NFS at SLIP speeds is likely to be too painful to contemplate seriously, anyway. Maybe Sun could add a "cksum" mount option if they're still reluctant to run with checksums on UDP/RPC/NFS packets in general? I fear I'm getting off the subject, though... -Steve
DCP@QUABBIN.SCRC.SYMBOLICS.COM (David C. Plummer) (03/31/88)
Date: Wed, 30 Mar 88 17:59:24 EST From: rick@seismo.CSS.GOV (Rick Adams) If the byte is 0x40 - 0x4F the packet is considered to be an IP packet and the protocol type byte IS INCLUDED as part of the packet. (Astute observers will realize that this is an IP Version Number of 4 combined with all of the possible IP header lengths.) Modular programmers and people who program generically will realize this is a Rube Goldberg mentality and will barf.
louie@TRANTOR.UMD.EDU ("Louis A. Mamakos") (03/31/88)
Just to add fuel to the fire.. The NFS implementation under Ultrix (DEC's UNIX product) does in fact use UDP checksums. Works just fine. The intent of the CRC on the SLIP frame wasn't exclusively to support SUN NFS, although it was a large motivating factor. Once we thought about it, it seemed to be a good idea to be able to drop a frame which has been trashed in transit. This way you wouldn't be forwarding a broken frame across multiple (probably slow) SLIP links. There was no intention of having SLIP retransmit or attempt to recover broken frames. louie
bzs@BU-CS.BU.EDU (Barry Shein) (04/01/88)
Hm, perhaps I was wrong about modifying udpcksum enabling it for NFS. As far as NFS over a serial line I tried it one evening over our 9.6Kb Cypress line between BU and UCB. It really wasn't bad, NFS is not a particularly high overhead protocol, the info being exchanged is fairly similar to what gets exchanged in an FTP session (DIR,GET,PUT etc.) Of course this disregards transmission problems which I didn't seem to have that evening, the question was thruput. It's probably an intuitive confusion that because NFS is so useful and neat that it must therefore demand massive bandwidth (or perhaps people are mixing the thought with ND, the diskless protocol?) Doubtless you'd want your binaries local but as a very easy to use "ftp" (eg. snooping around directories, copying stuff, file management) it's really not bad on a relatively slow line in my experience, perhaps a little slower than FTP but being able to use the native OS interface to the remote file system can make it worthwhile. Note that there are various timeout parameters etc that would need to be tuned (can be set on a per mount basis) for smooth performance, but the concept is not nearly as wild as seems to be presented here. -Barry Shein, Boston University
n2dsy@hou2d.UUCP (G.BEATTIE) (04/01/88)
POINT 1 It has been suggested that the differences between SLIP and AFT are limited to the "gratuitous" alteration of the transparency and framing characters. This is hardly the case...the additional features of AFT are three levels of charater transparency, seven-bit transparency and prefix and suffix characters outside the frame to manipulate any intervening devices such as modems, PADs, etc. POINT 2 It has been suggested that these extra features are not prohibited by SLIP. We agree, they are not. Unfortunately, these additional features have not been uniformly outlined in SLIP. This may cause the evolution of several systems using SLIP which will each have different way of handing the variations of transparency found in asynchronous environments. AFT DOES standardize these conditions and I suggest that maybe SLIP should be altered to handle them too. POINT 3 It has been suggested that this is a divisive issue wrought by the ISO folks to further separate the DoD Internet and OSI commmunities. On this point I wholehartedly disagree. In fact, the problem is identical for both groups and should help unite them. The OSI model is not an issue here, the aysnchronous interface and transparency through that interface is. POINT 4 It has been suggested that the number of errors encountered on an Asynchronous Link is minimal, therefore some error checking is not required on the link and that error recovery can be accomplished on an end-to-end basis. If I was experiencing a low residual error rate, then I would agree. The fact is I am not. Every dial-up link I have outside of my local area, but within my LATA is noisy. If your requirements are less, so be it, but I would like the have the local loop tend to it's own housekeeping and not send errored frames on through the network and force end-to-end recovery. POINT 5 Anyone want to work on the convergence of these protocols into a common solution ? Please let me know and we can get started. Thanks, J. Gordon Beattie, Jr. E-mail: ihnp4!hou2d!n2dsy (Unix) n2dsy@kd6th.a3100201.ampr Telephone: 201-615-4168 (Office) 201-615-4669 (Office FAX) Telephone: 201-387-8896 (Home)
rick@SEISMO.CSS.GOV (Rick Adams) (04/01/88)
Modular programmers and people who program generically will realize this is a Rube Goldberg mentality and will barf. Modular programers will someday give us the full OSI protocol suite (whenever they finish it). They also don't care about backwards compatibility. (I'd also say that they probably program in PASCAL, but that would be name calling.) "Real" programmers have to solve today's problems today. They try to avoid screwing up existing systems when it is possible. They try to avoid violating layers, but if there is no other way to make it work, they do so. --rick (Formally trained as a modular "computer scientist", but corrupted into a practical "engineer" by working in the real world.)
DCP@QUABBIN.SCRC.SYMBOLICS.COM (David C. Plummer) (04/01/88)
Date: Thu, 31 Mar 88 12:42:09 EST From: rick@seismo.CSS.GOV (Rick Adams) --rick (Formally trained as a modular "computer scientist", but corrupted into a practical "engineer" by working in the real world.) I've also been "corrupted" into being a "practical" engineer too, by the School of Hard Knocks. What I've found are that quick and dirty expedient bit-saving hacks (a) last much longer than you expect them to, and (b) turn into massive, MASSIVE maintenance headaches, especially when some other bright engineer decides an extension is needed. If you still disagree, I guess it's a religious argument and we might as well stop.
pritch@tut.cis.ohio-state.edu (Norm Pritchett) (04/01/88)
In article <1016@thumper.bellcore.com> karn@thumper.bellcore.com (Phil R. Karn) writes: >The framing technique you describe is EXACTLY the same as SLIP, with one >important difference -- the specific values of the "escape" and "frame >end" characters are different. Why? Is gratuitous incompatibility with >de-facto standards a prerequisite for ISO approval? For some time I've observed that phenomena and wondered the same thing. Then I attended A DECUS symposium session where DEC's representative to ANSI and ISO touched upon the subject and confirmed it is in fact true. He said the purpose of these committees is to produce a solution that makes technical sense AND places all parties involved at equal DISadvantage, this concept making more sense in a commercial environment. As a possible scenario, suppose a major vendor comes up with a neat solution to something. They development it and afterwords everyone (or if the vendor is big enough, they themselves) think it is great and submit it to a standards committee. Now, the standards committee thinks its great but some of the representatives are concerned because if the committee just puts the big rubber stamp on it then the submitting vendor is way ahead of the game because he already has the product making use of the standard developed or maybe even on the market. That vendor is now has a greater advantage over everyone else and some might consider it unfair. Making little "cosmetic" changes to the standard works towards evening out the work involved for everybody to implement the standard. In place of vendors, the standards organizations of a nation might be substituted in the case where a standard from one of them is being submitted to an internation standards organization. -- Norm Pritchett, The Ohio State University College of Engineering ARPA: pritchett@eng.ohio-state.edu BITNET: TS1703 at OHSTVMA UUCP: cbosgd!tut.cis.ohio-state.edu!pritch
egisin@watmath.waterloo.edu (Eric Gisin) (04/01/88)
In article <1016@thumper.bellcore.com>, karn@thumper.bellcore.com (Phil R. Karn) writes: [] > the IP and TCP layers. The error rate of a typical dialup link (if it > works at all) is low enough that the extra software processing required > to recompute a checksum over an entire packet at each hop is hard to > justify. I keep a nailed-up 9600 bps V.32 modem link between work and > home. In the 6 days since it was last rebooted, my machine at home has > received 13,186 packets over the serial link. Of these, however, only 6 > had IP header checksum errors and 8 contained TCP header checksum The overhead of a asyncronous link level checksum or CRC is very small. On an 8MHz 68000, Fletcher's checksum takes about 3 usec per byte, and CRC-16 takes about 8 usec per byte. This amounts to less than 1% overhead at 9600 baud, which is less than overhead of the asyncronous device driver (much less in the case of dumb asyncronous devices). Both of these are better than the 16 bit ones-complement checksum TCP/IP uses. Your example error rate is 1/1000 (high relative to LAN technologies), and I wouldn't trust only TCP/IP checksum to detect errors.
karn@thumper.bellcore.com (Phil R. Karn) (04/01/88)
> ... it is in fact true. He said the purpose of these committees is to > produce a solution that makes technical sense AND places all parties > involved at equal DISadvantage, this concept making more sense in a > commercial environment.... Thank you. I couldn't have asked for a more damning indictment of the international standards process. Someday, perhaps there'll be a protocol standards organization controlled completely by users. Realizing the importance of the process, they will each invest sufficient time and money so that they can be thoroughly versed with the technical issues. However, anyone associated with a commercial vendor of products controlled by the standards in question would be automatically disqualified from membership. I can dream, can't I? Phil
karn@thumper.bellcore.com (Phil R. Karn) (04/01/88)
Dave, We agree. Error detection and correction on an end-to-end basis is essential for most data applications. Doing it at the link level as well is almost always redundant and can only be justified as a performance enhancement under rare circumstances. If you're running a "heavy" backbone link you've probably already spent the money to run synchronous HDLC framing, since this shaves off 2 bits of overhead per byte sent. In this case I don't really object to simple link error detection (without retransmission) mainly because it comes "for free" in the HDLC chips, not because it's really necessary. But full ARQ protocols like LAPB at the link layer are a waste of bandwidth and cycles. Our ARPANET gateway is probably as active as any. It speaks 1822/HDH/LAPB over a 56kbps line to Columbia. Timers, RRs, keepalive polling at both the HDH and LAPB layers, the whole bit. In the 28+ hours since it was last booted, it received 4.3 million HDLC frames from the IMP. Only 48.7% contained IP datagrams; the rest were overhead frames. (The number of CRC errors on input frames was ZERO). Of the 6.3 million packets sent, a mere 33.3% were IP datagrams. This is silly. The only time LAPB tries to do recovery is when the link has been cut somewhere. It can retransmit all it wants, but it won't get anywhere until I call up AT&T and complain. DDS circuits either work perfectly or not at all. Fortunately, we've got plenty of excess link bandwidth and the CPU in the dedicated Sun gateway has nothing else to do anyway, so all of this is merely amusing and not a real problem. (I can only thank the Deities that we don't have to run X.25!) But as links and switches get faster, even the link overhead in HDH has got to go. Mr. Beattie really ought to read the classic paper by Saltzer, Reed and Clark, "End-to-End Arguments in System Design". Phil
rpw3@amdcad.AMD.COM (Rob Warnock) (04/01/88)
Uh... there is a good reason why you might not be ABLE to turn UDP checksumming on, and thus would want some sort of (simple) CRC on your SLIP line. There was a bug in some (all?) 4.2 BSD systems which calculated the UDP checksum wrong (but consistently, for talking to other 4.2's), and 4.3 fixed it. So 4.3 can now talk to non-BSD systems which checksum the right way. However, if you still happen to have some "old" 4.2 systems on your net, and if they happen to be binary-only systems (i.e., the kernel and/or the net code is supplied by a 3rd-party vendor who may or may not still be in business), you may have to turn off checksumming to be able to talk UDP to them. (A client of mine has that problem.) Since UDP checksum "on/off" is a per-host function and not per "connection" (at least in 4.3), it's hard (without delving into the net code) to get UDP cheksums on SLIP lines and not on the Ethernet. So a simple CRC on the SLIP lines might be in order after all... By the way, computing the standard Ethernet CRC-32 only takes a couple of XOR's and a table lookup per byte (and the table is only 256 32-bit words). The C code for the inner loop is: while (len-- > 0) sum = (sum >> 8) ^ CRC32_table[ (sum & 0xFF) ^ *cp++ ]; The overhead is thus tolerable on a serial line, even on micros, and there is no reason not to do it (except compatibility with earlier SLIP's). My own preference would be to extend the SLIP frame to include a full Ethernet header, use the standard Ethernet numbers, type field, and CRC-32. (Let's call it SLEN, for Serial Line EtherNet, to distinguish it from SLIP.) The advantage of a SLEN is that you get ARP, RARP, XNS, DECnet (*ugh*), and whatever else, besides IP. And you don't have to worry about lack of UDP checksums. (Of course, you now have to apply some clever flow control to Ethernet broadcast packets... ;-} ;-} ) Note that Xerox already defined a "SLEN" for SDLC links. See "Level 0 Point-to-Point Protocol Spec T33-2.0", XSIPS 018201, January 1982 [~6 pages]. It includes some hooks for managing half-duplex lines (might be helpful for some modems?) in a low-level "link command", which also provided for controlled termination of dialup connections. Note that their protocol left off the Ethernet destination number, but kept the source (for authentication?); the type field was cut to 4 bits (*ugh*), and the CRC was a modified CRC-16. Still, it's almost usable as it stands, if we could grab a couple of types for ARP & IP (or go back to 16 bits?), and change the SDLC framing to SLIP-like async (and maybe go back to CRC-32?). Rob Warnock Systems Architecture Consultant UUCP: {amdcad,fortune,sun,attmail}!redwood!rpw3 ATTmail: !rpw3 DDD: (415)572-2607 USPS: 627 26th Ave, San Mateo, CA 94403
bukys@cs.rochester.edu (Liudvikas Bukys) (04/01/88)
One should either leave SLIP alone (it works as it is), or re-do it altogether, addressing some of the most severe problems while you're at it. For instance, someone at UDEL (Dave Farber & et al) noted that header bytes are mostly predictable, and devised a faster (less wasteful) serial-line protocol for slower lines. If a SLIP working group emerges, *that* is the direction it should take off in. If you're going to have a new protocol, it might as well be better, not just different!
nelson@sun.soe.clarkson.edu (Russ Nelson) (04/01/88)
In article <8803302037.AA02493@PHOEBE.CAM.UNISYS.COM> jonab@CAM.UNISYS.COM (Jonathan P. Biggar) writes: >Why don't we make the new versions of SLIP upwards compatible? ... >Add a negotiation feature to SLIP ... >Everything can just default to the current SLIP usage. That's a good idea. Being that today's April 1, I'll just point out that the negotiation packet(s) could have a checksum, CRC, or go bare. By the way, I wasn't looking to start a public discussion. I thought, since all discussion of SLIP had vanished from tcp-ip, that people were working on it in the background. Obviously this is not the case. As for me, I'm convinced that a CRC is both necessary and sufficient and Efficient. -- -russ AT&T: (315)268-6591 BITNET: NELSON@CLUTX Internet: nelson@clutx.clarkson.edu GEnie: BH01 Compu$erve: 70441,205
budden@tetra.NOSC.MIL (Rex A. Buddenberg) (04/02/88)
In article <9312@tut.cis.ohio-state.edu> pritch@tut.cis.ohio-state.edu (Norm Pritchett) writes: [...] >representative to ANSI and ISO touched upon the subject and confirmed >it is in fact true. He said the purpose of these committees is to >produce a solution that makes technical sense AND places all parties >involved at equal DISadvantage, this concept making more sense in a ^^^ Is this why ISO uses the acronym for Draft International Standard? :-) b
melohn@SUN.COM (Bill Melohn) (04/03/88)
Error detection should be implemented as close to the potential source of the error as possible. In a IP link from my home PC to my workstation, there might be 5 hops, 4 of which are over various LANs and gateways all using CRCs and 1 SLIP on a lossy voice grade phone line with no error detection. With an end-to-end checksum, all of these links are treated equally, and as a result, packets which get mangled on my phone line are passed in mangled form throughout my reliable but heavily loaded internet only to be thrown away at the destination because of a bad checksum. Worse, because this checksum has to be calculated and compared, it uses cycles on the CPUs at both ends. Even worse is that fact that in 4bsd this is a host wide option, so if I have a single SLIP based client of my NFS fileserver and I want him to get checksummed packets, I have to checksum packets for all Ethernet only local users as well, users who are more likely to be concerned with speed and not with data corruption on the Ethernet. It seems to me that the sooner I can detect that a packet has been corrupted, the sooner I should throw it away and initiate a retransmission of the data, minimizing both the end-system CPU and the total network bandwidth spent. CRCs are commonly implemented in hardware on Ethernet, in various syncronous serial chips, and on many modems. Why not in SLIP framing as well? End-to-End checksums certainly have their place, but depending on them alone to catch data errors on a variety of media in a complex internet wastes both net bandwidth and host CPU.
ddp+@ANDREW.CMU.EDU (Drew Daniel Perkins) (04/05/88)
> *Excerpts from: 30-Mar-88 Re: SLIP working group? Rick Adams@seismo.CSS.GO* > *(1929)* > If you are going to add multiple protocol support to SLIP, please do it > in the following manner. > The first byte following a FRAME_END is the protocol type byte. > If the byte is 0x40 - 0x4F the packet is considered to be an IP packet > and the protocol type byte IS INCLUDED as part of the packet. I'd originally planned on doing it exactly that way. Quite a few people I talked to thought that it wasn't worth it so I dropped the idea. Maybe I should take another look at it. There is one small problem with it which makes it slightly restrictive. Just being able to receive old-style packets doesn't make you backward-compatible. You have to transmit them also. To do that you probably need to keep some state about whether or not you have received old-style packets. If the first packet you receive is an old-style packet then set some flag. If later you disconnect or receive a packet with a type field (first byte something other than 0x4x) then reset the flag. However, this assumes that the first host to transmit packets is the old host. What if it is the other way around? What if you send a packet with a type field to a host which doesn't understand them? The receiving end won't understand them and will hopefully drop them on the floor because the IP checksum was not valid (which suggests that type 0 and 0xff should not be used!) or maybe because the IP header is not version 4 (which won't be true in the suggested scheme). However since the packet is dropped, it won't elicit a response which will cause the transmitter to continue transmitting new-style packets unless we add some other hacks like counting transmitted packets and switching modes after N packets if we don't receive any. In the simple case where we are using slip to link pc's and gateways this might not be a problem. The gateways will likely be the first to change (smaller numbers) and the pc's will follow (or maybe not). However we are shooting for wider use of slip than this simple application. Supporting gateway-gateway connections is a definite goal. Comments? Drew
swb@DEVVAX.TN.CORNELL.EDU (Scott Brim) (04/05/88)
Drew, consider version negotiation. The EGP3 crowd worked out a wonderful system for it. I can't remember if it was going to be its own RFC, or if it's included in the EGP3 document (or both). Scott
rminnich@udel.EDU (Ron Minnich) (04/06/88)
In article <8803311257.AA16410@mome.cs.umd.edu> steve@cs.umd.EDU (Steven D. Miller) writes: >As of the last time I looked (SunOS 3.2), you can't turn UDP checksums on >for NFS packets. A code path that is completely separate from the "normal" >UDP and IP output code paths is being taken. Has this changed since 3.2 >came out? How many NFS licensees are also not using checksums here? I got an interesting perspective on this from Sequent. Udel just got a 10-processor Balance system, with NFS. NFS did not come with it, though, as shipments of NFS had been halted. The reason, according to support people at Sequent, is that undetected errors were making their way through their enet hardware, undetected because checksums were turned off on NFS. The fix was to isolate the patterns and tighten up their enet hardware. The fix was hard because it was something like 10 patterns that occurred VERY infrequently. I am told that NFS is shipping again from Sequent, minus errors. We don't have ours yet, though. Going from Mt. Xinu 4.3 to an Ultrix system we can very easily and very repeatably (100%) get errors just compiling files. We haven't had a chance to track it down, but when we compile one of the X-windows files (a small one) the .o file gets trashed. And yes, no UDP checksums. -- ron (rminnich@udel.edu)
glenn@XN.LL.MIT.EDU (Glenn Adams) (04/13/88)
> It's straightforward to turn on UDP checksumming > on a Sun, at worst you can fault them for not making it easier: > % adb -w -k /vmunix /dev/mem > udpcksum?W 1 > $q Perhaps someone has pointed it out already, but Sun's NFS doesn't use the standard udp_output() routine which allows enabling checksums via the udpcksum variable. Instead, they chose to bypass udp_output(), building UDP packets in ku_fastsend() (/sys/rpc/kudp_fastsend.c). This routine has no provision for enabling checksums such as does udp_output(). I rewrote ku_fastsend() for Sun 3.2, but haven't done so for recent Sun releases, primarily because I don't have the more recent sources. I think we should make a lot of noise to Sun to at least code in checksumming similar to udp_output(), giving the system manager the decision to enable or disable checksums. By the way, performance tests which I performed on my modified ku_fastsend(), indicated that the addition of checksumming only resulted in a 2% decrease in performance. I don't believe they (SUN) have actually tried it as they won't provide any data to back up their claim that checksumming is a big performance loss. Personally, I think Sun's decision to exclude checksums is quite unconscionable. Glenn Adams
cpw%sneezy@LANL.GOV (C. Philip Wood) (04/14/88)
Hey, we all know that SUN is just a hardware company. We gotta figure where we can get the source and fix it ourselves. phil wood (cpw@lanl.gov)
smb@ulysses.homer.nj.att.com (Steven Bellovin) (04/15/88)
Has anyone modified the SLIP driver to do ``fair queueuing''? SLIP links are sufficiently slow that a file transfer operation can make remote logins exceedingly unpleasant. A queuer that favored short packets, or perhaps one that did per-hostport queueing, would be helpful. (I know -- what I'm really asking for is type-of-service support, but then I'd have to change all of my applications, and perhaps my TCP/IPs, to request it.) --Steve Bellovin ulysses!smb smb@ulysses.att.com
Mills@UDEL.EDU (04/15/88)
Steve, Yes, if what you mean by "fair queueing" (a term I find mesleading at best) is multiple priority queues in the conventional sense, the fuzzball gateways used on the NSFNET Backbone and at several other spots scattered over the US and Europe do that for all network links, including SLIP. The scheme is based on the Precedence field of the IP header, plus a few naughty tricks based on port number (when the precedence field is zero). Having used the scheme a lot on slow (9600 bps) serial links with SLIP and other link protocols, I can't say you should all go rush out and implement it. As implemented in the fuzzballs, priority scheduling ruthlessly shoves interactive traffic to the head of the queue, even if bulk-transfer (FTP, mail) traffic ends up waiting indefinitely at the end, then timing out. Then, little things like miscellaneous UDP and ICMP (ping) services sometimes stop working. Obviously, fancier service disciplines can be designed which would be more "fair," but the fuzzies have not yet learned those tricks. My point is not to discourage innovation in this area or even to conclude the fuzzball scheme does not work right; on the contrary, most of the time it works like a bandit. However, I do want to point out that the fairness issue is much more complex than you might suspect and deserves careful study in its own right. One of the most fertile experimental breeding swamps may well be hoked-up SLIP drivers for exactly the service you describe. After all, there are hundreds of times more Unix systems out there than fuzzballs. Dave
ralphw@IUS3.IUS.CS.CMU.EDU (Ralph Hyre) (04/19/88)
In article <8804150036.aa13833@Huey.UDEL.EDU> Mills@UDEL.EDU writes: >Steve, > >Yes, if what you mean by "fair queueing" (a term I find mesleading at best) >is multiple priority queues in the conventional sense, the fuzzball gateways ... do that for all network links, including SLIP. The scheme is >based on the Precedence field of the IP header, plus a few naughty tricks >... I can't say you should all go rush out and implement it. >... in the fuzzballs, priority scheduling ruthlessly shoves interactive >traffic to the head of the queue, even if bulk-transfer (FTP, mail) traffic >ends up waiting indefinitely at the end, then timing out. One might imagine something based on 'deadline scheduling', where a 'deadline to transmit', at which point some other layer will presumably retransmit. Theoretically (don't ask me - I can't prove it - I just heard it from an operating systems talk at another institution four years ago.) you can meet all the deadlines by picking the packet with the closest deadline first. [This assumes that all the deadlines can be met -- if they can't then you have a network enginerring problem which is beyond the scope of this message] Still not happy with interactive response? Then fragment those big packets and get the SLIP at the other end to unfragment them! Vendors everywhere will thank you for fully testing conformance of their TCP/IP implementations. -- - Ralph W. Hyre, Jr. Internet: ralphw@ius2.cs.cmu.edu Phone:(412)268-{2847,3275} CMU-{BUGS,DARK} Amateur Packet Radio: N3FGW@W2XO, or c/o W3VC, CMU Radio Club, Pittsburgh, PA
Mills@UDEL.EDU (04/19/88)
Ralph, There are lots of schemes to deal with the unfairness issue I mentioned, the most attractive of which may be based on schedule-to-deadline principles you mention. While fragmentation can be used to reduce latency, you have to be careful how the fragmentation is done. Those implementations I know about transmit all fragments of a gram one after the other, which would defeat the purpose. Fuzzballs (and maybe others I don't know about) requeue the datagram (with updated fragmentation info) after each fragment transmission. This results in a two-tier discipline; FB(n) (FIFO order in each priority queue) for grams less than the MTU and RR (round-robin in each priority queue) otherwise. Yes, the thought has struck me that actual queue priority could be adjusted for each fragment and also elapsed time on the queue. Dave