Abstract

The Constrained Application Protocol (CoAP) is a RESTful transfer
protocol for constrained nodes and networks. Basic CoAP messages
work well for small payloads from sensors and actuators; however,
applications will need to transfer larger payloads occasionally --
for instance, for firmware updates. In contrast to HTTP, where TCP
does the grunt work of segmenting and resequencing, CoAP is based on
datagram transports such as UDP or Datagram Transport Layer Security
(DTLS). These transports only offer fragmentation, which is even
more problematic in constrained nodes and networks, limiting the
maximum size of resource representations that can practically be
transferred.
Instead of relying on IP fragmentation, this specification extends
basic CoAP with a pair of "Block" options for transferring multiple
blocks of information from a resource representation in multiple
request-response pairs. In many important cases, the Block options
enable a server to be truly stateless: the server can handle each
block transfer separately, with no need for a connection setup or
other server-side memory of previous block transfers. Essentially,
the Block options provide a minimal way to transfer larger
representations in a block-wise fashion.
A CoAP implementation that does not support these options generally
is limited in the size of the representations that can be exchanged,
so there is an expectation that the Block options will be widely used
in CoAP implementations. Therefore, this specification updates
RFC 7252.