Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 23 Mar 2006 23:56:32 +0100
From:      =?ISO-8859-1?Q?Sten_Daniel_S=F8rsdal?= <lists@wm-access.no>
To:        Andre Oppermann <andre@freebsd.org>
Cc:        freebsd-net@freebsd.org
Subject:   Re: How can i detect if a received UDP got fragmented from userland?
Message-ID:  <442327A0.2060801@wm-access.no>
In-Reply-To: <441FB565.BA3628B3@freebsd.org>
References:  <441F6FE0.80108@wm-access.no> <441FB565.BA3628B3@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
--------------enig162C2DCFAAC0B79853FCA915
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: quoted-printable

Andre Oppermann wrote:
> Sten Daniel S=F8rsdal wrote:
>> I am currently working on a udp multicast application written in C for=

>> FreeBSD (6.x)
>>
>> For our test cases in many different network types we found that
>> fragmentation poses as a significant problem for quality and reliabili=
ty.
>> Packets that get fragmented are more likely to get dropped than
>> packets that do not get fragmented and since our application needs hig=
h
>> bulk performance without retransmissions we believe our application an=
d
>> the network would benefit from this.
>> Our first assumption was that adding DF to UDP would solve it, and it
>> does in our small tests, but it has a noticable negative effect on the=

>> network.
>> Are there any way i can read whether a message's packet was fragmented=

>> into smaller pieces and preferably how large the largest fragment was?=

>> Are there any feasible way to do this?
>=20
> No.  There is no way to know from userland if a packet was fragmented.
> In theory you can infere this from the size of the rcvmsg() you do.  If=

> it is larger than your local MTU it must have been fragemented.  This
> doesn't allow you to find out if the path from source to receiver has
> a lower MTU somewhere however.  There you can only do path MTU discover=
y.
>=20

I have a hard time figuring out how to do path mtu discovery from server =

side. Could i have your opinions about an implementation idea?

I considered adding a socket flag for UDP to indicate i want to monitor=20
this socket for incoming fragments. Then send a message on the routing=20
socket indicating the largest fragment size and the host address that=20
caused the fragments - whenever a successful defragmented packet is=20
passed to higher levels?

--=20
Sten Daniel S=F8rsdal


--------------enig162C2DCFAAC0B79853FCA915
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="signature.asc"

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFEIyegMvOF8Nb1apsRAsbvAJ9ZbyDQeSZnDvuvfPi65LN7nASLZgCfTuAZ
98XTGT+9tAd4/YZBVKkVOIY=
=Jhxc
-----END PGP SIGNATURE-----

--------------enig162C2DCFAAC0B79853FCA915--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?442327A0.2060801>