draft-ietf-core-new-block-10.txt   draft-ietf-core-new-block-11.txt 
CoRE Working Group M. Boucadair CoRE Working Group M. Boucadair
Internet-Draft Orange Internet-Draft Orange
Intended status: Standards Track J. Shallow Intended status: Standards Track J. Shallow
Expires: October 16, 2021 April 14, 2021 Expires: October 30, 2021 April 28, 2021
Constrained Application Protocol (CoAP) Block-Wise Transfer Options for Constrained Application Protocol (CoAP) Block-Wise Transfer Options for
Faster Transmission Faster Transmission
draft-ietf-core-new-block-10 draft-ietf-core-new-block-11
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 Options. (CoAP) Block-Wise transfer options: Q-Block1 and Q-Block2 Options.
These options are similar to the CoAP Block1 and Block2 Options These options are similar to the CoAP Block1 and Block2 Options
defined in RFC 7959, not a replacement for them, but do enable faster defined in RFC 7959, not a replacement for them, but do enable faster
transmission rates for large amounts of data with less packet transmission rates for large amounts of data with less packet
interchanges. Also, Q-Block1 and Q-Block2 Options support faster interchanges. Also, Q-Block1 and Q-Block2 Options support faster
skipping to change at page 1, line 38 skipping to change at page 1, line 38
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/. Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on October 16, 2021. This Internet-Draft will expire on October 30, 2021.
Copyright Notice Copyright Notice
Copyright (c) 2021 IETF Trust and the persons identified as the Copyright (c) 2021 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(https://trustee.ietf.org/license-info) in effect on the date of (https://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
skipping to change at page 2, line 31 skipping to change at page 2, line 31
4.5. Using Observe Option . . . . . . . . . . . . . . . . . . 16 4.5. Using Observe Option . . . . . . . . . . . . . . . . . . 16
4.6. Using Size1 and Size2 Options . . . . . . . . . . . . . . 16 4.6. Using Size1 and Size2 Options . . . . . . . . . . . . . . 16
4.7. Using Q-Block1 and Q-Block2 Options Together . . . . . . 16 4.7. Using Q-Block1 and Q-Block2 Options Together . . . . . . 16
4.8. Using Q-Block2 Option With Multicast . . . . . . . . . . 16 4.8. Using Q-Block2 Option With Multicast . . . . . . . . . . 16
5. The Use of 4.08 (Request Entity Incomplete) Response Code . . 16 5. The Use of 4.08 (Request Entity Incomplete) Response Code . . 16
6. The Use of Tokens . . . . . . . . . . . . . . . . . . . . . . 18 6. The Use of Tokens . . . . . . . . . . . . . . . . . . . . . . 18
7. Congestion Control for Unreliable Transports . . . . . . . . 18 7. Congestion Control for Unreliable Transports . . . . . . . . 18
7.1. Confirmable (CON) . . . . . . . . . . . . . . . . . . . . 18 7.1. Confirmable (CON) . . . . . . . . . . . . . . . . . . . . 18
7.2. Non-confirmable (NON) . . . . . . . . . . . . . . . . . . 19 7.2. Non-confirmable (NON) . . . . . . . . . . . . . . . . . . 19
8. Caching Considerations . . . . . . . . . . . . . . . . . . . 22 8. Caching Considerations . . . . . . . . . . . . . . . . . . . 22
9. HTTP-Mapping Considerations . . . . . . . . . . . . . . . . . 23 9. HTTP-Mapping Considerations . . . . . . . . . . . . . . . . . 24
10. Examples with Non-confirmable Messages . . . . . . . . . . . 23 10. Examples with Non-confirmable Messages . . . . . . . . . . . 24
10.1. Q-Block1 Option . . . . . . . . . . . . . . . . . . . . 24 10.1. Q-Block1 Option . . . . . . . . . . . . . . . . . . . . 24
10.1.1. A Simple Example . . . . . . . . . . . . . . . . . . 24 10.1.1. A Simple Example . . . . . . . . . . . . . . . . . . 24
10.1.2. Handling MAX_PAYLOADS Limits . . . . . . . . . . . . 24 10.1.2. Handling MAX_PAYLOADS Limits . . . . . . . . . . . . 25
10.1.3. Handling MAX_PAYLOADS with Recovery . . . . . . . . 25 10.1.3. Handling MAX_PAYLOADS with Recovery . . . . . . . . 25
10.1.4. Handling Recovery with Failure . . . . . . . . . . . 26 10.1.4. Handling Recovery with Failure . . . . . . . . . . . 27
10.2. Q-Block2 Option . . . . . . . . . . . . . . . . . . . . 27 10.2. Q-Block2 Option . . . . . . . . . . . . . . . . . . . . 27
10.2.1. A Simple Example . . . . . . . . . . . . . . . . . . 27 10.2.1. A Simple Example . . . . . . . . . . . . . . . . . . 28
10.2.2. Handling MAX_PAYLOADS Limits . . . . . . . . . . . . 28 10.2.2. Handling MAX_PAYLOADS Limits . . . . . . . . . . . . 28
10.2.3. Handling MAX_PAYLOADS with Recovery . . . . . . . . 29 10.2.3. Handling MAX_PAYLOADS with Recovery . . . . . . . . 29
10.2.4. Handling Recovery using M-bit Set . . . . . . . . . 30 10.2.4. Handling Recovery using M-bit Set . . . . . . . . . 30
10.3. Q-Block1 and Q-Block2 Options . . . . . . . . . . . . . 31 10.3. Q-Block1 and Q-Block2 Options . . . . . . . . . . . . . 31
10.3.1. A Simple Example . . . . . . . . . . . . . . . . . . 31 10.3.1. A Simple Example . . . . . . . . . . . . . . . . . . 31
10.3.2. Handling MAX_PAYLOADS Limits . . . . . . . . . . . . 32 10.3.2. Handling MAX_PAYLOADS Limits . . . . . . . . . . . . 32
10.3.3. Handling Recovery . . . . . . . . . . . . . . . . . 33 10.3.3. Handling Recovery . . . . . . . . . . . . . . . . . 33
11. Security Considerations . . . . . . . . . . . . . . . . . . . 35 11. Security Considerations . . . . . . . . . . . . . . . . . . . 35
12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 36 12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 36
12.1. CoAP Option Numbers Registry . . . . . . . . . . . . . . 36 12.1. CoAP Option Numbers Registry . . . . . . . . . . . . . . 36
skipping to change at page 8, line 16 skipping to change at page 8, line 16
response (i.e., in that message to the payload of which it pertains), response (i.e., in that message to the payload of which it pertains),
it indicates a block-wise transfer and describes how this specific it indicates a block-wise transfer and describes how this specific
block-wise payload forms part of the entire body being transferred. block-wise payload forms part of the entire body being transferred.
If it is present in the opposite direction, it provides additional If it is present in the opposite direction, it provides additional
control on how that payload will be formed or was processed. control on how that payload will be formed or was processed.
To indicate support for Q-Block2 responses, the CoAP client MUST To indicate support for Q-Block2 responses, the CoAP client MUST
include the Q-Block2 Option in a GET or similar request (FETCH, for include the Q-Block2 Option in a GET or similar request (FETCH, for
example), the Q-Block2 Option in a PUT or similar request, or the example), the Q-Block2 Option in a PUT or similar request, or the
Q-Block1 Option in a PUT or similar request so that the server knows Q-Block1 Option in a PUT or similar request so that the server knows
that the client supports this Q-Block2 functionality should it need that the client supports this Q-Block functionality should it need to
to send back a body that spans multiple payloads. Otherwise, the send back a body that spans multiple payloads. Otherwise, the server
server would use the Block2 Option (if supported) to send back a would use the Block2 Option (if supported) to send back a message
message body that is too large to fit into a single IP packet body that is too large to fit into a single IP packet [RFC7959].
[RFC7959].
How a client decides whether it needs to include a Q-Block1 or How a client decides whether it needs to include a Q-Block1 or
Q-Block2 Option can be driven by a local configuration knob, Q-Block2 Option can be driven by a local configuration knob,
triggered by an application (DOTS, for example), etc. Such triggered by an application (DOTS, for example), etc. Such
considerations are out of the scope of the document. considerations are out of the scope of the document.
Implementation of the Q-Block1 and Q-Block2 Options is intended to be Implementation of the Q-Block1 and Q-Block2 Options is intended to be
optional. However, when it is present in a CoAP message, it MUST be optional. However, when it is present in a CoAP message, it MUST be
processed (or the message rejected). Therefore, Q-Block1 and processed (or the message rejected). Therefore, Q-Block1 and
Q-Block2 Options are identified as Critical options. Q-Block2 Options are identified as Critical options.
skipping to change at page 10, line 46 skipping to change at page 10, line 46
starting from zero, until the body is complete (subject to any starting from zero, until the body is complete (subject to any
congestion control (Section 7)). Any missing payloads requested by congestion control (Section 7)). Any missing payloads requested by
the server must in addition be separately transmitted with increasing the server must in addition be separately transmitted with increasing
block numbers. block numbers.
The following Response Codes are used: The following Response Codes are used:
2.01 (Created) 2.01 (Created)
This Response Code indicates successful receipt of the entire body This Response Code indicates successful receipt of the entire body
and that the resource was created. The token used MUST be any and that the resource was created. The token used MUST be one of
token that was received in a request using the same Request-Tag. the tokens that were received in a request for this block-wise
However, it is desirable to provide the one used in the last exchange. However, it is desirable to provide the one used in the
received request, since that will aid any troubleshooting. The last received request, since that will aid any troubleshooting.
client should then release all of the tokens used for this body. The client should then release all of the tokens used for this
Note that the last received payload may not be the one with the body. Note that the last received payload may not be the one with
highest block number. the highest block number.
2.02 (Deleted) 2.02 (Deleted)
This Response Code indicates successful receipt of the entire body This Response Code indicates successful receipt of the entire body
and that the resource was deleted when using POST (Section 5.8.2 and that the resource was deleted when using POST (Section 5.8.2
[RFC7252]). The token used MUST be any token that was received in [RFC7252]). The token used MUST be one of the tokens that were
a request using the same Request-Tag. However, it is desirable to received in a request for this block-wise exchange. However, it
provide the one used in the last received request. The client is desirable to provide the one used in the last received request.
should then release all of the tokens used for this body. The client should then release all of the tokens used for this
body.
2.04 (Changed) 2.04 (Changed)
This Response Code indicates successful receipt of the entire body This Response Code indicates successful receipt of the entire body
and that the resource was updated. The token used MUST be any and that the resource was updated. The token used MUST be one of
token that was received in a request using the same Request-Tag. the tokens that were received in a request for this block-wise
However, it is desirable to provide the one used in the last exchange. However, it is desirable to provide the one used in the
received request. The client should then release all of the last received request. The client should then release all of the
tokens used for this body. tokens used for this body.
2.05 (Content) 2.05 (Content)
This Response Code indicates successful receipt of the entire This Response Code indicates successful receipt of the entire
FETCH request body (Section 2 of [RFC8132]) and that the FETCH request body (Section 2 of [RFC8132]) and that the
appropriate representation of the resource is being returned. The appropriate representation of the resource is being returned. The
token used MUST be any token that was received in a request using token used MUST be one of the tokens that were received in a
the same Request-Tag. However, it is desirable to provide the one request for this block-wise exchange. However, it is desirable to
used in the last received request. provide the one used in the last received request.
If the FETCH request includes the Observe Option, then the server If the FETCH request includes the Observe Option, then the server
MUST use the same token as used for the initial response for MUST use the same token as used for the initial response for
returning any Observe triggered responses so that the client can returning any Observe triggered responses so that the client can
match them up. match them up.
The client should then release all of the tokens used for this The client should then release all of the tokens used for this
body unless a resource is being observed. body unless a resource is being observed.
2.31 (Continue) 2.31 (Continue)
This Response Code can be used to indicate that all of the blocks This Response Code can be used to indicate that all of the blocks
up to and including the Q-Block1 Option block NUM (all having the up to and including the Q-Block1 Option block NUM (all having the
M bit set) have been successfully received. The token used MUST M bit set) have been successfully received. The token used MUST
be any token that was received in a request using the same be one of the tokens that were received in a request for this
Request-Tag. However, it is desirable to provide the one used in block-wise exchange. However, it is desirable to provide the one
the last received request. used in the last received request.
A response using this Response Code SHOULD NOT be generated for A response using this Response Code SHOULD NOT be generated for
every received Q-Block1 Option request (Section 7.2). It SHOULD every received Q-Block1 Option request (Section 7.2). It SHOULD
only be generated when all the payload requests are Non- only be generated when all the payload requests are Non-
confirmable and a set of MAX_PAYLOADS payloads have been received confirmable and a set of MAX_PAYLOADS payloads have been received
by the server. More details about the motivations for this by the server. More details about the motivations for this
optimization are discussed in Section 7.2. optimization are discussed in Section 7.2.
It SHOULD NOT be generated for CON. This Response Code SHOULD NOT be generated for CON.
4.00 (Bad Request) 4.00 (Bad Request)
This Response Code MUST be returned if the request does not This Response Code MUST be returned if the request does not
include neither a Request-Tag Option nor a Size1 Option but does include a Request-Tag Option or a Size1 Option but does include a
include a Q-Block1 option. Q-Block1 option.
4.02 (Bad Option) 4.02 (Bad Option)
Either this Response Code (in case of Confirmable request) or a This Response Code MUST be returned for a Confirmable request if
reset message (in case of Non-confirmable request) MUST be the server does not support the Q-Block Options. Note that a
returned if the server does not support the Q-Block Options. reset message must be sent in case of Non-confirmable request.
4.08 (Request Entity Incomplete) 4.08 (Request Entity Incomplete)
As a reminder, this Response Code returned without Content-Type As a reminder, this Response Code returned without Content-Type
"application/missing-blocks+cbor-seq" (Section 12.3) is handled as "application/missing-blocks+cbor-seq" (Section 12.3) is handled as
in Section 2.9.2 [RFC7959]. in Section 2.9.2 [RFC7959].
This Response Code returned with Content-Type "application/ This Response Code returned with Content-Type "application/
missing-blocks+cbor-seq" indicates that some of the payloads are missing-blocks+cbor-seq" indicates that some of the payloads are
missing and need to be resent. The client then retransmits the missing and need to be resent. The client then retransmits the
missing payloads using the same Request-Tag, Size1 and Q-Block1 to missing payloads using the same Request-Tag, Size1 and Q-Block1 to
specify the block NUM, SZX, and M bit as appropriate. specify the block NUM, SZX, and M bit as appropriate.
The Request-Tag value to use is determined by taking the token in The Request-Tag value to use is determined by taking the token in
the 4.08 (Request Entity Incomplete) response, locating the the 4.08 (Request Entity Incomplete) response, locating the
matching client request, and then using its Request-Tag. matching client request, and then using its Request-Tag.
The token used MUST be any token that was received in a request The token used MUST be one of the tokens that were received in a
using the same Request-Tag. However, it is desirable to provide request for this block-wise exchange. However, it is desirable to
the one used in the last received request. See Section 5 for provide the one used in the last received request. See Section 5
further information. for further information.
If the server has not received all the blocks of a body, but one If the server has not received all the blocks of a body, but one
or more NON payloads have been received, it SHOULD wait for up to or more NON payloads have been received, it SHOULD wait for up to
NON_RECEIVE_TIMEOUT (Section 7.2) before sending a 4.08 (Request NON_RECEIVE_TIMEOUT (Section 7.2) before sending a 4.08 (Request
Entity Incomplete) response. Entity Incomplete) response.
4.13 (Request Entity Too Large) 4.13 (Request Entity Too Large)
This Response Code can be returned under similar conditions to This Response Code can be returned under similar conditions to
those discussed in Section 2.9.3 of [RFC7959]. those discussed in Section 2.9.3 of [RFC7959].
skipping to change at page 14, line 37 skipping to change at page 14, line 37
Section 4.6 discusses the use of Size2 Option. Section 4.6 discusses the use of Size2 Option.
The client may elect to request any detected missing blocks or just The client may elect to request any detected missing blocks or just
ignore the partial body. This decision is implementation specific. ignore the partial body. This decision is implementation specific.
The client SHOULD wait for up to NON_RECEIVE_TIMEOUT (Section 7.2) The client SHOULD wait for up to NON_RECEIVE_TIMEOUT (Section 7.2)
after the last received payload for NON payloads before issuing a after the last received payload for NON payloads before issuing a
GET, POST, PUT, FETCH, PATCH, or iPATCH request that contains one or GET, POST, PUT, FETCH, PATCH, or iPATCH request that contains one or
more Q-Block2 Options that define the missing blocks with the M bit more Q-Block2 Options that define the missing blocks with the M bit
unset. It is permissible to set the M bit to request this and later unset. The client MAY set the M bit to request this and later blocks
blocks from this MAX_PAYLOADS set. Further considerations related to from this MAX_PAYLOADS set. Further considerations related to the
the transmission timing for missing requests are discussed in transmission timing for missing requests are discussed in
Section 7.2. Section 7.2.
The requested missing block numbers MUST have an increasing block The missing block numbers requested by the client MUST have an
number in each additional Q-Block2 Option with no duplicates. The increasing block number in each additional Q-Block2 Option with no
server SHOULD respond with a 4.00 (Bad Request) to requests not duplicates. The server SHOULD respond with a 4.00 (Bad Request) to
adhering to this behavior. Note that the ordering constraint is requests not adhering to this behavior. Note that the ordering
meant to force the client to check for duplicates and remove them. constraint is meant to force the client to check for duplicates and
This also helps with troubleshooting. remove them. This also helps with troubleshooting.
For Confirmable responses, the client continues to acknowledge each For Confirmable responses, the client continues to acknowledge each
packet. Typically, the server acknowledges the initial request using packet. Typically, the server acknowledges the initial request using
an ACK with the payload, and then sends the subsequent payloads as an ACK with the payload, and then sends the subsequent payloads as
CON responses. The server will detect failure to send a packet, but CON responses. The server will detect failure to send a packet, but
the client can issue, after a MAX_TRANSMIT_SPAN delay, a separate the client can issue, after a MAX_TRANSMIT_SPAN delay, a separate
GET, POST, PUT, FETCH, PATCH, or iPATCH for any missing blocks as GET, POST, PUT, FETCH, PATCH, or iPATCH for any missing blocks as
needed. needed.
If the client receives a duplicate block with the same ETag, it MUST If the client receives a duplicate block with the same ETag, it MUST
skipping to change at page 16, line 12 skipping to change at page 16, line 12
appropriate, a 4.13 (Request Entity Too Large) is returned without appropriate, a 4.13 (Request Entity Too Large) is returned without
the Size1 Option. the Size1 Option.
4.5. Using Observe Option 4.5. Using Observe Option
For a request that uses Q-Block1, the Observe value [RFC7641] MUST be For a request that uses Q-Block1, the Observe value [RFC7641] MUST be
the same for all the payloads of the same body. This includes any the same for all the payloads of the same body. This includes any
missing payloads that are retransmitted. missing payloads that are retransmitted.
For a response that uses Q-Block2, the Observe value MUST be the same For a response that uses Q-Block2, the Observe value MUST be the same
for all the payloads of the same body. This includes payloads for all the payloads of the same body. This is different from Block2
transmitted following receipt of the 'Continue' Q-Block2 Option usage where the Observe value is only present in the first block
(Section 4.4) by the server. If a missing payload is requested, then (Section 3.4 of [RFC7959]). This includes payloads transmitted
both the request and response MUST NOT include the Observe Option. following receipt of the 'Continue' Q-Block2 Option (Section 4.4) by
the server. If a missing payload is requested by a client, then both
the request and response MUST NOT include the Observe Option.
4.6. Using Size1 and Size2 Options 4.6. Using Size1 and Size2 Options
Section 4 of [RFC7959] defines two CoAP options: Size1 for indicating Section 4 of [RFC7959] defines two CoAP options: Size1 for indicating
the size of the representation transferred in requests and Size2 for the size of the representation transferred in requests and Size2 for
indicating the size of the representation transferred in responses. indicating the size of the representation transferred in responses.
The Size1 or Size2 option values MUST exactly represent the size of The Size1 or Size2 option values MUST exactly represent the size of
the data on the body so that any missing data can easily be the data on the body so that any missing data can easily be
determined. determined.
skipping to change at page 18, line 31 skipping to change at page 18, line 35
Implementation Note: By using 8-byte tokens, it is possible to Implementation Note: By using 8-byte tokens, it is possible to
easily minimize the number of tokens that have to be tracked by easily minimize the number of tokens that have to be tracked by
clients, by keeping the bottom 32 bits the same for the same body clients, by keeping the bottom 32 bits the same for the same body
and the upper 32 bits containing the current body's request number and the upper 32 bits containing the current body's request number
(incrementing every request, including every re-transmit). This (incrementing every request, including every re-transmit). This
allows the client to be alleviated from keeping all the per- allows the client to be alleviated from keeping all the per-
request-state, e.g., in Section 3 of [RFC8974]. request-state, e.g., in Section 3 of [RFC8974].
7. Congestion Control for Unreliable Transports 7. Congestion Control for Unreliable Transports
The transmission of the blocks of a body over an unreliable transport The transmission of all the blocks of a single body over an
MUST either all be Confirmable or all be Non-confirmable. This is unreliable transport MUST either all be Confirmable or all be Non-
meant to simplify the congestion control procedure. confirmable. This is meant to simplify the congestion control
procedure.
As a reminder, there is no need for CoAP-specific congestion control As a reminder, there is no need for CoAP-specific congestion control
for reliable transports [RFC8323]. for reliable transports [RFC8323].
7.1. Confirmable (CON) 7.1. Confirmable (CON)
Congestion control for CON requests and responses is specified in Congestion control for CON requests and responses is specified in
Section 4.7 of [RFC7252]. For faster transmission rates, NSTART will Section 4.7 of [RFC7252]. For faster transmission rates, NSTART will
need to be increased from 1. However, the other CON congestion need to be increased from 1. However, the other CON congestion
control parameters will need to be tuned to cover this change. This control parameters will need to be tuned to cover this change. This
skipping to change at page 21, line 23 skipping to change at page 21, line 32
For Q-Block1 Option, if the server responds with a 2.31 (Continue) For Q-Block1 Option, if the server responds with a 2.31 (Continue)
Response Code for the latest payload sent, then the client can Response Code for the latest payload sent, then the client can
continue to send the next set of payloads without any delay. If the continue to send the next set of payloads without any delay. If the
server responds with a 4.08 (Request Entity Incomplete) Response server responds with a 4.08 (Request Entity Incomplete) Response
Code, then the missing payloads SHOULD be retransmitted before going Code, then the missing payloads SHOULD be retransmitted before going
into another NON_TIMEOUT delay prior to sending the next set of into another NON_TIMEOUT delay prior to sending the next set of
payloads. 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 MAX_PAYLOADS 2.31 (Continue) Response Code on receipt of all of the MAX_PAYLOADS
payloads to prevent the client unnecessarily delaying. Otherwise the payloads to prevent the client unnecessarily delaying. If not all of
server SHOULD delay for NON_RECEIVE_TIMEOUT (exponentially scaled the MAX_PAYLOADS payloads were received, the server SHOULD delay for
based on the repeat request count for a payload), before sending the NON_RECEIVE_TIMEOUT (exponentially scaled based on the repeat request
4.08 (Request Entity Incomplete) Response Code for the missing count for a payload) before sending the 4.08 (Request Entity
payload(s). If this is a repeat for the 2.31 (Continue) response, Incomplete) Response Code for the missing payload(s). If this is a
the server SHOULD send a 4.08 (Request Entity Incomplete) response repeat for the 2.31 (Continue) response, the server SHOULD send a
detailing the missing payloads after the block number that would have 4.08 (Request Entity Incomplete) response detailing the missing
been indicated in the 2.31 (Continue). If the repeat request count payloads after the block number that would have been indicated in the
for a missing payload exceeds NON_MAX_RETRANSMIT, the server SHOULD 2.31 (Continue). If the repeat request count for a missing payload
discard the partial body and stop requesting the missing payloads. exceeds NON_MAX_RETRANSMIT, the server SHOULD discard the partial
body and stop requesting the missing payloads.
It is likely that the client will start transmitting the next set of It is likely that the client will start transmitting the next set of
MAX_PAYLOADS payloads before the server times out on waiting for the MAX_PAYLOADS payloads before the server times out on waiting for the
last of the previous MAX_PAYLOADS payloads. On receipt of the first last of the previous MAX_PAYLOADS payloads. On receipt of the first
payload from the new set of MAX_PAYLOADS payloads, the server SHOULD payload from the new set of MAX_PAYLOADS payloads, the server SHOULD
send a 4.08 (Request Entity Incomplete) Response Code indicating any send a 4.08 (Request Entity Incomplete) Response Code indicating any
missing payloads from any previous MAX_PAYLOADS payloads. Upon missing payloads from any previous MAX_PAYLOADS payloads. Upon
receipt of the 4.08 (Request Entity Incomplete) Response Code, the receipt of the 4.08 (Request Entity Incomplete) Response Code, the
client SHOULD send the missing payloads before continuing to send the client SHOULD send the missing payloads before continuing to send the
remainder of the MAX_PAYLOADS payloads and then go into another remainder of the MAX_PAYLOADS payloads and then go into another
skipping to change at page 45, line 35 skipping to change at page 45, line 35
Acknowledgements Acknowledgements
Thanks to Achim Kraus, Jim Schaad, and Michael Richardson for their Thanks to Achim Kraus, Jim Schaad, and Michael Richardson for their
comments. comments.
Special thanks to Christian Amsuess, Carsten Bormann, and Marco Special thanks to Christian Amsuess, Carsten Bormann, and Marco
Tiloca for their suggestions and several reviews, which improved this Tiloca for their suggestions and several reviews, which improved this
specification significantly. Thanks to Francesca Palombini for the specification significantly. Thanks to Francesca Palombini for the
AD review. AD review.
Thanks to Pete Resnick for the Gen-ART review.
Some text from [RFC7959] is reused for readers convenience. Some text from [RFC7959] is reused for readers convenience.
Authors' Addresses Authors' Addresses
Mohamed Boucadair Mohamed Boucadair
Orange Orange
Rennes 35000 Rennes 35000
France France
Email: mohamed.boucadair@orange.com Email: mohamed.boucadair@orange.com
 End of changes. 23 change blocks. 
70 lines changed or deleted 76 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/