| < draft-ietf-lpwan-coap-static-context-hc-00.txt | draft-ietf-lpwan-coap-static-context-hc-01.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: June 8, 2017 Institut MINES TELECOM ; TELECOM Bretagne | Expires: September 11, 2017 Institut MINES TELECOM ; IMT Atlantique | |||
| December 5, 2016 | March 10, 2017 | |||
| 6LPWA Static Context Header Compression (SCHC) for CoAP | LPWAN Static Context Header Compression (SCHC) for CoAP | |||
| draft-ietf-lpwan-coap-static-context-hc-00 | draft-ietf-lpwan-coap-static-context-hc-01 | |||
| Abstract | Abstract | |||
| This draft discusses the way SCHC can be applied to CoAP headers and | This draft discusses the way SCHC header compression can be applied | |||
| extend the number of functions (CDF) to optimize compression. | to CoAP headers in an LPWAN flow regarding the generated traffic. | |||
| CoAP protocol differs from IPv6 and UDP protocols because the CoAP | ||||
| Header has a flexible header due to variable options. Another | ||||
| important difference is the asymmetric format in the header | ||||
| information used in the request and the response packets. This draft | ||||
| shows that the Client and the Server do not uses the same fields and | ||||
| how the SCHC header compression can be used. | ||||
| 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 http://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 June 8, 2017. | This Internet-Draft will expire on September 11, 2017. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2016 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 | (http://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. | |||
| 1. Introduction | 1. Introduction | |||
| [I-D.toutain-lpwan-ipv6-static-context-hc] defines a compression | [I-D.toutain-lpwan-ipv6-static-context-hc] defines a header | |||
| technique for LPWA network based on static context. This context is | compression mechanism for LPWAN network based on a static context. | |||
| said static since the element values composing the context are not | Where the context is said static since the element values composing | |||
| learned during packet exchanges but previously installed. The | the context are not learned during the packet exchanges but are | |||
| context is known by both ends. A context is composed of a set of | previously defined. The context(s) is(are) known by both ends before | |||
| rules (referenced by rule ids). A rule describes the header fields | transmission. | |||
| with some associated Target Values (TV). A Matching Operator (MO) is | ||||
| associated to each field. The rule is selected if all the MO matches | ||||
| . A Compression Decompression Function is associated to each field to | ||||
| define the link between the compressed and decompressed value for a | ||||
| specific field. | ||||
| This draft discusses the way SCHC can be applied to CoAP headers and | A context is composed of a set of rules (contexts) that are | |||
| extend the number of functions (CDF) to optimize compression. | referenced by Rule IDs (identifiers). A rule describes the header | |||
| fields with some associated Target Values (TV). 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 | ||||
| link between the compressed and decompressed value for each of the | ||||
| header fields. | ||||
| 2. Compressing CoAP | This draft discusses the way SCHC can be applied to CoAP headers, how | |||
| to extend MOs to match a specific element when several fields of the | ||||
| same type are presented in the header. It also introduces the notion | ||||
| of bidirectional or unidirectional (upstream and downstream) fields. | ||||
| CoAP [RFC7252] is an implementation of a the REST architecture for | 2. CoAP Compressing | |||
| contrained devices. Gateway between CoAP and HTTP can be easily | ||||
| build since both protocol uses the same address space (URL), caching | 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. | mechanisms and methods. | |||
| Nevertheless, if limited, the size of a CoAP header may be | Nevertheless, if limited, the size of a CoAP header may be too large | |||
| incompatible with LPWAN constraints and some compression may be | for LPWAN constraints and some compression may be needed to reduce | |||
| needed to reduce the header size. CoAP compression is not | the header size. CoAP compression is not straightforward. Some | |||
| straightforward. Some differences between IPv6/UDP and CoAP can be | differences between IPv6/UDP and CoAP can be highlighted. CoAP | |||
| enlighten. CoAP differs from IPv6 and UDP protocols: | differs from IPv6 and UDP protocols in 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 answer, only location in the header may | in the request and in the response, only position in the header | |||
| change (e.g. source and destination fields). A CoAP request is | may change (e.g. source and destination fields). A CoAP request | |||
| different from an answer. For instance, the URI-path option is | is different from an response. For example, the URI-path option | |||
| mandatory in the request and may not be found in the response. | is mandatory in the request and is not found in the response. | |||
| 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 external device. For instance in the former case the | or from an non LPWAN device. For instance a Thing (ES) aware of | |||
| token size may be set to one byte. In the latter case, the token | LPWAN constraints can generate a 1 byte token, but a regular CoAP | |||
| size cannot be constraint and be up to 15 byte long. | cleint will certainly send a larger token to the Thing. | |||
| o In IPv6, main header and UDP fields have a fixed size. In CoAP, | o In IPv6 and UDP header fields have a fixed size. In CoAP, Token | |||
| Token size may vary from 0 to 15 bytes, length is given by a field | size may vary from 0 to 8 bytes, length is given by a field in the | |||
| in the header. More systematically, the options are described | header. More systematically, the CoAP options are described using | |||
| using the Type-Length-Value principle. Evenmore regarding the | the Type-Length-Value. When applying SCHC header compression, the | |||
| option size value, the coding will be different. | token size is not known at the rule creation, the sender and the | |||
| receiver must agree on its compressed size. | ||||
| o options type in CoAP are not defined with the same value. The | o The options type in CoAP is not defined with the same value. The | |||
| Delta TLV coding makes that the type is not independant of | Delta TLV coding makes that the type is not independent of | |||
| previous option and may vary regarding the options contained in | previous option and may vary regarding the options contained in | |||
| the header. | the header. | |||
| 2.1. CoAP usages | 2.1. CoAP behavior | |||
| A LPWAN node can either be a client or a server and sometimes both. | 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 | In the client mode, the LPWAN node sends request to a server and | |||
| expected answer or acknowledgements. Acknowledgements can be at 2 | expects an answer or acknowledgements. Acknowledgements can be at 2 | |||
| different levels: | different levels: | |||
| o transport level, a CON message is acknowledged by an ACK message. | o In the transport level, a CON message is acknowledged by an ACK | |||
| NON confirmable messages are not acknowledged. | message. A NON confirmable message is not acknowledged at all. | |||
| o REST level, a REST request is acknowledged by an "error" code. | o In REST level, a REST request is acknowledged by an "error" code. | |||
| [RFC7967] defines an option to limit the number of | The [RFC7967] defines an option to limit the number of | |||
| acknowledgements. | acknowledgements. | |||
| Note that acknowledgement can be optimized and a REST level | Note that acknowledgement can be optimized and a REST level | |||
| acknowledgement can be used as a transport level acknowledgement. | acknowledgement can be used as a transport level acknowledgement. | |||
| 2.2. CoAP protocol analysis | 2.2. CoAP protocol analysis | |||
| CoAP defines the following fields: | CoAP header format defines the following fields: | |||
| o version (2 bits): this field can be elided during a compresssion | o version (2 bits): this field can be elided during the SCHC | |||
| compresssion | ||||
| o type (2 bits): defines the type of the transport messages, 4 | o type (2 bits). It defines the type of the transport messages, 4 | |||
| values are defined. Regarding the type of exchange, if only NON | values are defined, regarding the type of exchange. If only NON | |||
| messages are sent or CON/ACK messages, this field can be reduced | messages are sent or CON/ACK messages, this field can be reduced | |||
| to 0 or 1 bit. | to 0 or 1 bit. | |||
| o token length (4 bytes). The standard allows up to 15 bytes for a | o token length (4 bits). The standard allows up to 8 bytes for a | |||
| token length. If a fix token size is chosen, then this field can | token. If a fixed token size is chosen, then this field can be | |||
| be elided. If some variation in length are needed then 1 or 2 | elided. If some variation in length are needed then 1 or 2 bits | |||
| bits could be enough for most of LPWAN applications. | could be enough for most of LPWAN applications. | |||
| o code (8 bits). This field codes the request and the response | o code (8 bits). This field codes the request and the response | |||
| values. CoAP represents in a more compact way, coding used in | values. In CoAP these values are represented in a more compact | |||
| HTTP, but the coding is not optimal. | way then the coding used in HTTP, but the coding is not optimal. | |||
| o message id (16 bits). This value is used to acknowledge CON | o message id (16 bits). This value of this header field is used to | |||
| frames. The size of this field is computed to allow the | acknowledge CON frames. The size of this field is computed to | |||
| anticipation (how many frames can be sent without | allow the anticipation (how many frames can be sent without | |||
| acknowledgement). When a value is used, [RFC7252] defines the | acknowledgement). When a value is used, the [RFC7252] defines the | |||
| time before it can be reused without ambiguities. This size may | time before it can be reused without ambiguities. This size | |||
| be too large for a LPWAN node sending or receiving few messages a | defined may be too large for a LPWAN node sending or receiving few | |||
| day. | messages a day. | |||
| o Token (0 to 15 bytes). Token identifies active flows. Regarding | o Token (0 to 8 bytes). Token header field is used to identify | |||
| the usage (stability of in time and limited number), a short token | active flows. Regarding the usage for LPWAN (stability in time | |||
| (1 Byte) can be enough. | and limited number), a short token (1 Byte or less) can be enough. | |||
| o options are coded through delta-TLV. The delta-T depends of | o options are coded using delta-TLV. The delta-T depends on | |||
| previous values, length is encoded inside the option. [RFC7252] | previous values, length is encoded inside the option. The | |||
| distinguishes repeatable options that can appear several time in | [RFC7252] distinguishes repeatable options that can appear several | |||
| the header. Among them we can distinguish: | times in the header. Among them we can distinguish: | |||
| * list options which appear several time in the header but are | * list options which appear several time in the header but are | |||
| exclusive such as the Accept option. | exclusive such as the Accept option. | |||
| * cumulative options which appear several time in the header but | * cumulative options which appear several times in the header but | |||
| are part of a more generic value such as Uri-Path and Uri- | are part of a more generic value such as Uri-Path and Uri- | |||
| Query. | 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. | For a given flow some value options are stable through time. | |||
| Observe, ETag, If-Match, If-None-Match and Size varies in each | Observe, ETag, If-Match, If-None-Match and Size varies in each | |||
| message. Options can be stored in a SCHC context and cumulative | message. | |||
| options can be stored globally. | ||||
| The CoAP protocol must not be altered by the compression/ | The CoAP protocol must not be altered by the compression/ | |||
| decompression phase, but if no semantic is attributed to a value, it | decompression phase, but if no semantic is attributed to a value, it | |||
| may be changed during this phase. For instance the compression phase | may be changed during this phase. For instance, the compression | |||
| may reduce the size of a token but must maintain its unicity. The | phase may reduce the size of a token but must maintain its unicity. | |||
| decompressor will not be able to restore the original value but | The decompressor will not be able to restore the original value but | |||
| behavior will remain the same. If no special semantic is assigned to | the behavior will remain the same. If no special semantic is | |||
| the token, this will be transparent. If a special semantic is | assigned to the token, this will be transparent. If a special | |||
| assigned to the token, its compression may not be possible. | semantic is assigned to the token, its compression may not be | |||
| possible. | ||||
| This implies that the compressor/decompressor must be aware of the | 3. SCHC rules for CoAP header compression | |||
| protocol state machine and do not processes request and response the | ||||
| same way. | ||||
| A conservative compression leaves the field value unchanged. Non | This draft refines the rules definition by adding the direction of | |||
| conservative compression can be used when a CoAP implementation has | the message, from the Thing point of view (uplink, downlink or | |||
| not been defined to work specifically with LPWAN network and uses | bidirectional). It does not introduce new Machting Operator or new | |||
| large values for fields. | Compression Decompression Function, but add some possibility to check | |||
| one particular element when several of them are present at the same | ||||
| time. | ||||
| 2.2.1. CoAP Compression Decompression Function | A rule can contain CoAP and IPv6/UDP entries. In that case, IPv6/UDP | |||
| entries are tagged bidirectional. | ||||
| To compress more efficiently CoAP message, several Compression/ | 3.1. Directional Rules | |||
| Decompression Function (CDF) must be defined. | ||||
| 2.2.1.1. Static-mapping | 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. | ||||
| The goal of static-mapping is to reduce the size of a field by | If the Thing is a client, the URI-Path option is only present on | |||
| allocating shorter value. The mapping is known by both ends and | request and not on the response. Therefore, the exact matching | |||
| stored in a table in both end context. The Static-mapping is | principle to select a rule cannot apply. | |||
| conservative. | ||||
| Static-mapping may be applied to several fields. For instance the | Some options are marked unidirectional, the value (uplink or | |||
| type field may be reduced from 2 bits to 1 bit if only CON/ACK type | downlink) depends of the scenario. A Uri-Path option will be marked | |||
| is used, but the main benefit is compressing the code field. | 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 | ||||
| URI-Path bar equal 2 not-sent | ||||
| Figure 1: Position entry. | ||||
| For instance, the rule Figure 1 matches with /foo/bar, but not /bar/ | ||||
| foo. | ||||
| The position is added after the natural argument of the MO, for | ||||
| example MSB (4,3) indicates a most significant bit matching of 4 bits | ||||
| in a field located in position 3. | ||||
| 3.3. Compressed field length | ||||
| When the length is not clearly indicated in the rule, the value | ||||
| length must be sent with the field data, which means for CoAP to send | ||||
| directly the CoAP option where the delta-T is set to 0. | ||||
| For the CoMi path /c/X6?k="eth0" the rule can be set to: | ||||
| FID TV MO CDF | ||||
| URI-Path c equal 1 not-sent | ||||
| URI-Path ignore 2 value-sent | ||||
| URI-Query k= MSB (16, 1) value-sent | ||||
| Figure 2: CoMi URI compression | ||||
| Figure 2 shows the parsing and the compression of the URI. where c is | ||||
| 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 | ||||
| ??]]. | ||||
| 4. Application to CoAP header fields | ||||
| This section lists the different CoAP header fields and how they can | ||||
| be compressed. | ||||
| 4.1. CoAP version field | ||||
| This field is bidirectional. | ||||
| This field contains always the same value, therefore the TV may be 1, | ||||
| the MO is set to "equal" and the CDF is set to "not-sent" | ||||
| 4.2. CoAP type field | ||||
| This field is bidirectional or undirectional. | ||||
| Several strategies can be applied to this field regarding the values | ||||
| used: | ||||
| o if only one type is sent, for example NON message, its | ||||
| 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 | ||||
| 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 | ||||
| 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 | ||||
| "value-sent". | ||||
| 4.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. | ||||
| 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 | ||||
| set, MO is set to "ignore" and CDF is set to "value-sent". The | ||||
| 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 | ||||
| This field is unidirectional. The client and the server do not use | ||||
| the same values. | ||||
| 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. So, it could efficiently be | |||
| coded on 5 bits. To allow flexibility and evolution if new codes are | coded on 5 bits. The number of code may vary over time, some new | |||
| introduced, a static mapping table is associated to each instance of | codes may be introduced or some applications use a limited number of | |||
| this function. | values. | |||
| Figure 1 gives a possible mapping, it can be changed to add new codes | +------+------------------------------+-----------+ | |||
| | 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 3: Example of CoAP code mapping | ||||
| Figure 3 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. | |||
| +------+------------------------------+-----------+ | The field can be treated differently in upstream than in downstream. | |||
| | Code | Description | Mapping | | 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 | |||
| | 0.00 | | 0x00 | | for Y.ZZ codes. It is the opposite if the thing is a server. | |||
| | 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: CoAP code mapping | 4.5. CoAP Message ID field | |||
| This CDF can also be applied to path to send a reference instead of | This field is bidirectional. | |||
| the path value. | ||||
| 2.2.1.2. Remapping | Message ID is used for two purposes: | |||
| With dynamic mapping, the mapping is done dynamically, which means | o To acknowledge a CON message with an ACK. | |||
| that the other end has no way to the learn the original value. This | ||||
| function is not conservative. The mapping context must be stored in | ||||
| a reliable way on the compressor, if lost the session with LPWAN node | ||||
| will be lost, which can generate a traffic increase on the LPWA | ||||
| network. | ||||
| This function converts a large number to a smaller one and maintain | o To avoid duplicate messages. | |||
| bi-directional mapping. If the field has no semantic, such as a CoAP | ||||
| token or a message ID, this will reduce the size of the information | ||||
| sent on the link. This mapping only applies for request compression, | ||||
| answers must keep the value original value. | ||||
| For instance a compression receives a CoAP request with a large | In LPWAN, since a message can be received by several radio gateway, | |||
| token. The compressor reduces the token size by allocating a unused | some LPWAN technologies include a sequence number in L2 to avoid | |||
| value in a smaller space. When the response come back, the | duplicate frames. Therefore if the message does not need to be | |||
| compressor exchange the smallest token with the original one. | 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 | ||||
| set to "not-sent". The decompressor can generate a number. | ||||
| This mean that the compressor must be aware of the CoAP state | [[Note; check id this field is not used by OSCOAP .]] | |||
| machine, to identify a request and its associated response, but also | ||||
| determine when a token value can be reused. | ||||
| 2.2.1.3. Reduce-entropy | 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. In that | ||||
| 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. | ||||
| Reduce-entropy is a non-conservative function. the goal is to | Otherwise if no compression is needed the TV is not set, MO is set to | |||
| minimize the increase in a field value. It may be used for the | ignore and CDF is set to "not-sent". | |||
| observe option, all increase in the original sequence number will | ||||
| lead to an increase of 1 in the compressed value. | ||||
| For instance a LPWAN node is a CoAP server and receives Observe | 4.6. CoAP Token field | |||
| responses coming from an outside client. The client uses a clock to | ||||
| generate Observe sequence number. If that value has non particular | ||||
| meaning for the CoAP server, increase of 1 will not change the | ||||
| protocol behavior. Reordering works the same way as for original | ||||
| Observe. | ||||
| 2.2.2. CoAP mandatory header | This field is bi-directional. | |||
| Figure 2 proposes some function assignments to the CoAP header | Token is used to identify transactions and varies from one | |||
| fields. | 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 | |||
| | Field |Function | Behavior | | shorter tokens could be used regarding the LPWAN characteristics. A | |||
| +--------------------+---------------------+----------------------------------------+ | proxy may be needed to reduce the size of the token before | |||
| |version |not-sent |version is always the same | | compression. | |||
| +--------------------+---------------------+----------------------------------------+ | ||||
| |type |value-sent |if all the types are used | | ||||
| | |static-mapping |to reduce to one bit if 2 type are used | | ||||
| | |not-sent |if only one type is used (e.g. NON) | | ||||
| +--------------------+---------------------+----------------------------------------+ | ||||
| |token length |not-sent |no tokens or fixed size | | ||||
| | |compute-token-length |if token size is reduced | | ||||
| | |value-sent |token is sent integrally | | ||||
| +--------------------+---------------------+----------------------------------------+ | ||||
| |code |value-sent |no modification | | ||||
| | |static-mapping |code size reduction | | ||||
| +--------------------+---------------------+----------------------------------------+ | ||||
| |message id |value-sent |no modification | | ||||
| |token |remapping |reduces message id size | | ||||
| +====================+=====================+========================================+ | ||||
| |Content-Format |value-sent |no modification | | ||||
| |Accept |not-sent |defined in the rule | | ||||
| |Max-Age |static-mapping |map the possible value | | ||||
| +--------------------+---------------------+----------------------------------------+ | ||||
| |Path: |value-sent |no modification | | ||||
| |Uri-Host+Uri-Port+ |not-sent |defined in the rule | | ||||
| |Uri-Path*+Uri-Query*|static-mapping |a value to define a path | | ||||
| | | | | | ||||
| |Proxy-Uri | |Note: only the full path is stored in | | ||||
| |Proxy-Scheme | |context | | ||||
| +--------------------+---------------------+----------------------------------------+ | ||||
| |ETag |value-sent |Always sent | | ||||
| |Location-Path | | | | ||||
| |Location-Query | | | | ||||
| |If-Match | | | | ||||
| |If-None-Match | | | | ||||
| |Size1 | | | | ||||
| +--------------------+---------------------+----------------------------------------+ | ||||
| Figure 2: SCHC functions' example assignment for CoAP | Otherwise the TV is not set, the MO is set to ignore and CDF is set | |||
| to "value-sent". | ||||
| 2.2.3. Examples of CoAP header compression | The decompression may know the length of the token field from the | |||
| token length field. | ||||
| 2.2.3.1. Mandatory header with CON message | 4.7. CoAP option Content-format field. | |||
| 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 | ||||
| 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 | ||||
| MO is set to "equal" and the CDF is set to "not-sent". | ||||
| Otherwise the TV is not set, MO is set to "ignore" and CDF is set to | ||||
| "value-sent" | ||||
| A mapping list can also be used to reduce the size. | ||||
| 4.8. CoAP option Accept field | ||||
| 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 | ||||
| possible payload type and is never found in server response. | ||||
| 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 | ||||
| accept options with their positions. | ||||
| if the accept value must be sent, the TV contains that value, MO is | ||||
| set to "ignore x" where "x" is the accept option's position and CDF | ||||
| is 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 TV is not set, MO is set to "equal x" where x is the | ||||
| accept option's position and CDF is set to "not-sent" | ||||
| [[note: it could be more liberal and do not provide the same order | ||||
| after decompression]] | ||||
| 4.9. CoAP option Max-Age field | ||||
| 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 | ||||
| duration and is never found in client requests. | ||||
| If the duration is known by both ends, the TV is set with this | ||||
| duration, the MO is set to "equal" and the CDF is set to "not-sent". | ||||
| Otherwise the TV is not set, the MO is set to "ignore" and the CDF is | ||||
| 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. | ||||
| [[note: we can reduce (or create a new option) the unit to minute, | ||||
| second is small for LPWAN ]] | ||||
| 4.10. CoAP option Uri-Host and Uri-Port fields | ||||
| 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 | ||||
| specific server and are never found in server response. | ||||
| For each option, if the value is known by both ends, the TV is set | ||||
| with this value, the MO is set to "equal" and the CDF is set to "not- | ||||
| sent". | ||||
| Otherwise the TV is not set, the MO is set to "ignore" and the CDF is | ||||
| 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. | ||||
| 4.11. CoAP option Uri-Path and Uri-Query fields | ||||
| 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 | ||||
| specific resource and are never found in server response. | ||||
| Path and Query option may have different formats. Section 3.2 gives | ||||
| some examples. | ||||
| If the URI path as well as the query is composed of 2 or more | ||||
| 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 | ||||
| with its value, MO is set to "equal x" where x is the position in the | ||||
| Path or the Query and CDF is set to "not-sent". | ||||
| Otherwise if the value varies over time, TV is not set, MO is set to | ||||
| "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 | ||||
| must be sent as a CoAP TLV with deltaT set to 0. | ||||
| A Mapping list can be used to reduce size of variable Paths or | ||||
| 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. | ||||
| For instance, the following Path /foo/bar/variable/stable can leads | ||||
| to the rule defined Figure 4. | ||||
| FID TV MO CDF | ||||
| 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 | ||||
| 4.12. CoAP option Proxy-URI and Proxy-Scheme fields | ||||
| 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 | ||||
| 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" | ||||
| 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 | ||||
| set to "not-sent" | ||||
| 4.13. CoAP option ETag, If-Match, If-None-Match, Location-Path and | ||||
| Location-Query fields | ||||
| These fields are unidirectional. | ||||
| These fields values cannot be stored in a rule entry. They must | ||||
| always be sent with the request. | ||||
| [[Can include OSCOAP Object security in that category ]] | ||||
| 5. Other RFCs | ||||
| 5.1. Block | ||||
| Block option should be avoided in LPWAN. The minimum size of 16 | ||||
| bytes can be incompatible with some LPWAN technologies. | ||||
| [[Note: do we recommand LPWAN fragmentation since the smallest value | ||||
| of 16 is too big?]] | ||||
| 5.2. Observe | ||||
| [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 | ||||
| the maximum size for this option (3 bytes). To reduce the | ||||
| transmission size either the Thing implementation should limit the | ||||
| 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 | ||||
| not require Observe response, a rule must allow the transmission of | ||||
| this message. | ||||
| 5.3. No-Response | ||||
| [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 | ||||
| is set to this value, MO is set to "equal" and CDF is set to "not- | ||||
| sent". | ||||
| 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 | ||||
| used to reduce the size. | ||||
| 6. Examples of CoAP header compression | ||||
| 6.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 ES. | client a POST message, which is immediately acknowledged by the | |||
| For this simple scenario, the rules are described Figure 3 | Thing. For this simple scenario, the rules are described Figure 5. | |||
| rule id 1 | ||||
| +-------------+-------+-----+---------------+----------------+ | ||||
| | Field |TV |MO |CDF | Sent | | ||||
| +=============+=======+=====+===============+================+ | ||||
| |CoAP version | 01 |= |not-sent | | | ||||
| |CoAP Type | | |value-sent |TT | | ||||
| |CoAP TKL | 0000 |= |not-sent | | | ||||
| |CoAP Code | | |static-map | CC CCC | | ||||
| |CoAP MID | | |dynamic-map | M-ID | | ||||
| |CoAP Path |/path | |not-sent | | | ||||
| +-------------+-------+-----+---------------+----------------+ | ||||
| Figure 3: CoAP Context to compress header without token | rule id 1 | |||
| +-------------+------+---------+-------------+-----+----------------+ | ||||
| | Field |TV |MO |CDF |dir | Sent | | ||||
| +=============+======+=========+=============+=====+================+ | ||||
| |CoAP version | 01 |equal |not-sent |bi | | | ||||
| |CoAP Type | |ignore |value-sent |bi |TT | | ||||
| |CoAP TKL | 0 |equal |not-sent |bi | | | ||||
| |CoAP Code | ML1 |match-map|matching-sent|bi | CC CCC | | ||||
| |CoAP MID | 0000 |MSB(7 ) |LSB(9) |bi | M-ID | | ||||
| |CoAP Uri-Path| path |equal 1 |not-sent |down | | | ||||
| +-------------+------+---------+-------------+-----+----------------+ | ||||
| Figure 3 gives a simple compression rule for CoAP headers without | Figure 5: CoAP Context to compress header without token | |||
| tokens. | ||||
| The version fields and Token Length are elided. Code has shrunk to 5 | The version and Token Length fields are elided. Code has shrunk to 5 | |||
| bits using the static-mapping function. Message-ID has shrunk to 9 | bits using the matching list (as the one given Figure 3: 0.01 is | |||
| bits to preserve alignment on byte boundary. | 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. | ||||
| Figure 4 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 Message ID is change to a value | only the Type, a mapped code and the least 9 significant bits of | |||
| on 9 bits. The receiver decompress the header. The message ID value | Message ID. The receiver decompresses the header. . | |||
| is changed. | ||||
| The CON message is a request, therefore the LC process to a dynamic | The CON message is a request, therefore the LC process to a dynamic | |||
| mapping. When the ES receives the ACK message, this will not | mapping. When the ES receives the ACK message, this will not | |||
| initiate locally a the message ID mapping since it is a response. | initiate locally a message ID mapping since it is a response. The LC | |||
| The LC receives the ACK and uncompress it to restore the original | receives the ACK and uncompressed it to restore the original value. | |||
| value. Dynamic Mapping context lifetime follows the same rules as | Dynamic Mapping context lifetime follows the same rules as message ID | |||
| message ID duration. | duration. | |||
| End System LPWA LC | End System LPWA LC | |||
| | | | | | | |||
| | rule id=1 |<---------------------- | | rule id=1 |<---------------------- | |||
| |<---------------------------| +-+-+--+----+--------+ | |<--------------------| +-+-+--+----+--------+ | |||
| <-------------------- | TTCC CCCM MMMM MMMM | |1|0| 4|0.01| 0x1234 | | <-------------------- | TTCC CCCM MMMM MMMM| |1|0| 4|0.01| 0x0034 | | |||
| +-+-+--+----+--------+ | 0000 0010 0000 0001 | | 0xb4 p a t | | +-+-+--+----+--------+ | 0000 0010 0011 0100| | 0xb4 p a t | | |||
| |1|0| 1|0.01| 0x0001 | | | | h | | |1|0| 1|0.01| 0x0034 | | | | h | | |||
| | 0xb4 p a t | | | +------+ | | 0xb4 p a t | | | +------+ | |||
| | h | | | dynamic mapping | | h | | | | |||
| +------+ | | +--------+--------+ | +------+ | | | |||
| | | |0x1234 | 0x01 | | | | | |||
| | | +--------+--------+ | | | | |||
| +-+-+--+----+--------+ |--------------------------->| | ----------------------->| rule id=1 | | |||
| |1|2| 0|2.05| 0x0001 | | TTCC CCCM MMMM MMMM |------------------------> | +-+-+--+----+--------+ |-------------------->| | |||
| +-+-+--+----+--------+ | 1000 0000 0000 0001 | +-+-+--+----+--------+ | |1|2| 0|2.05| 0x0034 | | TTCC CCCM MMMM MMMM|------------------------> | |||
| | | |1|2| 0|2.05| 0x1234 | | +-+-+--+----+--------+ | 1001 1000 0011 0100| +-+-+--+----+--------+ | |||
| v v +-+-+--+----+--------+ | | | |1|2| 0|2.05| 0x0034 | | |||
| v v +-+-+--+----+--------+ | ||||
| Figure 4: Compression with global addresses | Figure 6: Compression with global addresses | |||
| Note that the compressor and decompressor must understand the CoAP | The message can be further optimized by setting some fields | |||
| protocol: | 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 3) | ||||
| rule id 1 | ||||
| +-------------+------+---------+-------------+---+----------------+ | ||||
| | Field |TV |MO |CDF |dir| Sent | | ||||
| +=============+======+=========+=============+===+================+ | ||||
| |CoAP version | 01 |equal |not-sent |bi | | | ||||
| |CoAP Type | CON |equal |not-sent |dw | | | ||||
| |CoAP Type | ACK |equal |not-sent |up | | | ||||
| |CoAP TKL | 0 |equal |not-sent |bi | | | ||||
| |CoAP Code | ML2 |match-map|matching-sent|dw |CCCC C | | ||||
| |CoAP Code | ML3 |match-map|matching-sent|up |CCCC C | | ||||
| |CoAP MID | 0000 |MSB(5) |LSB(11) |bi | M-ID | | ||||
| |CoAP Uri-Path| path |equal 1 |not-sent |dw | | | ||||
| +-------------+------+---------+-------------+---+----------------+ | ||||
| o The LC compressor detects a new transport request and allocate a | ML1 = {CON : 0, ACK:1} ML2 = {POST:0, 2.04:1, 0.00:3} | |||
| new dynamic mapping value. | ||||
| o When receiving a response the ES compressor ES detects that this | Figure 7: CoAP Context to compress header without token | |||
| is a response (type=2) therefore the message ID value in | ||||
| unchanged. | ||||
| o The upstream compressor detects that is an REST answer (code 2.05) | 6.2. Complete exchange | |||
| therefore the path option is not inserted in the uncompress header | ||||
| 2.2.3.2. Exchange with token | In that example, the Thing is using CoMi and sends queries for 2 SID. | |||
| The following scenario introduces tokens. The LC manages two | CON | |||
| remapping contexts. One for Message ID and the other for token. ES | MID=0x0012 | | | |||
| manages one context for Message ID. Mapping is trigged by the | POST | | | |||
| reception of CON messages to compress or CoAP requests to compress. | Accept X | | | |||
| Note that the compressed message ID size has been reduced to 7 bits, | /c/k=AS |------------------------>| | |||
| compared to the previous example, to maintain byte boundary | | | | |||
| alignment. | | | | |||
| |<------------------------| ACK MID=0x0012 | ||||
| | | 0.00 | ||||
| | | | ||||
| | | | ||||
| |<------------------------| CON | ||||
| | | MID=0X0034 | ||||
| | | Content-Format X | ||||
| ACK MID=0x0034 |------------------------>| | ||||
| 0.00 | ||||
| +----------------+------------------------+----------------+-----------------+ | rule id 3 | |||
| | Field | Function | Ctxt Value | Sent compressed | | +-------------+------+---------+-------------+---+----------------+ | |||
| +----------------+------------------------+----------------+-----------------+ | | Field |TV |MO |CDF |dir| Sent | | |||
| |CoAP version | not-sent | | | | +=============+======+=========+=============+===+================+ | |||
| |CoAP Type | value-sent | |TT | | |CoAP version | 01 |equal |not-sent |bi | | | |||
| |CoAP TKL | compute-token-length | | LL | | |CoAP Type | CON |equal |not-sent |up | | | |||
| |CoAP Code | map-code | mapping table | CCCC C | | |CoAP Type | ACK |equal |not-sent |dw | | | |||
| |CoAP MID | remapping | 7 bits | M-ID | | |CoAP TKL | 1 |equal |not-sent |bi | | | |||
| |CoAP Token | remapping | 8 bits | token| | |CoAP Code | POST |equal |not-sent |up | | | |||
| |CoAP Path | not-sent |/data/humidity | | |CoAP Code | 0.00 |equal |not-sent |dw | | | |||
| +----------------+------------------------+----------------+-----------------+ | |CoAP MID | 0000 |MSB(8) |LSB(8) |bi |MMMMMMMM | | |||
| |CoAP Token | |ignore |send-value |up |TTTTTTTT | | ||||
| |CoAP Uri-Path| /c |equal 1 |not-sent |dw | | | ||||
| |CoAP Uri-query ML4 |equal 1 |not-sent |dw |P | | ||||
| |CoAP Content | X |equal |not-sent |up | | | ||||
| +-------------+------+---------+-------------+---+----------------+ | ||||
| Figure 5: CoAP Context to compress header with token | rule id 4 | |||
| End System LPWA LC | +-------------+------+---------+-------------+---+----------------+ | |||
| | | | | Field |TV |MO |CDF |dir| Sent | | |||
| | SHIM=1 |<---------------------- | +=============+======+=========+=============+===+================+ | |||
| |<---------------------------| +-+-+--+----+--------+ | |CoAP version | 01 |equal |not-sent |bi | | | |||
| <-------------------- | TT LL CCCC C MMMMMMM | |1|0| 4|0.01| 0x1234 | | |CoAP Type | CON |equal |not-sent |dw | | | |||
| +-+-+--+----+--------+ | 00 01 0000 1 0000001 | | DEADBEEF | | |CoAP Type | ACK |equal |not-sent |up | | | |||
| |1|0| 1|0.01| 0x0001 | | 0000 0001 | | 0xb4 d a t | | |CoAP TKL | 1 |equal |not-sent |bi | | | |||
| | 01 0xb4 d a | | Token | | a 0x08 h u | | |CoAP Code | 2.05 |equal |not-sent |dw | | | |||
| | t a 0x08 h | | | | m i d i | | |CoAP Code | 0.00 |equal |not-sent |up | | | |||
| | u m i d | | | | t y | | |CoAP MID | 0000 |MSB(8) |LSB(8) |bi |MMMMMMMM | | |||
| | i t y | | | +------------+ | |CoAP Token | |ignore |send-value |dw |TTTTTTTT | | |||
| +-----------------+ | | Mid mapping: 1234 -> 1 | |COAP Accept | X |equal |not-sent |dw | | | |||
| | | Tk mapping: DEADBEEF -> 1 | +-------------+------+---------+-------------+---+----------------+ | |||
| +-+-+--+----+--------+ |--------------------------->| | ||||
| |1|2| 0|0.00| 0x0001 | | TT LL CCCC C MMMMMMMM |------------------------> | ||||
| +-+-+--+----+--------+ | 10 01 0000 0 00000001 | +-+-+--+----+--------+ | ||||
| | | |1|2| 0|0.00| 0x1234 | | ||||
| | | +-+-+--+----+--------+ | ||||
| +-+-+--+----+--------+ |--------------------------->| | ||||
| |1|0| 0|2.05| 0xCAFE | | TT LL CCCC C MMMMMMMM |------------------------> | ||||
| | 0x01 2 5 | | 00 01 1100 0 00000002 | +-+-+--+----+--------+ | ||||
| +--------------------+ | 0000 0001 | |1|0| 4|2.05| 0x0001 | | ||||
| | 2 5 | | DEADBEEF | | ||||
| | | | 2 5 | | ||||
| Mid mapping: CAFE -> 1 | | +-----------+ | ||||
| | | | ||||
| | |<------------------------ | ||||
| |<---------------------------| +-+-+--+----+--------+ | ||||
| <-----------------------| TT LL CCCC C MMMMMMMM | |1|2| 0|0.00|0x0001 | | ||||
| +-+-+--+----+--------+ | 10 00 0000 0 00000002 | +-+-+--+----+--------+ | ||||
| |1|2| 0|0.00| 0xCAFE | | | | ||||
| +-+-+--+----+--------+ | | | ||||
| v v | ||||
| Figure 6: Compression with token | alternative rule: | |||
| 3. Normative References | rule id 4 | |||
| +-------------+------+---------+-------------+---+----------------+ | ||||
| | Field |TV |MO |CDF |dir| Sent | | ||||
| +=============+======+=========+=============+===+================+ | ||||
| |CoAP version | 01 |equal |not-sent |bi | | | ||||
| |CoAP Type | ML1 |equal |match-sent(1)|bi |t | | ||||
| |CoAP TKL | 1 |equal |not-sent |bi | | | ||||
| |CoAP Code | ML2 |equal |match-sent(1)|up | cc | | ||||
| |CoAP Code | ML3 |equal |match-sent(2)|dw | cc | | ||||
| |CoAP MID | 0000 |MSB(8) |LSB(8) |bi |MMMMMMMM | | ||||
| |CoAP Token | |ignore |send-value |dw |TTTTTTTT | | ||||
| |CoAP Uri-Path| /c |equal 1 |not-sent |dw | | | ||||
| |CoAP Uri-query ML4 |equal 1 |not-sent |dw |P | | ||||
| |CoAP Content | X |equal |not-sent |up | | | ||||
| |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} | ||||
| ML4 {NULL:0, k=AS:1, K=AZE:2} | ||||
| 7. 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 | [RFC1332] McGregor, G., "The PPP Internet Protocol Control Protocol | |||
| (IPCP)", RFC 1332, DOI 10.17487/RFC1332, May 1992, | (IPCP)", RFC 1332, DOI 10.17487/RFC1332, May 1992, | |||
| <http://www.rfc-editor.org/info/rfc1332>. | <http://www.rfc-editor.org/info/rfc1332>. | |||
| skipping to change at page 13, line 42 ¶ | skipping to change at page 18, line 10 ¶ | |||
| [RFC6282] Hui, J., Ed. and P. Thubert, "Compression Format for IPv6 | [RFC6282] Hui, J., Ed. and P. Thubert, "Compression Format for IPv6 | |||
| Datagrams over IEEE 802.15.4-Based Networks", RFC 6282, | Datagrams over IEEE 802.15.4-Based Networks", RFC 6282, | |||
| DOI 10.17487/RFC6282, September 2011, | DOI 10.17487/RFC6282, September 2011, | |||
| <http://www.rfc-editor.org/info/rfc6282>. | <http://www.rfc-editor.org/info/rfc6282>. | |||
| [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, | |||
| <http://www.rfc-editor.org/info/rfc7252>. | <http://www.rfc-editor.org/info/rfc7252>. | |||
| [RFC7641] Hartke, K., "Observing Resources in the Constrained | ||||
| Application Protocol (CoAP)", RFC 7641, | ||||
| DOI 10.17487/RFC7641, September 2015, | ||||
| <http://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, <http://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 | |||
| Laurent Toutain | Laurent Toutain | |||
| Institut MINES TELECOM ; TELECOM Bretagne | 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@telecom-bretagne.eu | Email: Laurent.Toutain@imt-atlantique.fr | |||
| End of changes. 79 change blocks. | ||||
| 326 lines changed or deleted | 616 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/ | ||||