| < draft-ietf-lpwan-coap-static-context-hc-01.txt | draft-ietf-lpwan-coap-static-context-hc-02.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 11, 2017 Institut MINES TELECOM ; IMT Atlantique | Expires: March 10, 2018 Institut MINES TELECOM ; IMT Atlantique | |||
| March 10, 2017 | September 06, 2017 | |||
| LPWAN Static Context Header Compression (SCHC) for CoAP | LPWAN Static Context Header Compression (SCHC) for CoAP | |||
| draft-ietf-lpwan-coap-static-context-hc-01 | draft-ietf-lpwan-coap-static-context-hc-02 | |||
| Abstract | Abstract | |||
| This draft discusses the way SCHC header compression can be applied | This draft defines the way SCHC header compression can be applied to | |||
| to CoAP headers in an LPWAN flow regarding the generated traffic. | CoAP headers. CoAP header structure differs from IPv6 and UDP | |||
| CoAP protocol differs from IPv6 and UDP protocols because the CoAP | protocols since the CoAP Header is flexible header with a variable | |||
| Header has a flexible header due to variable options. Another | number of options themself of a variable length. Another important | |||
| important difference is the asymmetric format in the header | difference is the asymmetry in the header information used for | |||
| information used in the request and the response packets. This draft | request and response messages. This draft takes into account the | |||
| shows that the Client and the Server do not uses the same fields and | fact that a thing can play the role of a CoAP client, a CoAP client | |||
| how the SCHC header compression can be used. | or both roles. | |||
| 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 http://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 11, 2017. | This Internet-Draft will expire on March 10, 2018. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2017 IETF Trust and the persons identified as the | Copyright (c) 2017 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 | |||
| (http://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 | ||||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | ||||
| 2. CoAP Compressing . . . . . . . . . . . . . . . . . . . . . . 3 | ||||
| 3. Compression of CoAP header fields . . . . . . . . . . . . . . 4 | ||||
| 3.1. CoAP version field (2 bits) . . . . . . . . . . . . . . . 4 | ||||
| 3.2. CoAP type field . . . . . . . . . . . . . . . . . . . . . 5 | ||||
| 3.3. CoAP token length field . . . . . . . . . . . . . . . . . 5 | ||||
| 3.4. CoAP code field . . . . . . . . . . . . . . . . . . . . . 6 | ||||
| 3.5. CoAP Message ID field . . . . . . . . . . . . . . . . . . 8 | ||||
| 3.6. CoAP Token field . . . . . . . . . . . . . . . . . . . . 9 | ||||
| 4. CoAP options . . . . . . . . . . . . . . . . . . . . . . . . 9 | ||||
| 4.1. CoAP option Content-format field. . . . . . . . . . . . . 9 | ||||
| 4.2. CoAP option Accept field . . . . . . . . . . . . . . . . 10 | ||||
| 4.3. CoAP option Max-Age field, CoAP option Uri-Host and Uri- | ||||
| Port fields . . . . . . . . . . . . . . . . . . . . . . . 11 | ||||
| 5. CoAP option Uri-Path and Uri-Query fields . . . . . . . . . . 11 | ||||
| 5.1. CoAP option Proxy-URI and Proxy-Scheme fields . . . . . . 12 | ||||
| 5.2. CoAP option ETag, If-Match, If-None-Match, Location-Path | ||||
| and Location-Query fields . . . . . . . . . . . . . . . . 13 | ||||
| 6. Other RFCs . . . . . . . . . . . . . . . . . . . . . . . . . 13 | ||||
| 6.1. Block . . . . . . . . . . . . . . . . . . . . . . . . . . 13 | ||||
| 6.2. Observe . . . . . . . . . . . . . . . . . . . . . . . . . 13 | ||||
| 6.3. No-Response . . . . . . . . . . . . . . . . . . . . . . . 13 | ||||
| 7. Protocol analysis . . . . . . . . . . . . . . . . . . . . . . 13 | ||||
| 8. Examples of CoAP header compression . . . . . . . . . . . . . 14 | ||||
| 8.1. Mandatory header with CON message . . . . . . . . . . . . 14 | ||||
| 8.2. Complete exchange . . . . . . . . . . . . . . . . . . . . 16 | ||||
| 9. Normative References . . . . . . . . . . . . . . . . . . . . 17 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 18 | ||||
| 1. Introduction | 1. Introduction | |||
| CoAP [rfc7252] is an implementation of the REST architecture for | ||||
| constrained devices. Gateway between CoAP and HTTP can be easily | ||||
| built since both protocols uses the same address space (URL), caching | ||||
| mechanisms and methods. | ||||
| 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.toutain-lpwan-ipv6-static-context-hc] defines a header | |||
| compression mechanism for LPWAN network based on a static context. | compression mechanism for LPWAN network based on a static context. | |||
| Where the context is said static since the element values composing | The context is said static since the element values composing the | |||
| the context are not learned during the packet exchanges but are | context are not learned during the packet exchanges but are | |||
| previously defined. The context(s) is(are) known by both ends before | previously defined. The context(s) is(are) known by both ends before | |||
| transmission. | transmission. | |||
| A context is composed of a set of rules (contexts) that are | A context is composed of a set of rules (contexts) that are | |||
| referenced by Rule IDs (identifiers). A rule describes the header | referenced by Rule IDs (identifiers). A rule contains an ordered | |||
| fields with some associated Target Values (TV). A Matching Operator | list of the header fields containing a field ID (FID) and its | |||
| (MO) is associated to each header field description. The rule is | position when repeated, a direction indicator (DI) (upstream, | |||
| selected if all the MOs fit the TVs. In that case, a Compression | downstream and bidirectional) and some associated Target Values (TV) | |||
| which are expected in the message header. A Matching Operator (MO) | ||||
| is associated to each header field description. The rule is selected | ||||
| if all the MOs fit the TVs. In that case, a Compression | ||||
| Decompression Function (CDF) associated to each field defines the | Decompression Function (CDF) associated to each field defines the | |||
| link between the compressed and decompressed value for each of the | link between the compressed and decompressed value for each of the | |||
| header fields. | header fields. | |||
| This draft discusses the way SCHC can be applied to CoAP headers, how | This document describes how the rules can be applied to CoAP flows. Compression of the | |||
| to extend MOs to match a specific element when several fields of the | CoAP header may be done in conjunction with the above layers or independantly. | |||
| same type are presented in the header. It also introduces the notion | ||||
| of bidirectional or unidirectional (upstream and downstream) fields. | ||||
| 2. CoAP Compressing | 2. CoAP Compressing | |||
| CoAP [RFC7252] is an implementation of the REST architecture for | CoAP differs from IPv6 and UDP protocols on the following | |||
| constrained devices. Gateway between CoAP and HTTP can be easily | ||||
| built since both protocols uses the same address space (URL), caching | ||||
| mechanisms and methods. | ||||
| 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. CoAP compression is not straightforward. Some | ||||
| differences between IPv6/UDP and CoAP can be highlighted. CoAP | ||||
| differs from IPv6 and UDP protocols in the following | ||||
| aspects: | 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 position in the header | in the request and in the response, only location in the header | |||
| may change (e.g. source and destination fields). A CoAP request | may vary (e.g. source and destination fields). A CoAP request is | |||
| is different from an response. For example, the URI-path option | different from an response. For example, the URI-path option is | |||
| is mandatory in the request and is not found in the response. | mandatory in the request and is not found in the response, request | |||
| may contain an Accept option and the response a Content-format | ||||
| option. | ||||
| Even when a field is "symmetric" (i.e. found in both directions) | ||||
| the values carried are different. For instance the Type field | ||||
| will contain a CON value in the request and a ACK or RST value in | ||||
| the response. Exploiting the asymmetry in compression will allow | ||||
| to send no bit in the compressed request and a single bit in the | ||||
| answer. Same behavior can be applied to the CoAP Code field (O.OX | ||||
| code are present in the request and Y.ZZ in the answer). | ||||
| 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 a LPWAN node | rate can be different if the request is issued from a LPWAN node | |||
| or from an non LPWAN device. For instance a Thing (ES) aware of | or from an non LPWAN device. For instance a Thing (ES) 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 | |||
| cleint will certainly send a larger token to the Thing. | client will certainly send a larger token to the Thing. SCHC | |||
| compression will not modify the values to offer a better | ||||
| compression rate. Nevertheless a proxy placed before the | ||||
| compressor may change some field values to offer a better | ||||
| compression rate and maintain the necessary context for | ||||
| interoperability with existing CoAP implementations. | ||||
| o In IPv6 and UDP header fields have a fixed size. In CoAP, Token | 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 | 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 | header. More systematically, the CoAP options are described using | |||
| the Type-Length-Value. When applying SCHC header compression, the | the Type-Length-Value. When applying SCHC header compression. | |||
| token size is not known at the rule creation, the sender and the | ||||
| receiver must agree on its compressed size. | ||||
| o The options type in CoAP is not defined with the same value. The | ||||
| Delta TLV coding makes that the type is not independent of | ||||
| previous option and may vary regarding the options contained in | ||||
| the header. | ||||
| 2.1. CoAP behavior | ||||
| A LPWAN node can either be a client or a server and sometimes both. | ||||
| In the client mode, the LPWAN node sends request to a server and | ||||
| expects an answer or acknowledgements. Acknowledgements can be at 2 | ||||
| different levels: | ||||
| o In the transport level, a CON message is acknowledged by an ACK | ||||
| message. A NON confirmable message is not acknowledged at all. | ||||
| o In REST level, a REST request is acknowledged by an "error" code. | ||||
| The [RFC7967] defines an option to limit the number of | ||||
| acknowledgements. | ||||
| Note that acknowledgement can be optimized and a REST level | ||||
| acknowledgement can be used as a transport level acknowledgement. | ||||
| 2.2. CoAP protocol analysis | ||||
| CoAP header format defines the following fields: | ||||
| o version (2 bits): this field can be elided during the SCHC | ||||
| compresssion | ||||
| o type (2 bits). It defines the type of the transport messages, 4 | ||||
| values are defined, regarding the type of exchange. If only NON | ||||
| messages are sent or CON/ACK messages, this field can be reduced | ||||
| to 0 or 1 bit. | ||||
| o token length (4 bits). The standard allows up to 8 bytes for a | ||||
| token. If a fixed token size is chosen, then this field can be | ||||
| elided. If some variation in length are needed then 1 or 2 bits | ||||
| could be enough for most of LPWAN applications. | ||||
| o code (8 bits). This field codes the request and the response | ||||
| values. In CoAP these values are represented in a more compact | ||||
| way then the coding used in HTTP, but the coding is not optimal. | ||||
| o message id (16 bits). This value of this header field is used to | ||||
| acknowledge CON frames. The size of this field is computed to | ||||
| allow the anticipation (how many frames can be sent without | ||||
| acknowledgement). When a value is used, the [RFC7252] defines the | ||||
| time before it can be reused without ambiguities. This size | ||||
| defined may be too large for a LPWAN node sending or receiving few | ||||
| messages a day. | ||||
| o Token (0 to 8 bytes). Token header field is used to identify | ||||
| active flows. Regarding the usage for LPWAN (stability in time | ||||
| and limited number), a short token (1 Byte or less) can be enough. | ||||
| o options are coded using delta-TLV. The delta-T depends on | ||||
| previous values, length is encoded inside the option. The | ||||
| [RFC7252] distinguishes repeatable options that can appear several | ||||
| times in the header. Among them we can distinguish: | ||||
| * list options which appear several time in the header but are | ||||
| exclusive such as the Accept option. | ||||
| * cumulative options which appear several times in the header but | ||||
| are part of a more generic value such as Uri-Path and Uri- | ||||
| Query. In that case, some elements may not change during the | ||||
| Thing lifetime and other may change at each request. For | ||||
| instance CoMi [I-D.ietf-core-comi] defines the following path | ||||
| /c/X6?k="eth0", where the first path element "c" does not | ||||
| change, the second element can vary over time with a different | ||||
| length (it represents the base64 enconding of a SID) and the | ||||
| query string can also vary over time. | ||||
| For a given flow some value options are stable through time. | ||||
| Observe, ETag, If-Match, If-None-Match and Size varies in each | ||||
| message. | ||||
| The CoAP protocol must not be altered by the compression/ | ||||
| decompression phase, but if no semantic is attributed to a value, it | ||||
| may be changed during this phase. For instance, the compression | ||||
| phase may reduce the size of a token but must maintain its unicity. | ||||
| The decompressor will not be able to restore the original value but | ||||
| the behavior will remain the same. If no special semantic is | ||||
| assigned to the token, this will be transparent. If a special | ||||
| semantic is assigned to the token, its compression may not be | ||||
| possible. | ||||
| 3. SCHC rules for CoAP header compression | ||||
| This draft refines the rules definition by adding the direction of | ||||
| the message, from the Thing point of view (uplink, downlink or | ||||
| bidirectional). It does not introduce new Machting Operator or new | ||||
| Compression Decompression Function, but add some possibility to check | ||||
| one particular element when several of them are present at the same | ||||
| time. | ||||
| A rule can contain CoAP and IPv6/UDP entries. In that case, IPv6/UDP | ||||
| entries are tagged bidirectional. | ||||
| 3.1. Directional Rules | ||||
| By default, an entry in a rule is bidirectional which means that it | ||||
| can be applied either on the uplink or downlink headers. By | ||||
| specifying the direction, the LC will take into account the specific | ||||
| field only if the direction match. | ||||
| If the Thing is a client, the URI-Path option is only present on | ||||
| request and not on the response. Therefore, the exact matching | ||||
| principle to select a rule cannot apply. | ||||
| Some options are marked unidirectional, the value (uplink or | ||||
| downlink) depends of the scenario. A Uri-Path option will be marked | ||||
| uplink if the Thing acts as a client and downlink if the Thing acts | ||||
| as a server. If the Thing acts both as client and server, two | ||||
| different rules will be defined. | ||||
| 3.2. Matching Operator | ||||
| The Matching Operator behavior has not changed, but the value must | ||||
| take a position value, if the entry is repeated : | ||||
| FID TV MO CDF | ||||
| URI-Path foo equal 1 not-sent | By sending compressed field information following the rule order, | |||
| URI-Path bar equal 2 not-sent | 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 | ||||
| recognise an option. The length will be send using the same CoAP | ||||
| encoding (size less than 12 are directly sent, higher values uses | ||||
| the escape mechanisms defined by [rfc7252]). Delta Type is | ||||
| omitted, the value will be recovered by the decompressor. This | ||||
| reduce the option length of 4, 12 or 20 bits regarding the | ||||
| orignial size of the delta type encoding in the option. | ||||
| Figure 1: Position entry. | 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. | ||||
| For instance, the rule Figure 1 matches with /foo/bar, but not /bar/ | 3. Compression of CoAP header fields | |||
| foo. | ||||
| The position is added after the natural argument of the MO, for | This section discusses of the compression of the different CoAP | |||
| example MSB (4,3) indicates a most significant bit matching of 4 bits | header fields. These are just examples. The compression should take | |||
| in a field located in position 3. | 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.3. Compressed field length | 3.1. CoAP version field (2 bits) | |||
| When the length is not clearly indicated in the rule, the value | This field is bidirectional and can be elided during the SCHC | |||
| length must be sent with the field data, which means for CoAP to send | compression, since it always contains the same value. It appears | |||
| directly the CoAP option where the delta-T is set to 0. | only in first position. | |||
| For the CoMi path /c/X6?k="eth0" the rule can be set to: | FID Pos DI TV MO CDF | |||
| ver 1 bi 1 equal not-sent | ||||
| FID TV MO CDF | 3.2. CoAP type field | |||
| URI-Path c equal 1 not-sent | This field can be managed bidirectionally or unidirectionally.Several | |||
| URI-Path ignore 2 value-sent | strategies can be applied to this field regarding the values used: | |||
| URI-Query k= MSB (16, 1) value-sent | ||||
| Figure 2: CoMi URI compression | 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: | ||||
| Figure 2 shows the parsing and the compression of the URI. where c is | * Pos is always 1, | |||
| not sent. The second element is sent with the length (i.e. 0x02 X 6) | ||||
| followed by the query option (i.e. 0x08 k="eth0"). | ||||
| [[NOTE we don't process URI with a multiple number of path element | * DI can either be "uplink" if the ES is a CoAP client or | |||
| ??]]. | "downlink" if the ES is a CoAP server, or "bidirectional" | |||
| 4. Application to CoAP header fields | * TV is set to the value, | |||
| This section lists the different CoAP header fields and how they can | * MO is set to "equal" | |||
| be compressed. | ||||
| 4.1. CoAP version field | * CDF is set to "not-sent". | |||
| This field is bidirectional. | FID Pos DI TV MO CDF | |||
| type 1 bi NON equal not-sent | ||||
| This field contains always the same value, therefore the TV may be 1, | o If the ES is either a client or a Server and confirmable message | |||
| the MO is set to "equal" and the CDF is set to "not-sent" | 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. | ||||
| 4.2. CoAP type field | FID Pos DI TV MO CDF | |||
| type 1 up CON equal not-sent | ||||
| type 1 dw {0:ACK, 1:RST} match-mapping mapping-sent | ||||
| This field is bidirectional or undirectional. | 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. | ||||
| Several strategies can be applied to this field regarding the values | FID Pos DI TV MO CDF | |||
| used: | type 1 bi ignore send-value | |||
| o if only one type is sent, for example NON message, its | 3.3. CoAP token length field | |||
| transmission can be avoided. TV is set to the value, MO is set to | ||||
| "equal" and CDF is set to "not-sent". | ||||
| o if two values are sent, for example CON and ACK and RST is not | This field is bi-directional. | |||
| used, this field can be reduced to one bit. TV is set to a | ||||
| matching value {CON: 0, ACK: 1}, MO is set to match-mapping and | ||||
| CDF is set to mapping-sent. | ||||
| o It is also possible avoid transmission of this field by marking it | Several strategies can be applied to this field regarding the values: | |||
| unidirectional. In one direction, the TV is set to CON, MO is set | ||||
| to "equal" and CDF is set to "not-sent". On the other direction, | ||||
| the TV is set to ACK, the MO is set to "equal" and the CDF is set | ||||
| to "not-sent". | ||||
| o Otherwise TV is not set, MO is set to "ignore" and CDF is set to | o no token or a wellknown length, the transmission can be avoided. | |||
| "value-sent". | 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. | ||||
| 4.3. CoAP token length field | FID Pos DI TV MO CDF | |||
| TKL 1 bi value ignore send-value | ||||
| This field is bi-directional. | 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. | ||||
| Several strategies can be applied to this field regarding the values: | FID Pos DI TV MO CDF | |||
| TKL 1 bi 0x0 MSB(2) LSB(2) | ||||
| o no token or a wellknown length, the transmission can be avoided. | o otherwise the field value has to be sent. | |||
| TV is set to the length, the MO is set to "equal" and CDF is set | ||||
| to "not-sent" | ||||
| o The length is variable from one message to another. TV is not | FID Pos DI TV MO CDF | |||
| set, MO is set to "ignore" and CDF is set to "value-sent". The | TKL 1 bi ignore value-sent | |||
| size of the sent value must be known by ends. The size may be 4 | ||||
| bits. The receiver must take into account this value to retrieve | ||||
| the token. A CoAP proxy may be used before the compression to | ||||
| reduce the field size. | ||||
| 4.4. CoAP code field | 3.4. CoAP code field | |||
| This field is unidirectional. The client and the server do not use | This field is bidirectional, but compression can be enhanced using | |||
| the same values. | DI. | |||
| The CoAP code field defines a tricky way to ensure compatibility with | The CoAP Code field defines a tricky way to ensure compatibility with | |||
| HTTP values. Nevertheless only 21 values are defined by [RFC7252] | HTTP values. Nevertheless only 21 values are defined by [rfc7252] | |||
| compared to the 255 possible values. So, it could efficiently be | compared to the 255 possible values. | |||
| coded on 5 bits. The number of code may vary over time, some new | ||||
| codes may be introduced or some applications use a limited number of | ||||
| values. | ||||
| +------+------------------------------+-----------+ | +------+------------------------------+-----------+ | |||
| | Code | Description | Mapping | | | Code | Description | Mapping | | |||
| +------+------------------------------+-----------+ | +------+------------------------------+-----------+ | |||
| | 0.00 | | 0x00 | | | 0.00 | | 0x00 | | |||
| | 0.01 | GET | 0x01 | | | 0.01 | GET | 0x01 | | |||
| | 0.02 | POST | 0x02 | | | 0.02 | POST | 0x02 | | |||
| | 0.03 | PUT | 0x03 | | | 0.03 | PUT | 0x03 | | |||
| | 0.04 | DELETE | 0x04 | | | 0.04 | DELETE | 0x04 | | |||
| | 0.05 | FETCH | 0x05 | | | 0.05 | FETCH | 0x05 | | |||
| skipping to change at page 8, line 39 ¶ | skipping to change at page 7, line 39 ¶ | |||
| | 4.13 | Request Entity Too Large | 0x15 | | | 4.13 | Request Entity Too Large | 0x15 | | |||
| | 4.15 | Unsupported Content-Format | 0x16 | | | 4.15 | Unsupported Content-Format | 0x16 | | |||
| | 5.00 | Internal Server Error | 0x17 | | | 5.00 | Internal Server Error | 0x17 | | |||
| | 5.01 | Not Implemented | 0x18 | | | 5.01 | Not Implemented | 0x18 | | |||
| | 5.02 | Bad Gateway | 0x19 | | | 5.02 | Bad Gateway | 0x19 | | |||
| | 5.03 | Service Unavailable | 0x1A | | | 5.03 | Service Unavailable | 0x1A | | |||
| | 5.04 | Gateway Timeout | 0x1B | | | 5.04 | Gateway Timeout | 0x1B | | |||
| | 5.05 | Proxying Not Supported | 0x1C | | | 5.05 | Proxying Not Supported | 0x1C | | |||
| +------+------------------------------+-----------+ | +------+------------------------------+-----------+ | |||
| Figure 3: Example of CoAP code mapping | Figure 1: Example of CoAP code mapping | |||
| Figure 3 gives a possible mapping, it can be changed to add new codes | 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. | 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. | 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 | 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 | 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. | for Y.ZZ codes. It is the opposite if the thing is a server. | |||
| 4.5. CoAP Message ID field | 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 Pos DI TV MO CDF | ||||
| code 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 Pos DI TV MO CDF | ||||
| code 1 dw {0:0.01, 1:0.02}match-mapping mapping-sent | ||||
| The same approach can be applied to responses. | ||||
| 3.5. CoAP Message ID field | ||||
| This field is bidirectional. | This field is bidirectional. | |||
| Message ID is used for two purposes: | Message ID is used for two purposes: | |||
| o To acknowledge a CON message with an ACK. | o To acknowledge a CON message with an ACK. | |||
| o To avoid duplicate messages. | o To avoid duplicate messages. | |||
| In LPWAN, since a message can be received by several radio gateway, | In LPWAN, since a message can be received by several radio gateway, | |||
| some LPWAN technologies include a sequence number in L2 to avoid | some LPWAN technologies include a sequence number in L2 to avoid | |||
| duplicate frames. Therefore if the message does not need to be | duplicate frames. Therefore if the message does not need to be | |||
| acknowledged (NON or RST message), the Message ID field can be | acknowledged (NON or RST message), the Message ID field can be | |||
| avoided. In that case TV is not set, MO is set to ignore and CDF is | avoided. | |||
| set to "not-sent". The decompressor can generate a number. | ||||
| [[Note; check id this field is not used by OSCOAP .]] | FID Pos DI TV MO CDF | |||
| Mid 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 | To optimize information sent on the LPWAN, shorter values may be used | |||
| during the exchange, but Message ID values generated a common CoAP | during the exchange, but Message ID values generated a common CoAP | |||
| implementation will not take into account this limitation. Before | implementation will not take into account this limitation. Before | |||
| the compression, a proxy may be needed to reduce the size. In that | the compression, a proxy may be needed to reduce the size. | |||
| case, the TV is set to 0x0000, MO is set to "MSB(l)" and CDF is set | ||||
| to "LSB(16-l)", where "l" is the size of the compressed header. | ||||
| Otherwise if no compression is needed the TV is not set, MO is set to | FID Pos DI TV MO CDF | |||
| ignore and CDF is set to "not-sent". | Mid 1 bi 0x0000 MSB(12) LSB(4) | |||
| 4.6. CoAP Token field | Otherwise if no compression is possible, the field has to be sent | |||
| FID Pos DI TV MO CDF | ||||
| Mid 1 bi ignore value-sent | ||||
| 3.6. CoAP Token field | ||||
| This field is bi-directional. | This field is bi-directional. | |||
| Token is used to identify transactions and varies from one | Token is used to identify transactions and varies from one | |||
| transaction to another. Therefore, it is usually necessary to send | transaction to another. Therefore, it is usually necessary to send | |||
| the value of the token field on the LPWAN network. The optimization | the value of the token field on the LPWAN network. The optimization | |||
| will occur by using small values. | will occur by using small values. | |||
| Common CoAP implementations may generate large tokens, even if | Common CoAP implementations may generate large tokens, even if | |||
| shorter tokens could be used regarding the LPWAN characteristics. A | shorter tokens could be used regarding the LPWAN characteristics. A | |||
| proxy may be needed to reduce the size of the token before | proxy may be needed to reduce the size of the token before | |||
| compression. | compression. | |||
| Otherwise the TV is not set, the MO is set to ignore and CDF is set | The size of the compress token sent is known by a combination of the | |||
| to "value-sent". | Token Length field and the rule entry. For instance, with the entry | |||
| below: | ||||
| The decompression may know the length of the token field from the | FID Pos DI TV MO CDF | |||
| token length field. | tkl 1 bi 2 equal not-sent | |||
| token 1 bi 0x00 MSB(12) LSB(4) | ||||
| 4.7. CoAP option Content-format field. | The uncompressed token is 2 bytes long, but the compressed size will | |||
| be 4 bits. | ||||
| 4. CoAP options | ||||
| 4.1. CoAP option Content-format field. | ||||
| 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 the client | a rule entry. It is used only by the server to inform the client | |||
| about of the payload type and is never found in client requests. | about of the payload type and is never found in client requests. | |||
| If the value is known by both sides, the TV contains that value and | If single value is expected by the client, the TV contains that value | |||
| MO is set to "equal" and the CDF is set to "not-sent". | and MO is set to "equal" and the CDF is set to "not-sent". The | |||
| examples below describe the rules for an ES acting as a server. | ||||
| Otherwise the TV is not set, MO is set to "ignore" and CDF is set to | FID Pos DI TV MO CDF | |||
| "value-sent" | content 1 up value equal not-sent | |||
| A mapping list can also be used to reduce the size. | If several possible value are expected by the client, a matching-list | |||
| can be used. | ||||
| 4.8. CoAP option Accept field | FID Pos DI TV MO CDF | |||
| content 1 up {0:50,1:41} match-mapping mapping-sent | ||||
| Otherwise the value can be sent.The value-sent CDF in the compressor | ||||
| do not send the option type and the decompressor reconstruct it | ||||
| regarding the position in the rule. | ||||
| FID Pos DI TV MO CDF | ||||
| content 1 up ignore value-sent | ||||
| 4.2. CoAP option Accept field | ||||
| 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 client to inform of the | a rule entry. It is used only by the client to inform of the | |||
| possible payload type and is never found in server response. | possible payload type and is never found in server response. | |||
| The number of accept options is not limited and can vary regarding | The number of accept options is not limited and can vary regarding | |||
| the usage. To be selected a rule must contain the exact number about | the usage. To be selected a rule must contain the exact number about | |||
| accept options with their positions. | accept options with their positions. Since the order in which the | |||
| Accept value are sent, the position order can be modified. The rule | ||||
| below | ||||
| if the accept value must be sent, the TV contains that value, MO is | FID Pos DI TV MO CDF | |||
| set to "ignore x" where "x" is the accept option's position and CDF | accept 1 up 41 egal not-sent | |||
| is set to value-sent. Since the value length is not known, it must | accept 2 up 50 egal not-sent | |||
| be sent as a CoAP TLV with delta-T set to 0. | ||||
| Otherwise the TV is not set, MO is set to "equal x" where x is the | will be selected only if two accept options are in the CoAP header if | |||
| accept option's position and CDF is set to "not-sent" | this order. | |||
| [[note: it could be more liberal and do not provide the same order | The rule below: | |||
| after decompression]] | ||||
| 4.9. CoAP option Max-Age field | FID Pos DI TV MO CDF | |||
| accept 0 up 41 egal not-sent | ||||
| accept 0 up 50 egal not-sent | ||||
| will accept a-only CoAP messages with 2 accept options, but the order | ||||
| will not influence the rule selection. The decompression will | ||||
| reconstruct the header regarding the rule order. | ||||
| Otherwise a matching-list can be applied to the different values, in | ||||
| that case the order is important to recover the appropriate value and | ||||
| the position must be clearly indicate. | ||||
| FID Pos DI TV MO CDF | ||||
| accept 1 up {0:50,1:41} match-mapping mapping-sent | ||||
| accept 2 up {0:50,1:61} match-mapping mapping-sent | ||||
| accept 3 up {0:61,1:71} match-mapping mapping-sent | ||||
| Finally, the option can be explicitly sent. | ||||
| FID Pos DI TV MO CDF | ||||
| accept 1 up ignore value-sent | ||||
| 4.3. CoAP option Max-Age field, CoAP option Uri-Host and Uri-Port | ||||
| 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, the TV is set with this | If the duration is known by both ends, value can be elided on the | |||
| duration, the MO is set to "equal" and the CDF is set to "not-sent". | LPWAN. | |||
| Otherwise the TV is not set, the MO is set to "ignore" and the CDF is | A matching list can be used if some wellknown values are defined. | |||
| set to "value-sent". Since the value length is not known, it must be | ||||
| sent as a CoAP TLV with delta-T set to 0. | 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, | [[note: we can reduce (or create a new option) the unit to minute, | |||
| second is small for LPWAN ]] | second is small for LPWAN ]] | |||
| 4.10. CoAP option Uri-Host and Uri-Port fields | 5. 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 server and are never found in server response. | specific resource and are never found in server response. | |||
| For each option, if the value is known by both ends, the TV is set | The Matching Operator behavior has not changed, but the value must | |||
| with this value, the MO is set to "equal" and the CDF is set to "not- | take a position value, if the entry is repeated : | |||
| sent". | ||||
| Otherwise the TV is not set, the MO is set to "ignore" and the CDF is | FID Pos DI TV MO CDF | |||
| set to "value-sent". Since the value length is not known, it must be | URI-Path 1 up foo equal not-sent | |||
| sent as a CoAP TLV with delta-T set to 0. | URI-Path 2 up bar equal not-sent | |||
| 4.11. CoAP option Uri-Path and Uri-Query fields | Figure 2: Position entry. | |||
| This fields are unidirectional and must not be set to bidirectional | For instance, the rule Figure 2 matches with /foo/bar, but not /bar/ | |||
| in a rule entry. They are used only by the client to access to a | foo. | |||
| specific resource and are never found in server response. | ||||
| Path and Query option may have different formats. Section 3.2 gives | When the length is not clearly indicated in the rule, the value | |||
| some examples. | length must be sent with the field data, which means for CoAP to send | |||
| directly the CoAP option with length and value. | ||||
| If the URI path as well as the query is composed of 2 or more | For instance for a CoMi path /c/X6?k="eth0" the rule can be set to: | |||
| elements, then the position must be set in the MO parameters. | ||||
| If a Path or Query element is stable over the time, then TV is set | FID Pos DI TV MO CDF | |||
| with its value, MO is set to "equal x" where x is the position in the | URI-Path 1 up c equal not-sent | |||
| Path or the Query and CDF is set to "not-sent". | URI-Path 2 up ignore value-sent | |||
| URI-Query 1 up k= MSB (16) LSB | ||||
| Otherwise if the value varies over time, TV is not set, MO is set to | Figure 3: CoMi URI compression | |||
| "ignore x" where x is the position in the Path or in the Query and | ||||
| CDF is set to "value-sent". Since the value length is not known, it | Figure 3 shows the parsing and the compression of the URI. where c is | |||
| must be sent as a CoAP TLV with deltaT set to 0. | not sent. The second element is sent with the length (i.e. 0x2 X 6) | |||
| followed by the query option (i.e. 0x05 "eth0"). | ||||
| A Mapping list can be used to reduce size of variable Paths or | A Mapping list can be used to reduce size of variable Paths or | |||
| Queries. In that case, to optimize the compression, several elements | Queries. In that case, to optimize the compression, several elements | |||
| can be regrouped into a single entry. Numbering of elements do not | can be regrouped into a single entry. Numbering of elements do not | |||
| change, MO comparison is set with the first element of the matching. | change, MO comparison is set with the first element of the matching. | |||
| For instance, the following Path /foo/bar/variable/stable can leads | FID Pos DI TV MO CDF | |||
| to the rule defined Figure 4. | URI-Path 1 up {0:"/c/c", equal not-sent | |||
| 1:"/c/d" | ||||
| FID TV MO CDF | URI-Path 3 up ignore value-sent | |||
| URI-Query 1 up k= MSB (16) LSB | ||||
| URI-Path {"/foo/bar":1, match-mapping 1 mapping-sent | ||||
| "/bar/foo":2} | ||||
| URI-Path ignore 3 value-sent | ||||
| URI-Path stable equal 4 not-sent | ||||
| Figure 4: complex path example | Figure 4: complex path example | |||
| 4.12. CoAP option Proxy-URI and Proxy-Scheme fields | For instance, the following Path /foo/bar/variable/stable can leads | |||
| to the rule defined Figure 4. | ||||
| 5.1. CoAP option 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" | |||
| 4.13. CoAP option ETag, If-Match, If-None-Match, Location-Path and | 5.2. 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 request. | |||
| [[Can include OSCOAP Object security in that category ]] | [[Can include OSCOAP Object security in that category ]] | |||
| 5. Other RFCs | 6. Other RFCs | |||
| 5.1. Block | 6.1. Block | |||
| Block option should be avoided in LPWAN. The minimum size of 16 | Block option should be avoided in LPWAN. The minimum size of 16 | |||
| bytes can be incompatible with some LPWAN technologies. | bytes can be incompatible with some LPWAN technologies. | |||
| [[Note: do we recommand LPWAN fragmentation since the smallest value | [[Note: do we recommand LPWAN fragmentation since the smallest value | |||
| of 16 is too big?]] | of 16 is too big?]] | |||
| 5.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 Thing implementation should limit the | |||
| value increase or a proxy can be used limit the increase. | value increase or a proxy can be used limit the increase. | |||
| 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. | |||
| 5.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 by both ends, then TV | |||
| is set to this value, MO is set to "equal" and CDF is set to "not- | is set to this value, MO is set to "equal" and CDF is set to "not- | |||
| sent". | 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 CDF to "value-sent". A matching list can also be | |||
| used to reduce the size. | used to reduce the size. | |||
| 6. Examples of CoAP header compression | 7. Protocol analysis | |||
| 8. Examples of CoAP header compression | ||||
| 6.1. Mandatory header with CON message | 8.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. | Thing. For this simple scenario, the rules are described Figure 5. | |||
| rule id 1 | rule id 1 | |||
| +-------------+------+---------+-------------+-----+----------------+ | +-------------+------+---------+-------------+-----+----------------+ | |||
| | Field |TV |MO |CDF |dir | Sent | | | Field |TV |MO |CDF |dir | Sent | | |||
| +=============+======+=========+=============+=====+================+ | +=============+======+=========+=============+=====+================+ | |||
| |CoAP version | 01 |equal |not-sent |bi | | | |CoAP version | 01 |equal |not-sent |bi | | | |||
| |CoAP Type | |ignore |value-sent |bi |TT | | |CoAP Type | |ignore |value-sent |bi |TT | | |||
| |CoAP TKL | 0 |equal |not-sent |bi | | | |CoAP TKL | 0 |equal |not-sent |bi | | | |||
| |CoAP Code | ML1 |match-map|matching-sent|bi | CC CCC | | |CoAP Code | ML1 |match-map|matching-sent|bi | CC CCC | | |||
| |CoAP MID | 0000 |MSB(7 ) |LSB(9) |bi | M-ID | | |CoAP MID | 0000 |MSB(7 ) |LSB(9) |bi | M-ID | | |||
| |CoAP Uri-Path| path |equal 1 |not-sent |down | | | |CoAP Uri-Path| path |equal 1 |not-sent |down | | | |||
| +-------------+------+---------+-------------+-----+----------------+ | +-------------+------+---------+-------------+-----+----------------+ | |||
| 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 3: 0.01 is | bits using the matching list (as the one given Figure 1: 0.01 is | |||
| value 0x01 and 2.05 is value 0x0c) Message-ID has shrunk to 9 bits to | 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 | preserve alignment on byte boundary. The most significant bit must | |||
| be set to 0 through a CoAP proxy. Uri-Path contains a single element | 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 LPWAN Application | |||
| Server sends a CON message. Compression reduces the header sending | Server sends a CON message. Compression reduces the header sending | |||
| only the Type, a mapped code and the least 9 significant bits of | only the Type, a mapped code and the least 9 significant bits of | |||
| Message ID. The receiver decompresses the header. . | Message ID. The receiver decompresses the header. . | |||
| skipping to change at page 14, line 37 ¶ | skipping to change at page 15, line 30 ¶ | |||
| +-+-+--+----+--------+ | 1001 1000 0011 0100| +-+-+--+----+--------+ | +-+-+--+----+--------+ | 1001 1000 0011 0100| +-+-+--+----+--------+ | |||
| | | |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 | The message can be further optimized by setting some fields | |||
| unidirectional, as described in Figure 7. Note that Type is no more | unidirectional, as described in Figure 7. Note that Type is no more | |||
| sent in the compressed format, Compressed Code size in not changed in | 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 | that example (8 values are needed to code all the requests and 21 to | |||
| code all the responses in the matching list Figure 3) | code all the responses in the matching list Figure 1) | |||
| rule id 1 | rule id 1 | |||
| +-------------+------+---------+-------------+---+----------------+ | +-------------+------+---------+-------------+---+----------------+ | |||
| | Field |TV |MO |CDF |dir| Sent | | | Field |TV |MO |CDF |dir| Sent | | |||
| +=============+======+=========+=============+===+================+ | +=============+======+=========+=============+===+================+ | |||
| |CoAP version | 01 |equal |not-sent |bi | | | |CoAP version | 01 |equal |not-sent |bi | | | |||
| |CoAP Type | CON |equal |not-sent |dw | | | |CoAP Type | CON |equal |not-sent |dw | | | |||
| |CoAP Type | ACK |equal |not-sent |up | | | |CoAP Type | ACK |equal |not-sent |up | | | |||
| |CoAP TKL | 0 |equal |not-sent |bi | | | |CoAP TKL | 0 |equal |not-sent |bi | | | |||
| |CoAP Code | ML2 |match-map|matching-sent|dw |CCCC C | | |CoAP Code | ML2 |match-map|mapping-sent |dw |CCCC C | | |||
| |CoAP Code | ML3 |match-map|matching-sent|up |CCCC C | | |CoAP Code | ML3 |match-map|mapping-sent |up |CCCC C | | |||
| |CoAP MID | 0000 |MSB(5) |LSB(11) |bi | M-ID | | |CoAP MID | 0000 |MSB(5) |LSB(11) |bi | M-ID | | |||
| |CoAP Uri-Path| path |equal 1 |not-sent |dw | | | |CoAP Uri-Path| path |equal 1 |not-sent |dw | | | |||
| +-------------+------+---------+-------------+---+----------------+ | +-------------+------+---------+-------------+---+----------------+ | |||
| ML1 = {CON : 0, ACK:1} ML2 = {POST:0, 2.04:1, 0.00:3} | ML1 = {CON : 0, ACK:1} ML2 = {POST:0, 2.04:1, 0.00:3} | |||
| Figure 7: CoAP Context to compress header without token | Figure 7: CoAP Context to compress header without token | |||
| 6.2. Complete exchange | 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 |------------------------>| | |||
| | | | | | | |||
| | | | | | | |||
| skipping to change at page 16, line 7 ¶ | skipping to change at page 16, line 36 ¶ | |||
| rule id 3 | rule id 3 | |||
| +-------------+------+---------+-------------+---+----------------+ | +-------------+------+---------+-------------+---+----------------+ | |||
| | Field |TV |MO |CDF |dir| Sent | | | Field |TV |MO |CDF |dir| Sent | | |||
| +=============+======+=========+=============+===+================+ | +=============+======+=========+=============+===+================+ | |||
| |CoAP version | 01 |equal |not-sent |bi | | | |CoAP version | 01 |equal |not-sent |bi | | | |||
| |CoAP Type | CON |equal |not-sent |up | | | |CoAP Type | CON |equal |not-sent |up | | | |||
| |CoAP Type | ACK |equal |not-sent |dw | | | |CoAP Type | ACK |equal |not-sent |dw | | | |||
| |CoAP TKL | 1 |equal |not-sent |bi | | | |CoAP TKL | 1 |equal |not-sent |bi | | | |||
| |CoAP Code | POST |equal |not-sent |up | | | |CoAP Code | POST |equal |not-sent |up | | | |||
| |CoAP Code | 0.00 |equal |not-sent |dw | | | |CoAP Code | 0.00 |equal |not-sent |dw | | | |||
| |CoAP MID | 0000 |MSB(8) |LSB(8) |bi |MMMMMMMM | | |CoAP MID | 0000 |MSB(8) |LSB |bi |MMMMMMMM | | |||
| |CoAP Token | |ignore |send-value |up |TTTTTTTT | | |CoAP Token | |ignore |send-value |up |TTTTTTTT | | |||
| |CoAP Uri-Path| /c |equal 1 |not-sent |dw | | | |CoAP Uri-Path| /c |equal 1 |not-sent |dw | | | |||
| |CoAP Uri-query ML4 |equal 1 |not-sent |dw |P | | |CoAP Uri-query ML4 |equal 1 |not-sent |dw |P | | |||
| |CoAP Content | X |equal |not-sent |up | | | |CoAP Content | X |equal |not-sent |up | | | |||
| +-------------+------+---------+-------------+---+----------------+ | +-------------+------+---------+-------------+---+----------------+ | |||
| rule id 4 | rule id 4 | |||
| +-------------+------+---------+-------------+---+----------------+ | +-------------+------+---------+-------------+---+----------------+ | |||
| | Field |TV |MO |CDF |dir| Sent | | | Field |TV |MO |CDF |dir| Sent | | |||
| +=============+======+=========+=============+===+================+ | +=============+======+=========+=============+===+================+ | |||
| |CoAP version | 01 |equal |not-sent |bi | | | |CoAP version | 01 |equal |not-sent |bi | | | |||
| |CoAP Type | CON |equal |not-sent |dw | | | |CoAP Type | CON |equal |not-sent |dw | | | |||
| |CoAP Type | ACK |equal |not-sent |up | | | |CoAP Type | ACK |equal |not-sent |up | | | |||
| |CoAP TKL | 1 |equal |not-sent |bi | | | |CoAP TKL | 1 |equal |not-sent |bi | | | |||
| |CoAP Code | 2.05 |equal |not-sent |dw | | | |CoAP Code | 2.05 |equal |not-sent |dw | | | |||
| |CoAP Code | 0.00 |equal |not-sent |up | | | |CoAP Code | 0.00 |equal |not-sent |up | | | |||
| |CoAP MID | 0000 |MSB(8) |LSB(8) |bi |MMMMMMMM | | |CoAP MID | 0000 |MSB(8) |LSB |bi |MMMMMMMM | | |||
| |CoAP Token | |ignore |send-value |dw |TTTTTTTT | | |CoAP Token | |ignore |send-value |dw |TTTTTTTT | | |||
| |COAP Accept | X |equal |not-sent |dw | | | |COAP Accept | X |equal |not-sent |dw | | | |||
| +-------------+------+---------+-------------+---+----------------+ | +-------------+------+---------+-------------+---+----------------+ | |||
| alternative rule: | alternative rule: | |||
| rule id 4 | rule id 4 | |||
| +-------------+------+---------+-------------+---+----------------+ | +-------------+------+---------+-------------+---+----------------+ | |||
| | Field |TV |MO |CDF |dir| Sent | | | Field |TV |MO |CDF |dir| Sent | | |||
| +=============+======+=========+=============+===+================+ | +=============+======+=========+=============+===+================+ | |||
| |CoAP version | 01 |equal |not-sent |bi | | | |CoAP version | 01 |equal |not-sent |bi | | | |||
| |CoAP Type | ML1 |equal |match-sent(1)|bi |t | | |CoAP Type | ML1 |match-map|match-sent |bi |t | | |||
| |CoAP TKL | 1 |equal |not-sent |bi | | | |CoAP TKL | 1 |equal |not-sent |bi | | | |||
| |CoAP Code | ML2 |equal |match-sent(1)|up | cc | | |CoAP Code | ML2 |match-map|match-sent |up | cc | | |||
| |CoAP Code | ML3 |equal |match-sent(2)|dw | cc | | |CoAP Code | ML3 |match-map|match-sent |dw | cc | | |||
| |CoAP MID | 0000 |MSB(8) |LSB(8) |bi |MMMMMMMM | | |CoAP MID | 0000 |MSB(8) |LSB |bi |MMMMMMMM | | |||
| |CoAP Token | |ignore |send-value |dw |TTTTTTTT | | |CoAP Token | |ignore |send-value |dw |TTTTTTTT | | |||
| |CoAP Uri-Path| /c |equal 1 |not-sent |dw | | | |CoAP Uri-Path| /c |equal 1 |not-sent |dw | | | |||
| |CoAP Uri-query ML4 |equal 1 |not-sent |dw |P | | |CoAP Uri-query ML4 |equal 1 |not-sent |dw |P | | |||
| |CoAP Content | X |equal |not-sent |up | | | |CoAP Content | X |equal |not-sent |up | | | |||
| |COAP Accept | x |equal |not-sent |dw | | | |COAP Accept | x |equal |not-sent |dw | | | |||
| +-------------+------+---------+-------------+---+----------------+ | +-------------+------+---------+-------------+---+----------------+ | |||
| ML1 {CON:0, ACK:1} ML2 {POST:0, 0.00: 1} ML3 {2.05:0, 0.00:1} | ML1 {CON:0, ACK:1} ML2 {POST:0, 0.00: 1} ML3 {2.05:0, 0.00:1} | |||
| ML4 {NULL:0, k=AS:1, K=AZE:2} | ML4 {NULL:0, k=AS:1, K=AZE:2} | |||
| 7. Normative References | 9. Normative References | |||
| [I-D.ietf-core-comi] | ||||
| Stok, P., Bierman, A., Veillette, M., and A. Pelov, "CoAP | ||||
| Management Interface", draft-ietf-core-comi-00 (work in | ||||
| progress), January 2017. | ||||
| [I-D.toutain-lpwan-ipv6-static-context-hc] | [I-D.toutain-lpwan-ipv6-static-context-hc] | |||
| Minaburo, A. and L. Toutain, "LPWAN Static Context Header | Minaburo, A. and L. Toutain, "LPWAN Static Context Header | |||
| Compression (SCHC) for IPv6 and UDP", draft-toutain-lpwan- | Compression (SCHC) for IPv6 and UDP", draft-toutain-lpwan- | |||
| ipv6-static-context-hc-00 (work in progress), September | ipv6-static-context-hc-00 (work in progress), September | |||
| 2016. | 2016. | |||
| [RFC1332] McGregor, G., "The PPP Internet Protocol Control Protocol | [rfc7252] Shelby, Z., Hartke, K., and C. Bormann, "The Constrained | |||
| (IPCP)", RFC 1332, DOI 10.17487/RFC1332, May 1992, | ||||
| <http://www.rfc-editor.org/info/rfc1332>. | ||||
| [RFC3095] Bormann, C., Burmeister, C., Degermark, M., Fukushima, H., | ||||
| Hannu, H., Jonsson, L-E., Hakenberg, R., Koren, T., Le, | ||||
| K., Liu, Z., Martensson, A., Miyazaki, A., Svanbro, K., | ||||
| Wiebke, T., Yoshimura, T., and H. Zheng, "RObust Header | ||||
| Compression (ROHC): Framework and four profiles: RTP, UDP, | ||||
| ESP, and uncompressed", RFC 3095, DOI 10.17487/RFC3095, | ||||
| July 2001, <http://www.rfc-editor.org/info/rfc3095>. | ||||
| [RFC4944] Montenegro, G., Kushalnagar, N., Hui, J., and D. Culler, | ||||
| "Transmission of IPv6 Packets over IEEE 802.15.4 | ||||
| Networks", RFC 4944, DOI 10.17487/RFC4944, September 2007, | ||||
| <http://www.rfc-editor.org/info/rfc4944>. | ||||
| [RFC4997] Finking, R. and G. Pelletier, "Formal Notation for RObust | ||||
| Header Compression (ROHC-FN)", RFC 4997, | ||||
| DOI 10.17487/RFC4997, July 2007, | ||||
| <http://www.rfc-editor.org/info/rfc4997>. | ||||
| [RFC5225] Pelletier, G. and K. Sandlund, "RObust Header Compression | ||||
| Version 2 (ROHCv2): Profiles for RTP, UDP, IP, ESP and | ||||
| UDP-Lite", RFC 5225, DOI 10.17487/RFC5225, April 2008, | ||||
| <http://www.rfc-editor.org/info/rfc5225>. | ||||
| [RFC6282] Hui, J., Ed. and P. Thubert, "Compression Format for IPv6 | ||||
| Datagrams over IEEE 802.15.4-Based Networks", RFC 6282, | ||||
| DOI 10.17487/RFC6282, September 2011, | ||||
| <http://www.rfc-editor.org/info/rfc6282>. | ||||
| [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, | |||
| <http://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, | |||
| <http://www.rfc-editor.org/info/rfc7641>. | <https://www.rfc-editor.org/info/rfc7641>. | |||
| [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, <http://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 | 2bis rue de la Chataigneraie | |||
| 35510 Cesson-Sevigne Cedex | 35510 Cesson-Sevigne Cedex | |||
| France | France | |||
| Email: ana@ackl.io | Email: ana@ackl.io | |||
| End of changes. 106 change blocks. | ||||
| 371 lines changed or deleted | 341 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/ | ||||