Subject: Re: [tcpm] New Version Notification for draft-ietf-tcpm-newcwv-11.txt

From: Mirja Kühlewind <[email-masked]>
Date: Mon, 1 Jun 2015 18:02:06 +0200

Hi Gorry,

thanks for applying my comments. Quick feedback on some points that are unclear below.

> pipeACK (section 4.1 and 4.2 and 4.5.1):
> 1) Can you maybe add a sentence that explains why FlightSize is not
> sufficient.
> I understand the difference between the two variables but are there actually
> cases where it makes a big difference if one or the other is used?
> - Added to section 1.

That’s also good. But what I meant was: Why do you use pipeACK in your algorithm? I believe in most cases if you would use FlightSize instead of pipeACK, your algorithm your work the same way. Can you further explain when this is not the case.

> 1) Maybe add one sentence saying "A connection is also in non-validated
> phase if
> pipeACK is zero which means the connection is idle". Saying this explicit
> would
> help me to understand things better.
> - Idle isnt quite correct, what it means is no new data was ACKed -
> there could be data sent and pending ACK/ We changed 4.5.2 to clarify
> this.
> 
> I just notice that this might actually not be true because in the section
> above
> you say that pipeACK is set to undefined if no measurements are available and
> that would mean the connection goes into validated phase... okay I think
> there
> is some clarification needed here.
> - see above

Just to make sure again that this is right. Form understanding the document currently says, that if there are no measurements for a certain time, pipeACK will be undefined and if pipeACk is undefined the connection is in validated phase. That means as soon as a congestion gets idle and has no measurements anymore it will go into validated phase without any adjustments… 

I believe this sentence is wrong (in 4.3):

"Validated phase: pipeACK >=(1/2)*cwnd, or pipeACK is undefined.“

It should be:

"Validated phase: pipeACK >=(1/2)*cwnd, or the connection just started and therefore pipeACK is undefined.“

> 5) "ssthresh is adjusted using the standard TCP method."
>    This is not clear to me. Is ssthresh set to cwnd/2 before the
> adjustment or
> to cwnd-1 after the adjustment? The first option would restart the
> connection in
> Slow Start... Please clarify!
> - We use the standard method, with no change.

The problem is I don’t know what you mean by standard method. RFC5681 says

"ssthresh = max (FlightSize / 2, 2*SMSS)“

If that is what you want, the please refer to RFC 5681. 

However, I think don’t think that this is what you want because this would mean that the connection usually starts in Slow Start.

I guess you actually want to set ssthresh=cwnd-1.

> 2) "An application that remains in the non-validated phase for a period
>    greater than the NVP is required to adjust its congestion control
>    state.  If the sender exits the non-validated phase after this
>    period, it MUST update the ssthresh:"
> 
>    This is not fully clear to me. Do I have to adapt cwnd and ssthresh right
> after NVP or as soon as I leave the non-validated phase after being for at
> least
> NVP time in this phase? If I'm not idle, but only sending with a low rate, I
> should probably do this adjustment with the next ACK, no...?
> - Not sure of the difference, e hope the new intro helps with this.

I think this was me thinking of the implementation of this: do I need a timer or just need to remember the time when I entered the non-validated phase. I guess there is actually no difference in the algorithm. So that’s fine as it is!

> 
> 3) Further, these adjustments mean that the connection will be in Slow
> Start. If
> I understand this correctly, this is not a problem as long as the connection
> stays in non-validated as the cwnd will not be further increased. But as
> soon as
> it leaves non-validated phase it will increase its cwnd as in Slow Start. I
> would like to have this spelled out explicitly.
> - ???

The adjustment in section 4.4.3 will (usually) lead to ssthresh>cwnd at the end of the non-validated period. That means the connection is in Slow Start. If this is intended, please add one sentence says: „These adjustment will set the connection in Slow Start (as ssthresh > cwnd).“

Thanks,
Mirja