> What is a full size packet?

RFC 1122 (4.2.3.4) says:
> the TCP can send a full-sized segment (Eff.snd.MSS
> bytes; see Section 4.2.2.6).

There is an algorithm in Section 4.2.2.6 how Eff.snd.MSS is calculated.

> That is another good reason to remove the unbuffered send.
So far I still think we should retain the unbuffered send.

Actually the buffered send (if a non-blocking mode is not activated in
the TCP socket, that is by default) is also affected by RFC 1122 from a
userland side.
Moreover, from a user point of view there is almost no difference
between the buffered send (in blocking mode) and the unbuffered send
(that can not provide non-blocking operation).

As I understand, TCP_QUICKACK socket option (at least in Linux kernel
2.4.4+) can be enabled on the remote TCP receiver side that disables
delayed ACK. (In case of NuttX TCP receiver the delayed ACK can be
disabled if CONFIG_NET_TCP_DELAYED_ACK option is disabled.) This seems
only a reliable way to prevent 0.5 second delays if TCP sender works in
a blocking mode.

On Thu, 2021-10-14 at 20:27 -0600, Gregory Nutt wrote:
> The language in the RFC is not clear.  What is a full size
> packet?  Is that
> the MSS which could potentially vary from segment to segment
> depending on
> the sizes of the headers.  Is that the receive window size which
> could also
> vary?  Not clear.
> 
> I don't think there is any general way to always send an even number
> of
> full-size packets... whatever that means.  That is another good
> reason to
> remove the unbuffered send.
> 
> The algorithm came from uIP 1.0 from around 2001.  Might be
> interesting to
> see what uIP in Contiki did with that in later years.
> 
> More discussion here:
> https://groups.google.com/g/nuttx/c/bh01LHix7nM/m/bL8242BQCwAJ  Johnn
> y is a
> pretty knowledgeable guy a references a couple of other RFCs there.

Reply via email to