[fa.tcp-ip] Fragging ARPAnet gateways

tcp-ip@ucbvax.ARPA (06/04/85)

From: Jeff Mogul <mogul@Navajo>

					IP fragmentation is admittedly
    a bad thing to do on a regular basis.  BRL avoids this by keeping most
    of our LAN's at 1008 (for historical reasons mostly, the gateways
    originally didn't know how to fragment).

One of the less successful performance "improvements" in 4.2BSD
was that the TCP tried to use 1024 byte segments, since this
allowed 4.2 to use page-remapping techniques instead of copying.
However, this is really a complete loss in our environment, where
we had Vaxen connected to a 3Mb ether which is gatewayed to the
ARPAnet (the current hardware situation is a little different).

FTPing from another 4.2 machine across the ARPAnet would seldom
work, because those 1024-byte segments turned into an almost-1024-
byte fragment followed by a tinygram.  The local gateway dumps the
tinygram onto the ethernet almost immediately following the first
fragment, and the Vax interface (no buffering) drops back-to-back
packets, i.e., the tinygram.  This happens over and over, so even
though 90% of the bytes are getting through, the segment is never
acked and the connection fizzles.

We solved this by hacking the TCP code to force 576-byte segments
unless it is sure that no gateway was in the path, in which
case it uses the LAN MTU.  This works fine, and we can keep our
LAN MTUs high (1500 bytes) to reduce the packet counts in the
dominant case.

tcp-ip@ucbvax.ARPA (06/05/85)

From: Ron Natalie <ron@BRL.ARPA>

Yes, we realized this to.  Our gateway had slight software modifications
to cope with this.  Fortunately the Ethernet has a little buffering on
the boards (at least Interlan does), unfortunately some of the other
strange devices we use here, did not.

-Ron

tcp-ip@ucbvax.ARPA (06/05/85)

From: Murray.pa@Xerox.ARPA

There is another hack that's worth remembering if anybody is having
troubles catching back-to-back packets: Slow down the transmitter. Some
of our Ethernet drivers do that with only a few words of microcode. On
the first (re)transmission, set the collision timer to 1ms.

There are obviously variations and optimizations. The point is that it's
trivial to implement and a small delay won't be noticed by most
applications but it can be a lifesaver in a few critical cases.

Credit where it's due dept: Ed Taft came up with this trick when our
Alto based file servers couldn't keep up with our Dorados.