Re: [Dots] [core] WG Last Call on draft-ietf-core-new-block

supjps-ietf@jpshallow.com Mon, 11 January 2021 10:33 UTC

Return-Path: <jon.shallow@jpshallow.com>
X-Original-To: dots@ietfa.amsl.com
Delivered-To: dots@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id E5A0B3A09B7 for <dots@ietfa.amsl.com>; Mon, 11 Jan 2021 02:33:09 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.899
X-Spam-Level:
X-Spam-Status: No, score=-1.899 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=unavailable 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 ulLGepBZPqi1 for <dots@ietfa.amsl.com>; Mon, 11 Jan 2021 02:33:05 -0800 (PST)
Received: from mail.jpshallow.com (mail.jpshallow.com [217.40.240.153]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 0EC753A09B9 for <dots@ietf.org>; Mon, 11 Jan 2021 02:33:04 -0800 (PST)
Received: from mail2.jpshallow.com ([192.168.0.3] helo=N01332) by mail.jpshallow.com with esmtp (Exim 4.92.3) (envelope-from <jon.shallow@jpshallow.com>) id 1kyuVP-0006MA-Ra; Mon, 11 Jan 2021 10:33:00 +0000
From: <supjps-ietf@jpshallow.com>
To: "Marco Tiloca" <marco.tiloca@ri.se>, <christian@amsuess.com>, <draft-ietf-core-new-block@ietf.org>
Cc: <dots@ietf.org>, <core@ietf.org>
References: <022401d6e440$06763ba0$1362b2e0$@jpshallow.com> <fa7956ae-31a3-7724-3af4-4e755a719045@ri.se> <041101d6e5c2$e17fbef0$a47f3cd0$@jpshallow.com> <a549b34f-3f72-a6df-b2c3-ae9d3759b701@ri.se> <047b01d6e5e2$2115ba50$63412ef0$@jpshallow.com> <f8774b5c-9736-1cff-266f-f9b66653a86c@ri.se>
In-Reply-To: <f8774b5c-9736-1cff-266f-f9b66653a86c@ri.se>
Date: Mon, 11 Jan 2021 10:33:10 -0000
Message-ID: <065301d6e805$286163c0$79242b40$@jpshallow.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Mailer: Microsoft Outlook 14.0
Thread-Index: AQKHUmmxquhArXd4h/ZvumPsHfcPaAFUavWxAaeeZ2wB9CJyVQGW5zMSAr51FjWocxRxUA==
Content-Language: en-gb
Archived-At: <https://mailarchive.ietf.org/arch/msg/dots/U4N2WGTSQsy-ModmGEoxFRJs25s>
Subject: Re: [Dots] [core] WG Last Call on draft-ietf-core-new-block
X-BeenThere: dots@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: "List for discussion of DDoS Open Threat Signaling \(DOTS\) technology and directions." <dots.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/dots>, <mailto:dots-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/dots/>
List-Post: <mailto:dots@ietf.org>
List-Help: <mailto:dots-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/dots>, <mailto:dots-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 11 Jan 2021 10:33:10 -0000

Hi Marco,

The new updates have been pushed to https://github.com/core-wg/new-block and the differences with the draft can be found at https://www.ietf.org/rfcdiff?url1=draft-ietf-core-new-block&url2=https://raw.githubusercontent.com/core-wg/new-block/master/draft-ietf-core-new-block.txt

The PR for the responses below can be found at https://github.com/core-wg/new-block/pull/12 (a couple of minor nits fixed since then which are in master)

Otherwise lease see inline.

Regards

Jon

> -----Original Message-----
> From: Marco Tiloca [mailto: marco.tiloca@ri.se]
> Sent: 08 January 2021 18:19
> To:supjps-ietf@jpshallow.com; christian@amsuess.com; draft-ietf-core-new-
> block@ietf.org
> Cc: dots@ietf.org; core@ietf.org
> Subject: Re: [core] WG Last Call on draft-ietf-core-new-block
> 
> Hi Jon,
> 
> On 2021-01-08 18:17, supjps-ietf@jpshallow.com wrote:
> > Hi Marco,
> >
> > Thanks for this.
> 
> ~snips
> 
> >>
> >> * Section 4 says: "The token to use ... any troubleshooting."
> >>
> >>    Do you actually mean the highest block number received so far
> >> under that Request-Tag, or the highest within the current set of
> >> MAX_PAYLOADS payloads for which the server is requesting some
> missing blocks?
> >>
> >>    The new example in Section 5 seems to cover the latter, which I
> >> guess is what you intend.
> > [Jon] Not sure that it really makes any difference.  Have updated the
> > text to try to clarify OLD The token to use for the response SHOULD be
> > the token that was used in the highest block number received payload.
> Note that the use of any received token would work, but providing the one
> used in the highest received block number will aid any troubleshooting. The
> client will use the token to match the request to find what Request-Tag
> value is currently being used.
> > NEW
> > The token to use for the response SHOULD be the token that was used in
> the highest block number received so far with the same Request-Tag value.
> Note that the use of any received token with the same Request-Tag would
> work, but providing the one used in the highest received block number will
> aid any troubleshooting. The client will use the token to determine what is
> the previously sent request to obtain the Request-Tag value to be used.
> 
> ==>MT
> Looks better.
> 
> To clarify, I meant Figure 5 (not Section 5), where the response with
> Message ID M:0x91 uses Token T:0xe0. That's matching with the request
> with Message ID M:0x19, i.e. the received payload with the highest block
> number *in the current MAX_PAYLOADS payload set* to be still completed.
> 
> If the SHOULD above was followed, that response would have Token T:0xeb,
> to match with the one used in "the highest block number received so far",
> i.e. block number 10 in the request with Message ID M:0x1b.
> 
> But as per the text above, either Token value is fine to use in the response,
> so the example is correct anyway.

[Jon] Changed highest to last (to simplify things), updated the examples accordingly. Updated 2.01,2.04 and 2.31 code with which token to use.
> <==
> 
> >>   - Figure 10, all responses should have ET=24
> > [Jon] Fixed (I only found one)
> 
> ==>MT
> The other occurrence is the very last response, with Message ID M:0x9b :-)

[Jon] Got it - And M:0x9b updated to M:0xc3 to be consistent.
~Jon
> 
> 
> Otherwise, it looks good to me. Thank you!
> 
> Best,
> /Marco
> <==
> 
> > ~Jon
> >>
> >> Best,
> >> /Marco
> >>
> >>
> >> On 2021-01-08 14:33, supjps-ietf@jpshallow.com wrote:
> >>> Hi Marco,
> >>>
> >>> Thanks for this - and it is good to have another set of eyes
> >>> checking things
> >> through.
> >>> Updates have been pushed to
> >>>
> >>
> https://eur02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgit
> >> h
> >>> ub.com%2Fcore-wg%2Fnew-
> >> block&amp;data=04%7C01%7Cmarco.tiloca%40ri.se%7
> >>
> C2385ef89ef574a7c81f608d8b3da00ba%7C5a9809cf0bcb413a838a09ecc40cc9e
> >> 8%7
> >>
> C0%7C0%7C637457096666452069%7CUnknown%7CTWFpbGZsb3d8eyJWIjoi
> >> MC4wLjAwMD
> >>
> AiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C2000&amp;sdata=
> >> LN79
> >>
> Z8Ar4AICnpWDOFgkFi3g0Mwf72KPC0ewPW%2FZk3A%3D&amp;reserved=0
> >> and the
> >>> differences with the draft can be found at
> >>>
> >>
> https://eur02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fww
> >> w.
> >>> ietf.org%2Frfcdiff%3Furl1%3Ddraft-ietf-core-new-
> >> block%26url2%3Dhttps%3
> >>> A%2F%2Fraw.githubusercontent.com%2Fcore-wg%2Fnew-
> >> block%2Fmaster%2Fdraf
> >>> t-ietf-core-new-
> >> block.txt&amp;data=04%7C01%7Cmarco.tiloca%40ri.se%7C23
> >>
> 85ef89ef574a7c81f608d8b3da00ba%7C5a9809cf0bcb413a838a09ecc40cc9e8%
> >> 7C0%
> >>
> 7C0%7C637457096666452069%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4
> >> wLjAwMDAiL
> >>
> CJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C2000&amp;sdata=gIc
> >> 2vkC
> >>> 1XGtyGb17WSmby%2FO9wzA2bMaxDUsl3jmOAL4%3D&amp;reserved=0
> >>>
> >>> Otherwise, please see inline.
> >>>
> >>> Regards
> >>>
> >>> Jon
> >>>
> >>>> -----Original Message-----
> >>>> From: Marco Tiloca [mailto: marco.tiloca@ri.se]
> >>>> Sent: 07 January 2021 12:17
> >>>> To: supjps-ietf@jpshallow.com; christian@amsuess.com;
> >>>> draft-ietf-core-new- block@ietf.org
> >>>> Cc: dots@ietf.org; core@ietf.org
> >>>> Subject: Re: [core] WG Last Call on draft-ietf-core-new-block
> >>>>
> >>>> Hi,
> >>>>
> >>>> Thanks for this revision and for addressing my comments already in
> >>>> version  -03.
> >>>>
> >>>> Please, see below some more comments on this version -04.
> >>>>
> >>>> Best,
> >>>> /Marco
> >>>>
> >>>>
> >>>> * s/There are one or more missing CBOR encoded missing block
> >>>> numbers./There are one or more CBOR encoded missing block
> numbers.
> >>> [Jon] Fixed.
> >>>> *  Section 4 now includes the new paragraph: "The token to use for
> >>>> the response SHOULD be the token that was used in the highest block
> >>>> number received payload.  The Q-Block1 Option from the same packet
> >>>> SHOULD be included."
> >>> [Jon] The Q-Block1 option actually is not needed as it can be
> >>> derived by
> >> the client from the remembered token (which is used to derive the
> >> Request-Tag.
> >>> OLD
> >>> The Q-Block1 Option from the same packet SHOULD be included.
> >>> NEW
> >>> The client will use the token to match the request to find what
> >>> Request-Tag value is currently being used.  Providing the highest
> >>> received block number will aid any troubleshooting.
> >>>
> >>>>    Consistently, the example in Figure 5 should also have
> >>>> QB1:3/0/1024 in the
> >>>> 4.08 response with Token T:0xe3, and QB1:1/1/1024 in the 4.08
> >>>> response with Token T:0xe4.
> >>> [Jon] No change now needed.
> >>>>    Since "SHOULD" is used, when is it still fine or expected to not
> >>>> include Q-
> >>>> Block1 in a 4.08 response?
> >>> [Jon] Q-Block1 is no longer needed.
> >>>> * When commenting the example in Figure 5, Section 9.1 reads: "The
> >>>> Token just needs to be one of those that have been received for
> >>>> this Request-Tag, so the client can derive the Request-Tag."
> >>>>
> >>>>    Should this not be aligned with the SHOULD used in Section 4
> >>>> about using the Token from the same packet conveying the highest
> >>>> block
> >> number?
> >>> [Jon] Agreed
> >>>>    You explained in your mail that the client keeps tracking all
> >>>> Tokens in the burst anyway, so maybe it's better to rather align
> >>>> the text in Section 4 with what suggested here in Section 9.1, i.e.
> >>>> responding with any of those Token values is just fine.
> >>> [Jon] I think that it is useful for the client to have a hint about
> >>> what is the latest block number received even if it does not make
> >>> use it - it may help in debugging from packet captures etc. which is
> >>> why I
> >> added in the SHOULD in section 4.  So, I would prefer to align this
> >> with section 4 OLD The Token just needs to be one of those that have
> >> been received for this
> >>>    Request-Tag, so the client can derive the Request-Tag.
> >>> NEW
> >>> The token used in the response should be the token that was used in
> >>> the
> >> highest block number received payload. The client can then derive the
> >> Request-Tag by matching the token with the sent request..
> >>>>    In such a case, the Q-Block1 option included in the 4.08
> >>>> response has still to be the one from the request conveying the
> >>>> highest block
> >> number.
> >>>> Correct?
> >>> [Jon] We are now dropping the need for Q-Block1 in the response.
> >>>> * The new text in Section 6.2 says: "... and the situation
> >>>> re-evaluated for another 24 hour period until there is no report of
> >>>> missing payloads under normal operating conditions."
> >>>>
> >>>>    When that happens, I suppose MAX_PAYLOADS is right away restored
> >>>> to the intended value, i.e. it is not incremented by 1 to start
> >>>> another 24-hour period evaluation. Correct?
> >>> [Jon] Updated for clarification
> >>> OLD
> >>>         report of missing payloads under normal operating conditions. Note
> >>>         that the CoAP peer will not know about the MAX_PAYLOADS
> >>> change until NEW
> >>>         report of missing payloads under normal operating
> >>> conditions. The
> >> newly
> >>>         derived value for MAX_PAYLOADS should be used for both ends of
> this
> >>>        particular CoAP peer link. Note
> >>>         that the CoAP peer will not know about the MAX_PAYLOADS
> >>> change until
> >>>> * Section 6.2 says: "The request that the client sends to
> >>>> acknowledge the receipt of all the current set of MAX_PAYLOADS
> >>>> payloads SHOULD contain a special case Q-Block2 Option with NUM set
> >>>> to the first block of the next set of MAX_PAYLOADS payloads and the M
> bit set to 1."
> >>>>
> >>>>   Is it possible to reflect this in the example of Figure 6? It
> >>>> would require the body to have more than MAX_PAYLOADS blocks thus
> >> resulting
> >>>> in more bursts, which would be inherited by the examples in Figure
> >>>> 7 and
> >> Figure 8.
> >>> [Jon] Examples updated to include this information
> >>>> * In Section 9, it would be good to have the parameters defined in
> >>>> Section
> >>>> 6.2 and their values reflected in the examples, when applicable.
> >>>> E.g., MAX_PAYLOADS is at least 4 in these examples; the asked
> >>>> retransmissions are presumably due sometimes to MAX_PAYLOADS
> >> compared
> >>>> against the value of the latest received Q-Block1/Q-Block2, while
> >>>> sometimes to NON_RECEIVE_TIMEOUT.
> >>> [Jon] Examples updated to include this information
> >>>> * In the example in Figure 6, shouldn't the first request from the
> >>>> client have the M bit set to 1 in the Q-Block2 option, i.e. as
> >>>> QB2:0/1/1024 ? As per Section 3.4, that would indicate that the
> >>>> request is in fact for the block 0 and for all of the remaining
> >>>> blocks within
> >> the body.
> >>> [Jon] Good catch - corrected.
> >>>
> >>> ~Jon
> >>>> On 2021-01-06 16:24, supjps-ietf@jpshallow.com wrote:
> >>>>> Hi Christian,
> >>>>>
> >>>>> Once again, thank you for the comprehensive review.
> >>>>>
> >>>>> Responses part 2.  A new version (-04) of the draft has been
> >>>>> published and can be found at
> >>>>>
> >>
> https://eur02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdat
> >>>> a
> >>>>> tracker.ietf.org%2Fdoc%2Fdraft-ietf-core-new-
> >>>> block%2F&amp;data=04%7C01
> >>>>
> >>
> %7Cmarco.tiloca%40ri.se%7C52440c4d23e244168b2108d8b2574780%7C5a980
> >>>> 9cf0
> >>>>
> >>
> bcb413a838a09ecc40cc9e8%7C0%7C0%7C637455435959417764%7CUnknown
> >>>> %7CTWFpb
> >>>>
> >>
> GZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI
> >>>> 6Mn0
> >>>>
> >>
> %3D%7C2000&amp;sdata=MlMoSqfzcxDvyO41nqA2GfZ7QqYFfeaHvN8fwH7j
> >>>> gTY%3D&am
> >>>>> p;reserved=0
> >>>>>
> >>>>>
> >>>>> Part 1 responses were covered in the main by version -03, so you
> >>>>> may want to look at the -02 to -04 differences.
> >>>>>
> >>>>> The Congestion Control section has been re-written to simplify how
> >>>>> things work and has a new set of definitions. There is a
> >>>>> separation of Confirmable and Non-Confirmable Congestion Control
> >>>>> with the stated assumption that all of a body is sent as
> >>>>> Non-Confirmable or
> >> Confirmable.
> >>>>> Otherwise, see inline.
> >>>>>
> >>>>> Regards
> >>>>>
> >>>>> Jon
> >>>>>
> >>>>>> * The list of pros and cons (with the cons being almost trivial) does
> >>>>>>   not explain to the reader why these are not a replacement; I
> suggest
> >>>>>>   to add:
> >>>>> [Jon] Another disadvantage addition NEW To reduce the transmission
> >>>>> times for CON transmission of large bodies, NSTART needs to be
> >>>>> increased from 1, but this affects congestion control where other
> >>>>> parameters need to be tuned  (Section
> >>>>> 4.7 of [RFC7252]).  Such tuning is out of scope of this document.
> >>>>>
> >>>>>> * "If the client transmits a new body of data with a new Request-Tag
> >>>>>>   to": Processing parallel requests is something Request-Tag opens
> up. I
> >>>>>>   don't see why there's a MUST to that; the server certainly MAY drop
> >>>>>>   the old request, but it may just as well process them in parallel.
> >>>>> [Jon] The intent here was that garbage collection would take place
> >>>>> sooner than later - especially when running in a lossy environment
> >>>>> and the client has updated information to transmit. I agree that
> >>>>> Request-Tag enables the possibility of sending multiple block
> >>>>> requests with different payloads, and so there is a possibility
> >>>>> that the client starts sending body A, then decides to send body B
> >>>>> and terminate A, but a packet from B arrives before a packet from
> >>>>> body A is received and so
> >>>> things fail as A does not complete.
> >>>>> OLD
> >>>>>    If the client transmits a new body of data with a new Request-Tag to
> >>>>>    the same resource on a server, the server MUST remove any partially
> >>>>>    received body held for a previous Request-Tag for that resource.
> >>>>> NEW
> >>>>>   If a server receives payloads with different Request-Tags for
> >>>>> the same resource, it should continue to process all the bodies as
> >>>>> it has no way of determining which is the latest version, or which
> >>>>> body, if any, the client is terminating the transmission for.
> >>>>>
> >>>>>   If the client elects to stop the transmission of a complete body, it
> >>>>>   SHOULD "forget" all tracked tokens associated with the body's
> >>>>> Request-Tag so that a reset message is generated for the invalid
> >>>>> token in the 4.08 (Request Entity Incomplete) response.  The
> >>>>> server on receipt of the reset message SHOULD delete the partial
> body.
> >>>>> END
> >>>>>
> >>>>>> * "If the server receives a duplicate block with the same Request-
> Tag":
> >>>>>>   Why? Being silent is the default on nonterminal blocks alredy, but
> in
> >>>>>>   a situation like figure 5 if the 2.04 is lost, that rule would make
> >>>>>>   it impossible for the client to ever get a successful response.
> >>>>>>
> >>>>>>   A better rule here may be to say that it processes it all the same
> >>>>>>   (and if the payload is distinct from the first transmission's payload,
> >>>>>>   it should err out.)
> >>>>> [Jon] Fair point
> >>>>> OLD
> >>>>>    If the server receives a duplicate block with the same Request-Tag,
> >>>>>    it SHOULD silently ignore the packet.
> >>>>> NEW
> >>>>>    If the server receives a duplicate block with the same Request-Tag,
> >>>>>    it SHOULD  ignore the payload of the packet, but MUST still
> >>>>> respond as if the block was received for the first time.
> >>>>>> * "If the server receives multiple requests (implied or otherwise) for
> >>>>>>   the same block, it MUST only send back one instance of that block.":
> >>>>>>   This might be read as "ever" rather than "per incoming
> >>>>>> request",
> >> where
> >>>>>>   probably the latter is meant.
> >>>>> [Jon] This text has already been updated following another review
> >>>>> "OLD If the server receives multiple requests
> >>>>>    (implied or otherwise) for the same block, it MUST only send back
> one
> >>>>>    instance of that block.
> >>>>> NEW
> >>>>> If the request includes multiple Q-Block2
> >>>>>    Options and these options overlap (e.g., combination of M being set
> >>>>>    (this and all the later blocks) and being unset (this individual
> >>>>>    block)) resulting in an individual block being requested multiple
> >>>>>    times, the server MUST only send back one instance of that block.
> >>>>>    This behavior is meant to prevent amplification attacks."
> >>>>>
> >>>>>> * "The ETag Option MUST NOT be used": This is more a factural than a
> >>>>>>   normative statement; it *can* not be used there as the server
> would
> >>>>>>   respond thusly. It may be used, but then that indicates that the
> >>>>>>   client is trying to verify a freshness. (However, the client should
> >>>>>>   not *start* sending an ETag once it learned the current resource's
> >>>>>>   ETag when still attempting to pull out more blocks, but that's also
> not
> >>>>>>   a normative requirement but a consequence of those two requests
> >> not
> >>>>>>   being matchable any more.)
> >>>>> [Jon] OK
> >>>>> OLD
> >>>>>    The ETag Option MUST NOT be used in the request as the server
> could
> >>>>>    respond with a 2.03 (Valid Response) with no payload.  If the server
> >>>>>    responds with a different ETag Option value (as the resource
> >>>>>    representation has changed), then the client SHOULD drop all the
> >>>>>    payloads for the current body that are no longer valid.
> >>>>> NEW
> >>>>>    The ETag Option should not be used in the request for missing
> >>>>> blocks as the server could respond with a 2.03 (Valid Response)
> >>>>> with no payload. It can be used in the request if the client wants
> >>>>> to check the freshness of the currently cached body response.
> >>>>>
> >>>>> If the server detects part way through a body transfer that the
> >>>>> resource data has changed and the server is not maintaining a
> >>>>> cached copy of the old data, then the body response SHOULD be
> >>>>> restarted with a different ETag Option value. Any subsequent
> >>>>> missing block requests MUST respond using the latest ETag Option
> value.
> >>>>>
> >>>>>  If the server responds during a body update with a different ETag
> >>>>> Option value (as the resource representation has changed), then
> >>>>> the client should treat the partial body with the old ETag as no
> >>>>> longer being
> >>>> fresh.
> >>>>> END
> >>>>>> * "then the client SHOULD drop all the payloads for the current
> body":
> >>>>>>   "Drop" is overly prescriptive; the client may well keep them, but
> >>>>>>   just can't consider them fresh any more. (If the client has ample
> >>>>>>   caching abilities, they might come in handy if the resource goes
> back
> >>>>>>   to that ETag state). Same for later "the client MUST remove any
> >>>>>>   partially received".
> >>>>> [Jon] See previous response, otherwise OLD
> >>>>>    If the server transmits a new body of data (e.g., a triggered
> >>>>>    Observe) with a new ETag to the same client as an additional
> >>>>>    response, the client MUST remove any partially received body held
> for
> >>>>>    a previous ETag.
> >>>>> NEW
> >>>>>    If the server transmits a new body of data (e.g., a triggered
> >>>>>    Observe) with a new ETag to the same client as an additional
> >>>>>    response, the client should remove any partially received body
> >>>>> held
> >> for
> >>>>>    a previous ETag for that resource as it is unlikely the missing
> >>>>> blocks can be retrieved.
> >>>>>> * "For Confirmable transmission, the client SHOULD continue to": As
> >>>>>>   above in the other direction, that's not news.
> >>>>> [Jon] Again, we are not looking for a response (well, a request in
> >>>>> this case as needed by Block2), just an ACK OLD
> >>>>>    For Confirmable transmission, the client SHOULD continue to
> >>>>>    acknowledge each packet as well as issuing a separate GET, POST,
> PUT,
> >>>>>    FETCH, PATCH, or iPATCH for the missing blocks.
> >>>>> NEW
> >>>>>    For Confirmable transmission, the server continues to acknowledge
> >>>>>   each packet, but a response is not required (whether separate or
> >>>>>   piggybacked) until successful receipt of the body or, if some of the
> >>>>>   payloads are sent as Non-confirmable and have not arrived, a
> >>>>>   retransmit missing payloads response is needed.
> >>>>>> * "If there is insufficient space to create a response PDU": I don't
> >>>>>>   understand what that means. (Where are request options reflected
> >>>>>>   back?).
> >>>>> [Jon] This was triggered by a question by Michael Richardson " So,
> >>>>> given a Christmas-Tree-Packet (largest packet, every possible
> >>>>> option space used, every extension turned on...) how much data can
> >>>>> I get back? :-)" and not fully thought through.
> >>>>> It could happen though with Location-Path, Location-Query,
> >>>>> Q-Block2, ETag,
> >>>>> Size2 and possibly Maxage, Content-Type, Hop-Limit or OSCORE  in
> >>>>> response to a POST.
> >>>>> OLD
> >>>>>    If there is insufficient space to create a response PDU with a block
> >>>>>    size of 16 bytes (SZX = 0) to reflect back all the request options as
> >>>>>    appropriate, a 4.13 (Request Entity Too Large) is returned without
> >>>>>    the Size2 Option.
> >>>>> NEW
> >>>>>    If there is insufficient space to create a response PDU with a block
> >>>>>    size of 16 bytes (SZX = 0) to send back all the response options as
> >>>>>    appropriate, a 4.13 (Request Entity Too Large) is returned without
> >>>>>    the Size1 Option.
> >>>>>
> >>>>>> * "If the client requests missing blocks, this is treated as a new
> >>>>>>    request.": I don't think the client should even make these follow-
> up
> >>>>>>    requests Observe, as it already has an ongoing observation. They'd
> be
> >>>>>>    sent on a different token too, so setting Observe would be opening
> >>>>>>    observation up on that token, which AFAIU is not intended. (Figure
> 7
> >>>>>>    example looks good to me in that respect.)
> >>>>>>
> >>>>>>    (It may make sense to ask the client to keep Observe to make the
> >>>>>>    requests matchable just for the sake of staying in atomic-request
> >>>>>>    mode. Either way, the server should then not accept that
> observation
> >>>>>>    as it's not for a block 0.)
> >>>>> [Jon] The intent here was that just a new Token should be used.
> >>>>> OLD
> >>>>>    If the client requests missing blocks, this is treated as a new
> >>>>>    request.  The Observe value may change but MUST still be reported.
> >>>>>    If the ETag value changes then the previously received partial body
> >>>>>    should be destroyed and the whole body re-requested.
> >>>>> NEW
> >>>>>    If the client requests missing blocks, this is treated as a new
> >>>>>    Request and the Observe Option MUST NOT be included.   If the ETag
> >>>> value
> >>>>> changes, then the previously received partial body
> >>>>>    should be considered as not fresh and the whole body re-requested.
> >>>>>
> >>>>>> * "First is CBOR encoded Request-Tag": Why? Each 4.08 response
> >>>>>> can
> >> be
> >>>>>>   matched by the token to a unique request that already had a
> >>>>>>   Request-Tag, and the client needs to have kept that token around
> >>>>>>   matched to the transfer to make sense of it.
> >>>>>>
> >>>>>>   No need to move that value around between subsystems, and just
> >>>>>>   dropping it from here would also remove the need for the "If the
> >>>>>>   client does not recognize the Request-Tag" clause (which would
> >>>>>>   otherwise need clarification as to what it'd mean if it recognizes it
> >>>>>>   but it doesn't match what the request was for).
> >>>>> [Jon] Good question - it does make sense for the Request-Tag to be
> >>>>> tracked alongside the Token in the client.
> >>>>> OLD
> >>>>>    The data payload of the 4.08 (Request Entity Incomplete) Response
> >>>>>    Code is encoded as a CBOR Sequence [RFC8742].  First is CBOR
> encoded
> >>>>>    Request-Tag followed by 1 or more missing CBOR encoded missing
> >> block
> >>>>>    numbers.
> >>>>> NEW
> >>>>>    The data payload of the 4.08 (Request Entity Incomplete) response
> >>>>>    is encoded as a CBOR Sequence [RFC8742].  There are one or more
> >>>> missing
> >>>>>    CBOR encoded missing block numbers.
> >>>>>
> >>>>> OLD
> >>>>>        ; This defines an array, the elements of which are to be used
> >>>>>        ; in a CBOR Sequence:
> >>>>>        payload = [request-tag, + missing-block-number]
> >>>>>        request-tag = bstr
> >>>>>        ; A unique block number not received:
> >>>>>        missing-block-number = uint NEW
> >>>>>        ; This defines an array, the elements of which are to be used
> >>>>>        ; in a CBOR Sequence:
> >>>>>        payload = [+ missing-block-number]
> >>>>>        request-tag = bstr
> >>>>>        ; A unique block number not received:
> >>>>>        missing-block-number = uint
> >>>>>
> >>>>> OLD
> >>>>>    A 4.08 (Request Entity Incomplete) Response Code returned with
> >>>>>    Content-Type "application/missing-blocks+cbor-seq" indicates that
> >>>>>    some of the payloads are missing and need to be resent.  The client
> >>>>>    then re-transmits the missing payloads using the Request-Tag and
> >>>>>    Q-Block1 to specify the block number, SZX, and M bit as appropriate.
> >>>>>    The Request-Tag value to use is determined from the payload of the
> >>>>>    4.08 (Request Entity Incomplete) Response Code.  If the client does
> >>>>>    not recognize the Request-Tag, the client can ignore this response.
> >>>>> NEW (option presentation has been reformatted)
> >>>>>   4.08 (Request Entity Incomplete)
> >>>>>
> >>>>>   This Response Code returned with Content-Type "application/
> >>>>>   missing-blocks+cbor-seq" indicates that some of the payloads are
> >>>>> missing and need to be resent.  The client then retransmits the
> >>>>>   missing payloads using the same Request-Tag, Size1 and Q-Block1
> >>>>> to specify the block number, SZX, and M bit as appropriate.
> >>>>>
> >>>>>
> >>>>>  The Request-Tag value to use is determined from the token in the
> >>>>>  4.08 (Request Entity Incomplete) response and then finding the
> >>>>> matching client request which contains the Request-Tag that is
> >>>>>   being used for this Q-Block1 body. END
> >>>>>> * "limit the array count to 23 (Undefined value)": 23 is the maximum
> >>>>>>   length of a zero-byte length indication, not indefinite-length (31).
> >>>>>>   Both using 23 and 31 here makes sense (up to 23 to have definite
> >>>>>>   length that can be updated in-place, or exceeding that switch to
> >>>>>>   indefinite length if they still fit), but the paragraph seems to be
> >>>>>>   mixing them up.
> >>>>> [Jon] OK
> >>>>> OLD
> >>>>>       Arrays (Section 3.2.2 of [RFC8949]), limit the array count to 23
> >>>>>       (Undefined value) so that the array data byte can be updated with
> >>>>>       the overall length once the payload length is confirmed or limited
> >>>>>       to MAX_PAYLOADS count.
> >>>>> NEW
> >>>>>       Arrays (Section 3.2.2 of [RFC8949]), or alternatively limit
> >>>>> the array count to
> >>>>>       23 so that the initial byte with the array major type and
> >>>>> data length in the additional information can be updated with the
> >>>>> overall count once the payload count is confirmed.  Further
> >>>>> restricting the count to MAX_PAYLOADS means that congestion
> >>>>> control is less likely to be
> >>>> invoked on the server.
> >>>>>> * "Each new request MUST use a unique token": Like above, this is
> >>>>>>   stating something that's not intended to be changed.
> >>>>> [Jon] RFC7252 does not require Tokens to be unique - e.g. empty
> >>>>> token values are acceptable.  Hence this statement.
> >>>>>> Congestion Control:
> >>>>>>
> >>>>>> * "Each NON 4.08 (Request Entity Incomplete) Response Codes is
> >>>> subjected
> >>>>>>    to PROBING_RATE.": That is unexpected here. At most one such
> >>>>>>    response is sent to each request message, so why is additional
> >>>>>>    congestion control needed?
> >>>>> [Jon] The intention here was that in the previous paragraph that
> >>>>> it was not the individual packets that are subject to
> >>>>> PROBING_RATE, but a single body comprising of multiple packets is
> >>>>> subject to PROBRING_RATE
> >>>>> - and hence limiting any individual responses to PROBING_RATE
> >>>>> rather than the potentially full set of responses OLD
> >>>>>    PROBING_RATE parameter in CoAP indicates the average data rate
> that
> >>>>>    must not be exceeded by a CoAP endpoint in sending to a peer
> >> endpoint
> >>>>>    that does not respond.  The body of blocks will be subjected to
> >>>>>    PROBING_RATE (Section 4.7 of [RFC7252]).
> >>>>> NEW
> >>>>>    PROBING_RATE parameter in CoAP indicates the average data rate
> that
> >>>>>    must not be exceeded by a CoAP endpoint in sending to a peer
> >> endpoint
> >>>>>    that does not respond.  The single body of blocks will be subjected
> to
> >>>>>    PROBING_RATE (Section 4.7 of [RFC7252]), not the individual
> packets.
> >>>>> If the wait time between sending bodies that are not being
> >>>>> responded to based on PROBING_RATE exceeds
> NON_PROBING_WAIT,
> >>>> then the
> >>>>>  gap time is limited to NON_PROBING_WAIT.
> >>>>>
> >>>>> Note: For the particular DOTS application, PROBING_RATE and other
> >>>>> transmission parameters are negotiated between peers.  Even when
> >>>>> not negotiated, the DOTS application uses customized defaults as
> >>>>> discussed in Section 4.5.2 of [RFC8782].
> >>>>> END
> >>>>>>    On the other hand, *ever* NON request is subject to
> >>>>>> PROBING_RATE,
> >> so
> >>>>>>    why point out the body of blocks and "GET or similar" particularly?
> >>>>> [Jon] It is only GET or FETCH.  The intention here is to not
> >>>>> request bodies of data at too high a rate.
> >>>>> OLD
> >>>>>    Each NON GET or similar request using Q-Block2 Option is subjected
> to
> >>>>>    PROBING_RATE.
> >>>>> NEW
> >>>>>    Each NON GET or FETCH request using Q-Block2 Option is
> >>>>> subjected to PROBING_RATE.
> >>>>>> * "a delay is introduced of ACK_TIMEOUT": As I understand
> >>>> MAX_PAYLOADS,
> >>>>>>   this is (rather implicitly) introduced as the package count up to
> >>>>>>   which it is OK to exceed PROBING_RATE temporarily (but after that
> it
> >>>>>>   kicks in all the harder by requiring to wait until complete-sent-
> bytes
> >>>>>>   over PROBING_RATE has expired). If that holds, at that time a much
> >>>>>>   larger delay than just ACK_TIMEOUT is needed to get a response
> from
> >>>>>>   the server: About 3 hours (see later note on parameters).
> >>>>> [Jon] Now limited to 247 seconds (NON_PROBING_WAIT).  See re-
> write
> >>>>> of Congestion Control section.
> >>>>>>   This is the crucial point in the document, and for it a
> recommendation
> >>>>>>   alone is not good enough. The protocol can be run with a vastly
> >>>>>>   increased PROBING_RATE (however externally determined) and
> from
> >>>> the
> >>>>>>   point of MAX_PAYLOADS just observe it. Or it has to get
> >>>>>> feedback
> >> from
> >>>>>>   the server; a single 4.08 is probably enough to kick off another
> >>>>>>   vollley of blocks. (How many? MAX_PAYLOADS for every
> response?).
> >>>>>>   Both can be permitted, but just waiting ACK_TIMEOUT isn't doing
> any
> >>>>>>   good.
> >>>>> [Jon] See re-write of Congestion Control section where things
> >>>>> should now be simpler and more logical.  There is an introduction
> >>>>> of new variable definitions.
> >>>>>> * "For NON transmissions": This seems to imply that the full
> >>>>>> exchange
> >> of
> >>>>>>   a body is either NON or CON; I don't see where that'd come from.
> I'd
> >>>>>>   have expected to read something like "Each individual request can
> be
> >>>>>>   NON or CON independent of the others. In particular, it can be
> >>>>>>   convenient to send the ultimate payload...".
> >>>>> [Jon]The DOTS environment will only be using NON.  To make
> >>>>> Congestion Control simple, the expectation is that all
> >>>>> transmissions are NON or (not recommended) are all CON. The draft
> >>>>> now generally records this expectation.
> >>>>>> * "If a Confirmable packet is used, then the transmitting peer
> >>>>>> MUST
> >> wait
> >>>>>>   for the ACK": Why? A NSTART > 1 would give it leisure to still
> >>>>>>   transmit.
> >>>>> [Jon] Text has been removed in the clean-up.
> >>>>>> * General on congestion control: It may help implementors if this
> were
> >>>>>>   split up into newly introduced rules and concepts (that is,
> >>>>>>   MAX_PAYLOADS and the answer to whether you may send
> >>>> MAX_PAYLOADS en
> >>>>>>   block again after having only even one response from the last
> round,
> >>>>>>   and probably the recommended parameters of the "Also on
> >>>> parameters"
> >>>>>>   comment), and another subsection on how Q-Block behaves well
> >> when
> >>>>>>   observing these.
> >>>>> [Jon] Should now be covered in the updated Congestion Control
> >> section.
> >>>>>> Caching:
> >>>>>>
> >>>>>> * "are not part of the cache key": How about "are removed as part
> >>>>>> of
> >> the
> >>>>>>   block assembly and thus do not reach the cache"?
> >>>>> [Jon] OK.
> >>>>> OLD
> >>>>>    As the entire body is being cached in the proxy, the Q-Block1 and
> >>>>>    Q-Block2 Options are not part of the cache key.
> >>>>> NEW
> >>>>>    As the entire body is being cached in the proxy, the Q-Block1 and
> >>>>>    Q-Block2 Options are removed as part of the block assembly and
> >>>>> thus do not reach the cache.
> >>>>>> * "When the next client completes building the body": If the proxy
> >>>>>>   chooses not to let them happen in parallel (which it may, see
> >>>>>> above
> >> on
> >>>>>>   parallel requests, although the server might still not support it and
> >>>>>>   cancel one of them), why bother letting the first finish just to abort
> >>>>>>   it? (IOW: If the proxy does not intend to see both through, which it
> >>>>>>   could if it held back the second until the first is through on the
> >>>>>>   uplink, it could just as well err out of one of them early, but it may
> >>>>>>   also rather see both through.)
> >>>>> [Jon] It has to be assumed that traffic to/from the origin client
> >>>>> and origin server may not both support Q-Blockx and potentially
> >>>>> may have a different SZX.  Thus passing a request or a response
> >>>>> through at the block level introduces a new set of challenges (but
> >>>>> not impossible to fix).  To keep this simple, my thinking was that
> >>>>> the passing through can only take place at the body level.  Again,
> >>>>> the arrival of packets is not necessarily sequential, so client
> >>>>> A's body may start transmitting to the origin server first, but
> >>>>> client B's body starts to arrive first - the same being true for
> >>>>> the proxy as a client may stop transmitting for whatever reason
> >>>>> (restart, network loss
> >> etc.).
> >>>>> However this is covered by the above update "  If a server
> >>>>> receives payloads with different Request-Tags for the same
> >>>>> resource, it should
> >>>> continue to process all the bodies".
> >>>>> OLD
> >>>>>    and the new body representation transmission starts with a new
> >>>>>    Request-Tag value.
> >>>>> NEW
> >>>>>    and the new body representation transmission starts with a new
> >>>>>    Request-Tag value.  Note that it cannot be assumed that the
> >>>>> proxy will always receive a complete body from a client.
> >>>>>> * Examples:
> >>>>>>
> >>>>>>   * Figure 5: The ... between e3 request and response indicate the
> >>>>>>     MAX_TRANSMIT_SPAN before sending the 4.08 response. I
> suppose
> >>>> there
> >>>>>>     should be the same kind of delay between the failed e5
> transmission
> >>>>>>     and the e4 response.
> >>>>> [Jon] Agreed and added in
> >>>>>>   * If the second burst had 3 requests out of which 2 made it, is there
> >>>>>>     any guidance for which of them the 4.08 would come back on? (In
> the
> >>>>>>     end, none of them is terminal).
> >>>>> [Jon] The client should tracking all Tokens of the burst (hence
> >>>>> implementation note about bottom 32bits unique and top 32 bits
> >>>>> matching block number for ease of tracking) for a response and so
> >>>>> it will make no difference at to which token is used for the 4.08
> >>>>> response.  From an implementation perspective, it probably is
> >>>>> easier to track the last opaque token that has the same Request-Tag.
> >>>>> OLD
> >>>>>    missing ones in one go (Figure 5).  It does so by indicating which
> >>>>>    blocks have been received in the data portion of the response.
> >>>>> NEW
> >>>>>    missing ones in one go (Figure 5).  It does so by indicating which
> >>>>>    blocks have been received in the data portion of the response.
> >>>>> The Token just needs to be one of those that have been received
> >>>>> for this Request-Tag , so the client can derive the Request-Tag.
> >>>>>>   * If that e4 response gets lost, does the whole mechanism
> >>>>>> recover
> >> from
> >>>>>>     it in any way?
> >>>>> [Jon] In this example, if e4 and e5 get lost, there will be no
> >>>>> 4.08/2.01/2.04/5.xx etc. response, so it is up to the client as to
> >>>>> whether it sends the request again or gives up.  See 9.1
> >>>>>   "Under high levels of traffic loss, the client can elect not to retry
> >>>>>    sending missing blocks of data.  This decision is implementation
> >>>>>    specific."
> >>>>>>     Generally, the all-NON and all-CON examples don't look to me like
> >>>>>>     what I'd be doing with this spec; the mixed "a CON every
> >>>>>>     MAX_PAYLOADS" appears much more realistic.
> >>>>> [Jon] It is unsafe to use CON in the  (potentially lossy) DOTS
> >>>>> environment (up to 93 secs timeout per payload with the defaults).
> >>>>> Hence why we are separating out the NON / CON usage.
> >>>>>>   * Figure X: The request ahs M unset and thus indicats a request for
> >>>>>>     just that block. If more than one is expected, it should say
> >>>>>>     QB2:0/1/1024.
> >>>>> [Jon] With Figure 7, with the M bit set, block 3 would get
> >>>>> returned for a second time.  Draft-ietf-core-new-block-03 also has
> >>>>> a Figure 8 which does exactly what you describe.
> >>>>>> * New Content Format: I think this needs a media type
> >>>>>> registration to
> >> go
> >>>>>>   with it first; based on that, a content format can be registered.
> >>>>> [Jon] Med has responded to this and draft updated.
> >>>>>> * General on MAX_TRANSMIT_SPAN and other timing parameters:
> I'm
> >> not
> >>>>>> sure
> >>>>>>   they're 1:! applicable here. For example, MAX_TRANSMIT_SPAN is
> >>>> defined
> >>>>>>   in terms of reliable transmission, but used for NONs as well. (So is
> >>>>>>   the alternative ot 2x ACK_TIMEOUT).
> >>>>> [Jon] I hear you about the use of MAX_TRANSMIT_SPAN and
> >> ACK_TIMEOUT
> >>>> in
> >>>>> a NON environment. Hence re-write of Congestion Control section
> >>>>> defining new variables that can be used for NON.
> >>>>>>   For the purpose of delaying a 4.08 or a follow-up GET, it may make
> >>>>>>   more sense to define a new parameter based on MAX_LATENCY and
> >> the
> >>>>>> time
> >>>>>>   it takes the sender to pump out the options (which I don't think we
> >>>>>>   have a good factor for, but may even be negligible here).
> >>>>>>
> >>>>>>   Could read like this:
> >>>>>>
> >>>>>>   > The timing parameter MAX_BLOCK_JITTER is introduced, and by
> >>>> default
> >>>>>>   > takes a value of MAX_LATENCY + MAX_PAYLOADS * MTU /
> >>>> BANDWIDTH.
> >>>>> [Jon]  Lets plug in some numbers here.  MAX_LATENCY = 100,
> >>>>> MAX_PAYLOADS = 10, MTU = 1280bytes and BANDWIDTH = 1Mbps.
> >>>>>
> >>>>> [Jon] MAX_BLOCK_JITTER = 100 + (10 * 1280 * 8)/(1 000 000) = 100.1.
> >>>>> So BANDWITH of 1Mbps has negligible effect on the calculation.
> >>>>> 1Kbps makes MAX_BLOCK_JITTER 200 seconds.
> >>>>>>   >
> >>>>>>   > With Q-Block2, a client can ask for any missing blocks after not
> >>>>>>   > having received any further response for the duration of
> >>>>>>   > MAX_BLOCK_JITTER.
> >>>>> [Jon] 100+ seconds delay is way too much time to wait for any
> >>>>> missing blocks in my opinion.
> >>>>>
> >>>>> [Jon] RFC7252 also states (and the intention is that recovery
> >>>>> works
> >>>>> well) " as MAX_LATENCY is not
> >>>>>       intended to describe a situation when the protocol works well, but
> >>>>>       the worst-case situation against which the protocol has to guard."
> >>>>>>   >
> >>>>>>   > With Q-Block1, a server holds off any response for
> >> MAX_BLOCK_JITTER
> >>>>>>   > unless all blocks have been received. Only then it evaluates
> >> whether
> >>>>>>   > to respond with a 2.0x code, a 4.08 with payload, or not at all
> >>>>>>   > (because it responded to a later request).
> >>>>> [Jon] I am not convinced that this is necessarily the way to go.
> >>>>> The new Congestion Control more cleanly handles this.
> >>>>>>   This also brings me back to the earlier matter of 2.31: What is a
> >>>>>>   server supposed to send when no packages were lost, but it's
> pasing
> >>>>>>   the timeout and wants to help the client flush out more packages
> by
> >>>>>>   confirming something? It says 4.08 in 3.3, but it's not like there's a
> >>>>>>   hole in the contiguous range. Does it need to send 4.08
> enumerating
> >>>>>>   all (or at least some) numbers between the first unreceived and
> >> what's
> >>>>>>   indicated by Size1? Or can it just send 2.31 and the client knows all
> >>>>>>   it needs to know b/c the response came to the largest block that
> was
> >>>>>>   sent and 2.31 indicates that everything is good up to that point?
> >>>>> [Jon] The previous draft states (under Congestion Control) that
> >>>>> the client waits for ACK_TIMEOUT before transmitting the next set
> >>>>> of MAX_PAYLOADS blocks.  The server should wait for "two times
> >>>>> ACK_TIMEOUT " (3.3) before indicating issue.  Apart from perhaps
> >>>>> having a new name for ACK_TIMOUT I think that these are reasonable
> >>>>> values for Non-Confirmable - and are used in the new Congestion
> >>>>> Control
> >>>> section.
> >>>>> [Jon] I have reworked Congestion Control to use 2.31 (NON only) as
> >>>>> a signal to say that all of the current MAX_PAYLOADS payloads of a
> >>>>> body have been received, so allowing the client to continue
> >>>>> transmitting the next set of MAX_PAYLOADS payloads without the
> >>>>> need to wait any
> >>>> longer.
> >>>>>> * Also on parameters: This document is describing flow control stuff
> >>>>>>   around a situation CoAP was not originally designed for. Wouldn't it
> >>>>>>   make sense to include a set of parameters (PROBING_RATE,
> >>>> MAX_LATENCY,
> >>>>>>   ACK_TIMEOUT) that's suitable for the DOTS use case? I doubt that
> >>>>>>   PROBING_RATE will be left to 1 byte/second for any DOTS
> application
> >>>>>>   using this (for sending 10KiB in the initial 10-package
> MAX_PAYLOADS
> >>>>>>   burst would mark that connection as unusable for about 3 hours
> >>>>>> if
> >> they
> >>>>>>   all get lost), so better give justifiable numbers here than rely on
> >>>>>>   implemnetors to come up with unreviewed numbers or disregard
> >>>>>>   PROBING_RATE altogether.
> >>>>> [Jon] Answered by Med, and some new text added.
> >>>>>>   I don't know if it needs additional justification, but an increased
> >>>>>>   N_START may be justifiable there.
> >>>>> [Jon] It may be, but tuning the other associated parameters is
> >>>>> really out of the cope of this draft. This text has been added NEW
> >>>>> Congestion control for CON requests and responses is specified in
> >>>>> Section 4.7 of [RFC7252].  For faster transmission rates, NSTART will
> >>>>>   need to be increased from 1.  However, the other CON congestion
> >>>>>   control parameters will need to be tuned to cover this change.  This
> >>>>>   tuning is out of scope of this document as it is expected that all
> >>>>>   requests and responses using Q-Block1 and Q-Block2 will be Non-
> >>>>>   confirmable.
> >>>>>> * Somewhere (never comes up but I think it should): When CONs are
> >>>> used,
> >>>>>>   a 4.08 (or 2.31?) response to a later request can indicate to the
> >>>>>>   client that an earlier CON request has been processed successfully.
> If
> >>>>>>   the client can match that up (and it should be able to), then it can
> >>>>>>   (and should) cancel that particular CON request.
> >>>>> [Jon] I think that this is covered by my update above with the text "
> >>>>> NEW
> >>>>>    For Confirmable transmission, the server continues to acknowledge
> >>>>>   each packet, but a response is not required (whether separate or
> >>>>>   piggybacked) until successful receipt of the body or, if some of the
> >>>>>   payloads are sent as Non-confirmable and have not arrived, a
> >>>>>   retransmit missing payloads response is needed."
> >>>>>
> >>>>> And in my previous part 1 response (updated) NEW For Confirmable
> >>>>> transmission, the server continues to acknowledge  each packet,
> >>>>> but a response is not required (whether separate or
> >>>>>  piggybacked) until successful receipt of the body or, if some of the
> >>>>>   payloads are sent as Non-confirmable and have not arrived, a
> >>>>>   retransmit missing payloads response is needed.
> >>>>>> Best regards
> >>>>>> Christian
> >>>>>>
> >>>>>> --
> >>>>>> There's always a bigger fish.
> >>>>>>   -- Qui-Gon Jinn
> >>>>> _______________________________________________
> >>>>> core mailing list
> >>>>> core@ietf.org
> >>>>>
> >>
> https://eur02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fww
> >>>> w.
> >>>>
> >>
> ietf.org%2Fmailman%2Flistinfo%2Fcore&amp;data=04%7C01%7Cmarco.tiloc
> >>>> a%4
> >>>>
> >>
> 0ri.se%7C52440c4d23e244168b2108d8b2574780%7C5a9809cf0bcb413a838a09
> >>>> ecc4
> >>>>
> >>
> 0cc9e8%7C0%7C0%7C637455435959417764%7CUnknown%7CTWFpbGZsb3d8
> >>>> eyJWIjoiMC
> >>>>
> >>
> 4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C2000&
> >>>> amp;sd
> >>>>
> >>
> ata=tEJ8tHhaLeWl4dtblsDzyli5TBSmfnRTxdepcwxhYzY%3D&amp;reserved=0
> >>>> --
> >>>> Marco Tiloca
> >>>> Ph.D., Senior Researcher
> >>>>
> >>>> RISE Research Institutes of Sweden
> >>>> Division ICT
> >>>> Isafjordsgatan 22 / Kistagången 16
> >>>> SE-164 40 Kista (Sweden)
> >>>>
> >>>> Phone: +46 (0)70 60 46 501
> >>>>
> >>
> https://eur02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fww
> >> w
> >>
> .ri.se%2F&amp;data=04%7C01%7Cmarco.tiloca%40ri.se%7C2385ef89ef574a7
> >> c8
> >>
> 1f608d8b3da00ba%7C5a9809cf0bcb413a838a09ecc40cc9e8%7C0%7C0%7C637
> >> 45709
> >>
> 6666457035%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIj
> >> oiV2luMz
> >>
> IiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C2000&amp;sdata=iJgJcxZmwbaLrb
> >> mzIuz
> >>>> SjezxDRq47wwWcNvFC7ox8bw%3D&amp;reserved=0
> >>>>
> >> --
> >> Marco Tiloca
> >> Ph.D., Senior Researcher
> >>
> >> RISE Research Institutes of Sweden
> >> Division ICT
> >> Isafjordsgatan 22 / Kistagången 16
> >> SE-164 40 Kista (Sweden)
> >>
> >> Phone: +46 (0)70 60 46 501
> >>
> https://eur02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fww
> w
> >>
> .ri.se%2F&amp;data=04%7C01%7Cmarco.tiloca%40ri.se%7C8651a6788136434
> 84
> >>
> 22608d8b3f94057%7C5a9809cf0bcb413a838a09ecc40cc9e8%7C0%7C0%7C637
> 45723
> >>
> 0862239405%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIj
> oiV2luMz
> >>
> IiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C2000&amp;sdata=po%2BnNJAbUW
> 7Jf9cMF
> >> xoP8VXDd1%2FfS%2BsyTl4dePY5A9o%3D&amp;reserved=0
> >>
> >
> 
> --
> Marco Tiloca
> Ph.D., Senior Researcher
> 
> RISE Research Institutes of Sweden
> Division ICT
> Isafjordsgatan 22 / Kistagången 16
> SE-164 40 Kista (Sweden)
> 
> Phone: +46 (0)70 60 46 501
> https://www.ri.se
>