Re: [lp-wan] need for MAX_ACK_REQUESTS?

"Carles Gomez Montenegro" <carlesgo@entel.upc.edu> Wed, 19 July 2017 15:20 UTC

Return-Path: <carlesgo@entel.upc.edu>
X-Original-To: lp-wan@ietfa.amsl.com
Delivered-To: lp-wan@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id E58B5131D70 for <lp-wan@ietfa.amsl.com>; Wed, 19 Jul 2017 08:20:23 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -4.199
X-Spam-Level:
X-Spam-Status: No, score=-4.199 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id f1fMap8-tP-V for <lp-wan@ietfa.amsl.com>; Wed, 19 Jul 2017 08:20:21 -0700 (PDT)
Received: from dash.upc.es (dash.upc.es [147.83.2.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 83CD4131D39 for <lp-wan@ietf.org>; Wed, 19 Jul 2017 08:20:21 -0700 (PDT)
Received: from entelserver.upc.edu (entelserver.upc.es [147.83.39.4]) by dash.upc.es (8.14.4/8.14.4/Debian-4.1ubuntu1) with ESMTP id v6JFKHMq041548; Wed, 19 Jul 2017 17:20:17 +0200
Received: from webmail.entel.upc.edu (webmail.entel.upc.edu [147.83.39.6]) by entelserver.upc.edu (Postfix) with ESMTP id 91FD01D53C1; Wed, 19 Jul 2017 17:20:16 +0200 (CEST)
Received: from 88.208.109.142 by webmail.entel.upc.edu with HTTP; Wed, 19 Jul 2017 17:20:07 +0200
Message-ID: <6627d2074d9c4fc56c035b7d283acf19.squirrel@webmail.entel.upc.edu>
In-Reply-To: <d89f5ae6-2d9d-56ff-71c7-c8624563a002@ackl.io>
References: <f06b79ed-9b06-8ba0-79da-d091b9270d4e@ackl.io> <c53f65f77e2bef71d2b8598cd4c72dfc.squirrel@webmail.entel.upc.edu> <d89f5ae6-2d9d-56ff-71c7-c8624563a002@ackl.io>
Date: Wed, 19 Jul 2017 17:20:07 +0200
From: Carles Gomez Montenegro <carlesgo@entel.upc.edu>
To: Arun <arun@ackl.io>
Cc: lp-wan <lp-wan@ietf.org>, BARTHEL Dominique IMT/OLPS <dominique.barthel@orange.com>
User-Agent: SquirrelMail/1.4.21-1.fc14
MIME-Version: 1.0
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: 8bit
X-Priority: 3 (Normal)
Importance: Normal
X-Virus-Scanned: clamav-milter 0.99.2 at dash
X-Virus-Status: Clean
X-Greylist: Delayed for 06:14:59 by milter-greylist-4.3.9 (dash.upc.es [147.83.2.50]); Wed, 19 Jul 2017 17:20:17 +0200 (CEST)
Archived-At: <https://mailarchive.ietf.org/arch/msg/lp-wan/7S055srCt3pl7IEHnO0sg7hX6V4>
Subject: Re: [lp-wan] need for MAX_ACK_REQUESTS?
X-BeenThere: lp-wan@ietf.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: "Low-Power Wide Area Networking \(LP-WAN\), also known as LPWA or Low-Rate WAN \(LR-WAN\)" <lp-wan.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/lp-wan>, <mailto:lp-wan-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/lp-wan/>
List-Post: <mailto:lp-wan@ietf.org>
List-Help: <mailto:lp-wan-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/lp-wan>, <mailto:lp-wan-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 19 Jul 2017 15:20:24 -0000

Hi Arun,

Thanks for your response.

Yes, I understand your example is correct. On your question, the same
problem will happen anyway when any applicable "MAX_" parameter is
reached.

The main reason I can see for having two separate parameters is that a
sender may want to resend the last fragment "many times" (say, e.g. 5) to
request for an ACK. But when the ACK is received, maybe a sender cannot
afford to resend as many times each specific fragment reported to be lost
(imagine a "large window", say of 30 fragments where 8 out of those need
to be resent). Maybe doing up to 5 retries for each lost fragment is too
much, but a lower number of retries could be acceptable.

Maybe a more simple option is to reduce the number of "MAX_" parameters to
only 1 (you favor that to be MAX_ACK_REQUESTS), and if a sender determines
from an ACK that there have been too many losses (and maybe it is not
worth trying to recover all of them since link quality appears to be low),
it can always abort.

Thoughts?

Carles




> Hi Carles,
> I'm not clear about the purpose of having retry counter for each
> fragments.
>
> My understanding is as follows (w.r.t. ACK always) :
>  - whenever there is a retransmission  the receiver would expect the
> ACK_REQUEST packet to be least the CFN in the bitmap.
>  we resend (at the same time increment retry counter for this fragment)
> only last fragment in case of timer expiry. when the counter reaches
> MAX_FRAG_RETRIES for CFN =1, what do we do?
>  we cannot try resending CFN !=1 (in this case cfn=4) because the
> receiver would still expect CFN=1 for ACK_REQUEST or to send bitmap.
> So, I think it would be good to have only variable, can be
> MAX_ACK_REQUEST.
>
>
>
>                        Tx                        Rx
>                         +                         +
>                         |                         |
>                         |          cfn=6          | expected
> ACK_REQ_PACKET = cfn_0
>                         +------------------------->
>                         |          cfn=5          |
>                         +------------------------->
>                         |          cfn=4          |
>                         +--------------------X---->
>                         |          cfn=3          |
>                         +--------------------X---->
>                         |          cfn=2          |
>                         +------------------------->
>                         |          cfn=1          |
>                         +--------------------X---->
>                         |          cfn=0          |
>                         +------------------------->
>                         |  ACK:11001011           |expected
> ACK_REQ_PACKET = cfn_1
>                         <-------------------------+
>                         |         cfn=4           |
>                         +-------------------X----->
>                         |         cfn=3           |
>                         +------------------------->
>                         |         cfn=1           |
>                         +-------------------X----->
>           timer expired |    ACK:11011011         |expected
> ACK_REQ_PACKET = cfn_1
>                         <--X----------------------+
>                         |        cfn=1            |
>                         +------------------------->
>           timer expired |    ACK:11011011         |expected
> ACK_REQ_PACKET = cfn_1
>                         <--X----------------------+
>     reached MAX_ACK_REQ |                         |
>          discard cfn=1  |      cfn=4??            |
>                         +-------------------------> wait until cfn=1 to
> send ACK
>                         |                         |
>                         |                         |
> regards,
>
> On 19/07/2017 13:58, Carles Gomez Montenegro wrote:
>> Hi Arun,
>>
>> Thanks for commenting on this.
>>
>> Currently, MAX_ACK_REQUESTS applies only to the last fragment in a
>> window,
>> which can be viewed also as an "ACK request". MAX_FRAG_RETRIES applies
>> to
>> the previous fragments in the window.
>>
>> I have been thinking about this several times, and I see two options:
>>
>> 1.- Keep the two parameters. There might be reasons for setting
>> MAX_ACK_REQUESTS to a higher value than MAX_FRAG_RETRIES. It may be
>> specially critical to get an ACK (which gives feedback on the delivery
>> of
>> all fragments in the window), while one might want to be careful
>> regarding
>> how many times a fragment (from the rest of fragments in the window) is
>> resent. In addition, it is possible to set the two parameters to the
>> same
>> value if desired.
>>
>> 2.- Remove MAX_ACK_REQUESTS and have just MAX_FRAG_RETRIES applying to
>> all
>> fragments.
>>
>> Which are your (and other) opinions on this?
>>
>> Thanks,
>>
>> Carles
>>
>>
>>
>>> Hi Carles, all,
>>>
>>>  Do we still need this variable MAX_ACK_REQUESTS ?
>>>  MAX_FRAG_RETRIES is going to be the same (during retransmission we
>>> only
>>> send the last fragment of the received bitmap which would be considered
>>> as ACK REQUEST). correct?
>>>
>>>  if this is already discussed in the thread of Dominique's review
>>> please
>>> point me to the same.
>>>
>>> thanks,
>>>
>>> --
>>>
>>> Arunprabhu Kandasamy
>>> arun at ackl.io
>
> --
> Arunprabhu Kandasamy
> arun at ackl.io
>
> 2 bis rue de la Châtaigneraie
> 35510 Cesson-Sévigné
> France
> Phone: +33 (0)2.99.12.24.14
>
>
>