Hello Mirja

I missed this while working on yesterday's message.

Let's see below:


> Okay! :-)
> 
> About the use of ECN, I agree as you say there should only be a few fragments
> and not increasing might be okay. However, you would need to clarify that the
> window is reset for each new datagram, I guess, right? 

Agreed. Let's change appendix C, more below;

> Also I don’t think you
> necessarily need to reduce to 1 on CE marking but maybe halve the window or
> something. Or you leave this open like “If an E flag is received the window
> SHOULD be reduced, at least by 1 and at max to 1. Halving the window for
> each E flag received, could be a good compromise but needs further
> experimentation.”…

Thanks for this text! Appendix C now becomes:
"
   Congestion on the forward path can also be indicated by an Explicit
   Congestion Notification (ECN) mechanism.  Though whether and how ECN
   [RFC3168] is carried out over the LoWPAN is out of scope, this draft
   provides a way for the destination endpoint to echo an ECN indication
   back to the fragmenting endpoint in an acknowledgment message as
   represented in Figure 4 in Section 5.2.  While the support of echoing
   the ECN at the reassembling endpoint is mandatory, this specification
   only provides a minimalistic behaviour on the fragmenting endpoint.
   If an E flag is received the window SHOULD be reduced, at least by 1
   and at max to 1.  Halving the window for each E flag received, could
   be a good compromise but needs further experimentation.  A very
   simple implementation may just reset the window to 1 so the fragments
   are sent and acknowledged one by one.  Note that the action on ECN
   only applies till the end of the datagram and the next datagram uses
   the configured Window_Size again.

"

I'd like to fully converge before I publish again

> I wonder if it would be good to say a bit more about the recommended values
> for the window size, as I think 32 will usually in most network not limit
> transmission (and the limiting value will be IFG) while with a size of 3, 
> that's
> very conservative to not overload the network (and will be slow than the 
> limits
> induced by IFG). Is my understanding correct?

I'd believe so:

Note that the exact use of the ack and the window_size is left to 
implementation. The optimistic one could send all the fragments up to 
window_size and ask for an ack only on the last one, wait for the bitmap, which 
means a gap of RTT/2, and resend the losses.
Then again we want to leave room for learning. The pessimistic implementation 
could set the bit on the first fragment to check that the path works and open 
the window only upon receiving the ack. It could then set an ack bit again on 
the second fragment and then use the window as a credit to send up to 
window_size before it is blocked. In that case, if the ack comes back before 
the window starves, the gating factor is the IFG. If the ack does not arrive in 
time, the window_size is the gating factor.

If the sender uses the window_size as a credit, the window of 3 will be the 
gating factor that starves the sender and causes gaps longer than IFG as soon 
as you have more than 3 hops in a TSCH network and 5-6 hops in a single 
frequency mesh. I guess that's what you mean by slower. The more hops the more 
it will hurt.

I initially used nb_of_hops as a rule of a thumb. That was an approximation of 
RTT/(XMIT+IFG) in the case one fragment needs to progress only to the second 
hop before the next can be sent (case of TSCH). 

The assumptions behind are that an rfrag_ack takes the same path and the same 
time as the rfrag, which is mostly correct. So if we spread the fragments with 
IFG, keeping busy one hop out of 2 on both directions means aligning the 
window_size of the nb of hops. As you pointed out this is not a congestion 
control measure, it is just the window that is not "slower" than IFG, per your 
expression. The text that uses RTT/(XMIT+IFG) being equivalent I'm happy either 
way. Because knowing the RTT is the same problem as knowing the number of hops 
so we do not need to indicate both. 

3 is when you h ave no idea of either RTT or nb of hops. it is conservative and 
will starve the TSCH sender if we have more than 3 hops. It also protects the 
intermediate node that can be very constrained, to at most 3 fragments per 
datagram that it relays. Note that I'm not aware of any full duplex radio 
available in LLNs (though there are prototypes for 5G). So this is really a 
corner case.

As written 32 indicates the last fragment of the datagram, which is usually way 
less than 32. When used, as you understood well, the only protection is IFG, 
and I'm must say I'm quite happy with the progress we made on that text 
together.

Please let me know, should I change something more?

Pascal

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

Reply via email to