> 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.

Thank you for the link to the discussion. There is useful additional
info:
RFC 2581 (4.2) says:
> Therefore, while a specific algorithm is not defined, it is desirable
> for receivers to attempt to prevent this situation, for example by
> acknowledging at least every second segment, regardless of size.

I suppose that is why uIP (and the existing
CONFIG_NET_TCP_SPLIT algorithm in NuttX) splits a full-sized segment
into two smaller segments. However, RFC says "desirable", not
"required".

On another hand, a newer RFC 2923 (2.2) says:
> How to fix Several solutions for this problem have been proposed:
> 
> A simple solution is to ACK every other packet, regardless of size.
> This has the drawback of generating large numbers of ACKs in the face
> of lots of very small packets;  this shows up with applications like
> the X Window System.
> 
> A slightly more complex solution would monitor the size of incoming
> segments and try to determine what segment size the sender is using.
> This requires slightly more state in the receiver, but has the
> advantage of making receiver silly window syndrome avoidance
> computations more accurate

Thus it looks like we can not know and can not rely on how any
arbitrary TCP/IP stack implements this.

> 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.

I have checked Contiki-ng git repo history.
uip-split.c file was removed along with IPv4 stack from Contiki on 16-
Jun-2017.
Also I have checked the newest source code of Contiki-ng and I did not
find anything related to TCP packet split algorithm in the currentlyused IPv6 
stack of Contiki.  


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