One document matched: draft-castellani-core-coap-overhead-00.txt
Constrained RESTful Environments A. Castellani
Internet-Draft University of Padova
Intended status: Informational February 21, 2011
Expires: August 25, 2011
CoAP overhead: protocol analysis and reduction proposals
draft-castellani-core-coap-overhead-00.txt
Abstract
This draft aims at providing an analysis of the current overhead
present in CoAP and at proposing alternative formats leading to an
even more compact procotol.
Status of this Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on August 25, 2011.
Copyright Notice
Copyright (c) 2011 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License.
Castellani Expires August 25, 2011 [Page 1]
Internet-Draft CoAP overhead February 2011
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Overhead analysis . . . . . . . . . . . . . . . . . . . . . . 3
2.1. Message ID and Token . . . . . . . . . . . . . . . . . . . 3
2.2. Uri-* Options . . . . . . . . . . . . . . . . . . . . . . 4
2.3. Overhead in CoAP examples . . . . . . . . . . . . . . . . 4
3. Transport-related base header optimization . . . . . . . . . . 5
3.1. Simpler session matching . . . . . . . . . . . . . . . . . 5
3.1.1. Session matching rule . . . . . . . . . . . . . . . . 7
3.2. Smaller base header . . . . . . . . . . . . . . . . . . . 7
3.2.1. Action and Action Code . . . . . . . . . . . . . . . . 8
3.2.2. Multi-datagram transfers . . . . . . . . . . . . . . . 9
3.3. Overhead analysis with new base header . . . . . . . . . . 12
4. URI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
5. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 14
6. References . . . . . . . . . . . . . . . . . . . . . . . . . . 14
6.1. Normative References . . . . . . . . . . . . . . . . . . . 14
6.2. Informative References . . . . . . . . . . . . . . . . . . 14
Editorial Comments . . . . . . . . . . . . . . . . . . . . . . . .
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 15
Castellani Expires August 25, 2011 [Page 2]
Internet-Draft CoAP overhead February 2011
1. Introduction
Constrained Application Protocol (CoAP) [I-D.ietf-core-coap] design
is focused on defining a REST protocol for constrained devices.
CoAP's strength is mainly to be a light binary REST protocol mappable
to HTTP and suitable for M2M communication.
The design of such a protocol requires a lot of effort to effectively
reduce the required overhead to a minimum, still leaving the
resulting protocol simple enought for severely limited devices to
handle it.
This document aims at highlighting possible aspects of the protocol
design not fully optimized. To the best of the author's knowledge,
discussion about the outlined topics has not yet happened in the WG.
The document is organized as follows:
o Section 2 briefly analyzes the protocol overhead by providing some
examples;
o Section 3 discusses alternative base header formats and transport-
related optimizations;
o Section 4 describes possible URI encodings to reduce overhead
(TBD).
2. Overhead analysis
A synthetic description of the fields with higher impact on overhead
and an example follow:
o Section 2.1 briefly discusses the Message ID field and Token
Option;
o Section 2.2 outlines the overhead related Uri-* options (TBD);
o Finally, Section 2.3 analyzes the overhead allocation of a sample
CoAP exchange.
2.1. Message ID and Token
In [I-D.ietf-core-coap] two different fields are available to perform
session matching when concurrent sessions are present between the
endpoints:
o Message ID: defined in Sec. 3.1 of [I-D.ietf-core-coap]
o Token: defined in Sec. 5.10.1 of [I-D.ietf-core-coap]
The Message ID field is also intended to handle datagram duplication.
The use of the aforementioned fields introduces a total overhead
ranging between 2 and 11 bytes per message; moreover using two
Castellani Expires August 25, 2011 [Page 3]
Internet-Draft CoAP overhead February 2011
different fields to perform session matching seems an added
complexity for constrained devices.
As a side note, dynamic memory allocation is usually avoided on
contrained devices. The Token Option as currently defined requires
implementors on statically allocating server devices to fully reserve
8 bytes per request for Token independently on the size chosen by the
client.
2.2. Uri-* Options
TBD
2.3. Overhead in CoAP examples
An overhead analysis of the example present in Section 2.2 of
[I-D.ietf-core-coap] and for convenience reported hereafter in
Figure 1 follows.
Client Server
| |
| CON [MID=0xbc90], GET, /temperature, Token=0x71 ----->|
| |
|<--- ACK [MID=0xbc90], 2.00 OK, Token=0x71, Content=6B |
Figure 1: CoAP example
Table 1 and Table 2 analyze how the request/response bytes are
allocated to the different fields. Req1/Res1 refer to the exact
example shown in Figure 1. Req2/Res2 are referred to the same
message exchange however with smaller Uri "/t" and 2B Content; the
size of Uri/Content are under the control of the system developers
and are thus expected to be reduced when needed.
+---------------+--------------+--------------+
| Field(s) | Req1 (Ratio) | Req2 (Ratio) |
+---------------+--------------+--------------+
| Base | 2B (0.11) | 2B (0.25) |
| MID and Token | 4B (0.22) | 4B (0.50) |
| URI | 12B (0.67) | 2B (0.25) |
| Total | 18B (1.00) | 8B (1.00) |
+---------------+--------------+--------------+
Table 1: Request size analysis
Castellani Expires August 25, 2011 [Page 4]
Internet-Draft CoAP overhead February 2011
+---------------+--------------+--------------+
| Field(s) | Res1 (Ratio) | Res2 (Ratio) |
+---------------+--------------+--------------+
| Base | 2B (0.17) | 2B (0.25) |
| MID and Token | 4B (0.33) | 4B (0.50) |
| Content | 6B (0.50) | 2B (0.25) |
| Total | 12B (1.00) | 8B (1.00) |
+---------------+--------------+--------------+
Table 2: Response size analysis
In Req1/Res1 results, it can be seen that Uri/Content have high
impact on the total message size, however, when optimizing their size
by using a shorter Uri and a more efficient content representation,
their impact can be substantially reduced by system developers using
CoAP (Res2/Req2). When Uri/Content are reduced in size as in Req2/
Res2, overhead related to MID and Token grows significantly, 50% of
total message size in both Req2 and Res2.
3. Transport-related base header optimization
The following section discusses some proposals to reduce the impact
of overhead, related to the Message ID field and Token Option, by
proposing an alternative and more compact design.
This section is organized as follows:
o Section 3.1 describes a more compact session matching technique;
o Section 3.2 proposes an alternative smaller base header for CoAP
and an extension useful for multi-datagram messages;
o Section 3.3 shows the overhead reduction obtained with respect to
the examples discussed in Section 2.3.
3.1. Simpler session matching
[I-D.ietf-core-coap] uses UDP to transport protocol messages, mainly
for two reasons:
o reduced complexity in the constrained devices when compared to TCP
o well-known performance issues are present when using TCP in multi-
hop WPANs
However, UDP lacks important characteristics needed by a REST
application protocol, in particular CoAP needs a bidirectional
reliable channel of arbitrary duration.
To reproduce a suitable service on top of UDP, some transport
features should be added:
Castellani Expires August 25, 2011 [Page 5]
Internet-Draft CoAP overhead February 2011
1. protocol session identification (e.g. request/response matching);
2. lost datagram retransmission;
3. duplicate datagram recognition;
4. congestion control;
5. ordered data transfer.
If we assume that messages are transmitted a single datagram at a
time, as long as we can identify to which session every message
belongs, the overall protocol design is significantly simplified.
For an extensive discussion on congestion control refer to
[I-D.eggert-core-congestion-control]
Assuming that between two hosts (IPs) there can exist at most one
session between two specific UDP ports, protocol session matching can
be performed without any further addition on the upper layer
protocol.
In a client/server protocol the server is usually spawned on a static
port. However, even using a static server port, session matching is
still feasible as long as concurrently active clients on a host can
use different source ports.
E.g. TCP successfully performs session matching using source/
destination IP and port.
Avoiding more complex session matching techniques leads to a more
interoperable protocol. In this way, session matching can be
operated even by traditional network appliances (e.g., NATs/PATs).
Example: NATs/PATs could incorrectly translate infrequent messages
belonging to the same session to different external IPs/ports (e.g.,
observe notifications).
The Token option is extensively used in [I-D.ietf-core-observe] and
may be required for matching very long infrequent sessions. Some
alternative methods for subscription functionality are proposed in
Appendix A of [I-D.castellani-core-http-coap-mapping], relaxing or
even fully removing the need for Token to keep matching with long-
term subscriptions.
The use of the proposed simpler session matching technique may not be
suitable for some very specific CoAP applications. Regarding these
special applications, the Token option can be used as an alternative
parameter to distinguish concurrent sessions beyond the IPs and
ports.
Castellani Expires August 25, 2011 [Page 6]
Internet-Draft CoAP overhead February 2011
3.1.1. Session matching rule
To successfully perform session matching, as described in this
section, it is sufficient that the following synthetic condition is
verified:
At any time, there MUST NOT exist two or more concurrent sessions
having all the listed parameters equal between themselves:
( source IP, source UDP port, destination IP, destination UDP port )
If the Token option is present, it is used as an alternative
parameter non-overlapping with source port. In this case the
following list of parameters replaces the above list:
( source IP, 65536+Token, destination IP, destination UDP port )
3.2. Smaller base header
In this section two variants for a smaller base header format for
CoAP are proposed. The proposed variants support a multi-datagram
transfer with a simple extension, which is briefly discussed in
Section 3.2.2.
0 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Ver| T | OC |R| A | AC |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 2: Base header format
The definition of the fields already introduced in Figure 6 of
[I-D.ietf-core-coap] is still valid.
New fields introduced in Figure 2 are defined as follows:
Reserved field (R): 1-bit unsigned integer. This field is reserved
for future use and MUST always be set to 0. If R field is set to 1,
a RST message SHOULD be sent and the message MUST be dropped.
Action (A): 3-bit unsigned integer. Indicates whether the message is
empty (0) or is carrying a response (1-6) or a request (7). More
details about the value of this field can be found in Table 3
Action Code (AC): 4-bit unsigned integer. Indicates more details
about the kind of request (method), response (specific status)
Castellani Expires August 25, 2011 [Page 7]
Internet-Draft CoAP overhead February 2011
carried in the message. If the Action is an empty message, AC field
usage is reserved for future use.
Messages not containing any random field are known to introduce
confusion when duplication has to be handled: when a duplicate is
received, the duplication can be caused by an automatic
retransmission (network duplication) or by the endpoint generating a
new identical message (real duplication). Messages easily
predicatable leave open the path to attacks similar to the well-known
"TCP sequence number prediction attack"
The aforementioned considerations leads to introducing the variant
shown in Figure 3; discussion on the ML is encouraged to understand
whether this issue is relevant in CoRE scenarios. If not relevant
the following variant can be ignored.
0 1 2
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Ver| T | OC |R| A | AC | Seq |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 3: Header format w/ sequence number
The definition of the fields already introduced in Figure 2 is still
valid.
The Seq field introduced in Figure 3 is defined as follows:
Sequence number (Seq): 8-bit unsigned integer. [Q1] Indicates the
sequence number of the message. In the first message this value
SHOULD be initialized to a random value. Each new non-empty message
emitted from client or server endpoints MUST increase this value by
1. E.g. the response carries the Seq value contained in the request
increased by 1.
3.2.1. Action and Action Code
The Action field contains synthetic information about message
semantics. By leveraging the information contained in the Action
field (see Table 3), CoAP implementors can scalably choose the level
of support to implement in each Action class.
Example: On extremely constrained implementations, the Action Code
can be read only for requests or for 2xx, 4xx, 5xx responses. For
other actions the effects of the message do not depend upon the
specific code received.
Castellani Expires August 25, 2011 [Page 8]
Internet-Draft CoAP overhead February 2011
+-------+----------------------------+
| Value | Action |
+-------+----------------------------+
| 0 | Empty message |
| 1 | 1xx Informational response |
| 2 | 2xx Successful response |
| 3 | 3xx Redirection response |
| 4 | 4xx Client Error response |
| 5 | 5xx Server Error response |
| 6 | CoAP-specific response |
| 7 | Request |
+-------+----------------------------+
Table 3: CoAP Action values
When the action is a request, the code field will contain the details
about the method used to access the resource. The actual definition
of the Action Code values to GET, POST, PUT and DELETE methods is
out-of-scope of this document, however it can be easily obtained if
the described compressed header is believed to be suitable to the
CoAP protocol specification.
As before, the actual mapping between Action Code and specific
response codes is out-of-scope of this document, but an option for a
simple assignment could be to use "direct YY mapping", that is
deriving the value directly from YY of every response code (X.YY) as
defined in Table 6 of [I-D.ietf-core-coap].
"Direct YY mapping" example: 5.02 Bad Gateway can be mapped to A=5
and AC=2.
The response codes currently defined in CoAP are all mappable using
"direct YY mapping".
Even looking in [RFC2616] or in the more recent
[I-D.ietf-httpbis-p2-semantics], all HTTP status codes except two 4xx
status codes (416, 417) are mappable using "direct YY mapping".
Moreover 416 and 417 status codes are intended for responses to
complex request statements, currently out-of-scope from the CoRE
charter and otherwise manageable using different AC mappings.
3.2.2. Multi-datagram transfers
Limiting the CoAP message size to the datagram MTU can lead to some
issues and limit its range of application, as discussed in
[I-D.ietf-core-block].
[I-D.ietf-core-block] defines how to transfer large resource
Castellani Expires August 25, 2011 [Page 9]
Internet-Draft CoAP overhead February 2011
representations, by introducing the Block Option and defining a
request format to get a specific part of a large resource. The Block
option allows to transfer response content fragmented in parts of
agreed size. Using this option, the client is enabled to request a
specific part of the resource representation, and the resulting
exchange is similar to subsequent HTTP Range requests (see Sec. 14.35
in [RFC2616]).
Using this approach when dealing with large resources with non-static
representations lead to an increased complexity in the upper layers,
due to the necessary controls and buffering required to avoid
transferring multiple parts belonging to different representations.
A more traditional ordered data transfer technique handles more
easily this situation, and can be built inside the CoAP "messages"-
layer depicted in Figure 1 of [I-D.ietf-core-coap].
In the following part of this section, an alternative method for
transferring segmented messages is described.
Endpoints willing to support multi-datagram transfers MAY support the
following variant. The reserved field R shown in Figure 2 can be
redefined as follows:
More datagrams pending (M): 1-bit boolean value. Indicates that the
current message is formed by other datagrams too, the endpoint
receiving this message MUST wait to receive all the datagrams before
handling it.
If the message does not fit into a single datagram, the M bit MUST be
set. After receiving an ACK message confirming the reception of each
data segment, the subsequent part fitting in a datagram should be
sent. If the sender times out waiting for an ACK, it retransmits the
same data segment.
Multi-datagram messages SHOULD be sent only using CON messages in
order to perform congestion control of any kind.
The Seq field present in the variant shown in Figure 3 is suitable
for multi-datagram tranfers too. Seq field MUST be increased at
every subsequent data segment sent, ACK messages MUST have Seq value
matching the Seq of the acknowledged message. The presence of this
field is useful to avoid confusing a new ACK with a network
duplicated one.
When a message is received containing the field M set to 0, the last
content segment is attached to the message, which is then passed to
the CoAP "request/response"-layer and handled.
Castellani Expires August 25, 2011 [Page 10]
Internet-Draft CoAP overhead February 2011
Thanks to the half-duplex nature of a REST conversation, multi-
datagram requests and responses can be tranferred using the same
method: after sending all the request datagrams, the server handles
the request and can send all the datagrams forming the response using
this technique. The same Seq value is initially chosen and increased
by the client to send the request, and is then increased by the
server when sending back the response.
Action, Action Code and Options related to the message SHOULD be sent
only in the first datagram. To reduce overhead, the Options SHOULD
be removed from subsequent datagrams; to avoid confusion and
redundancy, Action and Action Code fields MAY be set to zero, the
presence of content in the message allows to distinguish subsequent
segments from an empty message.
3.2.2.1. Link-MTU Option
As noted in [I-D.ietf-core-block], the fragmentation/reassembly
process loads the lower layers. To avoid this problem multi-datagram
transfer SHOULD transfer data segments fitting in a single link layer
frame.
+------+-----+----------+-----------+--------+---------+
| Type | C/E | Name | Data type | Length | Default |
+------+-----+----------+-----------+--------+---------+
| TBD | E | Link-MTU | uint | 1-2 B | TBD |
+------+-----+----------+-----------+--------+---------+
To address situations where the sending endpoint does not know the
frame limits of the receiver, its size can be proactively shared
attaching a Link-MTU option to requests expecting big responses. To
react even more promptly, this option can be piggybacked over an
empty ACK aknowledging a fragmented message.
3.2.2.2. Example
Figure 4 shows an interaction between a CoAP Client and Server, where
both are transferring content using multi-datagram transfers.
Right after the client has completed the multi-datagram request, the
server starts replying with a multi-datagram response.
Castellani Expires August 25, 2011 [Page 11]
Internet-Draft CoAP overhead February 2011
Client Server
| |
| CON [M=1,Seq=100], POST, /configuration ----------->|
| |
|<--------------------------------- ACK [M=0,Seq=100] |
| |
| CON [M=1,Seq=101] --------------------------------->|
| |
|<--------------------------------- ACK [M=0,Seq=101] |
| |
| CON [M=0,Seq=102] --------------------------------->|
| |
|<----------- (not useful to send?) ACK [M=0,Seq=102] |
| |
|<------------------------ CON [M=1,Seq=103], 2.00 OK |
| |
| ACK [M=0,Seq=103] --------------------------------->|
| |
|<--------------------------------- CON [M=1,Seq=104] |
| |
| ACK [M=0,Seq=104] --------------------------------->|
| |
|<--------------------------------- CON [M=0,Seq=105] |
| |
| ACK [M=0,Seq=105] --------------------------------->|
| |
Figure 4: Multi-datagram messaging example
As an interesting side note in the message diagram depicted above,
the ACK [M=0,Seq=102] can be suppressed, because the server promptly
sends a CON [M=1,Seq=103] message implictly acknowledging CON
[M=0,Seq=102] message.
3.3. Overhead analysis with new base header
Table 4 and Table 5 analyze the request/response messages bytes
allocation using the new base header proposed.
Castellani Expires August 25, 2011 [Page 12]
Internet-Draft CoAP overhead February 2011
+-----------------+--------------+-----------------+----------------+
| Field(s) | Req2 (Ratio) | ShortReq2 | SeqReq2 |
| | | (Ratio) | (Ratio) |
+-----------------+--------------+-----------------+----------------+
| Base | 2B (0.25) | 2B (0.50) | 2B (0.40) |
| MID/Token or | 4B (0.50) | 0B (0.00) | 1B (0.20) |
| Seq | | | |
| URI | 2B (0.25) | 2B (0.50) | 2B (0.40) |
| Total | 8B (1.00) | 4B (1.00) | 5B (1.00) |
+-----------------+--------------+-----------------+----------------+
Table 4: Request size comparison
+-----------------+--------------+-----------------+----------------+
| Field(s) | Res2 (Ratio) | ShortRes2 | SeqRes2 |
| | | (Ratio) | (Ratio) |
+-----------------+--------------+-----------------+----------------+
| Base | 2B (0.25) | 2B (0.50) | 2B (0.40) |
| MID/Token or | 4B (0.50) | 0B (0.00) | 1B (0.20) |
| Seq | | | |
| Content | 2B (0.25) | 2B (0.50) | 2B (0.40) |
| Total | 8B (1.00) | 4B (1.00) | 5B (1.00) |
+-----------------+--------------+-----------------+----------------+
Table 5: Response size comparison
The above tables compare the current CoAP format (Req2/Res2) with the
smaller base header format defined in Section 3.2 (SeqReq2,SeqRes2).
As shown in the proposed results, the number of bytes required for
session matching and transport issues is lowered from 4B (Req2/Res2)
to 1B (SeqReq2/SeqRes2), leading to a message reduction of more than
1/3 in this specific example. The use of the format shown in
Figure 2 (ShortReq2/ShortRes2) halves the message size when compared
to current CoAP (Req2/Res2), however at the cost of some possible
confusion due to the easy accidental duplication; before selecting
this solution, the WG is encouraged to discuss the relevance of
accidental/intentional duplication in CoRE.
4. URI
Further discussion about URI encoding using two optional compressed
URI options will follow in a planned revision of the document.
Refer to the following message to get an idea of the encodings that
will be discussed:
http://www.ietf.org/mail-archive/web/core/current/msg00315.html
Castellani Expires August 25, 2011 [Page 13]
Internet-Draft CoAP overhead February 2011
Discussion about the proposed encodings was partly done on the ML,
however a more complete proposal may be useful to better evaluate the
subject.
5. Acknowledgements
Special thanks to Nicola Bui and Michele Zorzi for their support and
contributions.
6. References
6.1. Normative References
[RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H.,
Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext
Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999.
[I-D.ietf-core-coap]
Shelby, Z., Hartke, K., Bormann, C., and B. Frank,
"Constrained Application Protocol (CoAP)",
draft-ietf-core-coap-04 (work in progress), January 2011.
[I-D.ietf-httpbis-p2-semantics]
Fielding, R., Gettys, J., Mogul, J., Nielsen, H.,
Masinter, L., Leach, P., Berners-Lee, T., and J. Reschke,
"HTTP/1.1, part 2: Message Semantics",
draft-ietf-httpbis-p2-semantics-12 (work in progress),
October 2010.
[I-D.ietf-core-block]
Shelby, Z. and C. Bormann, "Blockwise transfers in CoAP",
draft-ietf-core-block-01 (work in progress), January 2011.
[I-D.ietf-core-observe]
Hartke, K. and Z. Shelby, "Observing Resources in CoAP",
draft-ietf-core-observe-01 (work in progress),
February 2011.
6.2. Informative References
[I-D.castellani-core-http-coap-mapping]
Castellani, A. and S. Loreto, "Best Practice to map HTTP
to COAP and viceversa",
draft-castellani-core-http-coap-mapping-00 (work in
progress), January 2011.
Castellani Expires August 25, 2011 [Page 14]
Internet-Draft CoAP overhead February 2011
[I-D.eggert-core-congestion-control]
Eggert, L., "Congestion Control for the Constrained
Application Protocol (CoAP)",
draft-eggert-core-congestion-control-01 (work in
progress), January 2011.
Editorial Comments
[Q1] AC: 8-bit sequence number seems suitable to me. Is it
sufficient or is a 16-bit unsigned integer required?
Author's Address
Angelo P. Castellani
University of Padova
Via Gradenigo 6/B
Padova 35131
Italy
Email: angelo@castellani.net
Castellani Expires August 25, 2011 [Page 15]
| PAFTECH AB 2003-2026 | 2026-04-24 14:51:10 |