[comp.protocols.tcp-ip] UDP/IP over ether weirdness

field@elvis.cs.pitt.edu (Gus) (10/23/90)

I've got an application that would like to send the largest UDP packet
it can.  (sun3 - sun3 running 4.0.3 over 10MB ethernet).  The only
reference to max UDP packet size is in the RPC section where it says
the max size the UDP transport mechanism can handle is 8K bytes.
(sendto () does not return EMSGSIZE until I try to send >9000
bytes per datagram).  Anyway, when I send 8K byte packets, sendto ()
doesn't complain, but the packets never arrive at the receiver.  In
fact, if I attempt to send a datagram larger than 2048 bytes, it never
arrives at the receiver.  Running etherfind on a third machine, and
watching the traffic between the UDP src and dst's I see:

-----
2048 byte packet:

 1514  udp pebbles	 wilma		       1788       4343
* 610  udp

This datagram is delivered correctly to the destination application.
   
-----
2049 byte packet:

 1066  udp pebbles	 wilma		       1790       4343
* 611  udp

Now, something is definitely wrong here.  

-----


So, what is the limit on UDP size messages (besides the 16 bit length
field limit)?  Is 2048 bytes per UDP datagram the limit?

Thanks
Brian
-----
field@cs.pitt.edu

e85rw@efd.lth.se (Ricard Wolf) (10/26/90)

In article <8945@pitt.UUCP> field@elvis.cs.pitt.edu (Gus) writes:
>
>I've got an application that would like to send the largest UDP packet
>it can.  (sun3 - sun3 running 4.0.3 over 10MB ethernet).  The only
>reference to max UDP packet size is in the RPC section where it says
>the max size the UDP transport mechanism can handle is 8K bytes.
>(sendto () does not return EMSGSIZE until I try to send >9000
>bytes per datagram).  Anyway, when I send 8K byte packets, sendto ()
>doesn't complain, but the packets never arrive at the receiver.  In
>fact, if I attempt to send a datagram larger than 2048 bytes, it never
>arrives at the receiver.  Running etherfind on a third machine, and
>watching the traffic between the UDP src and dst's I see:
>
>-----
>2048 byte packet:
>
> 1514  udp pebbles	 wilma		       1788       4343
>* 610  udp
>
>This datagram is delivered correctly to the destination application.
>   
>-----
>2049 byte packet:
>
> 1066  udp pebbles	 wilma		       1790       4343
>* 611  udp
>
>Now, something is definitely wrong here.  
>
>-----
>
>
>So, what is the limit on UDP size messages (besides the 16 bit length
>field limit)?  Is 2048 bytes per UDP datagram the limit?
>
>Thanks
>Brian
>-----
>field@cs.pitt.edu

Sending more than (1500-UDP&IP header length) over an ethernet connection
requires IP to fragment the data upon transmission. This isn't a very
common case, since protocols like TCP automatically reduce transmitted
packets to a reasonably size (like 1K or 536 bytes). Since IP isn't called
to fragment upon transmission very often, it isn't very well tested.
Even a UDP based protocol like TFTP automatically blocks data into 512 data
bytes, so IP never has to fragment here either.

I remember having similar weird problems when testing an IP implementation.
In order to test the IP reassembly,we sent UDP packets from a Sun 3/80
that were roughly 2K in length. At a certain size, things just didn't
work right, and after several hours of head scratching and network monitoring
we finally deduced that something was amiss in the Sun UDP transmission.
We didn't pursue the thing further, though; we had no intention of debugging
the whole Sun network code! :-) I don't even remember at what size things
went wrong, but your 2K rings a bell...

-- 
Ricard Wolf

+--------------------------+-------------------------------------+
| Ricard Wolf              | Lund Institute of Technology        |
| email: e85rw@efd.lth.se  | If you can't buy 'em - build 'em !! |
+--------------------------+-------------------------------------+