| < draft-ietf-lpwan-coap-static-context-hc-06.txt | draft-ietf-lpwan-coap-static-context-hc-07.txt > | |||
|---|---|---|---|---|
| lpwan Working Group A. Minaburo | lpwan Working Group A. Minaburo | |||
| Internet-Draft Acklio | Internet-Draft Acklio | |||
| Intended status: Informational L. Toutain | Intended status: Standards Track L. Toutain | |||
| Expires: August 9, 2019 Institut MINES TELECOM; IMT Atlantique | Expires: November 25, 2019 Institut MINES TELECOM; IMT Atlantique | |||
| R. Andreasen | R. Andreasen | |||
| Universidad de Buenos Aires | Universidad de Buenos Aires | |||
| February 05, 2019 | May 24, 2019 | |||
| LPWAN Static Context Header Compression (SCHC) for CoAP | LPWAN Static Context Header Compression (SCHC) for CoAP | |||
| draft-ietf-lpwan-coap-static-context-hc-06 | draft-ietf-lpwan-coap-static-context-hc-07 | |||
| Abstract | Abstract | |||
| This draft defines the way SCHC header compression can be applied to | This draft defines the way SCHC header compression can be applied to | |||
| CoAP headers. The CoAP header structure differs from IPv6 and UDP | CoAP headers. The CoAP header structure differs from IPv6 and UDP | |||
| protocols since CoAP | protocols since CoAP | |||
| use a flexible header with a variable number of options themselves of | uses a flexible header with a variable number of options themselves | |||
| a variable length. The CoAP protocol is asymmetric in its format | of variable length. The CoAP protocol is asymmetric in its message | |||
| messages, the format of the header packet in the request messages is | format, the format of the header packet in the request messages is | |||
| different than in the response messages. Most of the compression | different from that in the response messages. Most of the | |||
| mechanisms have been introduced in | compression mechanisms have been introduced in | |||
| [I-D.ietf-lpwan-ipv6-static-context-hc], this document explains how | [I-D.ietf-lpwan-ipv6-static-context-hc], this document explains how | |||
| to use the SCHC compression for CoAP. | to use the SCHC compression for CoAP. | |||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on August 9, 2019. | This Internet-Draft will expire on November 25, 2019. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2019 IETF Trust and the persons identified as the | Copyright (c) 2019 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| skipping to change at page 2, line 29 ¶ | skipping to change at page 2, line 29 ¶ | |||
| 3. CoAP Compression with SCHC . . . . . . . . . . . . . . . . . 4 | 3. CoAP Compression with SCHC . . . . . . . . . . . . . . . . . 4 | |||
| 4. Compression of CoAP header fields . . . . . . . . . . . . . . 6 | 4. Compression of CoAP header fields . . . . . . . . . . . . . . 6 | |||
| 4.1. CoAP version field . . . . . . . . . . . . . . . . . . . 6 | 4.1. CoAP version field . . . . . . . . . . . . . . . . . . . 6 | |||
| 4.2. CoAP type field . . . . . . . . . . . . . . . . . . . . . 6 | 4.2. CoAP type field . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 4.3. CoAP code field . . . . . . . . . . . . . . . . . . . . . 6 | 4.3. CoAP code field . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 4.4. CoAP Message ID field . . . . . . . . . . . . . . . . . . 6 | 4.4. CoAP Message ID field . . . . . . . . . . . . . . . . . . 6 | |||
| 4.5. CoAP Token fields . . . . . . . . . . . . . . . . . . . . 7 | 4.5. CoAP Token fields . . . . . . . . . . . . . . . . . . . . 7 | |||
| 5. CoAP options . . . . . . . . . . . . . . . . . . . . . . . . 7 | 5. CoAP options . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 5.1. CoAP Content and Accept options. . . . . . . . . . . . . 7 | 5.1. CoAP Content and Accept options. . . . . . . . . . . . . 7 | |||
| 5.2. CoAP option Max-Age field, CoAP option Uri-Host and Uri- | 5.2. CoAP option Max-Age field, CoAP option Uri-Host and Uri- | |||
| Port fields . . . . . . . . . . . . . . . . . . . . . . . 7 | Port fields . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 5.3. CoAP option Uri-Path and Uri-Query fields . . . . . . . . 8 | 5.3. CoAP option Uri-Path and Uri-Query fields . . . . . . . . 8 | |||
| 5.3.1. Variable length Uri-Path and Uri-Query . . . . . . . 8 | 5.3.1. Variable length Uri-Path and Uri-Query . . . . . . . 8 | |||
| 5.3.2. Variable number of path or query elements . . . . . . 9 | 5.3.2. Variable number of path or query elements . . . . . . 9 | |||
| 5.4. CoAP option Size1, Size2, Proxy-URI and Proxy-Scheme | 5.4. CoAP option Size1, Size2, Proxy-URI and Proxy-Scheme | |||
| fields . . . . . . . . . . . . . . . . . . . . . . . . . 9 | fields . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 5.5. CoAP option ETag, If-Match, If-None-Match, Location-Path | 5.5. CoAP option ETag, If-Match, If-None-Match, Location-Path | |||
| and Location-Query fields . . . . . . . . . . . . . . . . 9 | and Location-Query fields . . . . . . . . . . . . . . . . 9 | |||
| 6. Other RFCs . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 6. Other RFCs . . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 6.1. Block . . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 6.1. Block . . . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 6.2. Observe . . . . . . . . . . . . . . . . . . . . . . . . . 10 | 6.2. Observe . . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 6.3. No-Response . . . . . . . . . . . . . . . . . . . . . . . 10 | 6.3. No-Response . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 6.4. Time Scale . . . . . . . . . . . . . . . . . . . . . . . 10 | 6.4. Time Scale . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 6.5. OSCORE . . . . . . . . . . . . . . . . . . . . . . . . . 10 | 6.5. OSCORE . . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 7. Examples of CoAP header compression . . . . . . . . . . . . . 12 | 7. Examples of CoAP header compression . . . . . . . . . . . . . 12 | |||
| 7.1. Mandatory header with CON message . . . . . . . . . . . . 12 | 7.1. Mandatory header with CON message . . . . . . . . . . . . 12 | |||
| 7.2. OSCORE Compression . . . . . . . . . . . . . . . . . . . 13 | 7.2. OSCORE Compression . . . . . . . . . . . . . . . . . . . 13 | |||
| 7.3. Example OSCORE Compression . . . . . . . . . . . . . . . 17 | 7.3. Example OSCORE Compression . . . . . . . . . . . . . . . 17 | |||
| 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 27 | 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 28 | |||
| 9. Security considerations . . . . . . . . . . . . . . . . . . . 27 | 9. Security considerations . . . . . . . . . . . . . . . . . . . 28 | |||
| 10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 27 | 10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 28 | |||
| 11. Normative References . . . . . . . . . . . . . . . . . . . . 27 | 11. Normative References . . . . . . . . . . . . . . . . . . . . 29 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 28 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 29 | |||
| 1. Introduction | 1. Introduction | |||
| CoAP [rfc7252] is an implementation of the REST architecture for | CoAP [rfc7252] is an implementation of the REST architecture for | |||
| constrained devices. Nevertheless, if limited, the size of a CoAP | constrained devices. Although CoAP was designed for constrained | |||
| header may be too large for LPWAN constraints and some compression | devices, the size of a CoAP header may still be too large for LPWAN | |||
| may be needed to reduce the header size. | constraints and some compression may be needed to reduce the header | |||
| size. | ||||
| [I-D.ietf-lpwan-ipv6-static-context-hc] defines a header compression | [I-D.ietf-lpwan-ipv6-static-context-hc] defines a header compression | |||
| mechanism for LPWAN network based on a static context. The context | mechanism for LPWAN network based on a static context. The context | |||
| is said static since the field description composing the Rules and | is said static since the field description composing the Rules are | |||
| the context are not learned during the packet exchanges but are | not learned during the packet exchanges but are previously defined. | |||
| previously defined. The context(s) is(are) known by both ends before | The context(s) is(are) known by both ends before transmission. | |||
| transmission. | ||||
| A context is composed of a set of rules that are referenced by Rule | A context is composed of a set of rules that are referenced by Rule | |||
| IDs (identifiers). A rule contains an ordered list of the fields | IDs (identifiers). A rule contains an ordered list of the fields | |||
| descriptions containing a field ID (FID), its length (FL) and its | descriptions containing a field ID (FID), its length (FL) and its | |||
| position (FP), a direction indicator (DI) (upstream, downstream and | position (FP), a direction indicator (DI) (upstream, downstream and | |||
| bidirectional) and some associated Target Values (TV). Target Value | bidirectional) and some associated Target Values (TV). Target Value | |||
| indicates the value that can be expected. TV can also be a list of | indicates the value that can be expected. TV can also be a list of | |||
| values. A Matching Operator (MO) is associated to each header field | values. A Matching Operator (MO) is associated to each header field | |||
| description. The rule is selected if all the MOs fit the TVs for all | description. The rule is selected if all the MOs fit the TVs for all | |||
| fields. In that case, a Compression/Decompression Action (CDA) | fields. In that case, a Compression/Decompression Action (CDA) | |||
| associated to each field defines the link between the compressed and | associated to each field defines the link between the compressed and | |||
| decompressed value for each of the header fields. Compression | decompressed value for each of the header fields. Compression | |||
| results mainly in 4 actions: send the field value, send nothing, send | results mainly in 4 actions: send the field value, send nothing, send | |||
| less significant bits of a field, send an index. Values sent are | less significant bits of a field, send an index. Values sent are | |||
| called Compression Residues and follows the rule ID. | called Compression Residues and follows the rule ID. | |||
| 2. SCHC Compression Process | 2. SCHC Compression Process | |||
| The SCHC Compression rules can be applied to CoAP flows. SCHC | The SCHC Compression rules can be applied to CoAP flows. SCHC | |||
| Compression of the CoAP header may be done in conjunction with the | Compression of the CoAP header MAY be done in conjunction with the | |||
| above layers (IPv6/UDP) or independently. The SCHC adaptation layers | above layers (IPv6/UDP) or independently. The SCHC adaptation layers | |||
| as described in [I-D.ietf-lpwan-ipv6-static-context-hc] may be used | as described in [I-D.ietf-lpwan-ipv6-static-context-hc] may be used | |||
| as as shown in the Figure 1. | as shown in Figure 1. | |||
| ^ +------------+ ^ +------------+ ^ +------------+ | ^ +------------+ ^ +------------+ ^ +------------+ | |||
| | | CoAP | | | CoAP | inner | | CoAP | | | | CoAP | | | CoAP | inner | | CoAP | | |||
| | +------------+ v +------------+ x | OSCORE | | | +------------+ v +------------+ x | OSCORE | | |||
| | | UDP | | DTLS | outer | +------------+ | | | UDP | | DTLS | outer | +------------+ | |||
| | +------------+ +------------+ | | UDP | | | +------------+ +------------+ | | UDP | | |||
| | | IPv6 | | UDP | | +------------+ | | | IPv6 | | UDP | | +------------+ | |||
| v +------------+ +------------+ | | IPv6 | | v +------------+ +------------+ | | IPv6 | | |||
| | IPv6 | v +------------+ | | IPv6 | v +------------+ | |||
| +------------+ | +------------+ | |||
| Figure 1: rule scope for CoAP | Figure 1: rule scope for CoAP | |||
| Figure 1 shows some examples for CoAP architecture and the SCHC | Figure 1 shows some examples for CoAP architecture and the SCHC | |||
| rule's scope. A rule can covers all headers from IPv6 to CoAP, SCHC | rule's scope. A rule can cover all headers from IPv6 to CoAP, in | |||
| C/D is done in the device and at the LPWAN boundary. If an end-to- | which case SCHC C/D is performed at the device and at the LPWAN | |||
| end encryption mechanisms is used between the device and the | boundary. If an end-to-end encryption mechanisms is used between the | |||
| application. CoAP must be compressed independently of the other | device and the application, CoAP MAY be compressed independently of | |||
| layers. The rule ID and the compression residue are encrypted using | the other layers. The rule ID and the compression residue are | |||
| a mechanism such as DTLS. Only the other end can decipher the | encrypted using a mechanism such as DTLS. Only the other end can | |||
| information. | decipher the information. | |||
| Layers below may also be compressed using other SCHC rules (this is | Layers below may also be compressed using other SCHC rules (this is | |||
| out of the scope of this document). OSCORE | out of the scope of this document). OSCORE | |||
| [I-D.ietf-core-object-security] can also define 2 rules to compress | [I-D.ietf-core-object-security] can also define 2 rules to compress | |||
| the CoAP message. A first rule focuses on the inner header and is | the CoAP message. A first rule focuses on the inner header and is | |||
| end to end, a second rule may compress the outer header and the layer | end to end, a second rule may compress the outer header and the | |||
| above. SCHC C/D for inner header is done by both ends, SCHC C/D for | layers below. SCHC C/D for inner header is done by both ends, SCHC | |||
| outer header and other headers is done between the device and the | C/D for outer header and other headers is done between the device and | |||
| LPWAN boundary. | the LPWAN boundary. | |||
| 3. CoAP Compression with SCHC | 3. CoAP Compression with SCHC | |||
| CoAP differs from IPv6 and UDP protocols on the following aspects: | CoAP differs from IPv6 and UDP protocols on the following aspects: | |||
| o IPv6 and UDP are symmetrical protocols. The same fields are found | o IPv6 and UDP are symmetrical protocols. The same fields are found | |||
| in the request and in the response, only the location in the | in the request and in the response, only the location in the | |||
| header may vary (e.g. source and destination fields). A CoAP | header may vary (e.g. source and destination fields). A CoAP | |||
| request is different from a response. For example, the URI-path | request is different from a response. For example, the URI-path | |||
| option is mandatory in the request and is not found in the | option is mandatory in the request and is not found in the | |||
| response, a request may contain an Accept option and the response | response, a request may contain an Accept option and the response | |||
| a Content option. | a Content option. | |||
| [I-D.ietf-lpwan-ipv6-static-context-hc] defines the use of a | [I-D.ietf-lpwan-ipv6-static-context-hc] defines the use of a | |||
| message direction (DI) when processing the rule which allows the | message direction (DI) in the Field Description, which allows a | |||
| description of message header format in both directions. | single Rule to process message headers differently in both | |||
| directions. | ||||
| o Even when a field is "symmetric" (i.e. found in both directions) | o Even when a field is "symmetric" (i.e. found in both directions) | |||
| the values carried in each direction are different. Combined with | the values carried in each direction are different. Combined with | |||
| a matching list in the TV, this will allow to reduce the range of | a matching list in the TV, this allows reducing the range of | |||
| expected values in a particular direction and therefore reduce the | expected values in a particular direction and therefore reduce the | |||
| size of a compression residue. For instance, if a client sends | size of the compression residue. For instance, if a client sends | |||
| only CON request, the type can be elided by compression and the | only CON request, the type can be elided by compression and the | |||
| answer may use one bit to carry either the ACK or RST type. Same | answer may use one single bit to carry either the ACK or RST type. | |||
| behavior can be applied to the CoAP Code field (0.0X code are | The same behavior can be applied to the CoAP Code field (0.0X code | |||
| present in the request and Y.ZZ in the answer). The direction | are present in the request and Y.ZZ in the answer). The direction | |||
| allows to split in two parts the possible values for each | allows splitting in two parts the possible values for each | |||
| direction. | direction. | |||
| 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, the length being given by a field | |||
| header. More systematically, the CoAP options are described using | in the header. More systematically, the CoAP options are | |||
| the Type-Length-Value. | described using the Type-Length-Value. | |||
| [I-D.ietf-lpwan-ipv6-static-context-hc] offers the possibility to | [I-D.ietf-lpwan-ipv6-static-context-hc] offers the possibility to | |||
| define a function for the Field Length in the Field Description. | define a function for the Field Length in the Field Description. | |||
| o In CoAP headers, a field can be duplicated several times, for | o In CoAP headers, a field can be present several times. This is | |||
| instances, elements of an URI (path or queries). The position | typical for elements of an URI (path or queries). The position | |||
| defined in a rule, associated to a Field ID, can be used to | defined in a rule, associated to a Field ID, can be used to | |||
| identify the proper element. | identify the proper instance. | |||
| [I-D.ietf-lpwan-ipv6-static-context-hc] allows a Field id to | [I-D.ietf-lpwan-ipv6-static-context-hc] allows a Field ID to | |||
| appears several times in the rule, the Field Position (FP) removes | appears several times in the rule, the Field Position (FP) removes | |||
| ambiguities for the matching operation. | ambiguities for the matching operation. | |||
| o Field size defined in the CoAP protocol can be too large regarding | o Field sizes defined in the CoAP protocol can be too large | |||
| LPWAN traffic constraints. This is particularly true for the | regarding LPWAN traffic constraints. This is particularly true | |||
| message ID field or Token field. The use of MSB MO can be used to | for the message ID field or Token field. The MSB MO can be used | |||
| reduce the information carried on LPWANs. | to reduce the information carried on LPWANs. | |||
| o CoAP also obeys to the client/server paradigm and the compression | o CoAP also obeys the client/server paradigm and the compression | |||
| rate can be different if the request is issued from an LPWAN node | ratio can be different if the request is issued from an LPWAN | |||
| or from an non LPWAN device. For instance a Device (Dev) aware of | device or from an non LPWAN device. For instance a Device (Dev) | |||
| LPWAN constraints can generate a 1 byte token, but a regular CoAP | aware of LPWAN constraints can generate a 1 byte token, but a | |||
| client will certainly send a larger token to the Thing. SCHC | regular CoAP client will certainly send a larger token to the Dev. | |||
| compression will not modify the values to offer a better | SCHC compression will not modify the values to offer a better | |||
| compression rate. Nevertheless a proxy placed before the | compression rate. Nevertheless, a proxy placed before the | |||
| compressor may change some field values to offer a better | compressor may change some field values to offer a better | |||
| compression rate and maintain the necessary context for | compression ratio and maintain the necessary context for | |||
| interoperability with existing CoAP implementations. | interoperability with existing CoAP implementations. | |||
| 4. Compression of CoAP header fields | 4. Compression of CoAP header fields | |||
| This section discusses of the compression of the different CoAP | This section discusses the compression of the different CoAP header | |||
| header fields. | fields. | |||
| 4.1. CoAP version field | 4.1. CoAP version field | |||
| This field is bidirectional and must be elided during the SCHC | This field is bidirectional and MUST be elided during the SCHC | |||
| compression, since it always contains the same value. In the future, | compression, since it always contains the same value. In the future, | |||
| if new version of CoAP are defined, new rules ID will be defined | if new versions of CoAP are defined, new rules will be defined to | |||
| avoiding ambiguities between versions. | avoid ambiguities between versions. | |||
| 4.2. CoAP type field | 4.2. CoAP type field | |||
| [rfc7252] defines 4 types of messages: CON, NON, ACK and RST. The | [rfc7252] defines 4 types of messages: CON, NON, ACK and RST. The | |||
| latter two ones are a response of the two first ones. If the device | last two are a response to the first two. If the device plays a | |||
| plays a specific role, a rule can exploit these property with the | specific role, a rule can exploit these properties with the mapping | |||
| mapping list: [CON, NON] for one direction and [ACK, RST] for the | list: [CON, NON] for one direction and [ACK, RST] for the other | |||
| other direction. Compression residue is reduced to 1 bit. | direction. Compression residue is reduced to 1 bit. | |||
| The field must be elided if for instance a client is sending only NON | The field SHOULD be elided if for instance a client is sending only | |||
| or CON messages. | NON or CON messages. | |||
| In any case, a rule must be defined to carry RST to a client. | In any case, a rule MUST be defined to carry RST to a client. | |||
| 4.3. CoAP code field | 4.3. CoAP code field | |||
| The compression of the CoAP code field follows the same principle as | The compression of the CoAP code field follows the same principle as | |||
| for the CoAP type field. If the device plays a specific role, the | for the CoAP type field. If the device plays a specific role, the | |||
| set of code values can be split in two parts, the request codes with | set of code values can be split in two parts, the request codes with | |||
| the 0 class and the response values. | the 0 class and the response values. | |||
| If the device implement only a CoAP client, the request code can be | If the device only implements a CoAP client, the request code can be | |||
| reduced to the set of request the client is able to process. | reduced to the set of requests the client is able to process. | |||
| All the response codes should be compressed with a SCHC rule. | All the response codes MUST be compressed with a SCHC rule. | |||
| 4.4. CoAP Message ID field | 4.4. CoAP Message ID field | |||
| This field is bidirectional and is used to manage acknowledgments. | This field is bidirectional and is used to manage acknowledgments. | |||
| Server memorizes the value for a EXCHANGE_LIFETIME period (by default | The server memorizes the value for a EXCHANGE_LIFETIME period (by | |||
| 247 seconds) for CON messages and a NON_LIFETIME period (by default | default 247 seconds) for CON messages and a NON_LIFETIME period (by | |||
| 145 seconds) for NON messages. During that period, a server | default 145 seconds) for NON messages. During that period, a server | |||
| receiving the same Message ID value will process the message as a | receiving the same Message ID value will process the message as a | |||
| retransmission. After this period, it will be processed as a new | retransmission. After this period, it will be processed as a new | |||
| messages. | message. | |||
| In case the Device is a client, the size of the message ID field may | In case the Device is a client, the size of the message ID field may | |||
| the too large regarding the number of messages sent. Client may use | be too large regarding the number of messages sent. The client | |||
| only small message ID values, for instance 4 bit long. Therefore a | SHOULD use only small message ID values, for instance 4 bit long. | |||
| MSB can be used to limit the size of the compression residue. | Therefore, a MSB can be used to limit the size of the compression | |||
| residue. | ||||
| In case the Device is a server, client may be located outside of the | In case the Device is a server, the client may be located outside of | |||
| LPWAN area and view the device as a regular device connected to the | the LPWAN area and view the Device as a regular device connected to | |||
| internet. The client will generate Message ID using the 16 bits | the internet. The client will generate Message ID using the 16 bits | |||
| space offered by this field. A CoAP proxy can be set before the SCHC | space offered by this field. A CoAP proxy can be set before the SCHC | |||
| C/D to reduce the value of the Message ID, to allow its compression | C/D to reduce the value of the Message ID, to allow its compression | |||
| with the MSB matching operator and LSB CDA. | with the MSB matching operator and LSB CDA. | |||
| 4.5. CoAP Token fields | 4.5. CoAP Token fields | |||
| Token is defined through two CoAP fields, Token Length in the | Token is defined through two CoAP fields, Token Length in the | |||
| mandatory header and Token Value directly following the mandatory | mandatory header and Token Value directly following the mandatory | |||
| CoAP header. | CoAP header. | |||
| Token Length is processed as any protocol field. If the value | Token Length is processed as any protocol field. If the value | |||
| remains the same during all the transaction, the size can be stored | remains the same during all the transaction, the size can be stored | |||
| in the context and elided during the transmission. Otherwise it will | in the context and elided during the transmission. Otherwise, it | |||
| have to the send as a compression residue. | will have to the sent as a compression residue. | |||
| Token Value size should not be defined directly in the rule in the | Token Value size cannot be defined directly in the rule in the Field | |||
| Field Length (FL). Instead a specific function designed as "TKL" | Length (FL). Instead, a specific function designated as "TKL" MUST | |||
| must be used and length do not have to the sent with the residue. | be used and length does not have to the sent with the residue. | |||
| During the decompression, this function returns the value contained | During the decompression, this function returns the value contained | |||
| in the Token Length field. | in the Token Length field. | |||
| 5. CoAP options | 5. CoAP options | |||
| 5.1. CoAP Content and Accept options. | 5.1. CoAP Content and Accept options. | |||
| These field are both unidirectional and must not be set to | These fields are both unidirectional and MUST NOT be set to | |||
| bidirectional in a rule entry. | bidirectional in a rule entry. | |||
| If single value is expected by the client, it can be stored in the TV | If a single value is expected by the client, it can be stored in the | |||
| and elided during the transmission. Otherwise, if several possible | TV and elided during the transmission. Otherwise, if several | |||
| values are expected by the client, a matching-list should be used to | possible values are expected by the client, a matching-list SHOULD be | |||
| limit the size of the residue. If is not possible, the value has to | used to limit the size of the residue. If is not possible, the value | |||
| be sent as a residue (fixed or variable length). | has to be sent as a residue (fixed or variable length). | |||
| 5.2. CoAP option Max-Age field, CoAP option Uri-Host and Uri-Port | 5.2. CoAP option Max-Age field, CoAP option Uri-Host and Uri-Port | |||
| fields | fields | |||
| This field is unidirectional and must not be set to bidirectional in | These fields is unidirectional and MUST NOT be set to bidirectional | |||
| a rule entry. It is used only by the server to inform of the caching | in a rule entry. It is used only by the server to inform of the | |||
| duration and is never found in client requests. | caching duration and is never found in client requests. | |||
| If the duration is known by both ends, value can be elided on the | If the duration is known by both ends, the value can be elided on the | |||
| LPWAN. | LPWAN. | |||
| A matching list can be used if some well-known values are defined. | A matching list can be used if some well-known values are defined. | |||
| Otherwise these options should be sent as a residue (fixed or | Otherwise these options SHOULD be sent as a residue (fixed or | |||
| variable length). | variable length). | |||
| 5.3. CoAP option Uri-Path and Uri-Query fields | 5.3. CoAP option Uri-Path and Uri-Query fields | |||
| This fields are unidirectional and must not be set to bidirectional | 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 a | |||
| specific resource and are never found in server responses. | specific resource and are never found in server responses. | |||
| Uri-Path and Uri-Query elements are a repeatable options, the Field | Uri-Path and Uri-Query elements are a repeatable options, the Field | |||
| Position (FP) gives the position in the path. | Position (FP) gives the position in the path. | |||
| A Mapping list can be used to reduce size of variable Paths or | A Mapping list can be used to reduce the 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. | |||
| FID FL FP DI TV MO CDA | FID FL FP DI TV MO CDA | |||
| URI-Path 1 up ["/a/b", equal not-sent | URI-Path 1 up ["/a/b", equal not-sent | |||
| "/c/d"] | "/c/d"] | |||
| URI-Path 3 up ignore value-sent | URI-Path 3 up ignore value-sent | |||
| Figure 2: complex path example | Figure 2: complex path example | |||
| In Figure 2 a single bit residue can be used to code one of the 2 | In Figure 2 a single bit residue can be used to code one of the 2 | |||
| paths. If regrouping was not allowed, a 2 bits residue is needed. | paths. If regrouping were not allowed, a 2 bits residue would be | |||
| needed. | ||||
| 5.3.1. Variable length Uri-Path and Uri-Query | 5.3.1. Variable length Uri-Path and Uri-Query | |||
| When the length is known at the rule creation, the Field Length must | When the length is not known at the rule creation, the Field Length | |||
| be set to variable, and the unit is set to bytes. | SHOULD be set to variable, and the unit is set to bytes. | |||
| The MSB MO can be apply to a Uri-Path or Uri-Query element. Since | The MSB MO can be applied to a Uri-Path or Uri-Query element. Since | |||
| MSB value is given in bit, the size must always be a multiple of 8 | MSB value is given in bit, the size MUST always be a multiple of 8 | |||
| bits and the LSB CDA must not carry any value. | bits. | |||
| The length sent at the beginning of a variable length residue | The length sent at the beginning of a variable length residue | |||
| indicates the size of the LSB in bytes. | indicates the size of the LSB in bytes. | |||
| For instance for a CoMi path /c/X6?k="eth0" the rule can be set to: | For instance for a CORECONF path /c/X6?k="eth0" the rule can be set | |||
| to: | ||||
| FID FL FP DI TV MO CDA | FID FL FP DI TV MO CDA | |||
| URI-Path 1 up "c" equal not-sent | URI-Path 1 up "c" equal not-sent | |||
| URI-Path 2 up ignore value-sent | URI-Path 2 up ignore value-sent | |||
| URI-Query 1 up "k=" MSB (16) LSB | URI-Query 1 up "k=" MSB (16) LSB | |||
| Figure 3: CoMi URI compression | Figure 3: CORECONF URI compression | |||
| Figure 3 shows the parsing and the compression of the URI. where c is | Figure 3 shows the parsing and the compression of the URI, where c is | |||
| not sent. The second element is sent with the length (i.e. 0x2 X 6) | not sent. The second element is sent with the length (i.e. 0x2 X 6) | |||
| followed by the query option (i.e. 0x05 "eth0"). | followed by the query option (i.e. 0x05 "eth0"). | |||
| 5.3.2. Variable number of path or query elements | 5.3.2. Variable number of path or query elements | |||
| The number of Uri-path or Uri-Query element in a rule is fixed at the | The number of Uri-path or Uri-Query elements in a rule is fixed at | |||
| rule creation time. If the number varies, several rules should be | the rule creation time. If the number varies, several rules SHOULD | |||
| created to cover all the possibilities. Another possibilities is to | be created to cover all the possibilities. Another possibility is to | |||
| define the length of Uri-Path to variable and send a compression | define the length of Uri-Path to variable and send a compression | |||
| residue with a length of 0 to indicate that this Uri-Path is empty. | residue with a length of 0 to indicate that this Uri-Path is empty. | |||
| This add 4 bits to the compression residue. | This adds 4 bits to the compression residue. | |||
| 5.4. CoAP option Size1, Size2, Proxy-URI and Proxy-Scheme fields | 5.4. CoAP option Size1, Size2, Proxy-URI and Proxy-Scheme fields | |||
| These fields are unidirectional and must not be set to bidirectional | These fields are unidirectional and MUST NOT be set to bidirectional | |||
| in a rule entry. They are used only by the client to access to a | in a rule entry. They are used only by the client to access 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 has to be sent, TV is not set, MO is set to | |||
| and CDA is set to "value-sent. A mapping can also be used. | "ignore" and CDA is set to "value-sent". A mapping MAY also be used. | |||
| Otherwise the TV is set to the value, MO is set to "equal" and CDA is | Otherwise, the TV is set to the value, MO is set to "equal" and CDA | |||
| set to "not-sent" | is set to "not-sent". | |||
| 5.5. CoAP option ETag, If-Match, If-None-Match, Location-Path and | 5.5. CoAP option ETag, If-Match, If-None-Match, Location-Path and | |||
| Location-Query fields | Location-Query fields | |||
| These fields are unidirectional. | These fields are unidirectional. | |||
| These fields values cannot be stored in a rule entry. They must | These fields values cannot be stored in a rule entry. They MUST | |||
| always be sent with the compression residues. | always be sent with the compression residues. | |||
| 6. Other RFCs | 6. Other RFCs | |||
| 6.1. Block | 6.1. Block | |||
| Block [rfc7959] allows a fragmentation at the CoAP level. SCHC | Block [rfc7959] allows a fragmentation at the CoAP level. SCHC also | |||
| includes also a fragmentation protocol. They are compatible. If a | includes a fragmentation protocol. They are compatible. If a block | |||
| block option is used, its content must be sent as a compression | option is used, its content MUST be sent as a compression residue. | |||
| residue. | ||||
| 6.2. Observe | 6.2. Observe | |||
| [rfc7641] defines the Observe option. The TV is not set, MO is set | [rfc7641] defines the Observe option. The TV is not set, MO is set | |||
| to "ignore" and the CDA is set to "value-sent". SCHC does not limit | to "ignore" and the CDA 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 device implementation should limit the | transmission size, either the device implementation MAY limit the | |||
| delta between two consecutive value or a proxy can modify the | delta between two consecutive values, or a proxy can modify the | |||
| incrementation. | increment. | |||
| Since RST message may be sent to inform a server that the client does | Since an RST message may be sent to inform a server that the client | |||
| not require Observe response, a rule must allow the transmission of | does not require Observe response, a rule MUST allow the transmission | |||
| this message. | of this message. | |||
| 6.3. No-Response | 6.3. No-Response | |||
| [rfc7967] defines an No-Response option limiting the responses made | [rfc7967] defines a No-Response option limiting the responses made by | |||
| by a server to a request. If the value is not known by both ends, | a server to a request. If the value is known by both ends, then TV | |||
| then TV is set to this value, MO is set to "equal" and CDA is set to | is set to this value, MO is set to "equal" and CDA is set to "not- | |||
| "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 CDA to "value-sent". A matching list can also be | set to "ignore" and CDA to "value-sent". A matching list can also be | |||
| used to reduce the size. | used to reduce the size. | |||
| 6.4. Time Scale | 6.4. Time Scale | |||
| Time scale [I-D.toutain-core-time-scale] option allows a client to | The time scale [I-D.toutain-core-time-scale] option allows a client | |||
| inform the server that it is in a slow network and that message ID | to inform the server that it is in a constrained network and that | |||
| should be kept for a duration given by the option. | message ID MUST be kept for a duration given by the option. | |||
| If the value is not known by both ends, then TV is set to this value, | If the value is known by both ends, then TV is set to this value, MO | |||
| MO is set to "equal" and CDA is set to "not-sent". | is set to "equal" and CDA is set to "not-sent". | |||
| Otherwise, if the value is changing over time, TV is not set, MO is | Otherwise, if the value is changing over time, TV is not set, MO is | |||
| set to "ignore" and CDA to "value-sent". A matching list can also be | set to "ignore" and CDA to "value-sent". A matching list can also be | |||
| used to reduce the size. | used to reduce the size. | |||
| 6.5. OSCORE | 6.5. OSCORE | |||
| OSCORE [I-D.ietf-core-object-security] defines end-to-end protection | OSCORE [I-D.ietf-core-object-security] defines end-to-end protection | |||
| for CoAP messages. This section describes how SCHC rules can be | for CoAP messages. This section describes how SCHC rules can be | |||
| applied to compress OSCORE-protected messages. | applied to compress OSCORE-protected messages. | |||
| skipping to change at page 11, line 46 ¶ | skipping to change at page 12, line 4 ¶ | |||
| This draft recommends to implement a parser that is able to identify | This draft recommends to implement a parser that is able to identify | |||
| the OSCORE Option and the fields it contains. | the OSCORE Option and the fields it contains. | |||
| Conceptually, it discerns up to 4 distinct pieces of information | Conceptually, it discerns up to 4 distinct pieces of information | |||
| within the OSCORE option: the flag bits, the piv, the kid context, | within the OSCORE option: the flag bits, the piv, the kid context, | |||
| and the kid. It is thus recommended that the parser split the OSCORE | and the kid. It is thus recommended that the parser split the OSCORE | |||
| option into the 4 subsequent fields: | option into the 4 subsequent fields: | |||
| o CoAP OSCORE_flags, | o CoAP OSCORE_flags, | |||
| o CoAP OSCORE_piv, | o CoAP OSCORE_piv, | |||
| o CoAP OSCORE_kidctxt, | o CoAP OSCORE_kidctxt, | |||
| o CoAP OSCORE_kid. | o CoAP OSCORE_kid. | |||
| These fields are superposed on the OSCORE Option format in Figure 4, | These fields are shown superimposed on the OSCORE Option format in | |||
| the CoAP OSCORE_kidctxt field including the size bits s. Their size | Figure 4, the CoAP OSCORE_kidctxt field including the size bits s. | |||
| may be reduced using the MSB matching operator. | Their size SHOULD be reduced using the MSB matching operator. | |||
| 7. Examples of CoAP header compression | 7. Examples of CoAP header compression | |||
| 7.1. Mandatory header with CON message | 7.1. Mandatory header with CON message | |||
| In this first scenario, the LPWAN compressor receives from outside | In this first scenario, the LPWAN compressor at the Network Gateway | |||
| client a POST message, which is immediately acknowledged by the | side receives from a client on the Internet a POST message, which is | |||
| Device. For this simple scenario, the rules are described Figure 5. | immediately acknowledged by the Device. For this simple scenario, | |||
| the rules are described Figure 5. | ||||
| Rule ID 1 | Rule ID 1 | |||
| +-------------+--+--+--+------+---------+-------------++------------+ | +-------------+--+--+--+------+---------+-------------++------------+ | |||
| | Field. |FL|FP|DI|Target| Match | CDA || Sent | | | Field |FL|FP|DI|Target| Match | CDA || Sent | | |||
| | | | | |Value | Opera. | || [bits] | | | | | | |Value | Opera. | || [bits] | | |||
| +-------------+--+--+--+------+---------+-------------++------------+ | +-------------+--+--+--+------+---------+-------------++------------+ | |||
| |CoAP version | | |bi| 01 |equal |not-sent || | | |CoAP version | | |bi| 01 |equal |not-sent || | | |||
| |CoAP version | | |bi| 01 |equal |not-sent || | | |CoAP version | | |bi| 01 |equal |not-sent || | | |||
| |CoAP Type | | |dw| CON |equal |not-sent || | | |CoAP Type | | |dw| CON |equal |not-sent || | | |||
| |CoAP Type | | |up|[ACK, | | || | | |CoAP Type | | |up|[ACK, | | || | | |||
| | | | | | RST] |match-map|matching-sent|| T | | | | | | | RST] |match-map|matching-sent|| T | | |||
| |CoAP TKL | | |bi| 0 |equal |not-sent || | | |CoAP TKL | | |bi| 0 |equal |not-sent || | | |||
| |CoAP Code | | |bi| ML1 |match-map|matching-sent|| CC CCC | | |CoAP Code | | |bi| ML1 |match-map|matching-sent|| CC CCC | | |||
| |CoAP MID | | |bi| 0000 |MSB(7 ) |LSB(9) || M-ID| | |CoAP MID | | |bi| 0000 |MSB(7 ) |LSB(9) || M-ID| | |||
| skipping to change at page 18, line 32 ¶ | skipping to change at page 19, line 5 ¶ | |||
| Original msg length: 10 | Original msg length: 10 | |||
| Figure 11: CoAP CONTENT Response | Figure 11: CoAP CONTENT Response | |||
| The SCHC Rules for the Inner Compression include all fields that are | The SCHC Rules for the Inner Compression include all fields that are | |||
| already present in a regular CoAP message, what is important is the | already present in a regular CoAP message, what is important is the | |||
| order of appearance and inclusion of only those CoAP fields that go | order of appearance and inclusion of only those CoAP fields that go | |||
| into the Plaintext, Figure 12. | into the Plaintext, Figure 12. | |||
| Rule ID 0 | Rule ID 0 | |||
| +---------------+--+--+-----------+-----------+-----------++------+ | <<<<<<< Updated upstream | |||
| | Field |FP|DI| Target | MO | CDA || Sent | | +---------------+--+--+-----------+-----------+-----------++------+ | |||
| | | | | Value | | ||[bits]| | | Field |FP|DI| Target | MO | CDA || Sent | | |||
| +---------------+--+--+-----------+-----------+-----------++------+ | | | | | Value | | ||[bits]| | |||
| |CoAP Code | |up| 1 | equal |not-sent || | | +---------------+--+--+-----------+-----------+-----------++------+ | |||
| |CoAP Code | |dw|[69,132] | match-map |match-sent || c | | |CoAP Code | |up| 1 | equal |not-sent || | | |||
| |CoAP Uri-Path | |up|temperature| equal |not-sent || | | |CoAP Code | |dw|[69,132] | match-map |match-sent || c | | |||
| |COAP Option-End| |dw| 0xFF | equal |not-sent || | | |CoAP Uri-Path | |up|temperature| equal |not-sent || | | |||
| +---------------+--+--+-----------+-----------+-----------++------+ | |COAP Option-End| |dw| 0xFF | equal |not-sent || | | |||
| +---------------+--+--+-----------+-----------+-----------++------+ | ||||
| ======= | ||||
| +----------------+--+--+-----------+-----------+-----------++--------+ | ||||
| | Field |FP|DI| Target | MO | CDA || Sent | | ||||
| | | | | Value | | || [bits] | | ||||
| +----------------+--+--+-----------+-----------+-----------++--------+ | ||||
| |CoAP Code | |up| 1 | equal |not-sent || | | ||||
| |CoAP Code | |dw|[69,132] | match-map |match-sent || c | | ||||
| |CoAP Uri-Path | |up|temperature| equal |not-sent || | | ||||
| |COAP Option-End | |dw| 0xFF | equal |not-sent || | | ||||
| +----------------+--+--+-----------+-----------+-----------++--------+ | ||||
| >>>>>>> Stashed changes | ||||
| Figure 12: Inner SCHC Rules | Figure 12: Inner SCHC Rules | |||
| Figure 13 shows the Plaintext obtained for our example GET Request | Figure 13 shows the Plaintext obtained for our example GET Request | |||
| and follows the process of Inner Compression and Encryption until we | and follows the process of Inner Compression and Encryption until we | |||
| end up with the Payload to be added in the outer OSCORE Message. | end up with the Payload to be added in the outer OSCORE Message. | |||
| In this case the original message has no payload and its resulting | In this case the original message has no payload and its resulting | |||
| Plaintext can be compressed up to only 1 byte (size of the Rule ID). | Plaintext can be compressed up to only 1 byte (size of the Rule ID). | |||
| The AEAD algorithm preserves this length in its first output, but | The AEAD algorithm preserves this length in its first output, but | |||
| also yields a fixed-size tag which cannot be compressed and must be | also yields a fixed-size tag which cannot be compressed and has to be | |||
| included in the OSCORE message. This translates into an overhead in | included in the OSCORE message. This translates into an overhead in | |||
| total message length, which limits the amount of compression that can | total message length, which limits the amount of compression that can | |||
| be achieved and plays into the cost of adding security to the | be achieved and plays into the cost of adding security to the | |||
| exchange. | exchange. | |||
| ________________________________________________________ | ________________________________________________________ | |||
| | | | | | | |||
| | OSCORE Plaintext | | | OSCORE Plaintext | | |||
| | | | | | | |||
| | 0x01bb74656d7065726174757265 (13 bytes) | | | 0x01bb74656d7065726174757265 (13 bytes) | | |||
| skipping to change at page 20, line 7 ¶ | skipping to change at page 20, line 48 ¶ | |||
| | encrypted_plaintext = 0xa2 (1 byte) | | | encrypted_plaintext = 0xa2 (1 byte) | | |||
| | tag = 0xc54fe1b434297b62 (8 bytes) | | | tag = 0xc54fe1b434297b62 (8 bytes) | | |||
| | | | | | | |||
| | ciphertext = 0xa2c54fe1b434297b62 (9 bytes) | | | ciphertext = 0xa2c54fe1b434297b62 (9 bytes) | | |||
| |_________________________________________________| | |_________________________________________________| | |||
| Figure 13: Plaintext compression and encryption for GET Request | Figure 13: Plaintext compression and encryption for GET Request | |||
| In Figure 14 we repeat the process for the example CONTENT Response. | In Figure 14 we repeat the process for the example CONTENT Response. | |||
| In this case the misalignment produced by the compression residue (1 | In this case the misalignment produced by the compression residue (1 | |||
| bit) makes it so that 7 bits of padding must be applied after the | bit) makes it so that 7 bits of padding have to be applied after the | |||
| payload, resulting in a compressed Plaintext that is the same size as | payload, resulting in a compressed Plaintext that is the same size as | |||
| before compression. This misalignment also causes the hexcode from | before compression. This misalignment also causes the hexcode from | |||
| the payload to differ from the original, even though it has not been | the payload to differ from the original, even though it has not been | |||
| compressed. On top of this, the overhead from the tag bytes is | compressed. On top of this, the overhead from the tag bytes is | |||
| incurred as before. | incurred as before. | |||
| ________________________________________________________ | ________________________________________________________ | |||
| | | | | | | |||
| | OSCORE Plaintext | | | OSCORE Plaintext | | |||
| | | | | | | |||
| skipping to change at page 21, line 49 ¶ | skipping to change at page 22, line 4 ¶ | |||
| v | v | |||
| _________________________________________________________ | _________________________________________________________ | |||
| | | | | | | |||
| | encrypted_plaintext = 0x10c6d7c26cc1 (6 bytes) | | | encrypted_plaintext = 0x10c6d7c26cc1 (6 bytes) | | |||
| | tag = 0xe9aef3f2461e0c29 (8 bytes) | | | tag = 0xe9aef3f2461e0c29 (8 bytes) | | |||
| | | | | | | |||
| | ciphertext = 0x10c6d7c26cc1e9aef3f2461e0c29 (14 bytes) | | | ciphertext = 0x10c6d7c26cc1e9aef3f2461e0c29 (14 bytes) | | |||
| |_________________________________________________________| | |_________________________________________________________| | |||
| Figure 14: Plaintext compression and encryption for CONTENT Response | Figure 14: Plaintext compression and encryption for CONTENT Response | |||
| The Outer SCHC Rules (Figure 17) MUST process the OSCORE Options | ||||
| The Outer SCHC Rules (Figure 17) must process the OSCORE Options | ||||
| fields. In Figure 15 and Figure 16 we show a dump of the OSCORE | fields. In Figure 15 and Figure 16 we show a dump of the OSCORE | |||
| Messages generated from our example messages once they have been | Messages generated from our example messages once they have been | |||
| provided with the Inner Compressed Ciphertext in the payload. These | provided with the Inner Compressed Ciphertext in the payload. These | |||
| are the messages that are to go through Outer SCHC Compression. | are the messages that are to go through Outer SCHC Compression. | |||
| Protected message: | Protected message: | |||
| ================== | ================== | |||
| 0x4102000182d7080904636c69656e74ffa2c54fe1b434297b62 | 0x4102000182d7080904636c69656e74ffa2c54fe1b434297b62 | |||
| (25 bytes) | (25 bytes) | |||
| skipping to change at page 24, line 5 ¶ | skipping to change at page 24, line 5 ¶ | |||
| certain options. | certain options. | |||
| The piv field lends itself to having a number of bits masked off with | The piv field lends itself to having a number of bits masked off with | |||
| MO MSB and CDA LSB. This could prove useful in applications where | MO MSB and CDA LSB. This could prove useful in applications where | |||
| the message frequency is low such as that found in LPWAN | the message frequency is low such as that found in LPWAN | |||
| technologies. Note that compressing the sequence numbers effectively | technologies. Note that compressing the sequence numbers effectively | |||
| reduces the maximum amount of sequence numbers that can be used in an | reduces the maximum amount of sequence numbers that can be used in an | |||
| exchange. Once this amount is exceeded, the SCHC Context would need | exchange. Once this amount is exceeded, the SCHC Context would need | |||
| to be re-established. | to be re-established. | |||
| The size s included in the kid context field may be masked off with | The size s included in the kid context field MAY be masked off with | |||
| CDA MSB. The rest of the field could have additional bits masked | CDA MSB. The rest of the field could have additional bits masked | |||
| off, or have the whole field be fixed with MO equal and CDA not-sent. | off, or have the whole field be fixed with MO equal and CDA not-sent. | |||
| The same holds for the kid field. | The same holds for the kid field. | |||
| Figure 17 shows a possible set of Outer Rules to compress the Outer | Figure 17 shows a possible set of Outer Rules to compress the Outer | |||
| Header. | Header. | |||
| Rule ID 0 | Rule ID 0 | |||
| +-------------------+--+--+--------------+--------+---------++------+ | <<<<<<< Updated upstream | |||
| | Field |FP|DI| Target | MO | CDA || Sent | | +-------------------+--+--+--------------+--------+---------++------+ | |||
| | | | | Value | | ||[bits]| | | Field |FP|DI| Target | MO | CDA || Sent | | |||
| +-------------------+--+--+--------------+--------+---------++------+ | | | | | Value | | ||[bits]| | |||
| |CoAP version | |bi| 01 |equal |not-sent || | | +-------------------+--+--+--------------+--------+---------++------+ | |||
| |CoAP Type | |up| 0 |equal |not-sent || | | |CoAP version | |bi| 01 |equal |not-sent || | | |||
| |CoAP Type | |dw| 2 |equal |not-sent || | | |CoAP Type | |up| 0 |equal |not-sent || | | |||
| |CoAP TKL | |bi| 1 |equal |not-sent || | | |CoAP Type | |dw| 2 |equal |not-sent || | | |||
| |CoAP Code | |up| 2 |equal |not-sent || | | |CoAP TKL | |bi| 1 |equal |not-sent || | | |||
| |CoAP Code | |dw| 68 |equal |not-sent || | | |CoAP Code | |up| 2 |equal |not-sent || | | |||
| |CoAP MID | |bi| 0000 |MSB(12) |LSB ||MMMM | | |CoAP Code | |dw| 68 |equal |not-sent || | | |||
| |CoAP Token | |bi| 0x80 |MSB(5) |LSB ||TTT | | |CoAP MID | |bi| 0000 |MSB(12) |LSB ||MMMM | | |||
| |CoAP OSCORE_flags | |up| 0x09 |equal |not-sent || | | |CoAP Token | |bi| 0x80 |MSB(5) |LSB ||TTT | | |||
| |CoAP OSCORE_piv | |up| 0x00 |MSB(4) |LSB ||PPPP | | |CoAP OSCORE_flags | |up| 0x09 |equal |not-sent || | | |||
| |COAP OSCORE_kid | |up|0x636c69656e70|MSB(52) |LSB ||KKKK | | |CoAP OSCORE_piv | |up| 0x00 |MSB(4) |LSB ||PPPP | | |||
| |COAP OSCORE_kidctxt| |bi| b'' |equal |not-sent || | | |COAP OSCORE_kid | |up|0x636c69656e70|MSB(52) |LSB ||KKKK | | |||
| |CoAP OSCORE_flags | |dw| b'' |equal |not-sent || | | |COAP OSCORE_kidctxt| |bi| b'' |equal |not-sent || | | |||
| |CoAP OSCORE_piv | |dw| b'' |equal |not-sent || | | |CoAP OSCORE_flags | |dw| b'' |equal |not-sent || | | |||
| |CoAP OSCORE_kid | |dw| b'' |equal |not-sent || | | |CoAP OSCORE_piv | |dw| b'' |equal |not-sent || | | |||
| |COAP Option-End | |dw| 0xFF |equal |not-sent || | | |CoAP OSCORE_kid | |dw| b'' |equal |not-sent || | | |||
| +-------------------+--+--+--------------+--------+---------++------+ | |COAP Option-End | |dw| 0xFF |equal |not-sent || | | |||
| +-------------------+--+--+--------------+--------+---------++------+ | ||||
| ======= | ||||
| +-------------------+--+--+--------------+---------+-----------++--------+ | ||||
| | Field |FP|DI| Target | MO | CDA || Sent | | ||||
| | | | | Value | | || [bits] | | ||||
| +-------------------+--+--+--------------+---------+-----------++--------+ | ||||
| |CoAP version | |bi| 01 |equal |not-sent || | | ||||
| |CoAP Type | |up| 0 |equal |not-sent || | | ||||
| |CoAP Type | |dw| 2 |equal |not-sent || | | ||||
| |CoAP TKL | |bi| 1 |equal |not-sent || | | ||||
| |CoAP Code | |up| 2 |equal |not-sent || | | ||||
| |CoAP Code | |dw| 68 |equal |not-sent || | | ||||
| |CoAP MID | |bi| 0000 |MSB(12) |LSB ||MMMM | | ||||
| |CoAP Token | |bi| 0x80 |MSB(5) |LSB ||TTT | | ||||
| |CoAP OSCORE_flags | |up| 0x09 |equal |not-sent || | | ||||
| |CoAP OSCORE_piv | |up| 0x00 |MSB(4) |LSB ||PPPP | | ||||
| |COAP OSCORE_kid | |up|0x636c69656e70|MSB(52) |LSB ||KKKK | | ||||
| |COAP OSCORE_kidctxt| |bi| b'' |equal |not-sent || | | ||||
| |CoAP OSCORE_flags | |dw| b'' |equal |not-sent || | | ||||
| |CoAP OSCORE_piv | |dw| b'' |equal |not-sent || | | ||||
| |CoAP OSCORE_kid | |dw| b'' |equal |not-sent || | | ||||
| |COAP Option-End | |dw| 0xFF |equal |not-sent || | | ||||
| +-------------------+--+--+--------------+---------+-----------++--------+ | ||||
| >>>>>>> Stashed changes | ||||
| Figure 17: Outer SCHC Rules | Figure 17: Outer SCHC Rules | |||
| These Outer Rules are applied to the example GET Request and CONTENT | These Outer Rules are applied to the example GET Request and CONTENT | |||
| Response. The resulting messages are shown in Figure 18 and | Response. The resulting messages are shown in Figure 18 and | |||
| Figure 19. | Figure 19. | |||
| Compressed message: | Compressed message: | |||
| ================== | ================== | |||
| 0x001489458a9fc3686852f6c4 (12 bytes) | 0x001489458a9fc3686852f6c4 (12 bytes) | |||
| skipping to change at page 26, line 5 ¶ | skipping to change at page 27, line 5 ¶ | |||
| Compressed msg length: 16 bytes | Compressed msg length: 16 bytes | |||
| Figure 19: SCHC-OSCORE Compressed CONTENT Response | Figure 19: SCHC-OSCORE Compressed CONTENT Response | |||
| For contrast, we compare these results with what would be obtained by | For contrast, we compare these results with what would be obtained by | |||
| SCHC compressing the original CoAP messages without protecting them | SCHC compressing the original CoAP messages without protecting them | |||
| with OSCORE. To do this, we compress the CoAP messages according to | with OSCORE. To do this, we compress the CoAP messages according to | |||
| the SCHC rules in Figure 20. | the SCHC rules in Figure 20. | |||
| Rule ID 1 | Rule ID 1 | |||
| +---------------+--+--+-----------+---------+-----------++--------+ | <<<<<<< Updated upstream | |||
| | Field |FP|DI| Target | MO | CDA || Sent | | +---------------+--+--+-----------+---------+-----------++--------+ | |||
| | | | | Value | | || [bits] | | | Field |FP|DI| Target | MO | CDA || Sent | | |||
| +---------------+--+--+-----------+---------+-----------++--------+ | | | | | Value | | || [bits] | | |||
| |CoAP version | |bi| 01 |equal |not-sent || | | +---------------+--+--+-----------+---------+-----------++--------+ | |||
| |CoAP Type | |up| 0 |equal |not-sent || | | |CoAP version | |bi| 01 |equal |not-sent || | | |||
| |CoAP Type | |dw| 2 |equal |not-sent || | | |CoAP Type | |up| 0 |equal |not-sent || | | |||
| |CoAP TKL | |bi| 1 |equal |not-sent || | | |CoAP Type | |dw| 2 |equal |not-sent || | | |||
| |CoAP Code | |up| 2 |equal |not-sent || | | |CoAP TKL | |bi| 1 |equal |not-sent || | | |||
| |CoAP Code | |dw| [69,132] |equal |not-sent || | | |CoAP Code | |up| 2 |equal |not-sent || | | |||
| |CoAP MID | |bi| 0000 |MSB(12) |LSB ||MMMM | | |CoAP Code | |dw| [69,132] |equal |not-sent || | | |||
| |CoAP Token | |bi| 0x80 |MSB(5) |LSB ||TTT | | |CoAP MID | |bi| 0000 |MSB(12) |LSB ||MMMM | | |||
| |CoAP Uri-Path | |up|temperature|equal |not-sent || | | |CoAP Token | |bi| 0x80 |MSB(5) |LSB ||TTT | | |||
| |COAP Option-End| |dw| 0xFF |equal |not-sent || | | |CoAP Uri-Path | |up|temperature|equal |not-sent || | | |||
| +---------------+--+--+-----------+---------+-----------++--------+ | |COAP Option-End| |dw| 0xFF |equal |not-sent || | | |||
| +---------------+--+--+-----------+---------+-----------++--------+ | ||||
| ======= | ||||
| +---------------+--+--+-----------+---------+-----------++------------+ | ||||
| | Field |FP|DI| Target | MO | CDA || Sent | | ||||
| | | | | Value | | || [bits] | | ||||
| +---------------+--+--+-----------+---------+-----------++------------+ | ||||
| |CoAP version | |bi| 01 |equal |not-sent || | | ||||
| |CoAP Type | |up| 0 |equal |not-sent || | | ||||
| |CoAP Type | |dw| 2 |equal |not-sent || | | ||||
| |CoAP TKL | |bi| 1 |equal |not-sent || | | ||||
| |CoAP Code | |up| 2 |equal |not-sent || | | ||||
| |CoAP Code | |dw| [69,132] |equal |not-sent || | | ||||
| |CoAP MID | |bi| 0000 |MSB(12) |LSB ||MMMM | | ||||
| |CoAP Token | |bi| 0x80 |MSB(5) |LSB ||TTT | | ||||
| |CoAP Uri-Path | |up|temperature|equal |not-sent || | | ||||
| |COAP Option-End| |dw| 0xFF |equal |not-sent || | | ||||
| +---------------+--+--+-----------+---------+-----------++------------+ | ||||
| >>>>>>> Stashed changes | ||||
| Figure 20: SCHC-CoAP Rules (No OSCORE) | Figure 20: SCHC-CoAP Rules (No OSCORE) | |||
| This yields the results in Figure 21 for the Request, and Figure 22 | This yields the results in Figure 21 for the Request, and Figure 22 | |||
| for the Response. | for the Response. | |||
| Compressed message: | Compressed message: | |||
| ================== | ================== | |||
| 0x0114 | 0x0114 | |||
| 0x01 = Rule ID | 0x01 = Rule ID | |||
| skipping to change at page 27, line 41 ¶ | skipping to change at page 29, line 10 ¶ | |||
| 10. Acknowledgements | 10. Acknowledgements | |||
| Thanks to all the persons that have give us feedback | Thanks to all the persons that have give us feedback | |||
| 11. Normative References | 11. Normative References | |||
| [I-D.ietf-core-object-security] | [I-D.ietf-core-object-security] | |||
| Selander, G., Mattsson, J., Palombini, F., and L. Seitz, | Selander, G., Mattsson, J., Palombini, F., and L. Seitz, | |||
| "Object Security for Constrained RESTful Environments | "Object Security for Constrained RESTful Environments | |||
| (OSCORE)", draft-ietf-core-object-security-15 (work in | (OSCORE)", draft-ietf-core-object-security-16 (work in | |||
| progress), August 2018. | progress), March 2019. | |||
| [I-D.ietf-lpwan-ipv6-static-context-hc] | [I-D.ietf-lpwan-ipv6-static-context-hc] | |||
| Minaburo, A., Toutain, L., Gomez, C., Barthel, D., and J. | Minaburo, A., Toutain, L., Gomez, C., Barthel, D., and J. | |||
| Zuniga, "LPWAN Static Context Header Compression (SCHC) | Zuniga, "LPWAN Static Context Header Compression (SCHC) | |||
| and fragmentation for IPv6 and UDP", draft-ietf-lpwan- | and fragmentation for IPv6 and UDP", draft-ietf-lpwan- | |||
| ipv6-static-context-hc-18 (work in progress), December | ipv6-static-context-hc-18 (work in progress), December | |||
| 2018. | 2018. | |||
| [I-D.toutain-core-time-scale] | [I-D.toutain-core-time-scale] | |||
| Minaburo, A. and L. Toutain, "CoAP Time Scale Option", | Minaburo, A. and L. Toutain, "CoAP Time Scale Option", | |||
| End of changes. 77 change blocks. | ||||
| 213 lines changed or deleted | 269 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/ | ||||