<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.2.5 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc strict="yes"?>
<?rfc compact="yes"?>
<?rfc toc="yes"?>

<rfc ipr="trust200902" docName="draft-ietf-lpwan-coap-static-context-hc-02" category="info">

  <front>
    <title abbrev="LPWAN CoAP compression">LPWAN Static Context Header Compression (SCHC) for CoAP</title>

    <author initials="A." surname="Minaburo" fullname="Ana Minaburo">
      <organization>Acklio</organization>
      <address>
        <postal>
          <street>2bis rue de la Chataigneraie</street>
          <city>35510 Cesson-Sevigne Cedex</city>
          <country>France</country>
        </postal>
        <email>ana@ackl.io</email>
      </address>
    </author>
    <author initials="L." surname="Toutain" fullname="Laurent Toutain">
      <organization>Institut MINES TELECOM ; IMT Atlantique</organization>
      <address>
        <postal>
          <street>2 rue de la Chataigneraie</street> <street>CS 17607</street>
          <city>35576 Cesson-Sevigne Cedex</city>
          <country>France</country>
        </postal>
        <email>Laurent.Toutain@imt-atlantique.fr</email>
      </address>
    </author>

    <date year="2017" month="September" day="06"/>

    
    <workgroup>lpwan Working Group</workgroup>
    

    <abstract>


<t>This draft defines the way SCHC header compression can be applied to CoAP 
headers.
CoAP header structure differs from IPv6 and UDP protocols since the CoAP Header 
is flexible header with a variable number of options themself of a variable length. 
Another important difference is 
the asymmetry in the header information used for request and 
response messages. This draft takes into account the fact that a thing can play the
role of a CoAP client, a CoAP client or both roles.</t>



    </abstract>


  </front>

  <middle>


<section anchor="Introduction" title="Introduction">

<t>CoAP <xref target="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.</t>

<t>Nevertheless, if limited, the size of a CoAP header may be
   too large for LPWAN constraints and some compression may be
   needed to reduce the header size.</t>

<t><xref target="I-D.toutain-lpwan-ipv6-static-context-hc"/> defines a header compression
   mechanism for LPWAN network based on a static context. The context is
   said static since the element values composing the context are not
   learned during the packet exchanges but are previously defined.  The
   context(s) is(are) known by both ends before transmission.</t>

<t>A context is composed of a set of rules (contexts) that are referenced by Rule IDs 
   (identifiers).  A rule contains an ordered list of the header fields containing à field ID (FID) 
   and its position when repeated, a direction indicator (DI) (upstream, downstream and bidirectional)
   and some associated Target Values (TV) which are expected in the message header. A Matching Operator (MO) is
   associated to each header field description. The rule is selected if all the MOs fit
   the TVs.  In that case, a Compression Decompression Function (CDF)
   associated to each field defines the link between the compressed and
   decompressed value for each of the header fields.</t>

<figure><artwork><![CDATA[
This document describes how the rules can be applied to CoAP flows. Compression of the 
CoAP header may be done in conjunction with the above layers or independantly.
]]></artwork></figure>

</section>
<section anchor="coap-compressing" title="CoAP Compressing">

<t>CoAP differs from IPv6 and UDP protocols on the following <vspace />
   aspects:</t>

<t><list style="symbols">
  <t>IPv6 and UDP are symmetrical protocols. The same fields are found in the
request and in
the response, only location in the header may vary (e.g. source and destination
fields). A CoAP request is different from  an response. For example, the URI-path
option is mandatory in the request and is not found in the response, request may contain
an Accept option and the response a Content-format option.  <vspace blankLines='1'/>
Even when a field is “symmetric” (i.e. found in both directions) the values carried are
different. For instance the Type field will contain a CON value in the request and a
ACK or RST value in the response. Exploiting the asymmetry in compression will allow to 
send no bit in the compressed request and a single bit in the answer. Same behavior can be 
applied to the CoAP Code field (O.OX code are present in the request and Y.ZZ in the answer).</t>
  <t>CoAP also obeys to the client/server paradigm and the compression rate can
be different if the request is issued from a LPWAN node or from an non LPWAN
device. For instance a Thing (ES) aware of LPWAN constraints can generate a 1 byte token, but
a regular CoAP client will certainly send a larger token to the Thing. SCHC compression
will not modify the values to offer a better compression rate. Nevertheless a proxy placed
before the compressor may change some field values to offer a better compression rate and 
maintain the necessary context for interoperability with existing CoAP implementations.</t>
  <t>In IPv6 and UDP header fields have a fixed size. In CoAP, Token size
may vary from 0 to 8 bytes, length is given by a field in the header. More
systematically, the CoAP options are described using the Type-Length-Value. 
When applying SCHC header compression.  <vspace blankLines='1'/>
By sending compressed field information following the rule order, SCHC offers a 
serialization/deserialization mechanism. Since a field exists to indicate the token
length there is no ambiguity. For options, the rule indicates also the expected options
found the int CoAP header. Therefore only the length is needed to recognise an option. 
The length will be send using the same CoAP encoding (size less than 12 are directly sent, 
higher values uses the escape mechanisms defined by <xref target="rfc7252"/>). Delta Type is omitted, 
the value will
be recovered by the decompressor. This reduce the option length of 4, 12 or 20 bits regarding
the orignial size of the delta type encoding in the option.</t>
  <t>In CoAP headers a field can be duplicated several times, for instances, elements 
of an URI (path or queries) or accepted 
formats. The position
defined in a rule, associated to a Field ID, can be used to identify the proper element.</t>
</list></t>

<!--
## Exploiting CoAP asymetry

Some bi-directional fields such as code or type may uses different values 

A LPWAN node can either be a client or a server and sometimes both.
   In the client mode, the LPWAN node sends request to a server and
   expects an answer or acknowledgements.  Acknowledgements can be at 2
   different levels:

* In the transport level, a CON message is acknowledged by an ACK message.
      A NON confirmable message is not acknowledged at all.


* In REST level, a REST request is acknowledged by an "error" code.
      The {{rfc7967}} defines an option to limit the number of
      acknowledgements.



Note that acknowledgement can be optimized and a REST level acknowledgement
can be used as a transport level acknowledgement.

A rule includes also a Direction
   Indicator (DI) which may be used to distinguish between the upstream and the downstream 
   direction. CoAP compression may benefit of this since it is not mandatory to include
   value that are sent in that direction. For instance the values expected in the type field
   are different in both directions.



## CoAP header field analysis

CoAP header format defines the following fields:

* version (2 bits): 

* type (2 bits). It defines the type of the transport messages, 4
      values are defined, regarding the type of exchange. 
      
      For acknowledged message 
      it can be
      reduced to 0 or 1 bit using a matching-list if the direction is taken into account. 
      
      For non acknowledged
      messages this field can be elided.

* token length (4 bits).  The standard allows up to 8 bytes for a
      token.  If a fixed token size is chosen, then this field can
      be elided.  If some variation in length are needed then 1 or 2
      bits could be enough for most of LPWAN applications.

* code (8 bits).  This field codes the request and the response
      values. In CoAP these values are represented in a more compact way 
      then the coding used in
      HTTP, but the coding is not optimal.

* message id (16 bits). This value of this header field is used to acknowledge CON
  frames. The size of this field is computed to allow the anticipation
  (how many frames can be sent without acknowledgement). When a value
  is used, the {{rfc7252}} defines the time before it can be reused
  without ambiguities. This size defined may be too large for a LPWAN node
  sending or receiving few messages a day.

* Token (0 to 8 bytes). Token header field is used to identify active flows. 
  Regarding the usage for LPWAN 
  (stability  in time and limited number), a short token (1 Byte or less) can be
  enough.

* options are coded using delta-TLV. The delta-T depends on previous values,
  length is encoded inside the option. The {{rfc7252}} distinguishes
  repeatable options that can appear several times in the header.
  Among them we can distinguish:

  * list options which appear several time in the header but are exclusive such
    as the Accept option.

  * cumulative options which appear several times in the header but are part of
    a more generic value such as Uri-Path and Uri-Query. In that case, some elements
    may not change during the Thing lifetime and other may change at each request. 
    For instance CoMi {{I-D.ietf-core-comi}} defines the following path /c/X6?k="eth0", 
    where the first path element "c" does not change, the second element can vary
    over time with a different length (it represents the base64 enconding of a SID) and
    the query string can also vary over time. 

  For a given flow some value options are stable through time. Observe,
  ETag, If-Match, If-None-Match and Size varies in each message. 


The CoAP protocol must not be altered by the compression/decompression phase,
but if no semantic is attributed to a value, it may be changed during this
phase. For instance, the compression phase may reduce the size of a token
but must maintain its unicity. The decompressor will not be able to restore
the original value but the behavior will remain the same. If no special semantic
is assigned to the token, this will be transparent. If a special semantic
is assigned to the token, its compression may not be possible.


#SCHC rules for CoAP header compression

This draft refines the rules definition by adding the direction of the message, 
from the Thing point of view (uplink, downlink or bidirectional). It does not 
introduce new Machting Operator or new Compression Decompression Function, but add
some possibility to check one particular element when  several of them are
 present at the  same time.

A rule can contain CoAP and IPv6/UDP entries. In that case, IPv6/UDP entries are
tagged bidirectional.

## Directional Rules

By default, an entry in a rule is bidirectional which means that it can be applied
either on the uplink or downlink headers. By specifying the direction, the LC will
take into account  the specific  field only if the direction match. 

If the Thing is a client, the URI-Path option is only present on request and not 
on the response. Therefore, the exact matching principle to select a rule cannot apply.

Some options are marked unidirectional, the value (uplink or downlink) depends of the 
scenario. A Uri-Path option will be marked uplink if the Thing acts as a client and downlink
if the Thing acts as a server. If the Thing acts both as client and server, two different
rules will be defined.


## Matching Operator {#URI-Example}


-->

</section>
<section anchor="compression-of-coap-header-fields" title="Compression of CoAP header fields">

<t>This section discusses of the compression of the different CoAP header fields. These are just
examples. The compression should take into account the nature of the traffic and not 
only the field values. Next chapter will define some compression rules for some common 
exchanges.</t>

<section anchor="coap-version-field-2-bits" title="CoAP version field (2 bits)">

<t>This field is bidirectional and can be elided during the SCHC compression, since it always
contains  the same value. It appears only in first position.</t>

<figure><artwork><![CDATA[
FID      Pos    DI    TV              MO             CDF
ver      1      bi    1               equal          not-sent
]]></artwork></figure>

</section>
<section anchor="coap-type-field" title="CoAP type field">

<t>This field can be managed bidirectionally or unidirectionally.Several strategies can be 
applied to this field regarding the values used:</t>

<t><list style="symbols">
  <t>If the ES is a client or a Server and non confirmable message are used, the transmission
of the Type field can be avoided:  <list style="symbols">
      <t>Pos is always 1,</t>
      <t>DI can either be “uplink” if the ES is a CoAP client or “downlink” if the ES 
 is a CoAP server, or “bidirectional”</t>
      <t>TV is set to the  value,</t>
      <t>MO is set to “equal”</t>
      <t>CDF is set to “not-sent”.</t>
    </list></t>
</list></t>

<figure><artwork><![CDATA[
FID     Pos    DI    TV              MO             CDF
type    1      bi    NON             equal          not-sent
]]></artwork></figure>

<t><list style="symbols">
  <t>If the ES is either a client or a Server and confirmable message are used, the 
DI can be used to elide the type on the request and compress it to 1 bit on the response. 
The example above shows the rule for a ES acting as a client, directions need to be 
reversed for a ES acting as a server.</t>
</list></t>

<figure><artwork><![CDATA[
FID     Pos    DI    TV              MO             CDF
type    1      up    CON             equal          not-sent
type    1      dw    {0:ACK, 1:RST}  match-mapping  mapping-sent
]]></artwork></figure>

<t><list style="symbols">
  <t>Otherwise if the ES is acting simultaneously as a client and a server and the rule handle
these two traffics, Type field must be sent uncompressed.</t>
</list></t>

<figure><artwork><![CDATA[
FID     Pos    DI    TV              MO             CDF
type    1      bi                    ignore         send-value
]]></artwork></figure>

</section>
<section anchor="coap-token-length-field" title="CoAP token length field">

<t>This field is bi-directional.</t>

<t>Several strategies can be applied to this field regarding the values:</t>

<t><list style="symbols">
  <t>no token or a wellknown length, the transmission can be avoided. A special care must be 
taken, if CON messages are acknowledged with an empty ACK message. In that case the token
is not always present.</t>
</list></t>

<figure><artwork><![CDATA[
FID     Pos    DI    TV              MO             CDF
TKL     1      bi    value           ignore         send-value
]]></artwork></figure>

<t><list style="symbols">
  <t>If the length is changing from one message to an other, the Token Length field must be 
sent. If the Token length can be limited, then only the least significant bits have 
to be sent. The example below allows values between 0 and 3.</t>
</list></t>

<figure><artwork><![CDATA[
FID    Pos    DI    TV              MO             CDF
TKL    1      bi    0x0             MSB(2)         LSB(2)
]]></artwork></figure>

<t><list style="symbols">
  <t>otherwise the field value has to be sent.</t>
</list></t>

<figure><artwork><![CDATA[
FID     Pos    DI    TV              MO             CDF
TKL     1      bi                    ignore         value-sent
]]></artwork></figure>

</section>
<section anchor="coap-code-field" title="CoAP code field">

<t>This field is bidirectional, but compression can be enhanced using DI.</t>

<t>The CoAP Code field defines a tricky way to 
ensure compatibility with
HTTP values.  Nevertheless only 21 values are defined by <xref target="rfc7252"/>
compared to the 255 possible values.</t>

<figure title="Example of CoAP code mapping" anchor="Fig--example-code-mapping"><artwork><![CDATA[
               +------+------------------------------+-----------+
               | 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     |
               +------+------------------------------+-----------+

]]></artwork></figure>

<t><xref target="Fig--example-code-mapping"/> gives a possible mapping, it can be changed 
to add new codes or reduced if some values are never used by both ends. 
It could efficiently be coded on 5 bits.</t>

<t>Even if the number of code can be increase 
with other RFC, implementations may use a limited number of values, which can
help to reduce the number of bits sent on the LPWAN.</t>

<t>The number of code may vary over time, some new codes
may be introduced or some applications use a limited number of values.</t>

<t>The client and the server do not use the 
same values. This asymmetry can be exploited to reduce the size sent on 
the LPWAN.</t>

<t>The field can be treated differently in upstream than in downstream.
If the Thing is a client an entry can be set on the uplink message with a
code matching for 0.0X values and another for downlink values for Y.ZZ
codes.  It is the opposite if the thing is a server.</t>

<t>If the ES always sends or receives requests with the same method, the Code
field can be elided. The entry below shows a rule for a client sending only 
GET request.</t>

<figure><artwork><![CDATA[
FID     Pos    DI    TV              MO             CDF
code    1      up    GET             equal          not-sent
]]></artwork></figure>

<t>If the client may send different methods, a matching-list can be applied. For
table <xref target="Fig--example-code-mapping"/>, 3 bits are necessary, but it could be less 
if fewer methods are used. Example below gives an example where the ES is a server
and receives only GET and POST requests.</t>

<figure><artwork><![CDATA[
FID     Pos    DI    TV              MO             CDF
code    1      dw    {0:0.01, 1:0.02}match-mapping  mapping-sent
]]></artwork></figure>

<t>The same approach can be applied to responses.</t>

</section>
<section anchor="coap-message-id-field" title="CoAP Message ID field">

<t>This field is bidirectional.</t>

<t>Message ID is used for two purposes:</t>

<t><list style="symbols">
  <t>To acknowledge a CON message with an ACK.</t>
  <t>To avoid duplicate messages.</t>
</list></t>

<t>In LPWAN, since a message can be received by several radio gateway, some 
LPWAN technologies include a sequence number in L2 to avoid duplicate frames. Therefore
if the message does not need to be acknowledged (NON or RST message), the Message
ID field can be avoided.</t>

<figure><artwork><![CDATA[
FID     Pos    DI    TV              MO             CDF
Mid     1      bi                    ignore         not-sent
]]></artwork></figure>

<t>The decompressor must generate a value.</t>

<t>[[Note; check id this field is not used by OSCOAP .]]</t>

<t>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.</t>

<figure><artwork><![CDATA[
FID     Pos    DI    TV              MO             CDF
Mid     1      bi    0x0000          MSB(12)        LSB(4)
]]></artwork></figure>

<t>Otherwise if no compression is possible, the field has to be sent</t>

<figure><artwork><![CDATA[
FID     Pos    DI    TV              MO             CDF
Mid     1      bi                    ignore         value-sent
]]></artwork></figure>

</section>
<section anchor="coap-token-field" title="CoAP Token field">

<t>This field is bi-directional.</t>

<t>Token is used to identify transactions and varies from one
   transaction to another.  Therefore, it is usually necessary to send
   the value of the token field on the LPWAN network.  The optimization will occur 
   by using small
   values.</t>

<t>Common CoAP implementations may generate large tokens, even if shorter tokens could 
be used regarding the LPWAN characteristics. A proxy may be needed to reduce 
the size of the token before compression.</t>

<t>The size of the compress token sent is known by a combination of the Token Length field
and the rule entry. For instance, with the entry below:</t>

<figure><artwork><![CDATA[
FID     Pos    DI    TV              MO             CDF
tkl     1      bi    2               equal          not-sent     
token   1      bi    0x00            MSB(12)        LSB(4)
]]></artwork></figure>

<t>The uncompressed token is 2 bytes long, but the compressed size will be 4 bits.</t>

</section>
</section>
<section anchor="coap-options" title="CoAP options">

<section anchor="coap-option-content-format-field" title="CoAP option Content-format field.">

<t>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.</t>

<t>If single value is expected by the client, the TV contains that value and MO is set to
“equal” and the CDF is set to “not-sent”. The examples below describe the rules for an
ES acting as a server.</t>

<figure><artwork><![CDATA[
FID     Pos    DI    TV              MO             CDF
content 1      up    value           equal          not-sent
]]></artwork></figure>

<t>If several possible value are expected by the client, a matching-list can be used.</t>

<figure><artwork><![CDATA[
FID     Pos    DI    TV              MO             CDF
content 1      up    {0:50,1:41}     match-mapping  mapping-sent
]]></artwork></figure>

<t>Otherwise the value can be sent.The value-sent CDF in the compressor do not send the 
option type and the decompressor reconstruct it regarding the position in the rule.</t>

<figure><artwork><![CDATA[
FID     Pos    DI    TV              MO             CDF
content 1      up                    ignore         value-sent
]]></artwork></figure>

</section>
<section anchor="coap-option-accept-field" title="CoAP option Accept field">

<t>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.</t>

<t>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. Since the order in which the Accept value are sent, the position order 
can be modified. The rule below</t>

<figure><artwork><![CDATA[
FID     Pos    DI    TV              MO             CDF
accept  1      up    41              egal           not-sent
accept  2      up    50              egal           not-sent
]]></artwork></figure>

<t>will be selected only if two accept options are in the CoAP header if this order.</t>

<t>The rule below:</t>

<figure><artwork><![CDATA[
FID     Pos    DI    TV              MO             CDF
accept  0      up    41              egal           not-sent
accept  0      up    50              egal           not-sent
]]></artwork></figure>

<t>will accept a-only CoAP messages with 2 accept options, but the order will not influence
the rule selection. The decompression will reconstruct the header regarding the rule order.</t>

<t>Otherwise a matching-list can be applied to the different values, in that case the order 
is important to recover the appropriate value and the position must be clearly indicate.</t>

<figure><artwork><![CDATA[
FID     Pos    DI    TV              MO             CDF
accept 1      up    {0:50,1:41}     match-mapping  mapping-sent
accept 2      up    {0:50,1:61}     match-mapping  mapping-sent
accept 3      up    {0:61,1:71}     match-mapping  mapping-sent
]]></artwork></figure>

<t>Finally, the option  can be  explicitly sent.</t>

<figure><artwork><![CDATA[
FID     Pos    DI    TV              MO             CDF
accept  1      up                    ignore         value-sent
]]></artwork></figure>

</section>
<section anchor="coap-option-max-age-field-coap-option-uri-host-and-uri-port-fields" title="CoAP option Max-Age field, CoAP option Uri-Host and Uri-Port fields">

<t>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.</t>

<t>If the duration is known by both ends, value can be elided on the LPWAN.</t>

<t>A matching list can be used if some wellknown values are defined.</t>

<t>Otherwise the option length and value can be sent on the LPWAN.</t>

<t>[[note: we can reduce (or create a new option) the unit to minute, 
second is small for LPWAN ]]</t>

</section>
</section>
<section anchor="coap-option-uri-path-and-uri-query-fields" title="CoAP option Uri-Path and Uri-Query fields">

<t>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.</t>

<t>The Matching Operator behavior has not changed, but the value must take a position value, 
if the entry is repeated :</t>

<figure title="Position entry." anchor="Fig-MOposition"><artwork><![CDATA[
FID       Pos    DI    TV              MO             CDF
URI-Path  1      up    foo             equal          not-sent
URI-Path  2      up    bar             equal          not-sent
]]></artwork></figure>

<t>For instance, the  rule <xref target="Fig-MOposition"/> matches with /foo/bar, but not /bar/foo.</t>

<t>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 with length and value.</t>

<t>For instance for a CoMi path /c/X6?k=”eth0” the rule can be set to:</t>

<figure title="CoMi URI compression" anchor="Fig-CoMicompress"><artwork><![CDATA[
FID       Pos    DI    TV              MO             CDF
URI-Path  1      up    c               equal          not-sent
URI-Path  2      up                    ignore         value-sent
URI-Query 1      up    k=              MSB (16)       LSB 
]]></artwork></figure>

<t><xref target="Fig-CoMicompress"/> 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) followed by the query option 
(i.e. 0x05 “eth0”).</t>

<t>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.</t>

<figure title="complex path example" anchor="Fig--complex-path"><artwork><![CDATA[
FID       Pos    DI    TV              MO             CDF
URI-Path  1      up    {0:"/c/c",      equal          not-sent
                        1:"/c/d"
URI-Path  3      up                    ignore         value-sent
URI-Query 1      up    k=              MSB (16)       LSB 
]]></artwork></figure>

<t>For instance, the following Path /foo/bar/variable/stable can leads to the rule defined 
<xref target="Fig--complex-path"/>.</t>

<section anchor="coap-option-proxy-uri-and-proxy-scheme-fields" title="CoAP option Proxy-URI and Proxy-Scheme fields">

<t>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.</t>

<t>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.</t>

<t>Otherwise the TV is set to the value, MO is set to “equal” and CDF is set to “not-sent”</t>

</section>
<section anchor="coap-option-etag-if-match-if-none-match-location-path-and-location-query-fields" title="CoAP option ETag, If-Match, If-None-Match, Location-Path and Location-Query fields">

<t>These fields are unidirectional.</t>

<t>These fields values cannot be stored in a rule entry. They must always be sent with the
request.</t>

<t>[[Can include OSCOAP Object security in that category ]]</t>

</section>
</section>
<section anchor="other-rfcs" title="Other RFCs">

<section anchor="block" title="Block">

<t>Block option should be avoided in LPWAN. The minimum size of 16 bytes can be incompatible
with some LPWAN technologies.</t>

<t>[[Note: do we recommand LPWAN fragmentation since the smallest value of 16 is too big?]]</t>

</section>
<section anchor="observe" title="Observe">

<t><xref target="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.</t>

<t>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.</t>

</section>
<section anchor="no-response" title="No-Response">

<t><xref target="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”.</t>

<t>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.</t>

</section>
</section>
<section anchor="protocol-analysis" title="Protocol analysis">

</section>
<section anchor="examples-of-coap-header-compression" title="Examples of CoAP header compression">

<section anchor="mandatory-header-with-con-message" title="Mandatory header with CON message">

<t>In this first scenario, the LPWAN compressor receives from outside client
a POST message, which is immediately acknowledged by the Thing. For this simple
scenario, the rules are described <xref target="Fig-CoAP-header-1"/>.</t>

<figure title="CoAP Context to compress header without token" anchor="Fig-CoAP-header-1"><artwork><![CDATA[
 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 |                |
+-------------+------+---------+-------------+-----+----------------+
]]></artwork></figure>

<t>The version  and Token Length fields are elided. Code has shrunk to 5 bits
using the matching list (as the one given <xref target="Fig--example-code-mapping"/>: 0.01 
is 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.</t>

<t><xref target="Fig-CoAP-3"/> shows the time diagram of the exchange. A LPWAN Application Server sends
a CON message. Compression reduces the header sending only the Type, a mapped
code and the least 9 significant bits of Message ID. The receiver decompresses
the header. .</t>

<t>The CON message is a request, therefore the LC process to a dynamic
   mapping.  When the ES receives the ACK message, this will not
   initiate locally a  message ID mapping since it is a response.
   The LC receives the ACK and uncompressed it to restore the original
   value.  Dynamic Mapping context lifetime follows the same rules as
   message ID duration.</t>

<figure title="Compression with global addresses" anchor="Fig-CoAP-3"><artwork><![CDATA[
                   End System               LPWA LC
                        |                     |
                        |        rule id=1    |<----------------------
                        |<--------------------| +-+-+--+----+--------+
  <-------------------- |  TTCC CCCM MMMM MMMM| |1|0| 4|0.01| 0x0034 |
 +-+-+--+----+--------+ |  0000 0010 0011 0100| |  0xb4   p    a   t |
 |1|0| 1|0.01| 0x0034 | |                     | |  h   |
 |  0xb4   p    a   t | |                     | +------+
 |  h   |               |                     |     
 +------+               |                     |   
                        |                     |    
                        |                     |    
----------------------->|       rule id=1     |
+-+-+--+----+--------+  |-------------------->|
|1|2| 0|2.05| 0x0034 |  |  TTCC CCCM MMMM MMMM|------------------------>
+-+-+--+----+--------+  |  1001 1000 0011 0100| +-+-+--+----+--------+
                        |                     | |1|2| 0|2.05| 0x0034 |
                        v                     v +-+-+--+----+--------+

]]></artwork></figure>

<t>The message can be further optimized by setting some fields unidirectional, as
described in <xref target="Fig-CoAP-header-1-direc"/>. 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 
 <xref target="Fig--example-code-mapping"/>)</t>

<figure title="CoAP Context to compress header without token" anchor="Fig-CoAP-header-1-direc"><artwork><![CDATA[
 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|mapping-sent |dw |CCCC C          |
|CoAP Code    | ML3  |match-map|mapping-sent |up |CCCC C          |
|CoAP MID     | 0000 |MSB(5)   |LSB(11)      |bi |       M-ID     |
|CoAP Uri-Path| path |equal 1  |not-sent     |dw |                |
+-------------+------+---------+-------------+---+----------------+

ML1 = {CON : 0, ACK:1} ML2 = {POST:0, 2.04:1, 0.00:3}

]]></artwork></figure>

</section>
<section anchor="complete-exchange" title="Complete exchange">

<t>In that example, the Thing is using CoMi and sends queries for 2 SID.</t>

<figure><artwork><![CDATA[
  CON 
  MID=0x0012     |                         |
  POST           |                         |   
  Accept X       |                         | 
  /c/k=AS        |------------------------>|
                 |                         |
                 |                         |
                 |<------------------------|  ACK MID=0x0012
                 |                         |  0.00
                 |                         |
                 |                         |
                 |<------------------------|   CON
                 |                         |   MID=0X0034
                 |                         |   Content-Format X
ACK MID=0x0034   |------------------------>|
0.00           

]]></artwork></figure>

<figure><artwork><![CDATA[
 rule id 3
+-------------+------+---------+-------------+---+----------------+
| Field       |TV    |MO       |CDF          |dir| Sent           |
+=============+======+=========+=============+===+================+
|CoAP version | 01   |equal    |not-sent     |bi |                |
|CoAP Type    | CON  |equal    |not-sent     |up |                |
|CoAP Type    | ACK  |equal    |not-sent     |dw |                |
|CoAP TKL     | 1    |equal    |not-sent     |bi |                |
|CoAP Code    | POST |equal    |not-sent     |up |                |
|CoAP Code    | 0.00 |equal    |not-sent     |dw |                |
|CoAP MID     | 0000 |MSB(8)   |LSB          |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 |                |
+-------------+------+---------+-------------+---+----------------+

 rule id 4
+-------------+------+---------+-------------+---+----------------+
| 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     | 1    |equal    |not-sent     |bi |                |
|CoAP Code    | 2.05 |equal    |not-sent     |dw |                |
|CoAP Code    | 0.00 |equal    |not-sent     |up |                |
|CoAP MID     | 0000 |MSB(8)   |LSB          |bi |MMMMMMMM        |
|CoAP Token   |      |ignore   |send-value   |dw |TTTTTTTT        |
|COAP Accept  | X    |equal    |not-sent     |dw |                |
+-------------+------+---------+-------------+---+----------------+


alternative rule:

 rule id 4
+-------------+------+---------+-------------+---+----------------+
| Field       |TV    |MO       |CDF          |dir| Sent           |
+=============+======+=========+=============+===+================+
|CoAP version | 01   |equal    |not-sent     |bi |                |
|CoAP Type    | ML1  |match-map|match-sent   |bi |t               |
|CoAP TKL     | 1    |equal    |not-sent     |bi |                |
|CoAP Code    | ML2  |match-map|match-sent   |up | cc             |
|CoAP Code    | ML3  |match-map|match-sent   |dw | cc             |
|CoAP MID     | 0000 |MSB(8)   |LSB          |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}

]]></artwork></figure>

</section>
</section>


  </middle>

  <back>

    <references title='Normative References'>





<reference  anchor="rfc7252" target='https://www.rfc-editor.org/info/rfc7252'>
<front>
<title>The Constrained Application Protocol (CoAP)</title>
<author initials='Z.' surname='Shelby' fullname='Z. Shelby'><organization /></author>
<author initials='K.' surname='Hartke' fullname='K. Hartke'><organization /></author>
<author initials='C.' surname='Bormann' fullname='C. Bormann'><organization /></author>
<date year='2014' month='June' />
<abstract><t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks.  The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s.  The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t><t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types.  CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t></abstract>
</front>
<seriesInfo name='RFC' value='7252'/>
<seriesInfo name='DOI' value='10.17487/RFC7252'/>
</reference>



<reference  anchor="rfc7967" target='https://www.rfc-editor.org/info/rfc7967'>
<front>
<title>Constrained Application Protocol (CoAP) Option for No Server Response</title>
<author initials='A.' surname='Bhattacharyya' fullname='A. Bhattacharyya'><organization /></author>
<author initials='S.' surname='Bandyopadhyay' fullname='S. Bandyopadhyay'><organization /></author>
<author initials='A.' surname='Pal' fullname='A. Pal'><organization /></author>
<author initials='T.' surname='Bose' fullname='T. Bose'><organization /></author>
<date year='2016' month='August' />
<abstract><t>There can be machine-to-machine (M2M) scenarios where server responses to client requests are redundant.  This kind of open-loop exchange (with no response path from the server to the client) may be desired to minimize resource consumption in constrained systems while updating many resources simultaneously or performing high-frequency updates. CoAP already provides Non-confirmable (NON) messages that are not acknowledged by the recipient.  However, the request/response semantics still require the server to respond with a status code indicating &quot;the result of the attempt to       understand and satisfy the request&quot;, per RFC 7252.</t><t>This specification introduces a CoAP option called 'No-Response'. Using this option, the client can explicitly express to the server its disinterest in all responses against the particular request. This option also provides granular control to enable expression of disinterest to a particular response class or a combination of response classes.  The server MAY decide to suppress the response by not transmitting it back to the client according to the value of the No-Response option in the request.  This option may be effective for both unicast and multicast requests.  This document also discusses a few examples of applications that benefit from this option.</t></abstract>
</front>
<seriesInfo name='RFC' value='7967'/>
<seriesInfo name='DOI' value='10.17487/RFC7967'/>
</reference>



<reference  anchor="rfc7641" target='https://www.rfc-editor.org/info/rfc7641'>
<front>
<title>Observing Resources in the Constrained Application Protocol (CoAP)</title>
<author initials='K.' surname='Hartke' fullname='K. Hartke'><organization /></author>
<date year='2015' month='September' />
<abstract><t>The Constrained Application Protocol (CoAP) is a RESTful application protocol for constrained nodes and networks.  The state of a resource on a CoAP server can change over time.  This document specifies a simple protocol extension for CoAP that enables CoAP clients to &quot;observe&quot; resources, i.e., to retrieve a representation of a resource and keep this representation updated by the server over a period of time.  The protocol follows a best-effort approach for sending new representations to clients and provides eventual consistency between the state observed by each client and the actual resource state at the server.</t></abstract>
</front>
<seriesInfo name='RFC' value='7641'/>
<seriesInfo name='DOI' value='10.17487/RFC7641'/>
</reference>



<reference anchor="I-D.toutain-lpwan-ipv6-static-context-hc">
<front>
<title>LPWAN Static Context Header Compression (SCHC) for IPv6 and UDP</title>

<author initials='A' surname='Minaburo' fullname='Ana Minaburo'>
    <organization />
</author>

<author initials='L' surname='Toutain' fullname='Laurent Toutain'>
    <organization />
</author>

<date month='September' day='23' year='2016' />

<abstract><t>This document describes a header compression scheme for IPv6, IPv6/ UDP based on static contexts.  This technique is especially tailored for LPWA networks and could be extended to other protocol stacks.  During the IETF history several compression mechanisms have been proposed.  First mechanisms, such as RoHC, are using a context to store header field values and send smaller incremental differences on the link.  Values in the context evolve dynamically with information contained in the compressed header.  The challenge is to maintain sender's and receiver's contexts synchronized even with packet losses.  Based on the fact that IPv6 contains only static fields, 6LoWPAN developed an efficient context-free compression mechanisms, allowing better flexibility and performance.  The Static Context Header Compression (SCHC) combines the advantages of RoHC context which offers a great level of flexibility in the processing of fields, and 6LoWPAN behavior to elide fields that are known from the other side.  Static context means that values in the context field do not change during the transmission, avoiding complex resynchronization mechanisms, incompatible with LPWA characteristics. In most of the cases, IPv6/UDP headers are reduced to a small identifier.  This document focuses on IPv6/UDP headers compression, but the mechanism can be applied to other protocols such as CoAP.  It will be described in a separate document.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-toutain-lpwan-ipv6-static-context-hc-00' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-toutain-lpwan-ipv6-static-context-hc-00.txt' />
</reference>




    </references>




  </back>

<!-- ##markdown-source:
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
V3u5iwiQAAA=

-->

</rfc>

