Re: [core] RFC 7967 (No-Response) together with block-wise transfers in CoAP

"Kraus Achim (INST/ECS4)" <Achim.Kraus@bosch-si.com> Fri, 28 June 2019 11:47 UTC

Return-Path: <Achim.Kraus@bosch-si.com>
X-Original-To: core@ietfa.amsl.com
Delivered-To: core@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id C9E8B120162 for <core@ietfa.amsl.com>; Fri, 28 Jun 2019 04:47:17 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -4.2
X-Spam-Level:
X-Spam-Status: No, score=-4.2 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, 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 hX98UO46vdd6 for <core@ietfa.amsl.com>; Fri, 28 Jun 2019 04:47:13 -0700 (PDT)
Received: from de-out1.bosch-org.com (de-out1.bosch-org.com [139.15.230.186]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 53DA31200BA for <core@ietf.org>; Fri, 28 Jun 2019 04:47:13 -0700 (PDT)
Received: from fe0vm1650.rbesz01.com (unknown [139.15.230.188]) by si0vms0217.rbdmz01.com (Postfix) with ESMTPS id 45Zw3f5z0qz4f3kZX; Fri, 28 Jun 2019 13:47:10 +0200 (CEST)
Received: from fe0vm1740.rbesz01.com (unknown [10.58.172.176]) by fe0vm1650.rbesz01.com (Postfix) with ESMTPS id 45Zw3f5dWzz1QV; Fri, 28 Jun 2019 13:47:10 +0200 (CEST)
X-AuditID: 0a3aad14-cc5ff7000000410a-12-5d15fe3e1f1f
Received: from si0vm1949.rbesz01.com ( [10.58.173.29]) (using TLS with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by fe0vm1740.rbesz01.com (SMG Outbound) with SMTP id 48.45.16650.E3EF51D5; Fri, 28 Jun 2019 13:47:10 +0200 (CEST)
Received: from SI-MBX2032.de.bosch.com (si-mbx2032.de.bosch.com [10.3.230.35]) by si0vm1949.rbesz01.com (Postfix) with ESMTPS id 45Zw3f3RQ1z6Cjg8F; Fri, 28 Jun 2019 13:47:10 +0200 (CEST)
Received: from SI-MBX2033.de.bosch.com (10.3.230.36) by SI-MBX2032.de.bosch.com (10.3.230.35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.1713.5; Fri, 28 Jun 2019 13:47:10 +0200
Received: from SI-MBX2033.de.bosch.com ([fe80::88a0:7dd8:cf69:6aaa]) by SI-MBX2033.de.bosch.com ([fe80::88a0:7dd8:cf69:6aaa%4]) with mapi id 15.01.1713.007; Fri, 28 Jun 2019 13:47:10 +0200
From: "Kraus Achim (INST/ECS4)" <Achim.Kraus@bosch-si.com>
To: Fredrik Wegelid <fredrik.wegelid@wittra.se>
CC: core <core@ietf.org>, Abhijan Bhattacharyya <abhijan.bhattacharyya@tcs.com>
Thread-Topic: [core] RFC 7967 (No-Response) together with block-wise transfers in CoAP
Thread-Index: AQHVLBK8nICW0UGNtEGz9XWVWE27WKatrykAgAAD3wCAASLKAIAAh12AgAGSQ8A=
Date: Fri, 28 Jun 2019 11:47:10 +0000
Message-ID: <e8ac810728d94e9c8a704b89711eae6f@bosch-si.com>
References: <33FF3DB7-076E-4A2A-BF64-9240406D1927@wittra.se> <95486C6F-A08A-487E-974B-5692D474C06B@wittra.se> <135E11E6-07C7-471B-B2F9-94F875191199@tzi.org> <OF6FE7EA39.5EF1BA5F-ON65258426.001AC7FC-65258426.001D278F@tcs.com> <F721D71C-66C1-4494-AC80-D1605115E02D@wittra.se>
In-Reply-To: <F721D71C-66C1-4494-AC80-D1605115E02D@wittra.se>
Accept-Language: de-DE, en-US
Content-Language: de-DE
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-originating-ip: [10.22.83.209]
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-Brightmail-Tracker: H4sIAAAAAAAAA21TfUwbdRjmd3ftXRlnjmsr78rIZpmZLsrHNgcyWfbPEkKGX4kR3RCKXD8E WtIrBIgfiHMDaoQMMMAEug4Naxhff0CF0bDCNgo6iR8bVGdUcBuESeYCU2HMOw7W/uE/b973 eX/P8/x+z+UonHVTGspktnFWsy5PKw8lQpPORz17cE2dEdc/Gp04e3pInui504UnXhrtkR3C U9ra/sFSGhbrZSmT7hHyZfzN0BdyuDxTEWeNPZgVauz1N+EFC+8Uu4ajy9AnxipEUcDsg8kr fBUKpVimAYPfT0zh0uBBcM5ZTkjDHQR/fOYgpWEYQXmHD6tCCkrOJMEpxwgp9iomFvxDi+s4 zrwCAyebCbFXMq9DzaAdSWfSYdkzSIjWKuZFmLgbJcIE8ySsfFUmE3uaOQB1/eVI8mrE4PyP 0+sLBZMMdwf71r0QEwXd3d/iklcE9N68v34GGAbaLkg4MGqYm1nbwHeA7+ogEn1x5mnoGoiV qE9Anf03UvINB1/jLFGDIpqCVJsCjKYgRlMQw4EIF1Lrubii/PiEfXEx1myOL42Lj3nbkt+L pI+mcqMVr96LGAppw2j9fXUGK9MV8SX5XvQchWnV9OV/BeixbEtOiVHHGzOthXkcr9XQ2yZT j7HKRzBfmJ1v4nmTxexFQOFaFb31qiqDpXN0JaWc1SLRvCiSIrQRtIF66RjLGHQ2LpfjCjjr 5vYARWmBnn8gGIZbOQNXrDfl2TbX2igahYSEsI8Hb4JtMUrhRXupMME7QZSg+QJdPm8ybNC3 SnR2Ew1Qx9FRqmau2YlTFy+1CHXZ0ybU6UWxjjZ/4cRZwmwxc5oIenZV0GVEBWOh+dHNNNvo 6DRlBqsOWgTU59F1JGSrpLeL5DDhnwncCehIMcbwDTBA2nNW4DB9e6DnFsBx+27omrEj+KX+ DAafO8cxaDg7gcG96mUMLqy5cLj9tRuHCv93OIy5TxIw1n6bgArnEgFzE0syeHi8RQ5TNzvl sNrfLYf2sl45jJb/JIe/f/1LDgu1H5HwsK6ShPpztSR4T7SQ4J5ykdDT2kXC7NwaCWOdfRTc W7lCwXCFQwE+5w0FdLSvKuaFuDEh7qyPWTFum872P3FvoIG3acqQsbOm4+cPpyOrMz2pte8N 7Ej9waAvbt1vv7g3uTXmWu77lUdeq9515tPwna43uNK36Ez7lobe8ncXvtmepPbP7Bo/fMrx vDpC3+jYb3g17Zryz0aHbadTdT3hsPF7e/IN7QenfZHZsi1PdR9N/zLrgSs95tblkdyQQ0vD c/WVQ2n+KewZLcEbdfG7cSuv+w+0HqouywQAAA==
Archived-At: <https://mailarchive.ietf.org/arch/msg/core/dfuLTvblmafp5MpcWjqDElZ6OmY>
Subject: Re: [core] RFC 7967 (No-Response) together with block-wise transfers in CoAP
X-BeenThere: core@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: "Constrained RESTful Environments \(CoRE\) Working Group list" <core.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/core>, <mailto:core-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/core/>
List-Post: <mailto:core@ietf.org>
List-Help: <mailto:core-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/core>, <mailto:core-request@ietf.org?subject=subscribe>
X-List-Received-Date: Fri, 28 Jun 2019 11:47:18 -0000

Hello Fredrik,

so the assumption, that RFC7967 generally applies also to RFC7959, seem to be negated.

> sending messages (that are big enough to require a blockwise transfer)

In my experience, RFC7959 is applied to two use-cases:
- a dynamic resource is too large to fit into one message and is therefore split in few blocks, either using block1 or block2
- a static giant resource must be transferred, potentially with pauses and resumptions, hopefully using block2

For the "giant resource", I think, it's not worth to try it, it will fail or is impossible because of block2.
For the "few blocks resource" you may generally have a chance, that it works good enough.
Your wording "big enough to require a blockwise transfer" points into that direction.
I'm still not clear, if your application requires, that ALL blocks are transferred, or if it may be acceptable, that the data of some blocks are missing.
Especially, if it's acceptable, that some blocks are missing, RFC7967 with a proprietary application layer may be a first step.  

Mit freundlichen Grüßen / Best regards 

Achim Kraus

Engineering Cloud Services 4 Bosch IoT Hub (INST/ECS4) 

Von: core <core-bounces@ietf.org> Im Auftrag von Fredrik Wegelid
Gesendet: Donnerstag, 27. Juni 2019 15:23
An: Abhijan Bhattacharyya <abhijan.bhattacharyya@tcs.com>
Cc: core <core@ietf.org>
Betreff: Re: [core] RFC 7967 (No-Response) together with block-wise transfers in CoAP

Hi Abhijan,

Thank you for your response. It is great to see how engaged you guys are :)

The reason that we are talking about this solution are the requirements for the devices in our network. We have devices sending messages (that are big enough to require a blockwise transfer) that have very high requirements when it comes to battery consumption. In order to listen for responses the devices have to keep the radio turned on to listen for these responses. By not listening to the responses (except the last one) we can keep the radio turned off for a larger portion of the time and in such a way save battery. This is our reasoning for wanting to use No-Response together with blockwise.

I understand that from a network perspective this does not really make sense. To reduce the amount of traffic on the network I agree that it would be better to listen for the 2.31 Continue responses and restart the blockwise transfer in the case of a lost block. If we do not have to listen to these responses we could hopefully reduce the power consumption of the device.

BR,
Fredrik


On 27 Jun 2019, at 07:18, Abhijan Bhattacharyya <mailto:abhijan.bhattacharyya@tcs.com> wrote:

Hi Fredrick and Carsten,
Thanks for the discussion so far. Let me put my thoughts.

The proposal to reduce the traffic in case of block-wise transfer using no-response is obvious. However, there is a catch. As per my understanding, the use case considered for block-wise transfer relates to transfers demanding high integrity of the received data and very low complexity at the receiving end in re-assembling the segments. One example is firmware upgrade of remote sensors: you cannot miss a single bit. Also, the message reception is tightly sequential in order. In case you miss one segment or receive in out-of-order, the transfers seizes in between.

Now, Fredrick, coming to your solution: I do not know the QoS requirements in your perceived use case. You do not care about responses of intermediate blocks (essentially this means RESTfully fire-and-forget!) and you take the response of the last block to ensure the end of transfer. Now the question is, if you care for all the blocks at the receiving end (for which you did not care for a response) how do you ensure reception of all the blocks? Considering the resource constrains in IoT use cases it will be a wastage of bandwidth if you have sent all the segments from the transmit end and the receiver, after receiving the end block, realizes that one intermediate segment got missing. The whole transfer, and the resource consumption related to that, becomes useless. You might have rather stopped at the loss instance and take corrective measures to resume. That would save your resources. So, there something more to think and design carefully according to the exact QoS requirements of the perceived class of use-cases.

However, in case you are looking for real-time + low-latency + low-resource consuming transfer, you may please have a look at this proposal that we already submitted few months back: https://tools.ietf.org/html/draft-bhattacharyya-core-a-realist-02 . To relate this draft to your problem you may simply consider to model your block-wise traffic as a time-series traffic.

Having said that, I did once nurture some ideas to make block-wise transfer "statistically" more resource-efficient, yet reliable . But, must I be confirmed about the efficacy of my idea, both theoretically and experimentally, before I speak about that. I have kept that in back burner. In case there is enough interest I can renew the interest and discuss.

Thank you.     

With Best Regards
Abhijan Bhattacharyya
Consultant / Scientist,
{Internet Protocols | 5G | Standardization}, 
TCS Research,
Tata Consultancy Services
Building 1B,Ecospace
Plot -  IIF/12 ,New Town, Rajarhat,
Kolkata - 700160,West Bengal
India
Ph:- +91 33 66884691
Cell:- +919830468972 | +918583875003
Mailto: mailto:abhijan.bhattacharyya@tcs.com
Website: http://www.tcs.com/
____________________________________________
Experience certainty. IT Services
Business Solutions
Consulting
____________________________________________


-----"core" <mailto:core-bounces@ietf.org> wrote: -----
To: Carsten Bormann <mailto:cabo@tzi.org>
From: Fredrik Wegelid 
Sent by: "core" 
Date: 06/26/2019 05:28PM
Cc: core <mailto:core@ietf.org>
Subject: Re: [core] RFC 7967 (No-Response) together with block-wise transfers in CoAP
"External email. Open with Caution"

Hi Carsten,

This is how an example looks like without the No-Response option.

Client -> Server: NON POST Payload: “Block 1...”
Server -> Client: NON 2.31 Continue
Client -> Server: NON POST Payload: “Block 2...”
Server -> Client: NON 2.31 Continue

More blocks…

Client -> Server: NON POST Payload: “Final block...”
Server -> Client: NON 2.01 Created (As an example)

With the No-Response option I wish the exchange to look something like this:

Client -> Server: NON POST (No-Response:26) Payload: “Block 1...”
Client -> Server: NON POST (No-Response:26) Payload: “Block 2...”

More blocks…

Client -> Server: NON POST Payload: “Final block...”
Server -> Client: NON 2.01 Created (As an example)

This would mean that the server would not send the 2.31 responses for each block (as the No-Response option is set to 26) while it still would send the final response (since the final block does not have the No-Response option set).
This allows the client to ensure that all blocks were sent successfully. If they are not, the server would respond with another code. It would also mean that the amount of traffic on the network is reduced.

Best regards,
Fredrik

> On 26 Jun 2019, at 13:43, Carsten Bormann <mailto:cabo@tzi.org> wrote:
> 
> Hi Fredrik,
> 
> I’m not sure I entirely understand the message exchanges you envision; maybe you can provide an example.
> 
> RFC 7967 has a way to suppress responses based on the response code.
> Unfortunately, the granularity is on the class only at the moment.
> The option that carries this information isn’t explicitly defined as an extension point.  Still, someone (the original author?  The WG?) might want to go ahead, e.g., by defining a bit in the option value that says “Not interested in 2.31 responses”.  (Maybe we want to understand what exactly a client would not be interested in a bit more before we go ahead allocating bits like this.)
> 
> Abhijan, what do you think?
> 
> Grüße, Carsten
> 
> 
>> On Jun 26, 2019, at 13:30, Fredrik Wegelid <mailto:fredrik.wegelid@wittra.se> wrote:
>> 
>> Hi,
>> 
>> I hope that I am using this email list in the correct way. I apologise if that is not the case.
>> I have some questions/thoughts about using the No-Response option (RFC 7967) together with block-wise transfers in COAP.
>> 
>> In my team we are using CoAP to send messages from devices to a server. The messages are of such a size that we need to make block-wise transfers. In an attempt to reduce the amount of traffic in the network we have looked at using the No-Response option. We are however not clear on how this would work if used together with block-wise transfers. We would like to use the No-Response option to make the server omit the 2.31 Continue responses from the server on each block. We would however still like to be able to get a response on the last block to indicate the status of the entire block sequence. 
>> 
>> Does this make sense? In RFC 7967 block-wise transfers are not mentioned. Are they meant to be used together?
>> 
>> Best regards,
>> Fredrik Wegelid
>> _______________________________________________
>> core mailing list
>> mailto:core@ietf.org
>> https://www.ietf.org/mailman/listinfo/core
>> 
> 

_______________________________________________
core mailing list
mailto:core@ietf.org
https://www.ietf.org/mailman/listinfo/core
=====-----=====-----=====
Notice: The information contained in this e-mail
message and/or attachments to it may contain 
confidential or privileged information. If you are 
not the intended recipient, any dissemination, use, 
review, distribution, printing or copying of the 
information contained in this e-mail message 
and/or attachments to it are strictly prohibited. If 
you have received this communication in error, 
please notify us by reply e-mail or telephone and 
immediately and permanently delete the message 
and any attachments. Thank you