| < draft-ietf-lpwan-coap-static-context-hc-03.txt | draft-ietf-lpwan-coap-static-context-hc-04.txt > | |||
|---|---|---|---|---|
| lpwan Working Group A. Minaburo | lpwan Working Group A. Minaburo | |||
| Internet-Draft Acklio | Internet-Draft Acklio | |||
| Intended status: Informational L. Toutain | Intended status: Informational L. Toutain | |||
| Expires: September 5, 2018 Institut MINES TELECOM; IMT Atlantique | Expires: January 3, 2019 Institut MINES TELECOM; IMT Atlantique | |||
| March 04, 2018 | R. Andreasen | |||
| Universidad de Buenos Aires | ||||
| July 02, 2018 | ||||
| LPWAN Static Context Header Compression (SCHC) for CoAP | LPWAN Static Context Header Compression (SCHC) for CoAP | |||
| draft-ietf-lpwan-coap-static-context-hc-03 | draft-ietf-lpwan-coap-static-context-hc-04 | |||
| Abstract | Abstract | |||
| This draft defines the way SCHC header compression can be applied to | This draft defines the way SCHC header compression can be applied to | |||
| CoAP headers. CoAP header structure differs from IPv6 and UDP | CoAP headers. CoAP header structure differs from IPv6 and UDP | |||
| protocols since the CoAP Header is flexible header with a variable | protocols since the CoAP | |||
| number of options themself of a variable length. Another important | use a flexible header with a variable number of options themself of a | |||
| difference is the asymmetry in the header information used for | variable length. Another important difference is the asymmetry in | |||
| request and response messages. This draft takes into account the | the header format used in request and response messages. Most of the | |||
| fact that a thing can play the role of a CoAP client, a CoAP client | compression mechanisms have been introduced in | |||
| or both roles. | [I-D.ietf-lpwan-ipv6-static-context-hc], this document explains how | |||
| to use the SCHC compression for CoAP. | ||||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| 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 September 5, 2018. | This Internet-Draft will expire on January 3, 2019. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2018 IETF Trust and the persons identified as the | Copyright (c) 2018 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 | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2. CoAP Compressing . . . . . . . . . . . . . . . . . . . . . . 3 | 2. SCHC Compression Process . . . . . . . . . . . . . . . . . . 3 | |||
| 3. Compression of CoAP header fields . . . . . . . . . . . . . . 4 | 3. CoAP Compression with SCHC . . . . . . . . . . . . . . . . . 4 | |||
| 3.1. CoAP version field (2 bits) . . . . . . . . . . . . . . . 4 | 4. Compression of CoAP header fields . . . . . . . . . . . . . . 6 | |||
| 3.2. CoAP type field . . . . . . . . . . . . . . . . . . . . . 5 | 4.1. CoAP version field . . . . . . . . . . . . . . . . . . . 6 | |||
| 3.3. CoAP token length field . . . . . . . . . . . . . . . . . 5 | 4.2. CoAP type field . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 3.4. CoAP code field . . . . . . . . . . . . . . . . . . . . . 6 | 4.3. CoAP code field . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 3.5. CoAP Message ID field . . . . . . . . . . . . . . . . . . 8 | 4.4. CoAP Message ID field . . . . . . . . . . . . . . . . . . 6 | |||
| 3.6. CoAP Token field . . . . . . . . . . . . . . . . . . . . 9 | 4.5. CoAP Token fields . . . . . . . . . . . . . . . . . . . . 7 | |||
| 4. CoAP options . . . . . . . . . . . . . . . . . . . . . . . . 9 | 5. CoAP options . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 4.1. CoAP option Content-format field. . . . . . . . . . . . . 9 | 5.1. CoAP Content and Accept options. . . . . . . . . . . . . 7 | |||
| 4.2. CoAP option Accept field . . . . . . . . . . . . . . . . 10 | 5.2. CoAP option Max-Age field, CoAP option Uri-Host and Uri- | |||
| 4.3. CoAP option Max-Age field, CoAP option Uri-Host and Uri- | Port fields . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| Port fields . . . . . . . . . . . . . . . . . . . . . . . 11 | 5.3. CoAP option Uri-Path and Uri-Query fields . . . . . . . . 8 | |||
| 5. CoAP option Uri-Path and Uri-Query fields . . . . . . . . . . 11 | 5.3.1. Variable length Uri-Path and Uri-Query . . . . . . . 8 | |||
| 5.1. CoAP option Proxy-URI and Proxy-Scheme fields . . . . . . 12 | 5.3.2. Variable number of path or query elements . . . . . . 9 | |||
| 5.2. CoAP option ETag, If-Match, If-None-Match, Location-Path | 5.4. CoAP option Size1, Size2, Proxy-URI and Proxy-Scheme | |||
| and Location-Query fields . . . . . . . . . . . . . . . . 13 | fields . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 6. Other RFCs . . . . . . . . . . . . . . . . . . . . . . . . . 13 | 5.5. CoAP option ETag, If-Match, If-None-Match, Location-Path | |||
| 6.1. Block . . . . . . . . . . . . . . . . . . . . . . . . . . 13 | and Location-Query fields . . . . . . . . . . . . . . . . 9 | |||
| 6.2. Observe . . . . . . . . . . . . . . . . . . . . . . . . . 13 | 6. Other RFCs . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 6.3. No-Response . . . . . . . . . . . . . . . . . . . . . . . 13 | 6.1. Block . . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 7. Protocol analysis . . . . . . . . . . . . . . . . . . . . . . 13 | 6.2. Observe . . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 8. Examples of CoAP header compression . . . . . . . . . . . . . 14 | 6.3. No-Response . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 8.1. Mandatory header with CON message . . . . . . . . . . . . 14 | 6.4. Time Scale . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 8.2. Complete exchange . . . . . . . . . . . . . . . . . . . . 16 | 6.5. OSCORE . . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 9. Normative References . . . . . . . . . . . . . . . . . . . . 17 | 7. Examples of CoAP header compression . . . . . . . . . . . . . 12 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 18 | 7.1. Mandatory header with CON message . . . . . . . . . . . . 12 | |||
| 7.2. Complete exchange . . . . . . . . . . . . . . . . . . . . 13 | ||||
| 7.3. OSCORE Compression . . . . . . . . . . . . . . . . . . . 14 | ||||
| 7.4. Example OSCORE Compression . . . . . . . . . . . . . . . 17 | ||||
| 8. Normative References . . . . . . . . . . . . . . . . . . . . 22 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 22 | ||||
| 1. Introduction | 1. Introduction | |||
| CoAP [rfc7252] is an implementation of the REST architecture for | CoAP [rfc7252] is an implementation of the REST architecture for | |||
| constrained devices. A Gateway between CoAP and HTTP can be easily | constrained devices. Nevertheless, if limited, the size of a CoAP | |||
| built since both protocols uses the same address space (URL), caching | header may be too large for LPWAN constraints and some compression | |||
| mechanisms and methods. | may be needed to reduce the header size. | |||
| Nevertheless, if limited, the size of a CoAP header may be too large | ||||
| for LPWAN constraints and some compression may be needed to reduce | ||||
| the header size. | ||||
| [I-D.toutain-lpwan-ipv6-static-context-hc] defines a header | [I-D.ietf-lpwan-ipv6-static-context-hc] defines a header compression | |||
| compression mechanism for LPWAN network based on a static context. | mechanism for LPWAN network based on a static context. The context | |||
| The context is said static since the field description composing the | is said static since the field description composing the Rules and | |||
| Rules and the context are not learned during the packet exchanges but | the context are not learned during the packet exchanges but are | |||
| are previously defined. The context(s) is(are) known by both ends | previously defined. The context(s) is(are) known by both ends before | |||
| before transmission. | transmission. | |||
| A context is composed of a set of rules that are referenced by Rule | A context is composed of a set of rules that are referenced by Rule | |||
| IDs (identifiers). A rule contains an ordered list of the fields | IDs (identifiers). A rule contains an ordered list of the fields | |||
| descriptions containing a field ID (FID) and its position when | descriptions containing a field ID (FID), its length (FL) and its | |||
| repeated, a direction indicator (DI) (upstream, downstream and | position (FP), a direction indicator (DI) (upstream, downstream and | |||
| bidirectional) and some associated Target Values (TV) which are | bidirectional) and some associated Target Values (TV). Target Value | |||
| expected in the message header. A Matching Operator (MO) is | indicates the value that can be expected. TV can also be a list of | |||
| associated to each header field description. The rule is selected if | values. A Matching Operator (MO) is associated to each header field | |||
| all the MOs fit the TVs. In that case, a Compression/Decompression | description. The rule is selected if all the MOs fit the TVs for all | |||
| Action (CDA) associated to each field defines the link between the | fields. In that case, a Compression/Decompression Action (CDA) | |||
| compressed and decompressed value for each of the header fields. | associated to each field defines the link between the compressed and | |||
| decompressed value for each of the header fields. Compression | ||||
| results mainly in 4 actions: send the field value, send nothing, send | ||||
| less significant bits of a field, send an index. Values sent are | ||||
| called Compression Residues and follows the rule ID. | ||||
| This document describes how the rules can be applied to CoAP flows. | 2. SCHC Compression Process | |||
| The SCHC Compression rules can be applied to CoAP flows. SCHC | ||||
| Compression of the CoAP header may be done in conjunction with the | Compression of the CoAP header may be done in conjunction with the | |||
| above layers or independantly. | above layers (IPv6/UDP) or independently. The SCHC adaptation layers | |||
| as described in [I-D.ietf-lpwan-ipv6-static-context-hc] may be used | ||||
| as as shown in the Figure 1. | ||||
| 2. CoAP Compressing | ^ +------------+ ^ +------------+ ^ +------------+ | |||
| | | CoAP | | | CoAP | inner | | CoAP | | ||||
| | +------------+ v +------------+ x | OSCORE | | ||||
| | | UDP | | DTLS | outer | +------------+ | ||||
| | +------------+ +------------+ | | UDP | | ||||
| | | IPv6 | | UDP | | +------------+ | ||||
| v +------------+ +------------+ | | IPv6 | | ||||
| | IPv6 | v +------------+ | ||||
| +------------+ | ||||
| Figure 1: rule scope for CoAP | ||||
| Figure 1 shows some examples for CoAP architecture and the SCHC | ||||
| rule's scope. A rule can covers all headers from IPv6 to CoAP, SCHC | ||||
| C/D is done in the device and at the LPWAN boundary. If an end-to- | ||||
| end encryption mechanisms is used between the device and the | ||||
| application. CoAP must be compressed independently of the other | ||||
| layers. The rule ID and the compression residue are encrypted using | ||||
| a mechanism such as DTLS. Only the other end can decipher the | ||||
| information. | ||||
| Layers below may also be compressed using other SCHC rules (this is | ||||
| out of the scope of this document). OSCORE | ||||
| [I-D.ietf-core-object-security] can also define 2 rules to compress | ||||
| the CoAP message. A first rule focuses on the inner header and is | ||||
| end to end, a second rule may compress the outer header and the layer | ||||
| above. SCHC C/D for inner header is done by both ends, SCHC C/D for | ||||
| outer header and other headers is done between the device and the | ||||
| LPWAN boundary. | ||||
| 3. CoAP Compression with SCHC | ||||
| CoAP differs from IPv6 and UDP protocols on the following aspects: | CoAP differs from IPv6 and UDP protocols on the following aspects: | |||
| o IPv6 and UDP are symmetrical protocols. The same fields are found | o IPv6 and UDP are symmetrical protocols. The same fields are found | |||
| in the request and in the response, only the location in the | in the request and in the response, only the location in the | |||
| header may vary (e.g. source and destination fields). A CoAP | header may vary (e.g. source and destination fields). A CoAP | |||
| request is different from a response. For example, the URI-path | request is different from a response. For example, the URI-path | |||
| option is mandatory in the request and is not found in the | option is mandatory in the request and is not found in the | |||
| response, a request may contain an Accept option and the response | response, a request may contain an Accept option and the response | |||
| a Content-format option. | a Content option. | |||
| Even when a field is "symmetric" (i.e. found in both directions) | [I-D.ietf-lpwan-ipv6-static-context-hc] defines the use of a | |||
| the values carried are different. For instance the Type field | message direction (DI) when processing the rule which allows the | |||
| will contain a CON value in the request and a ACK or RST value in | description of message header format in both directions. | |||
| the response. Exploiting the asymmetry in compression will allow | ||||
| to send no bit in the compressed request and a single bit in the | o Even when a field is "symmetric" (i.e. found in both directions) | |||
| answer. Same behavior can be applied to the CoAP Code field (O.OX | the values carried in each direction are different. Combined with | |||
| code are present in the request and Y.ZZ in the answer). | a matching list in the TV, this will allow to reduce the range of | |||
| expected values in a particular direction and therefore reduce the | ||||
| size of a compression residue. For instance, if a client sends | ||||
| only CON request, the type can be elided by compression and the | ||||
| answer may use one bit to carry either the ACK or RST type. Same | ||||
| behavior can be applied to the CoAP Code field (0.0X code are | ||||
| present in the request and Y.ZZ in the answer). The direction | ||||
| allows to split in two parts the possible values for each | ||||
| direction. | ||||
| o In IPv6 and UDP header fields have a fixed size. In CoAP, Token | ||||
| size may vary from 0 to 8 bytes, length is given by a field in the | ||||
| header. More systematically, the CoAP options are described using | ||||
| the Type-Length-Value. | ||||
| [I-D.ietf-lpwan-ipv6-static-context-hc] offers the possibility to | ||||
| define a function for the Field Length in the Field Description. | ||||
| o In CoAP headers, a field can be duplicated several times, for | ||||
| instances, elements of an URI (path or queries). The position | ||||
| defined in a rule, associated to a Field ID, can be used to | ||||
| identify the proper element. | ||||
| [I-D.ietf-lpwan-ipv6-static-context-hc] allows a Field id to | ||||
| appears several times in the rule, the Field Position (FP) removes | ||||
| ambiguities for the matching operation. | ||||
| o Field size defined in the CoAP protocol can be to large regarding | ||||
| LPWAN traffic constraints. This is particularly true for the | ||||
| message ID field or Token field. The use of MSB MO can be used to | ||||
| reduce the information carried on LPWANs. | ||||
| o CoAP also obeys to the client/server paradigm and the compression | o CoAP also obeys to the client/server paradigm and the compression | |||
| rate can be different if the request is issued from an LPWAN node | rate can be different if the request is issued from an LPWAN node | |||
| or from an non LPWAN device. For instance a Thing (ES) aware of | or from an non LPWAN device. For instance a Device (Dev) aware of | |||
| LPWAN constraints can generate a 1 byte token, but a regular CoAP | LPWAN constraints can generate a 1 byte token, but a regular CoAP | |||
| client will certainly send a larger token to the Thing. SCHC | client will certainly send a larger token to the Thing. SCHC | |||
| compression will not modify the values to offer a better | compression will not modify the values to offer a better | |||
| compression rate. Nevertheless a proxy placed before the | compression rate. Nevertheless a proxy placed before the | |||
| compressor may change some field values to offer a better | compressor may change some field values to offer a better | |||
| compression rate and maintain the necessary context for | compression rate and maintain the necessary context for | |||
| interoperability with existing CoAP implementations. | interoperability with existing CoAP implementations. | |||
| o In IPv6 and UDP header fields have a fixed size. In CoAP, Token | 4. Compression of CoAP header fields | |||
| size may vary from 0 to 8 bytes, length is given by a field in the | ||||
| header. More systematically, the CoAP options are described using | ||||
| the Type-Length-Value. When applying SCHC header compression. | ||||
| By sending compressed field information following the rule order, | ||||
| SCHC offers a serialization/deserialization mechanism. Since a | ||||
| field exists to indicate the token length there is no ambiguity. | ||||
| For options, the rule indicates also the expected options found | ||||
| the int CoAP header. Therefore only the length is needed to | ||||
| recognize an option. The length will be sent using the same CoAP | ||||
| encoding (size less than 12 are directly sent, higher values use | ||||
| the escape mechanisms defined by [rfc7252]). Delta Type is | ||||
| omitted, the value will be recovered by the decompressor. This | ||||
| reduces the option length of 4, 12 or 20 bits regarding the | ||||
| original size of the delta type encoding in the option. | ||||
| o In CoAP headers a field can be duplicated several times, for | ||||
| instances, elements of an URI (path or queries) or accepted | ||||
| formats. The position defined in a rule, associated to a Field | ||||
| ID, can be used to identify the proper element. | ||||
| 3. Compression of CoAP header fields | ||||
| This section discusses of the compression of the different CoAP | This section discusses of the compression of the different CoAP | |||
| header fields. These are just examples. The compression should take | header fields. | |||
| into account the nature of the traffic and not only the field values. | ||||
| Next chapter will define some compression rules for some common | ||||
| exchanges. | ||||
| 3.1. CoAP version field (2 bits) | ||||
| This field is bidirectional and can be elided during the SCHC | ||||
| compression, since it always contains the same value. It appears | ||||
| only in first position. | ||||
| FID FL FP DI Value MO CDA Sent | ||||
| ver 2 1 bi 1 equal not-sent | ||||
| 3.2. CoAP type field | ||||
| This field can be managed bidirectionally or unidirectionally.Several | ||||
| strategies can be applied to this field regarding the values used: | ||||
| o If the ES is a client or a Server and non confirmable message are | ||||
| used, the transmission of the Type field can be avoided: | ||||
| * Pos is always 1, | ||||
| * DI can either be "uplink" if the ES is a CoAP client or | ||||
| "downlink" if the ES is a CoAP server, or "bidirectional" | ||||
| * TV is set to the value, | ||||
| * MO is set to "equal" | ||||
| * CDA is set to "not-sent". | ||||
| FID FL FP DI Target Value MO CDA Sent | ||||
| type 2 1 bi NON equal not-sent | ||||
| o If the ES is either a client or a Server and confirmable message | ||||
| are used, the DI can be used to elide the type on the request and | ||||
| compress it to 1 bit on the response. The example above shows the | ||||
| rule for a ES acting as a client, directions need to be reversed | ||||
| for a ES acting as a server. | ||||
| FID FL FP DI TV MO CDA Sent | ||||
| type 2 1 up CON equal not-sent | ||||
| type 2 1 dw [ACK,RST] match-mapping mapping-sent [1] | ||||
| o Otherwise if the ES is acting simultaneously as a client and a | ||||
| server and the rule handle these two traffics, Type field must be | ||||
| sent uncompressed. | ||||
| FID FL FP DI TV MO CDA Sent | ||||
| type 2 1 bi ignore send-value [2] | ||||
| 3.3. CoAP token length field | ||||
| This field is bi-directional. | ||||
| Several strategies can be applied to this field regarding the values: | ||||
| o no token or a wellknown length, the transmission can be avoided. | ||||
| A special care must be taken, if CON messages are acknowledged | ||||
| with an empty ACK message. In that case the token is not always | ||||
| present. | ||||
| FID FL FP DI TV MO CDA Sent | ||||
| TKL 4 1 bi value ignore send-value [4] | ||||
| o If the length is changing from one message to an other, the Token | ||||
| Length field must be sent. If the Token length can be limited, | ||||
| then only the least significant bits have to be sent. The example | ||||
| below allows values between 0 and 3. | ||||
| FID FL FP DI TV MO CDA Sent | ||||
| TKL 4 1 bi 0x0 MSB(2) LSB(2) [2] | ||||
| o otherwise the field value has to be sent. | ||||
| FID FL FP DI TV MO CDA Sent | ||||
| TKL 4 1 bi ignore value-sent [4] | ||||
| 3.4. CoAP code field | ||||
| This field is bidirectional, but compression can be enhanced using | ||||
| DI. | ||||
| The CoAP Code field defines a tricky way to ensure compatibility with | ||||
| HTTP values. Nevertheless only 21 values are defined by [rfc7252] | ||||
| compared to the 255 possible values. | ||||
| +------+------------------------------+-----------+ | ||||
| | Code | Description | Mapping | | ||||
| +------+------------------------------+-----------+ | ||||
| | 0.00 | | 0x00 | | ||||
| | 0.01 | GET | 0x01 | | ||||
| | 0.02 | POST | 0x02 | | ||||
| | 0.03 | PUT | 0x03 | | ||||
| | 0.04 | DELETE | 0x04 | | ||||
| | 0.05 | FETCH | 0x05 | | ||||
| | 0.06 | PATCH | 0x06 | | ||||
| | 0.07 | iPATCH | 0x07 | | ||||
| | 2.01 | Created | 0x08 | | ||||
| | 2.02 | Deleted | 0x09 | | ||||
| | 2.03 | Valid | 0x0A | | ||||
| | 2.04 | Changed | 0x0B | | ||||
| | 2.05 | Content | 0x0C | | ||||
| | 4.00 | Bad Request | 0x0D | | ||||
| | 4.01 | Unauthorized | 0x0E | | ||||
| | 4.02 | Bad Option | 0x0F | | ||||
| | 4.03 | Forbidden | 0x10 | | ||||
| | 4.04 | Not Found | 0x11 | | ||||
| | 4.05 | Method Not Allowed | 0x12 | | ||||
| | 4.06 | Not Acceptable | 0x13 | | ||||
| | 4.12 | Precondition Failed | 0x14 | | ||||
| | 4.13 | Request Entity Too Large | 0x15 | | ||||
| | 4.15 | Unsupported Content-Format | 0x16 | | ||||
| | 5.00 | Internal Server Error | 0x17 | | ||||
| | 5.01 | Not Implemented | 0x18 | | ||||
| | 5.02 | Bad Gateway | 0x19 | | ||||
| | 5.03 | Service Unavailable | 0x1A | | ||||
| | 5.04 | Gateway Timeout | 0x1B | | ||||
| | 5.05 | Proxying Not Supported | 0x1C | | ||||
| +------+------------------------------+-----------+ | ||||
| Figure 1: Example of CoAP code mapping | ||||
| Figure 1 gives a possible mapping, it can be changed to add new codes | ||||
| or reduced if some values are never used by both ends. It could | ||||
| efficiently be coded on 5 bits. | ||||
| Even if the number of code can be increase with other RFC, | ||||
| implementations may use a limited number of values, which can help to | ||||
| reduce the number of bits sent on the LPWAN. | ||||
| The number of code may vary over time, some new codes may be | ||||
| introduced or some applications use a limited number of values. | ||||
| The client and the server do not use the same values. This asymmetry | ||||
| can be exploited to reduce the size sent on the LPWAN. | ||||
| The field can be treated differently in upstream than in downstream. | ||||
| If the Thing is a client an entry can be set on the uplink message | ||||
| with a code matching for 0.0X values and another for downlink values | ||||
| for Y.ZZ codes. It is the opposite if the thing is a server. | ||||
| If the ES always sends or receives requests with the same method, the | ||||
| Code field can be elided. The entry below shows a rule for a client | ||||
| sending only GET request. | ||||
| FID FL FP DI TV MO CDA Sent | ||||
| code 8 1 up GET equal not-sent | ||||
| If the client may send different methods, a matching-list can be | ||||
| applied. For table Figure 1, 3 bits are necessary, but it could be | ||||
| less if fewer methods are used. Example below gives an example where | ||||
| the ES is a server and receives only GET and POST requests. | ||||
| FID FL FP DI Target Value MO CDA Sent | ||||
| code 8 1 dw [0.01, 0.02] match-mapping mapping-sent [1] | ||||
| The same approach can be applied to responses. | ||||
| 3.5. CoAP Message ID field | ||||
| This field is bidirectional. | ||||
| Message ID is used for two purposes: | ||||
| o To acknowledge a CON message with an ACK. | ||||
| o To avoid duplicate messages. | ||||
| In LPWAN, since a message can be received by several radio gateway, | ||||
| some LPWAN technologies include a sequence number in L2 to avoid | ||||
| duplicate frames. Therefore if the message does not need to be | ||||
| acknowledged (NON or RST message), the Message ID field can be | ||||
| avoided. | ||||
| FID FL FP DI TV MO CDA Sent | ||||
| Mid 8 1 bi ignore not-sent | ||||
| The decompressor must generate a value. | ||||
| [[Note; check id this field is not used by OSCOAP .]] | ||||
| To optimize information sent on the LPWAN, shorter values may be used | ||||
| during the exchange, but Message ID values generated a common CoAP | ||||
| implementation will not take into account this limitation. Before | ||||
| the compression, a proxy may be needed to reduce the size. | ||||
| FID FL FP DI TV MO CDA Sent | ||||
| Mid 8 1 bi 0x0000 MSB(12) LSB(4) [4] | ||||
| Otherwise if no compression is possible, the field has to be sent | ||||
| FID FL FP DI TV MO CDA Sent | ||||
| Mid 8 1 bi ignore value-sent [8] | ||||
| 3.6. CoAP Token field | ||||
| This field is bi-directional. | ||||
| Token is used to identify transactions and varies from one | ||||
| transaction to another. Therefore, it is usually necessary to send | ||||
| the value of the token field on the LPWAN network. The optimization | ||||
| will occur by using small values. | ||||
| Common CoAP implementations may generate large tokens, even if | ||||
| shorter tokens could be used regarding the LPWAN characteristics. A | ||||
| proxy may be needed to reduce the size of the token before | ||||
| compression. | ||||
| The size of the compress token sent is known by a combination of the | ||||
| Token Length field and the rule entry. For instance, with the entry | ||||
| below: | ||||
| FID FL FP DI TV MO CDA Sent | ||||
| tkl 4 1 bi 2 equal not-sent | ||||
| token 8 1 bi 0x00 MSB(12) LSB(4) [4] | ||||
| The uncompressed token is 2 bytes long, but the compressed size will | 4.1. CoAP version field | |||
| be 4 bits. | ||||
| 4. CoAP options | This field is bidirectional and must be elided during the SCHC | |||
| compression, since it always contains the same value. In the future, | ||||
| if new version of CoAP are defined, new rules ID will be defined | ||||
| avoiding ambiguities between versions. | ||||
| 4.1. CoAP option Content-format field. | 4.2. CoAP type field | |||
| This field is unidirectional and must not be set to bidirectional in | [rfc7252] defines 4 types of messages: CON, NON, ACK and RST. The | |||
| a rule entry. It is used only by the server to inform the client | latter two ones are a response of the two first ones. If the device | |||
| about of the payload type and is never found in client requests. | plays a specific role, a rule can exploit these property with the | |||
| mapping list: [CON, NON] for one direction and [ACK, RST] for the | ||||
| other direction. Compression residue is reduced to 1 bit. | ||||
| If single value is expected by the client, the TV contains that value | The field must be elided if for instance a client is sending only NON | |||
| and MO is set to "equal" and the CDF is set to "not-sent". The | or CON messages. | |||
| examples below describe the rules for an ES acting as a server. | ||||
| FID FL FP DI TV MO CDA Sent | In any case, a rule must be defined to carry RST to a client. | |||
| content 16 1 up value equal not-sent | ||||
| If several possible value are expected by the client, a matching-list | 4.3. CoAP code field | |||
| can be used. | ||||
| FID FL FP DI TV MO CDA Sent | The compression of the CoAP code field follows the same principle as | |||
| content 16 1 up [50, 41] match-mapping mapping-sent [1] | for the CoAP type field. If the device plays a specific role, the | |||
| set of code values can be split in two parts, the request codes with | ||||
| the 0 class and the response values. | ||||
| Otherwise the value can be sent.The value-sent CDF in the compressor | If the device implement only a CoAP client, the request code can be | |||
| do not send the option type and the decompressor reconstruct it | reduced to the set of request the client is able to process. | |||
| regarding the position in the rule. | ||||
| FID FL FP DI TV MO CDA Sent | All the response codes should be compressed with a SCHC rule. | |||
| content 16 1 up ignore value-sent [0-16] | ||||
| 4.2. CoAP option Accept field | 4.4. CoAP Message ID field | |||
| This field is unidirectional and must not be set to bidirectional in | This field is bidirectional and is used to manage acknowledgments. | |||
| a rule entry. It is used only by the client to inform of the | Server memorizes the value for a EXCHANGE_LIFETIME period (by default | |||
| possible payload type and is never found in server response. | 247 seconds) for CON messages and a NON_LIFETIME period (by default | |||
| 145 seconds) for NON messages. During that period, a server | ||||
| receiving the same Message ID value will process the message has a | ||||
| retransmission. After this period, it will be processed as a new | ||||
| messages. | ||||
| The number of accept options is not limited and can vary regarding | In case the Device is a client, the size of the message ID field may | |||
| the usage. To be selected a rule must contain the exact number about | the too large regarding the number of messages sent. Client may use | |||
| accept options with their positions. Since the order in which the | only small message ID values, for instance 4 bit long. Therefore a | |||
| Accept value are sent, the position order can be modified. The rule | MSB can be used to limit the size of the compression residue. | |||
| below | ||||
| FID FL FP DI TV MO CDA Sent | In case the Device is a server, client may be located outside of the | |||
| accept 16 1 up 41 egal not-sent | LPWAN area and view the device as a regular device connected to the | |||
| accept 16 2 up 50 egal not-sent | internet. The client will generate Message ID using the 16 bits | |||
| space offered by this field. A CoAP proxy can be set before the SCHC | ||||
| C/D to reduce the value of the Message ID, to allow its compression | ||||
| with the MSB matching operator and LSB CDA. | ||||
| will be selected only if two accept options are in the CoAP header if | 4.5. CoAP Token fields | |||
| this order. | ||||
| The rule below: | Token is defined through two CoAP fields, Token Length in the | |||
| mandatory header and Token Value directly following the mandatory | ||||
| CoAP header. | ||||
| FID FL FP DI TV MO CDA Sent | Token Length is processed as a tradition protocol field. If the | |||
| accept 16 0 up 41 egal not-sent | value remains the same during all the transaction, the size can be | |||
| accept 16 0 up 50 egal not-sent | stored in the context and elided during the transmission. Otherwise | |||
| it will have to the send as a compression residue. | ||||
| will accept a-only CoAP messages with 2 accept options, but the order | Token Value size should not be defined directly in the rule in the | |||
| will not influence the rule selection. The decompression will | Field Length (FL). Instead a specific function designed as "TKL" | |||
| reconstruct the header regarding the rule order. | must be used. This function informs the SCHC C/D that the length of | |||
| this field has to be read from the Token Length field. | ||||
| Otherwise a matching-list can be applied to the different values, in | 5. CoAP options | |||
| that case the order is important to recover the appropriate value and | ||||
| the position must be clearly indicate. | ||||
| FID FL FP DI TV MO CDA Sent | 5.1. CoAP Content and Accept options. | |||
| accept 16 1 up [50,41] match-mapping mapping-sent [1] | ||||
| accept 16 2 up [50,61] match-mapping mapping-sent [1] | ||||
| accept 16 3 up [61,71] match-mapping mapping-sent [1] | ||||
| Finally, the option can be explicitly sent. | These field are both unidirectional and must not be set to | |||
| bidirectional in a rule entry. | ||||
| FID FL FP DI TV MO CDA Sent | If single value is expected by the client, it can be stored in the TV | |||
| accept 1 up ignore value-sent | and elided during the transmission. Otherwise, if several possible | |||
| values are expected by the client, a matching-list should be used to | ||||
| limit the size of the residue. If not the possible, the value as to | ||||
| be sent as a residue (fixed or variable length). | ||||
| 4.3. CoAP option Max-Age field, CoAP option Uri-Host and Uri-Port | 5.2. CoAP option Max-Age field, CoAP option Uri-Host and Uri-Port | |||
| fields | fields | |||
| This field is unidirectional and must not be set to bidirectional in | This field is unidirectional and must not be set to bidirectional in | |||
| a rule entry. It is used only by the server to inform of the caching | a rule entry. It is used only by the server to inform of the caching | |||
| duration and is never found in client requests. | duration and is never found in client requests. | |||
| If the duration is known by both ends, value can be elided on the | If the duration is known by both ends, value can be elided on the | |||
| LPWAN. | LPWAN. | |||
| A matching list can be used if some wellknown values are defined. | A matching list can be used if some well-known values are defined. | |||
| Otherwise the option length and value can be sent on the LPWAN. | ||||
| [[note: we can reduce (or create a new option) the unit to minute, | Otherwise these options should be sent as a residue (fixed or | |||
| second is small for LPWAN ]] | variable length). | |||
| 5. CoAP option Uri-Path and Uri-Query fields | 5.3. CoAP option Uri-Path and Uri-Query fields | |||
| This fields are unidirectional and must not be set to bidirectional | This fields are unidirectional and must not be set to bidirectional | |||
| in a rule entry. They are used only by the client to access to a | in a rule entry. They are used only by the client to access to a | |||
| specific resource and are never found in server response. | specific resource and are never found in server responses. | |||
| The Matching Operator behavior has not changed, but the value must | Uri-Path and Uri-Query elements are a repeatable options, the Field | |||
| take a position value, if the entry is repeated : | Position (FP) gives the position in the path. | |||
| FID FL FP DI TV MO CDA Sent | A Mapping list can be used to reduce size of variable Paths or | |||
| URI-Path 1 up foo equal not-sent | Queries. In that case, to optimize the compression, several elements | |||
| URI-Path 2 up bar equal not-sent | can be regrouped into a single entry. Numbering of elements do not | |||
| change, MO comparison is set with the first element of the matching. | ||||
| Figure 2: Position entry. | FID FL FP DI TV MO CDA | |||
| URI-Path 1 up ["/a/b", equal not-sent | ||||
| "/c/d"] | ||||
| URI-Path 3 up ignore value-sent | ||||
| For instance, the rule Figure 2 matches with /foo/bar, but not /bar/ | Figure 2: complex path example | |||
| foo. | ||||
| When the length is not clearly indicated in the rule, the value | In Figure 2 a single bit residue can be used to code one of the 2 | |||
| length must be sent with the field data, which means for CoAP to send | paths. If regrouping was not allowed, a 2 bits residue whould have | |||
| directly the CoAP option with length and value. | been needed. | |||
| 5.3.1. Variable length Uri-Path and Uri-Query | ||||
| When the length is known at the rule creation, the Field Length must | ||||
| be set to variable, and the unit is set to bytes. | ||||
| The MSB MO can be apply to a Uri-Path or Uri-Query element. Since | ||||
| MSB value is given in bit, the size must always be a multiple of 8 | ||||
| bits and the LSB CDA must not carry any value. | ||||
| The length sent at the beginning of a variable length residue | ||||
| indicates the size of the LSB in bytes. | ||||
| For instance for a CoMi path /c/X6?k="eth0" the rule can be set to: | For instance for a CoMi path /c/X6?k="eth0" the rule can be set to: | |||
| FID FL FP DI TV MO CDA Sent | FID FL FP DI TV MO CDA | |||
| URI-Path 1 up c equal not-sent | URI-Path 1 up "c" equal not-sent | |||
| URI-Path 2 up ignore value-sent | URI-Path 2 up ignore value-sent | |||
| URI-Query 1 up k= MSB (16) LSB | URI-Query 1 up "k=" MSB (16) LSB | |||
| Figure 3: CoMi URI compression | Figure 3: CoMi URI compression | |||
| Figure 3 shows the parsing and the compression of the URI. where c is | Figure 3 shows the parsing and the compression of the URI. where c is | |||
| not sent. The second element is sent with the length (i.e. 0x2 X 6) | not sent. The second element is sent with the length (i.e. 0x2 X 6) | |||
| followed by the query option (i.e. 0x05 "eth0"). | followed by the query option (i.e. 0x05 "eth0"). | |||
| A Mapping list can be used to reduce size of variable Paths or | 5.3.2. Variable number of path or query elements | |||
| Queries. In that case, to optimize the compression, several elements | ||||
| can be regrouped into a single entry. Numbering of elements do not | ||||
| change, MO comparison is set with the first element of the matching. | ||||
| FID FL FP DI TV MO CDA Sent | ||||
| URI-Path 1 up {0:"/c/c", equal not-sent | ||||
| 1:"/c/d" | ||||
| URI-Path 3 up ignore value-sent | ||||
| URI-Query 1 up k= MSB (16) LSB | ||||
| Figure 4: complex path example | ||||
| For instance, the following Path /foo/bar/variable/stable can leads | The number of Uri-path or Uri-Query element in a rule is fixed at the | |||
| to the rule defined Figure 4. | rule creation time. If the number varies, several rules should be | |||
| created to cover all the possibilities. Another possibilities is to | ||||
| define the length of Uri-Path to variable and send a compression | ||||
| residue with a length of 0 to indicate that this Uri-Path is empty. | ||||
| This add 4 bits to the compression residue. | ||||
| 5.1. CoAP option Proxy-URI and Proxy-Scheme fields | 5.4. CoAP option Size1, Size2, Proxy-URI and Proxy-Scheme fields | |||
| These fields are unidirectional and must not be set to bidirectional | These fields are unidirectional and must not be set to bidirectional | |||
| in a rule entry. They are used only by the client to access to a | in a rule entry. They are used only by the client to access to a | |||
| specific resource and are never found in server response. | specific resource and are never found in server response. | |||
| If the field value must be sent, TV is not set, MO is set to "ignore" | If the field value must be sent, TV is not set, MO is set to "ignore" | |||
| and CDF is set to "value-sent. A mapping can also be used. | and CDF is set to "value-sent. A mapping can also be used. | |||
| Otherwise the TV is set to the value, MO is set to "equal" and CDF is | Otherwise the TV is set to the value, MO is set to "equal" and CDF is | |||
| set to "not-sent" | set to "not-sent" | |||
| 5.2. CoAP option ETag, If-Match, If-None-Match, Location-Path and | 5.5. CoAP option ETag, If-Match, If-None-Match, Location-Path and | |||
| Location-Query fields | Location-Query fields | |||
| These fields are unidirectional. | These fields are unidirectional. | |||
| These fields values cannot be stored in a rule entry. They must | These fields values cannot be stored in a rule entry. They must | |||
| always be sent with the request. | always be sent with the compression residues. | |||
| [[Can include OSCOAP Object security in that category ]] | ||||
| 6. Other RFCs | 6. Other RFCs | |||
| 6.1. Block | 6.1. Block | |||
| Block option should be avoided in LPWAN. The minimum size of 16 | Block [rfc7959] allows a fragmentation at the CoAP level. SCHC | |||
| bytes can be incompatible with some LPWAN technologies. | includes also a fragmentation protocol. They are compatible. If a | |||
| block option is used, its content must be sent as a compression | ||||
| [[Note: do we recommand LPWAN fragmentation since the smallest value | residue. | |||
| of 16 is too big?]] | ||||
| 6.2. Observe | 6.2. Observe | |||
| [rfc7641] defines the Observe option. The TV is not set, MO is set | [rfc7641] defines the Observe option. The TV is not set, MO is set | |||
| to "ignore" and the CDF is set to "value-sent". SCHC does not limit | to "ignore" and the CDF is set to "value-sent". SCHC does not limit | |||
| the maximum size for this option (3 bytes). To reduce the | the maximum size for this option (3 bytes). To reduce the | |||
| transmission size either the Thing implementation should limit the | transmission size either the device implementation should limit the | |||
| value increase or a proxy can be used limit the increase. | value increase or a proxy can modify the incrementation. | |||
| Since RST message may be sent to inform a server that the client do | Since RST message may be sent to inform a server that the client do | |||
| not require Observe response, a rule must allow the transmission of | not require Observe response, a rule must allow the transmission of | |||
| this message. | this message. | |||
| 6.3. No-Response | 6.3. No-Response | |||
| [rfc7967] defines an No-Response option limiting the responses made | [rfc7967] defines an No-Response option limiting the responses made | |||
| by a server to a request. If the value is not by both ends, then TV | by a server to a request. If the value is not known by both ends, | |||
| is set to this value, MO is set to "equal" and CDF is set to "not- | then TV is set to this value, MO is set to "equal" and CDF is set to | |||
| sent". | "not-sent". | |||
| Otherwise, if the value is changing over time, TV is not set, MO is | Otherwise, if the value is changing over time, TV is not set, MO is | |||
| set to "ignore" and CDF to "value-sent". A matching list can also be | set to "ignore" and CDA to "value-sent". A matching list can also be | |||
| used to reduce the size. | used to reduce the size. | |||
| 7. Protocol analysis | 6.4. Time Scale | |||
| 8. Examples of CoAP header compression | ||||
| 8.1. Mandatory header with CON message | Time scale [I-D.toutain-core-time-scale] option allows a client to | |||
| inform the server that it is in a slow network and that message ID | ||||
| should be kept for a duration given by the option. | ||||
| If the value is not known by both ends, then TV is set to this value, | ||||
| MO is set to "equal" and CDA is set to "not-sent". | ||||
| Otherwise, if the value is changing over time, TV is not set, MO is | ||||
| set to "ignore" and CDA to "value-sent". A matching list can also be | ||||
| used to reduce the size. | ||||
| 6.5. OSCORE | ||||
| OSCORE [I-D.ietf-core-object-security] defines end-to-end protection | ||||
| for CoAP messages. This section describes how SCHC rules can be | ||||
| applied to compress OSCORE-protected messages. | ||||
| 0 1 2 3 4 5 6 7 <--------- n bytes -------------> | ||||
| +-+-+-+-+-+-+-+-+--------------------------------- | ||||
| |0 0 0|h|k| n | Partial IV (if any) ... | ||||
| +-+-+-+-+-+-+-+-+--------------------------------- | ||||
| | | | ||||
| | <--------- CoAP OSCORE_piv ------------------> | | ||||
| <- 1 byte -> <------ s bytes -----> | ||||
| +------------+----------------------+-----------------------+ | ||||
| | s (if any) | kid context (if any) | kid (if any) ... | | ||||
| +------------+----------------------+-----------------------+ | ||||
| | | | | ||||
| | <------ CoAP OSCORE_kidctxt ----->|<-- CoAP OSCORE_kid -->| | ||||
| Figure 4: OSCORE Option | ||||
| The encoding of the OSCORE Option Value defined in Section 6.1 of | ||||
| [I-D.ietf-core-object-security] is repeated in Figure 4. | ||||
| The first byte is used for flags that specify the contents of the | ||||
| OSCORE option. The 3 most significant bits are reserved and always | ||||
| set to 0. Bit h, when set, indicates the presence of the kid context | ||||
| field in the option. Bit k, when set, indicates the presence of a | ||||
| kid field. The 3 least significant bits n indicate to length of the | ||||
| piv field in bytes, n = 0 taken to mean that no piv is present. | ||||
| After the flag byte follow the piv field, kid context field and kid | ||||
| field in order and if present; the length of the kid context field is | ||||
| encoded in the first byte denoting by s the length of the kid context | ||||
| in bytes. | ||||
| This draft recommends to implement a parser that is able to identify | ||||
| the OSCORE Option and the fields it contains - this makes it possible | ||||
| to do a preliminary processing of the message in preparation for | ||||
| regular SCHC compression. | ||||
| Conceptually, the OSCORE option can transmit up to 3 distinct pieces | ||||
| of information at a time: the piv, the kid context, and the kid. | ||||
| This draft proposes that the SCHC Parser split the contents of this | ||||
| option into 3 SCHC fields: | ||||
| o CoAP OSCORE_piv, | ||||
| o CoAP OSCORE_ctxt, | ||||
| o CoAP OSCORE_kid. | ||||
| These fields are superposed on the OSCORE Option format in Figure 4, | ||||
| and include the corresponding flag and size bits for each part of the | ||||
| option. Both the flag and size bits can be omitted by use of the MSB | ||||
| matching operator on each field. | ||||
| 7. Examples of CoAP header compression | ||||
| 7.1. Mandatory header with CON message | ||||
| In this first scenario, the LPWAN compressor receives from outside | In this first scenario, the LPWAN compressor receives from outside | |||
| client a POST message, which is immediately acknowledged by the | client a POST message, which is immediately acknowledged by the | |||
| Thing. For this simple scenario, the rules are described Figure 5. | Device. For this simple scenario, the rules are described Figure 5. | |||
| Rule ID 1 | Rule ID 1 | |||
| +-------------+--+--+--+------+---------+-------------++------------+ | +-------------+--+--+--+------+---------+-------------++------------+ | |||
| | Field |FL|FP|DI|Target| Match | CDA || Sent | | | Field |FL|FP|DI|Target| Match | CDA || Sent | | |||
| | | | | |Value | Opera. | || [bits] | | | | | | |Value | Opera. | || [bits] | | |||
| +-------------+--+--+--+------+---------+-------------++------------+ | +-------------+--+--+--+------+---------+-------------++------------+ | |||
| |CoAP version | | |bi| 01 |equal |not-sent || | | |CoAP version | | |bi| 01 |equal |not-sent || | | |||
| |CoAP version | | |bi| 01 |equal |not-sent || | | |CoAP version | | |bi| 01 |equal |not-sent || | | |||
| |CoAP Type | | |bi| |ignore |value-sent ||TT | | |CoAP Type | | |dw| CON |equal |not-sent || | | |||
| |CoAP Type | | |up|[ACK, | | || | | ||||
| | | | | | RST] |match-map|matching-sent|| T | | ||||
| |CoAP TKL | | |bi| 0 |equal |not-sent || | | |CoAP TKL | | |bi| 0 |equal |not-sent || | | |||
| |CoAP Code | | |bi| ML1 |match-map|matching-sent|| CC CCC | | |CoAP Code | | |bi| ML1 |match-map|matching-sent|| CC CCC | | |||
| |CoAP MID | | |bi| 0000 |MSB(7 ) |LSB(9) || M-ID| | |CoAP MID | | |bi| 0000 |MSB(7 ) |LSB(9) || M-ID| | |||
| |CoAP Uri-Path| | |dw| path |equal 1 |not-sent || | | |CoAP Uri-Path| | |dw| path |equal 1 |not-sent || | | |||
| +-------------+--+--+--+------+---------+-------------++------------+ | +-------------+--+--+--+------+---------+-------------++------------+ | |||
| Figure 5: CoAP Context to compress header without token | Figure 5: CoAP Context to compress header without token | |||
| The version and Token Length fields are elided. Code has shrunk to 5 | The version and Token Length fields are elided. Code has shrunk to 5 | |||
| bits using the matching list (as the one given Figure 1: 0.01 is | bits using a matching list. Uri-Path contains a single element | |||
| value 0x01 and 2.05 is value 0x0c) Message-ID has shrunk to 9 bits to | ||||
| preserve alignment on byte boundary. The most significant bit must | ||||
| be set to 0 through a CoAP proxy. Uri-Path contains a single element | ||||
| indicated in the matching operator. | indicated in the matching operator. | |||
| Figure 6 shows the time diagram of the exchange. A LPWAN Application | Figure 6 shows the time diagram of the exchange. A client in the | |||
| Server sends a CON message. Compression reduces the header sending | Application Server sends a CON request. It can go through a proxy | |||
| only the Type, a mapped code and the least 9 significant bits of | which reduces the message ID to a smallest value, with at least the 9 | |||
| Message ID. The receiver decompresses the header. . | most significant bits equal to 0. SCHC Compression reduces the | |||
| header sending only the Type, a mapped code and the least 9 | ||||
| The CON message is a request, therefore the LC process to a dynamic | significant bits of Message ID. | |||
| mapping. When the ES receives the ACK message, this will not | ||||
| initiate locally a message ID mapping since it is a response. The LC | ||||
| receives the ACK and uncompressed it to restore the original value. | ||||
| Dynamic Mapping context lifetime follows the same rules as message ID | ||||
| duration. | ||||
| End System LPWA LC | Device LPWAN SCHC C/D | |||
| | | | | | | |||
| | rule id=1 |<-------------------- | | rule id=1 |<-------------------- | |||
| |<-------------------| +-+-+--+----+------+ | |<-------------------| +-+-+--+----+------+ | |||
| <------------------- | TTCC CCCM MMMM MMMM| |1|0| 4|0.01|0x0034| | <------------------- | CCCCCMMMMMMMMM | |1|0| 4|0.01|0x0034| | |||
| +-+-+--+----+-------+ | 0000 0010 0011 0100| | 0xb4 p a t| | +-+-+--+----+-------+ | 00001000110100 | | 0xb4 p a t| | |||
| |1|0| 1|0.01|0x0034 | | | | h | | |1|0| 1|0.01|0x0034 | | | | h | | |||
| | 0xb4 p a t | | | +------+ | | 0xb4 p a t | | | +------+ | |||
| | h | | | | | h | | | | |||
| +------+ | | | +------+ | | | |||
| | | | | | | |||
| | | | | | | |||
| ---------------------->| rule id=1 | | ---------------------->| rule id=1 | | |||
| +-+-+--+----+--------+ |------------------->| | +-+-+--+----+--------+ |------------------->| | |||
| |1|2| 0|2.05| 0x0034 | | TTCC CCCM MMMM MMMM|---------------------> | |1|2| 0|2.05| 0x0034 | | TCCCCCMMMMMMMMM |---------------------> | |||
| +-+-+--+----+--------+ | 1001 1000 0011 0100| +-+-+--+----+------+ | +-+-+--+----+--------+ | 001100000110100 | +-+-+--+----+------+ | |||
| | | |1|2| 0|2.05|0x0034| | | | |1|2| 0|2.05|0x0034| | |||
| v v +-+-+--+----+------+ | v v +-+-+--+----+------+ | |||
| Figure 6: Compression with global addresses | Figure 6: Compression with global addresses | |||
| The message can be further optimized by setting some fields | 7.2. Complete exchange | |||
| unidirectional, as described in Figure 7. Note that Type is no more | ||||
| sent in the compressed format, Compressed Code size in not changed in | ||||
| that example (8 values are needed to code all the requests and 21 to | ||||
| code all the responses in the matching list Figure 1) | ||||
| Rule ID 2 | ||||
| +-------------+--+--+--+------+---------+------------++------------+ | ||||
| | Field |FL|FP|DI|Target| MO | CDA || Sent | | ||||
| | | | | |Value | | || [bits] | | ||||
| +-------------+--+--+--+------+---------+------------++------------+ | ||||
| |CoAP version | | |bi|01 |equal |not-sent || | | ||||
| |CoAP Type | | |dw|CON |equal |not-sent || | | ||||
| |CoAP Type | | |up| ACK |equal |not-sent || | | ||||
| |CoAP TKL | | |bi|0 |equal |not-sent || | | ||||
| |CoAP Code | | |dw|ML2 |match-map|mapping-sent||CCCC C | | ||||
| |CoAP Code | | |up|ML3 |match-map|mapping-sent||CCCC C | | ||||
| |CoAP MID | | |bi|0000 |MSB(5) |LSB(11) || M-ID | | ||||
| |CoAP Uri-Path| | |dw|path |equal 1 |not-sent || | | ||||
| +-------------+--+--+--+------+---------+------------++------------+ | ||||
| ML1 = {CON : 0, ACK:1} ML2 = {POST:0, 2.04:1, 0.00:3} | ||||
| Figure 7: CoAP Context to compress header without token | ||||
| 8.2. Complete exchange | ||||
| In that example, the Thing is using CoMi and sends queries for 2 SID. | In that example, the Thing is using CoMi and sends queries for 2 SID. | |||
| CON | CON | |||
| MID=0x0012 | | | MID=0x0012 | | | |||
| POST | | | POST | | | |||
| Accept X | | | Accept X | | | |||
| /c/k=AS |------------------------>| | /c/k=AS |------------------------>| | |||
| | | | | | | |||
| | | | | | | |||
| |<------------------------| ACK MID=0x0012 | |<------------------------| ACK MID=0x0012 | |||
| | | 0.00 | | | 0.00 | |||
| | | | | | | |||
| | | | | | | |||
| |<------------------------| CON | |<------------------------| CON | |||
| | | MID=0X0034 | | | MID=0X0034 | |||
| | | Content-Format X | | | Content-Format X | |||
| ACK MID=0x0034 |------------------------>| | ACK MID=0x0034 |------------------------>| | |||
| 0.00 | 0.00 | |||
| Rule ID 3 | 7.3. OSCORE Compression | |||
| +--------------+--+--+--+------+--------+-----------++------------+ | ||||
| | Field |FL|FP|DI|Target| MO | CDA || Sent | | ||||
| | | | | |Value | | || [bits] | | ||||
| +--------------+--+--+--+------+--------+-----------++------------+ | ||||
| |CoAP version | | |bi| 01 |equal |not-sent || | | ||||
| |CoAP Type | | |up| CON |equal |not-sent || | | ||||
| |CoAP Type | | |dw| ACK |equal |not-sent || | | ||||
| |CoAP TKL | | |bi| 1 |equal |not-sent || | | ||||
| |CoAP Code | | |up| POST |equal |not-sent || | | ||||
| |CoAP Code | | |dw| 0.00 |equal |not-sent || | | ||||
| |CoAP MID | | |bi| 0000 |MSB(8) |LSB ||MMMMMMMM | | ||||
| |CoAP Token | | |up| |ignore |send-value ||TTTTTTTT | | ||||
| |CoAP Uri-Path | | |dw| /c |equal 1 |not-sent || | | ||||
| |CoAP Uri-query| | |dw| ML4 |equal 1 |not-sent ||P | | ||||
| |CoAP Content | | |up| X |equal |not-sent || | | ||||
| +--------------+--+--+--+------+--------+-----------++------------+ | ||||
| Rule ID 4 | OSCORE aims to solve the problem of end-to-end encryption for CoAP | |||
| +--------------+--+--+--+------+--------+-----------++------------+ | messages, which are otherwise required to terminate their TLS or DTLS | |||
| | Field |FL|FP|DI|Target| MO | CDA || Sent | | protection at the proxy, as discussed in Section 11.2 of [rfc7252]. | |||
| | | | | |Value | | || [bits] | | CoAP proxies are men-in-the-middle, but not all of the information | |||
| +--------------+--+--+--+------+--------+-----------++------------+ | they have access to is necessary for their operation. The goal, | |||
| |CoAP version | | |bi| 01 |equal |not-sent || | | therefore, is to hide as much of the message as possible while still | |||
| |CoAP Type | | |dw| CON |equal |not-sent || | | enabling proxy operation. | |||
| |CoAP Type | | |up| ACK |equal |not-sent || | | ||||
| |CoAP TKL | | |bi| 1 |equal |not-sent || | | ||||
| |CoAP Code | | |dw| 2.05 |equal |not-sent || | | ||||
| |CoAP Code | | |up| 0.00 |equal |not-sent || | | ||||
| |CoAP MID | | |bi| 0000 |MSB(8) |LSB ||MMMMMMMM | | ||||
| |CoAP Token | | |dw| |ignore |send-value||TTTTTTTT | | ||||
| |COAP Accept | | |dw| X |equal |not-sent || | | ||||
| +--------------+--+--+--+------+---------+----------++------------+ | ||||
| alternative rule: | Conceptually this is achieved by splitting the CoAP message into an | |||
| Inner Plaintext and Outer OSCORE Message. The Inner Plaintext | ||||
| contains sensible information which is not necessary for proxy | ||||
| operation. This, in turn, is the part of the message which can be | ||||
| encrypted and need not be decrypted until it reaches its end | ||||
| destination. The Outer Message acts as a shell matching the format | ||||
| of a regular CoAP message, and includes all Options and information | ||||
| needed for proxy operation and caching. This decomposition is | ||||
| illustrated in Figure 7. | ||||
| Rule ID 4 | CoAP options are sorted into one of 3 classes, each granted a | |||
| +--------------+--+--+--+------+---------+-----------++------------+ | specific type of protection by the protocol: | |||
| | Field |FL|FP|DI|Target| MO | CDA || Sent | | ||||
| | | | | |Value | | || [bits] | | ||||
| +--------------+--+--+--+------+---------+-----------++------------+ | ||||
| |CoAP version | | |bi| 01 |equal |not-sent || | | ||||
| |CoAP Type | | |bi| ML1 |match-map|match-sent ||t | | ||||
| |CoAP TKL | | |bi| 1 |equal |not-sent || | | ||||
| |CoAP Code | | |up| ML2 |match-map|match-sent || cc | | ||||
| |CoAP Code | | |dw| ML3 |match-map|match-sent || cc | | ||||
| |CoAP MID | | |bi| 0000 |MSB(8) |LSB ||MMMMMMMM | | ||||
| |CoAP Token | | |dw| |ignore |send-value ||TTTTTTTT | | ||||
| |CoAP Uri-Path | | |dw| /c |equal 1 |not-sent || | | ||||
| |CoAP Uri-query| | |dw| ML4 |equal 1 |not-sent ||P | | ||||
| |CoAP Content | | |up| X |equal |not-sent || | | ||||
| |COAP Accept | | |dw| x |equal |not-sent || | | ||||
| +--------------+--+--+--+------+---------+-----------++------------+ | ||||
| ML1 {CON:0, ACK:1} ML2 {POST:0, 0.00: 1} ML3 {2.05:0, 0.00:1} | o Class E: Enrypted options moved to the Inner Plaintext, | |||
| ML4 {NULL:0, k=AS:1, K=AZE:2} | ||||
| 9. Normative References | o Class I: Intergrity-protected options included in the AAD for the | |||
| encryption of the Plaintext but otherwise left untouched in the | ||||
| Outer Message, | ||||
| [I-D.toutain-lpwan-ipv6-static-context-hc] | o Class U: Unprotected options left untouched in the Outer Message. | |||
| Minaburo, A. and L. Toutain, "LPWAN Static Context Header | ||||
| Compression (SCHC) for IPv6 and UDP", draft-toutain-lpwan- | Additionally, the OSCORE Option is added as an Outer option, | |||
| ipv6-static-context-hc-00 (work in progress), September | signaling that the message is OSCORE protected. This option carries | |||
| 2016. | the information necessary to retrieve the Security Context with which | |||
| the message was encrypted so that it may be correctly decrypted at | ||||
| the other end-point. | ||||
| Orignal CoAP Message | ||||
| +-+-+---+-------+---------------+ | ||||
| |v|t|tkl| code | Msg Id. | | ||||
| +-+-+---+-------+---------------+....+ | ||||
| | Token | | ||||
| +-------------------------------.....+ | ||||
| | Options (IEU) | | ||||
| . . | ||||
| . . | ||||
| +------+-------------------+ | ||||
| | 0xFF | | ||||
| +------+------------------------+ | ||||
| | | | ||||
| | Payload | | ||||
| | | | ||||
| +-------------------------------+ | ||||
| / \ | ||||
| / \ | ||||
| / \ | ||||
| / \ | ||||
| Outer Header v v Plaintext | ||||
| +-+-+---+--------+---------------+ +-------+ | ||||
| |v|t|tkl|new code| Msg Id. | | code | | ||||
| +-+-+---+--------+---------------+....+ +-------+-----......+ | ||||
| | Token | | Options (E) | | ||||
| +--------------------------------.....+ +-------+------.....+ | ||||
| | Options (IU) | | OxFF | | ||||
| . . +-------+-----------+ | ||||
| . OSCORE Option . | | | ||||
| +------+-------------------+ | Payload | | ||||
| | 0xFF | | | | ||||
| +------+ +-------------------+ | ||||
| Figure 7: OSCORE inner and outer header form a CoAP message | ||||
| Figure 7 shows the message format for the OSCORE Message and | ||||
| Plaintext. In the Outer Header, the original message code is hidden | ||||
| and replaced by a default value (POST or FETCH) depending on whether | ||||
| the original message was a Request or a Response. The original | ||||
| message code is put into the first byte of the Plaintext. Following | ||||
| the message code come the class E options and if present the original | ||||
| message Payload preceded by its payload marker. | ||||
| The Plaintext is now encrypted by an AEAD algorithm which integrity | ||||
| protects Security Context parameters and eventually any class I | ||||
| options from the Outer Header. Currently no CoAP options are marked | ||||
| class I. The resulting Ciphertext becomes the new Payload of the | ||||
| OSCORE message, as illustrated in Figure 8. | ||||
| Outer Header | ||||
| +-+-+---+--------+---------------+ | ||||
| |v|t|tkl|new code| Msg Id. | | ||||
| +-+-+---+--------+---------------+....+ | ||||
| | Token | | ||||
| +--------------------------------.....+ | ||||
| | Options (IU) | | ||||
| . . | ||||
| . OSCORE Option . | ||||
| +------+-------------------+ | ||||
| | 0xFF | | ||||
| +------+-------------------------+ | ||||
| | | | ||||
| | Encrypted Inner Header and | | ||||
| | Payload | | ||||
| | | | ||||
| +--------------------------------+ | ||||
| Figure 8: OSCORE message | ||||
| The SCHC Compression scheme consists of compressing both the | ||||
| Plaintext before encryption and the resulting OSCORE message after | ||||
| encryption, see Figure 9. This way compression reaches all fields of | ||||
| the original CoAP message. | ||||
| Outer Message OSCORE Plaintext | ||||
| +-+-+---+--------+---------------+ +-------+ | ||||
| |v|t|tkl|new code| Msg Id. | | code | | ||||
| +-+-+---+--------+---------------+....+ +-------+-----......+ | ||||
| | Token | | Options (E) | | ||||
| +--------------------------------.....+ +-------+------.....+ | ||||
| | Options (IU) | | OxFF | | ||||
| . . +-------+-----------+ | ||||
| . OSCORE Option . | | | ||||
| +------+-------------------+ | Payload | | ||||
| | 0xFF | | | | ||||
| +------+------------+ +-------------------+ | ||||
| | Ciphertext |<---------\ | | ||||
| | | | v | ||||
| +-------------------+ | +-----------------+ | ||||
| | | | Inner SCHC | | ||||
| v | | Compression | | ||||
| +-----------------+ | +-----------------+ | ||||
| | Outer SCHC | | | | ||||
| | Compression | | v | ||||
| +-----------------+ | +-------+ | ||||
| | | |Rule ID| | ||||
| v | +-------+--+ | ||||
| +--------+ +------------+ | Residue | | ||||
| |Rule ID'| | Encryption | <--- +----------+--------+ | ||||
| +--------+--+ +------------+ | | | ||||
| | Residue' | | Payload | | ||||
| +-----------+-------+ | | | ||||
| | Ciphertext | +-------------------+ | ||||
| | | | ||||
| +-------------------+ | ||||
| Figure 9: OSCORE Compression Diagram | ||||
| 7.4. Example OSCORE Compression | ||||
| In what follows we present an example GET Request and consequent | ||||
| CONTENT Response and show a possible set of rules for the Inner and | ||||
| Outer SCHC Compression. We then show a dump of the results and | ||||
| contrast SCHC + OSCORE performance with SCHC + COAP performance. | ||||
| This gives an approximation to the cost of security with SCHC-OSCORE. | ||||
| Our first example CoAP message is the GET Request in Figure 10 | ||||
| Original message: | ||||
| ================= | ||||
| 0x4101000182bb74656d7065726174757265 | ||||
| Header: | ||||
| 0x4101 | ||||
| 01 Ver | ||||
| 00 CON | ||||
| 0001 tkl | ||||
| 00000001 Request Code 1 "GET" | ||||
| 0x0001 = mid | ||||
| 0x82 = token | ||||
| Options: | ||||
| 0xbb74656d7065726174757265 | ||||
| Option 11: URI_PATH | ||||
| Value = temperature | ||||
| Original msg length: 17 bytes. | ||||
| Figure 10: CoAP GET Request | ||||
| Its corresponding response is the CONTENT Response in Figure 11. | ||||
| Original message: | ||||
| ================= | ||||
| 0x6145000182ff32332043 | ||||
| Header: | ||||
| 0x6145 | ||||
| 01 Ver | ||||
| 10 ACK | ||||
| 0001 tkl | ||||
| 01000101 Successful Response Code 69 "2.05 Content" | ||||
| 0x0001 = mid | ||||
| 0x82 = token | ||||
| 0xFF Payload marker | ||||
| Payload: | ||||
| 0x32332043 | ||||
| Original msg length: 10 | ||||
| Figure 11: CoAP CONTENT Response | ||||
| The SCHC Rules for the Inner Compression include all fields that are | ||||
| already present in a regular CoAP message, what matters is the order | ||||
| of appearance and inclusion of only those CoAP fields that go into | ||||
| the Plaintext, Figure 12. | ||||
| Rule ID 0 | ||||
| +----------------+--+--+-----------+-----------+-----------++--------+ | ||||
| | Field |FP|DI| Target | MO | CDA || Sent | | ||||
| | | | | Value | | || [bits] | | ||||
| +----------------+--+--+-----------+-----------+-----------++--------+ | ||||
| |CoAP Code | |up| 1 | equal |not-sent || | | ||||
| |CoAP Code | |dw|[69,132] | match-map |match-sent || c | | ||||
| |CoAP Uri-Path | |up|temperature| equal |not-sent || | | ||||
| |COAP Option-End | |dw| 0xFF | equal |not-sent || | | ||||
| +----------------+--+--+-----------+-----------+-----------++--------+ | ||||
| Figure 12: Inner SCHC Rules | ||||
| The Outer SCHC Rules (Figure 13) must process the OSCORE Options | ||||
| fields. Here we mask off the repeated bits (most importantly the | ||||
| flag and size bits) with the MSB Mathing Operator. | ||||
| Rule ID 0 | ||||
| +---------------+--+--+--------------+---------+-----------++------------+ | ||||
| | Field |FP|DI| Target | MO | CDA || Sent | | ||||
| | | | | Value | | || [bits] | | ||||
| +---------------+--+--+--------------+---------+-----------++------------+ | ||||
| |CoAP version | |bi| 01 |equal |not-sent || | | ||||
| |CoAP Type | |up| 0 |equal |not-sent || | | ||||
| |CoAP Type | |dw| 2 |equal |not-sent || | | ||||
| |CoAP TKL | |bi| 1 |equal |not-sent || | | ||||
| |CoAP Code | |up| 2 |equal |not-sent || | | ||||
| |CoAP Code | |dw| 68 |equal |not-sent || | | ||||
| |CoAP MID | |bi| 0000 |MSB(12) |LSB ||MMMM | | ||||
| |CoAP Token | |bi| 0x80 |MSB(5) |LSB ||TTT | | ||||
| |CoAP OSCORE_piv| |up| 0x0900 |MSB(12) |LSB ||PPPP | | ||||
| |COAP OSCORE_kid| |up|b'\x06client' |MSB(52) |LSB ||KKKK | | ||||
| |CoAP OSCORE_piv| |dw| b'' |equal |not-sent || | | ||||
| |COAP Option-End| |dw| 0xFF |equal |not-sent || | | ||||
| +---------------+--+--+--------------+---------+-----------++------------+ | ||||
| Figure 13: Outer SCHC Rules | ||||
| Next we show a dump of the compressed message: | ||||
| Compressed message: | ||||
| ================== | ||||
| 0x00291287f0a5c4833760d170 | ||||
| 0x00 = Rule ID | ||||
| piv = 0x04 | ||||
| Compression residue: | ||||
| 0b0001 010 0100 0100 (15 bits -> 2 bytes with padding) | ||||
| mid tkn piv kid | ||||
| Payload | ||||
| 0xa1fc297120cdd8345c | ||||
| Compressed message length: 12 bytes | ||||
| Figure 14: SCHC-OSCORE Compressed GET Request | ||||
| Compressed message: | ||||
| ================== | ||||
| 0x0015f4de9cb814c96aed9b1d981a3a58 | ||||
| 0x00 = Rule ID | ||||
| Compression residue: | ||||
| 0b0001 010 (7 bits -> 1 byte with padding) | ||||
| mid tkn | ||||
| Payload | ||||
| 0xfa6f4e5c0a64b576cd8ecc0d1d2c | ||||
| Compressed msg length: 16 bytes | ||||
| Figure 15: SCHC-OSCORE Compressed CONTENT Response | ||||
| For contrast, we compare these results with what would be obtained by | ||||
| SCHC compressing the original CoAP messages without protecting them | ||||
| with OSCORE. To do this, we compress the CoAP mesages according to | ||||
| the SCHC rules in Figure 16. | ||||
| Rule ID 1 | ||||
| +---------------+--+--+-----------+---------+-----------++------------+ | ||||
| | Field |FP|DI| Target | MO | CDA || Sent | | ||||
| | | | | Value | | || [bits] | | ||||
| +---------------+--+--+-----------+---------+-----------++------------+ | ||||
| |CoAP version | |bi| 01 |equal |not-sent || | | ||||
| |CoAP Type | |up| 0 |equal |not-sent || | | ||||
| |CoAP Type | |dw| 2 |equal |not-sent || | | ||||
| |CoAP TKL | |bi| 1 |equal |not-sent || | | ||||
| |CoAP Code | |up| 2 |equal |not-sent || | | ||||
| |CoAP Code | |dw| [69,132] |equal |not-sent || | | ||||
| |CoAP MID | |bi| 0000 |MSB(12) |LSB ||MMMM | | ||||
| |CoAP Token | |bi| 0x80 |MSB(5) |LSB ||TTT | | ||||
| |CoAP Uri-Path | |up|temperature|equal |not-sent || | | ||||
| |COAP Option-End| |dw| 0xFF |equal |not-sent || | | ||||
| +---------------+--+--+-----------+---------+-----------++------------+ | ||||
| Figure 16: SCHC-CoAP Rules (No OSCORE) | ||||
| This yields the results in Figure 17 for the Request, and Figure 18 | ||||
| for the Response. | ||||
| Compressed message: | ||||
| ================== | ||||
| 0x0114 | ||||
| 0x01 = Rule ID | ||||
| Compression residue: | ||||
| 0b00010100 (1 byte) | ||||
| Compressed msg length: 2 | ||||
| Figure 17: CoAP GET Compressed without OSCORE | ||||
| Compressed message: | ||||
| ================== | ||||
| 0x010a32332043 | ||||
| 0x01 = Rule ID | ||||
| Compression residue: | ||||
| 0b00001010 (1 byte) | ||||
| Payload | ||||
| 0x32332043 | ||||
| Compressed msg length: 6 | ||||
| Figure 18: CoAP CONTENT Compressed without OSCORE | ||||
| As can be seen, the difference between applying SCHC + OSCORE as | ||||
| compared to regular SCHC + COAP is about 10 bytes of cost. | ||||
| 8. Normative References | ||||
| [I-D.ietf-core-object-security] | ||||
| Selander, G., Mattsson, J., Palombini, F., and L. Seitz, | ||||
| "Object Security for Constrained RESTful Environments | ||||
| (OSCORE)", draft-ietf-core-object-security-13 (work in | ||||
| progress), June 2018. | ||||
| [I-D.ietf-lpwan-ipv6-static-context-hc] | ||||
| Minaburo, A., Toutain, L., Gomez, C., and D. Barthel, | ||||
| "LPWAN Static Context Header Compression (SCHC) and | ||||
| fragmentation for IPv6 and UDP", draft-ietf-lpwan-ipv6- | ||||
| static-context-hc-16 (work in progress), June 2018. | ||||
| [I-D.toutain-core-time-scale] | ||||
| Minaburo, A. and L. Toutain, "CoAP Time Scale Option", | ||||
| draft-toutain-core-time-scale-00 (work in progress), | ||||
| October 2017. | ||||
| [rfc7252] Shelby, Z., Hartke, K., and C. Bormann, "The Constrained | [rfc7252] Shelby, Z., Hartke, K., and C. Bormann, "The Constrained | |||
| Application Protocol (CoAP)", RFC 7252, | Application Protocol (CoAP)", RFC 7252, | |||
| DOI 10.17487/RFC7252, June 2014, | DOI 10.17487/RFC7252, June 2014, | |||
| <https://www.rfc-editor.org/info/rfc7252>. | <https://www.rfc-editor.org/info/rfc7252>. | |||
| [rfc7641] Hartke, K., "Observing Resources in the Constrained | [rfc7641] Hartke, K., "Observing Resources in the Constrained | |||
| Application Protocol (CoAP)", RFC 7641, | Application Protocol (CoAP)", RFC 7641, | |||
| DOI 10.17487/RFC7641, September 2015, | DOI 10.17487/RFC7641, September 2015, | |||
| <https://www.rfc-editor.org/info/rfc7641>. | <https://www.rfc-editor.org/info/rfc7641>. | |||
| [rfc7959] Bormann, C. and Z. Shelby, Ed., "Block-Wise Transfers in | ||||
| the Constrained Application Protocol (CoAP)", RFC 7959, | ||||
| DOI 10.17487/RFC7959, August 2016, | ||||
| <https://www.rfc-editor.org/info/rfc7959>. | ||||
| [rfc7967] Bhattacharyya, A., Bandyopadhyay, S., Pal, A., and T. | [rfc7967] Bhattacharyya, A., Bandyopadhyay, S., Pal, A., and T. | |||
| Bose, "Constrained Application Protocol (CoAP) Option for | Bose, "Constrained Application Protocol (CoAP) Option for | |||
| No Server Response", RFC 7967, DOI 10.17487/RFC7967, | No Server Response", RFC 7967, DOI 10.17487/RFC7967, | |||
| August 2016, <https://www.rfc-editor.org/info/rfc7967>. | August 2016, <https://www.rfc-editor.org/info/rfc7967>. | |||
| Authors' Addresses | Authors' Addresses | |||
| Ana Minaburo | Ana Minaburo | |||
| Acklio | Acklio | |||
| 2bis rue de la Chataigneraie | 1137A avenue des Champs Blancs | |||
| 35510 Cesson-Sevigne Cedex | 35510 Cesson-Sevigne Cedex | |||
| France | France | |||
| Email: ana@ackl.io | Email: ana@ackl.io | |||
| Laurent Toutain | Laurent Toutain | |||
| Institut MINES TELECOM; IMT Atlantique | Institut MINES TELECOM; IMT Atlantique | |||
| 2 rue de la Chataigneraie | 2 rue de la Chataigneraie | |||
| CS 17607 | CS 17607 | |||
| 35576 Cesson-Sevigne Cedex | 35576 Cesson-Sevigne Cedex | |||
| France | France | |||
| Email: Laurent.Toutain@imt-atlantique.fr | Email: Laurent.Toutain@imt-atlantique.fr | |||
| Ricardo Andreasen | ||||
| Universidad de Buenos Aires | ||||
| Av. Paseo Colon 850 | ||||
| C1063ACV Ciudad Autonoma de Buenos Aires | ||||
| Argentina | ||||
| Email: randreasen@fi.uba.ar | ||||
| End of changes. 79 change blocks. | ||||
| 527 lines changed or deleted | 706 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/ | ||||