UDP over v6: payload truncated at 1024 bytes

Matthias Lang matthias@REDACTED
Wed Apr 7 15:45:10 CEST 2004

I know that Fredrik's immediate problem [erlang's UDP receive buffer
size was too small for his application] has been solved, but the claim
that UDP packets aren't re-assembled by the OS has been bugging me for
a few days:

 Peter Lund> At least in IPv4 (and TCP) you cannot ever count on any packet
 Peter Lund> of any size to arrive at the destination without being fragmented
 Peter Lund> into 2 or more parts. 

This is true at L1, but it is not relevant to Fredrik's problem.

 Fredrik> But surely the operating system should re-assemble the 
 Fredrik> two fragments before passing it to the application, even 
 Fredrik> for UDP, no?

 Peter Lund> No! The OS (any OS) does not help you when running TCP/IPv4.

No!!!! Fredrik is correct.

Linux DOES re-assemble fragmented IP datagrams for TCP/IPv4. The code
for doing it is in

  net/ipv4/ip_fragment.c   (2.4.25)

the functions ip_defrag() and ip_frag_reasm() do the work.

I suspect that re-assembling IP datagrams is required by POSIX,
i.e. the behaviour will be the same for Solaris, BSD and modern
variants of Windows. But I haven't checked that. Nor do I have my copy
of Stevens handy.


More information about the erlang-questions mailing list