On 6/22/2016 4:09 PM, Yoshifumi Nishida wrote:
> Hi Joe,
>
> On Wed, Jun 22, 2016 at 1:29 PM, Joe Touch <[email protected]
> <mailto:[email protected]>> wrote:
>
>
>
>     On 6/21/2016 12:25 AM, Yoshifumi Nishida wrote:
>     > I'm guessing clamping window size won't be a good way to make TCP
>     > perform stop-and-wait operation and there is no good way for it.
>     > Because TCP is basically not designed to perform stop-and-wait
>     > operation, I think you'll have to describe the operation
>     explicitly if
>     > you want to do it.
>
>     If the window is 1 MSS, then it ought to work just fine as you want.
>
>     TCP is designed to run sliding window; stop-and-go is just a name for
>     sliding window where N=1. I.e., it is designed for stop-and-go
>     operation
>     just fine -that's how a lot of transoceanic links behaved when sharing
>     was high and capacity was low anyway.
>
>
> But, tcp's sliding window is not controlled by MSS. It uses byte to
> control it..
> When you sent 0.1 MSS, TCP doesn't wait for an ACK before sending
> another 0.1 MSS.

If Nagle is on (which it should be by default), here's what ought to happen:

    app writes 0.1 MSS
    > not a complete segment, but no unconfirmed data in the pipe yet,
so TCP sends 0.1 MSS now
    app writes 0.1 MSS
    > not a complete segment, but there is unconfirmed data in the pipe,
so wait

TCP will wait until either the window size is more than 1 MSS (i.e., it
resets to the full 1 MSS value) AND the available data is larger than 1
MSS until the pipe is clear.

I.e.,  with Nagle on, you get stop-and-go but you don't have to wait for
a full segment to kickstart the process.

Note that existing TCPs don't work too well when the window size is
lower than 2 (or any odd number of segments), because delayed ACK
processing will introduce 200ms hiccups too.

Joe




_______________________________________________
Lwip mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/lwip

Reply via email to