rfc9177v2.txt | rfc9177.txt | |||
---|---|---|---|---|
Internet Engineering Task Force (IETF) M. Boucadair | Internet Engineering Task Force (IETF) M. Boucadair | |||
Request for Comments: 9177 Orange | Request for Comments: 9177 Orange | |||
Category: Standards Track J. Shallow | Category: Standards Track J. Shallow | |||
ISSN: 2070-1721 February 2022 | ISSN: 2070-1721 March 2022 | |||
Constrained Application Protocol (CoAP) Block-Wise Transfer Options | Constrained Application Protocol (CoAP) Block-Wise Transfer Options | |||
Supporting Robust Transmission | Supporting Robust Transmission | |||
Abstract | Abstract | |||
This document specifies alternative Constrained Application Protocol | This document specifies alternative Constrained Application Protocol | |||
(CoAP) block-wise transfer options: Q-Block1 and Q-Block2. | (CoAP) block-wise transfer options: Q-Block1 and Q-Block2. | |||
These options are similar to, but distinct from, the CoAP Block1 and | These options are similar to, but distinct from, the CoAP Block1 and | |||
skipping to change at line 1037 ¶ | skipping to change at line 1037 ¶ | |||
Table 3: Congestion Control Parameters | Table 3: Congestion Control Parameters | |||
The PROBING_RATE parameter in CoAP indicates the average data rate | The PROBING_RATE parameter in CoAP indicates the average data rate | |||
that must not be exceeded by a CoAP endpoint in sending to a peer | that must not be exceeded by a CoAP endpoint in sending to a peer | |||
endpoint that does not respond. A single body will be subjected to | endpoint that does not respond. A single body will be subjected to | |||
PROBING_RATE (Section 4.7 of [RFC7252]), not the individual packets. | PROBING_RATE (Section 4.7 of [RFC7252]), not the individual packets. | |||
If the wait time between sending bodies that are not being responded | If the wait time between sending bodies that are not being responded | |||
to based on PROBING_RATE exceeds NON_PROBING_WAIT, then the wait time | to based on PROBING_RATE exceeds NON_PROBING_WAIT, then the wait time | |||
is limited to NON_PROBING_WAIT. | is limited to NON_PROBING_WAIT. | |||
Note: For the particular DOTS application, PROBING_RATE and other | | Note: For the particular DOTS application, PROBING_RATE and | |||
transmission parameters are negotiated between peers. Even when | | other transmission parameters are negotiated between peers. | |||
not negotiated, the DOTS application uses customized defaults, as | | Even when not negotiated, the DOTS application uses customized | |||
discussed in Section 4.5.2 of [RFC9132]. Note that MAX_PAYLOADS, | | defaults, as discussed in Section 4.5.2 of [RFC9132]. Note | |||
NON_MAX_RETRANSMIT, NON_TIMEOUT, NON_PROBING_WAIT, and | | that MAX_PAYLOADS, NON_MAX_RETRANSMIT, NON_TIMEOUT, | |||
NON_PARTIAL_TIMEOUT can be negotiated between DOTS peers, e.g., as | | NON_PROBING_WAIT, and NON_PARTIAL_TIMEOUT can be negotiated | |||
per [DOTS-QUICK-BLOCKS]. When explicit values are configured for | | between DOTS peers, e.g., as per [DOTS-QUICK-BLOCKS]. When | |||
NON_PROBING_WAIT and NON_PARTIAL_TIMEOUT, these values are used | | explicit values are configured for NON_PROBING_WAIT and | |||
without applying any jitter. | | NON_PARTIAL_TIMEOUT, these values are used without applying any | |||
| jitter. | ||||
Each NON 4.08 (Request Entity Incomplete) response is subject to | Each NON 4.08 (Request Entity Incomplete) response is subject to | |||
PROBING_RATE. | PROBING_RATE. | |||
Each NON GET or FETCH request using a Q-Block2 option is subject to | Each NON GET or FETCH request using a Q-Block2 option is subject to | |||
PROBING_RATE. | PROBING_RATE. | |||
As the sending of many payloads of a single body may itself cause | As the sending of many payloads of a single body may itself cause | |||
congestion, after transmission of every MAX_PAYLOADS_SET of a single | congestion, after transmission of every MAX_PAYLOADS_SET of a single | |||
body, a delay of NON_TIMEOUT_RANDOM MUST be introduced before sending | body, a delay of NON_TIMEOUT_RANDOM MUST be introduced before sending | |||
skipping to change at line 1083 ¶ | skipping to change at line 1084 ¶ | |||
(Continue) response code for the latest payload sent, then the client | (Continue) response code for the latest payload sent, then the client | |||
can continue to send the next MAX_PAYLOADS_SET without any further | can continue to send the next MAX_PAYLOADS_SET without any further | |||
delay. If the server responds with a 4.08 (Request Entity | delay. If the server responds with a 4.08 (Request Entity | |||
Incomplete) response code, then the missing payloads SHOULD be | Incomplete) response code, then the missing payloads SHOULD be | |||
retransmitted before going into another NON_TIMEOUT_RANDOM delay | retransmitted before going into another NON_TIMEOUT_RANDOM delay | |||
prior to sending the next set of payloads. | prior to sending the next set of payloads. | |||
For the server receiving NON Q-Block1 requests, it SHOULD send back a | For the server receiving NON Q-Block1 requests, it SHOULD send back a | |||
2.31 (Continue) response code on receipt of all of the | 2.31 (Continue) response code on receipt of all of the | |||
MAX_PAYLOADS_SET to prevent the client unnecessarily delaying the | MAX_PAYLOADS_SET to prevent the client unnecessarily delaying the | |||
transer of remaing blocks. If not all of the MAX_PAYLOADS_SET were | transfer of remaing blocks. If not all of the MAX_PAYLOADS_SET were | |||
received, the server SHOULD delay for NON_RECEIVE_TIMEOUT | received, the server SHOULD delay for NON_RECEIVE_TIMEOUT | |||
(exponentially scaled based on the repeat request count for a | (exponentially scaled based on the repeat request count for a | |||
payload) before sending the 4.08 (Request Entity Incomplete) response | payload) before sending the 4.08 (Request Entity Incomplete) response | |||
code for the missing payload(s). If all of the MAX_PAYLOADS_SET were | code for the missing payload(s). If all of the MAX_PAYLOADS_SET were | |||
received and a 2.31 (Continue) response code had been sent, but no | received and a 2.31 (Continue) response code had been sent, but no | |||
more payloads were received for NON_RECEIVE_TIMEOUT (exponentially | more payloads were received for NON_RECEIVE_TIMEOUT (exponentially | |||
scaled), the server SHOULD send a 4.08 (Request Entity Incomplete) | scaled), the server SHOULD send a 4.08 (Request Entity Incomplete) | |||
response detailing the missing payloads after the block number that | response detailing the missing payloads after the block number that | |||
was indicated in the sent 2.31 (Continue) response code. If the | was indicated in the sent 2.31 (Continue) response code. If the | |||
repeat response count of the 4.08 (Request Entity Incomplete) exceeds | repeat response count of the 4.08 (Request Entity Incomplete) exceeds | |||
End of changes. 3 change blocks. | ||||
11 lines changed or deleted | 12 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |