< draft-toutain-6lpwa-ipv6-static-context-hc-00.txt   draft-toutain-6lpwa-ipv6-static-context-hc-01.txt >
Network Working Group A. Minaburo Network Working Group A. Minaburo
Internet-Draft Acklio Internet-Draft Acklio
Intended status: Informational L. Toutain Intended status: Informational L. Toutain
Expires: December 8, 2016 Institut MINES TELECOM ; TELECOM Bretagne Expires: December 23, 2016 Institut MINES TELECOM ; TELECOM Bretagne
June 6, 2016 June 21, 2016
6LPWA Static Context Header Compression (SCHC) for IPV6 and UDP 6LPWA Static Context Header Compression (SCHC) for IPV6 and UDP
draft-toutain-6lpwa-ipv6-static-context-hc-00 draft-toutain-6lpwa-ipv6-static-context-hc-01
Abstract Abstract
This document describes a header compression scheme for IPv6, IPv6/ This document describes a header compression scheme for IPv6, IPv6/
UDP based on static contexts. This technique is especially tailored UDP based on static contexts. This technique is especially tailored
for LPWA networks and could be extended to other protocol stacks. for LPWA networks and could be extended to other protocol stacks.
During the IETF history several compression mechanisms have been During the IETF history several compression mechanisms have been
proposed. First mechanisms, such as RoHC, are using a context to proposed. First mechanisms, such as RoHC, are using a context to
store header field values and send smaller incremental differences on store header field values and send smaller incremental differences on
the link. Values in the context evolve dynamically with information the link. Values in the context evolve dynamically with information
contained in the compressed header. The challenge is to maintain contained in the compressed header. The challenge is to maintain
sender's and receiver's contexts synchronized even with packet sender's and receiver's contexts synchronized even with packet
losses. Based on the fact that IPv6 contains only static fields, losses. Based on the fact that IPv6 contains only static fields,
6LoWPAN developed an efficient context-free compression mechanisms, 6LoWPAN developed an efficient context-free compression mechanisms,
allowing better flexibility and performance. allowing better flexibility and performance.
The Static Context Header Compression (SCHC) combines the advantages The Static Context Header Compression (SCHC) combines the advantages
of RoHC formal notation, which offers a great level of flexibility in of RoHC context which offers a great level of flexibility in the
the processing of fields, and 6LoWPAN behavior to elide fields that processing of fields, and 6LoWPAN behavior to elide fields that are
are known from the other side. Static context means that values in known from the other side. Static context means that values in the
the context field do not change during the transmission, avoiding context field do not change during the transmission, avoiding complex
complex resynchronization mechanisms, incompatible with LPWA resynchronization mechanisms, incompatible with LPWA characteristics.
characteristics. In most of the cases, IPv6/UDP/CoAP headers are In most of the cases, IPv6/UDP headers are reduced to a small
reduced to a small context identifier. 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.
Status of This Memo Status of This Memo
This Internet-Draft is submitted in full conformance with the This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79. provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/. Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on December 8, 2016. This Internet-Draft will expire on December 23, 2016.
Copyright Notice Copyright Notice
Copyright (c) 2016 IETF Trust and the persons identified as the Copyright (c) 2016 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of (http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License. described in the Simplified BSD License.
1. Introduction 1. Introduction
Headers compression is mandatory to bring the internet protocols to Headers compression is mandatory to bring the internet protocols to
the node within a LPWA network. 6LoWPAN and its evolutions do not the node within a LPWA network [I-D.minaburo-lp-wan-gap-analysis].
fulfil the drastic constraints imposed by the radio technology
[I-D.minaburo-lp-wan-gap-analysis].
Nevertheless, LPWA networks offer good properties for an efficient Nevertheless, LPWA networks offer good properties for an efficient
header compression: header compression:
o Topology is star oriented. For the needs of this draft, the o Topology is star oriented, therefore all the packets follows the
architecture can be summarized to End-Systems (ES) exchanging same path. For the needs of this draft, the architecture can be
information with a single LPWA Compressor (LC). In most of the summarized to End-Systems (ES) exchanging information with a
cases, End Systems and LC form a star topology. single LPWA Compressor (LC). In most of the cases, End Systems
and LC form a star topology. ESs and LC maintain a context for
compression.
o Traffic flows are mostly deterministic, since End-Systems embed o Traffic flows are mostly deterministic, since End-Systems embed
built-in applications. Contrary to computers or smartphones, new built-in applications. Contrary to computers or smartphones, new
applications cannot be easily installed. applications cannot be easily installed.
First mechanisms such as RoHC use a context to store header field First mechanisms such as RoHC use a context to store header field
values and send smaller incremental differences on the link. The values and send smaller incremental differences on the link. The
first version of RoHC targeted IP/UDP/RTP stack. RoHCv2 extends the first version of RoHC targeted IP/UDP/RTP stack. RoHCv2 extends the
principle to any protocol and introduces a formal notation [RFC4997] principle to any protocol and introduces a formal notation [RFC4997]
describing the header and associating compression functions to each describing the header and associating compression functions to each
skipping to change at page 2, line 50 skipping to change at page 3, line 4
built-in applications. Contrary to computers or smartphones, new built-in applications. Contrary to computers or smartphones, new
applications cannot be easily installed. applications cannot be easily installed.
First mechanisms such as RoHC use a context to store header field First mechanisms such as RoHC use a context to store header field
values and send smaller incremental differences on the link. The values and send smaller incremental differences on the link. The
first version of RoHC targeted IP/UDP/RTP stack. RoHCv2 extends the first version of RoHC targeted IP/UDP/RTP stack. RoHCv2 extends the
principle to any protocol and introduces a formal notation [RFC4997] principle to any protocol and introduces a formal notation [RFC4997]
describing the header and associating compression functions to each describing the header and associating compression functions to each
field. To be efficient the sender and the receiver must check that field. To be efficient the sender and the receiver must check that
the context remains synchronized (i.e. contains the same values). the context remains synchronized (i.e. contains the same values).
Context synchronization imposes to periodically send a full header or Context synchronization imposes to periodically send a full header or
at least dynamic fields. If fully compressed, the header can be at least dynamic fields. If fully compressed, the header can be
compatible with LPWA constraints. However, the first exchanges or a compatible with LPWA constraints. However, the first exchanges or
context resynchronisation impose to send uncompressed headers, which context resynchronisations impose to send uncompressed headers, which
may be bigger than the original one. This will force the use of may be bigger than the original one. This will force the use of
inefficient fragmentation mechanisms. For some LPWA technologies, inefficient fragmentation mechanisms. For some LPWA technologies,
duty cycle limits can also delay the resynchronization. Figure 1 duty cycle limits can also delay the resynchronization. Figure 1
illustrates this behavior. illustrates this behavior.
sync sync
^ +-+ sync sync ^ ^ +-+ sync sync ^
| IPv6 | | +-+ +-+ | IPv6 | IPv6 | | +-+ +-+ | IPv6
v | | | | | | v v | | | | | | v
+------------+ | +-+-+ | | | | +------------+ +------------+ | +-+-+ | | | | +------------+
skipping to change at page 3, line 29 skipping to change at page 3, line 32
| | x| | +-+-+-+-+-+-+-+-+-+-+-+-+ | | x| | | | x| | +-+-+-+-+-+-+-+-+-+-+-+-+ | | x| |
| | t| | <----------------------------> | | t| | | | t| | <----------------------------> | | t| |
| +--+ | | +--+ | | +--+ | | +--+ |
+------------+ +------------+ +------------+ +------------+
Figure 1: RoHC Compressed Header size evolution. Figure 1: RoHC Compressed Header size evolution.
On the other hand, 6LoWPAN [RFC4944] is context-free based on the On the other hand, 6LoWPAN [RFC4944] is context-free based on the
fact that IPv6, its extensions or UDP headers do not contain fact that IPv6, its extensions or UDP headers do not contain
incremental fields. The compression mechanism described in [RFC6282] incremental fields. The compression mechanism described in [RFC6282]
is based on sending a 2-byte bitmap, which describe how the header is based on sending a 2-byte bitmap, which describes how the header
should be decompressed, either using some standard values or should be decompressed, either using some standard values or sending
information sent after this bitmap. [RFC6282] also allows for UDP information after this bitmap. [RFC6282] also allows for UDP
compression. compression.
In the best case, when Hop limit is a standard value, flow label, In the best case, when Hop limit is a standard value, flow label,
DiffServ fields are set to 0 and Link Local addresses are used over a DiffServ fields are set to 0 and Link Local addresses are used over a
single hop network, the 6LoWPAN compressed header is reduced to 4 single hop network, the 6LoWPAN compressed header is reduced to 4
bytes. This compression ratio is possible because the IID are bytes. This compression ratio is possible because the IID are
derived from the MAC addresses and the link local prefix is known derived from the MAC addresses and the link local prefix is known
from both sides. In that case, the IPv6 compression is 4 bytes and from both sides. In that case, the IPv6 compression is 4 bytes and
UDP compression is 2 bytes, which fills half of the payload of a UDP compression is 2 bytes, which fills half of the payload of a
SIGFOX frame, or more than 10% of a LoRaWAN payload (with spreading SIGFOX frame, or more than 10% of a LoRaWAN payload (with spreading
factor 12). factor 12).
The Static Context Header Compression (SCHC) combines the advantages The Static Context Header Compression (SCHC) combines the advantages
of RoHC formal notation, which offers a great level of flexibility in of RoHC context, which offers a great level of flexibility in the
the processing of fields, and 6LoWPAN behavior to elide fields that processing of fields, and 6LoWPAN behavior to elide fields that are
are known from the other side. Static context means that values in known from the other side. Static context means that values in the
the context field do not change during the transmission, avoiding context field do not change during the transmission, avoiding complex
complex resynchronization mechanisms, incompatible with LPWA resynchronization mechanisms, incompatible with LPWA characteristics.
characteristics. In most of the cases, IPv6/UDP/CoAP headers are In most of the cases, IPv6/UDP headers are reduced to a small context
reduced to a small context identifier. identifier.
2. Static Context Header Compression 2. Static Context Header Compression
Static Context Header Compression (SCHC) avoids context Static Context Header Compression (SCHC) avoids context
synchronization, which is the most bandwidth-consuming operation in synchronization, which is the most bandwidth-consuming operation in
RoHC. Based on the fact that the nature of data flows is highly RoHC. Based on the fact that the nature of data flows is highly
predictable in LPWA networks, a static context may be stored on the predictable in LPWA networks, a static context may be stored on the
End-System (ES). The other end, the LPWA Compressor (LC) can learn End-System (ES). The other end, the LPWA Compressor (LC) can learn
the context through a provisionning protocol during the the context through a provisionning protocol during the
identification phase. identification phase (for instance, as it learns the encryption key).
The context contains an ordered lists of rules. Each rule is
identified by a value, also called context identifier. If the layer
2 allows it, the context id can be carried in the layer 2 header.
Otherwise the context id is the first byte of the L2 payload. Being
at the boundary between Layer 2 and Layer 3, the context id is also
called a SHIM. Different ES will use the same SHIM to identify their
own context. An LC needs the ES MAC address to identify the
appropriate context in its memory.
Context rules will be used for several purposes:
o Flow compression: context rules contain a high-level description
of the headers' fields and associate a function to each of them.
o Flow decompression: the function associated to each field
indicates also the decompression behavior.
o Uncompressed flow selection: The information stored in the context
rule is also used to match incoming packets to check if the
compression rule can be applied. There is a strong relation
between filtering and decompression. For instance, a flow may be
defined as a set of values that correspond to a set of fields.
This flow is identified by a SHIM. A destination sharing the same
context is able to reconstruct the original header upon reception
of a given SHIM.
o Compressed flow selection: when receiving a compressed packet,
information in the context (typically the SHIM) will be used to
select the decompression rule in combination with the ES MAC
address.
o Packet filtering: LPWA can be easily subject to DoS attacks. If a
packet is not explicitly assigned to a specific context, then
incoming packets will be discarded.
3. Filtering functions
The compression/decompression mechanisms proposed in this Figure 2 is
a combinaison of 6LoWPAN principles, which are efficient in sending
only information what cannot be reconstructed at the other end, and
RoHCv2 which assigns compression and decompression functions to each
field. The use of a context avoids sending well-known information.
/--------------------+-----+-----+-------------+--------------------------\
| Function |Selec|Selec| Compression | Decompression |
| |comp |dec. | | |
+--------------------+-----+-----+-------------+--------------------------+
|ignore |no |no |elided |add value stored in ctxt |
|send-value |no |no |send value |build field from value |
|send-value-lbs |yes |no |send lsb |concatenation ctxt val+lsb|
|send-value-filter |no |yes |send value |elided |
|not-sent |yes |no |elided |add value stored in ctxt |
|just-check |yes |yes |nothing |nothing |
|compute-IPv6-length |no |no |elided |compute IPv6 length |
|compute-UDP-length |no |no |elided |compute UDP length |
|compute-UDP-checksum|no |no |elided |compute UDP checksum |
|ESiid-MAC |no |no |elided |build IID from L2 ES addr |
|LAiid-MAC |no |no |elided |build IID from L2 LA addr |
\--------------------+-----+-----+-------------+--------------------------/
Figure 2: Simplified Protocol Stack for LP-WAN
Figure 2 lists all the functions defined to compress and decompress a
field. The first column gives the function's name.
The second column describes the rule selection property of the
function. Selection determines if the compression rule can be
applied to a packet. A comparison is made between the value stored
in the context and the field's value. Generally it is an equality
between the field value and a associated context value, but functions
may define more complex matching rules. To succeed and apply the
compression/decompression rule, the comparisons of all header fields
marked as "yes" in this column must be true.
The third column indicates which function can be used to select the
appropriate rules for decompression. Typically it will be the SHIM
and the MAC address.
Fourth column outlines the compression process.
Last column outlines the decompression process.
As with 6LoWPAN, the compression process may produce some data, where The context contains an ordered list of rules. Each rule is a vector
fields that were not compressed (or were partially compressed) will of entries. Each entry is composed of a field descriptor, a
be sent in the order order of the original packet. Information added prescribed matching value, a matching rule for the compression side,
by the compression phase must be aligned on byte boundaries, but each a matching rule for the decompression side and a compression/
individual compression function may generate any size. decompression action. Contexts in the compressor and decompressor
are the same. A rule is identified by a rule identifier. If the
layer 2 allows it, the rule id can be carried in the layer 2 header.
Otherwise the rule id is located in the first byte of the L2 payload.
/--------------------+---------------------+----------------------------------------\ Being at the boundary between Layer 2 and Layer 3, the rule id will
| Field |Function | Behavior | also be called a shim id. Different ES will use the same shim id to
+--------------------+---------------------+----------------------------------------+ identify their own context. An LC may also use the ES device id to
|IPv6 version |ignore |No IPv4: not sent, not used for select | identify the appropriate rule.
| |send-value-filter* |With IPv4: sent value, used for select |
+--------------------+---------------------+----------------------------------------+
|IPv6 DiffServ |not-sent* |The value is not sent, but each end |
|IPv6 Flow Label | |agree on a value, which can be someting |
| | |different from 0. |
| |send-value |If DiffServ field varies it is sent |
+--------------------+---------------------+----------------------------------------+
|IPv6 Length |compute-IPv6-length |Dedicated function to reconstruct value |
+--------------------+---------------------+----------------------------------------+
[IPv6 Next Header |not-sent* |Value is known in the ctxt. |
| |send value |Same behavior as 6LoWPAN |
+--------------------+---------------------+----------------------------------------+
|IPv6 Hop Limit |ignore |The receiver will put a value stored in |
| | |the context. It may be different from |
| | |one originally sent, but in s star |
| | |topology, there is not risk of loops |
| |not-sent* |Receiver and sender agree on the value. |
| | |If the value is not correct the packet |
| | |is discarded |
| |send-value |Explicitly sent |
+--------------------+---------------------+----------------------------------------+
|IPv6 ESPrefix |not-sent* |The 64 bit prefix is stored on the ctxt |
|IPv6 LCPrefix |send-value |Explicitly send 64 bits on the link |
+--------------------+---------------------+----------------------------------------+
|IPv6 ESiid |not-sent |IID is not sent, but stored in the ctxt |
|IPv6 LCiid |ESiid-MAC | LCiid-MAC|IID is built from the ES MAC address |
| |send-value* |IID is explicitly sent on the link. The |
| | |size depends of the L2 technology |
+--------------------+---------------------+----------------------------------------+
|UDP ESport |not-sent |In the context |
|UDP LCport |send-value* |Send the 2 bytes of the port number |
| |send-value-lsb* |Send least significant bits of the port |
| | |number. |
+--------------------+---------------------+----------------------------------------+
|UDP length |compute-UDP-length |Dedicated function to reconstruct value |
|UDP Checksum |compute-UDP-checksum |Dedicated function to reconstruct value |
+--------------------+---------------------+----------------------------------------+
* field used for rule selection.
Figure 3: SCHC functions' example assignment for IPv6 and UDP +---------------------------------------------------------------------+
| Rule N |
+---------------------------------------------------------------------+ |
| Rule i | |
+---------------------------------------------------------------------+ | |
| Rule 1 | | |
| +---------+-------+------------+--------------+-----------------+ | | |
| | Field 1 | Value |match. comp.| match decomp | Action function | | | |
| +---------+-------+------------+--------------+-----------------+ | | |
| | Field 2 | Value |match. comp.| match decomp | Action function | | | |
| +---------+-------+------------+--------------+-----------------+ | | |
| | ... | ... |... | ... | ... | | | |
| +---------+-------+------------+--------------+-----------------+ | |----+
| | Field N | Value |match. comp.| match decomp | Action function | | |
| +---------+-------+------------+--------------+-----------------+ |------+
| |
+---------------------------------------------------------------------+
Figure 3 gives an example of function assignment to IPv6/UDP fields, Figure 2: Context in LC
a star after the function name indicates when a field participates in
the context id selection.
3.1. Compression functions The compression/decompression process follows several steps:
3.1.1. Ignore o compression rule selection: the goal is to identify which rule
will be used to compress the headers. To each field is associated
a matching rule for compression. Each header field's value is
compared to the corresponding value stored in the rule for that
field using the matching operator. If all the fields match, the
packet is processed using this rule action functions and the rule
list exploration is aborted. Otherwise the next rule is tested.
If no rule is found, then the packet is dropped.
Ignore function defines a field that does not participate to the rule o compression: the action function indicates is the field is send on
selection process. The field value will not be sent on the wire and the link or not. A field can also be partially sent regarding the
can be reconstructed on the other side. matching operator. The resulting compressed header must be
aligned on byte boundaries.
The ignore function can be assigned to the IPv6 version field (if o decompression rule selection, as for compression, a rule has to be
IPv4 is not used in the system). IPv6 Hop Limit may also be a selected to uncompress incoming packets. A matching operator is
candidate in some cases. Hop Limit value will not affect the flow defined on the compress header and works as for compression.
selection process. The receiver may assign a static value. If there
is a risk of loop creation (i.e. non-star topology), the send-value
function must be used instead.
3.1.2. Send-value o decompression: the same action function indicates how the field
value can be rebuilt, either from bits received on the link, a
value stored in the rule or by using a specific algorithm.
This function is used to transmit the full field value that is not 3. Matching operators
stored in the context. In the decompression phase, the receiver uses
the transmitted value for reconstructing the field. This field
cannot participate to the selection process since it can vary other
the time.
The send-value function may be used to send interface IID in a meshed Matching a field with a value and header compression are related
topology. operations; If a field matches a rule containing the value, it is not
necessary to send it on the link. Since context are synchronized,
reading the rule's value is enough to reconstruct the field's value
at the other end.
3.1.3. Send-value-lsb On some other cases, the value need to be sent on the link to inform
the other end. The field value may vary from one packet to another,
therefore the field cannot be used to select the rule id.
This function allows to send only the less significant bits of a It may exist some intermediary cases, where part of the value may be
value. The context contains the size of the less significant bits used to select a field and a variable part has to be sent on the
and a reference value. link. This is true for Least Significant Bits (LSB) where the most
significant bit can be used to select a rule id and the least
significant bits has to be sent on the link.
Send-value-lbs is involved in the rule selection. The most Several matching operators are defined:
significant bit of field's value must matches the most significant
bits of the context reference value.
The sender send on the radio link only the less significant bits. o = : a field value in a packet matches with a field value in a rule
The receiver reconstruct the initial value by concatenating the most if they are equal.
significant bits of reference value contained in the context and the
less significant bits received.
This function can be used to define a port range and allow several IP o no : no check is done between a field value in a packet matches
flows to share the same context. with a field value in the rule
3.1.4. Send-value-filter o lbs(L) : a field value of length T in a packet matches with a
field value in a rule if the most significant T-L bits are equal.
In the compression phase, a field assigned with this value is sent on 4. Action functions
the radio link. It does not influence the rule selection.
Value sent on the link influences the rule selection for The action functions describe the action taken by the compression and
decompression. inversely the action taken by the decompressor to restore the
original value.
Typically, this function is used to transmit the SHIM field and /--------------------+-------------+--------------------------\
proceed to rule identification when the header is decompressed. The | Function | Compression | Decompression |
SHIM is elided from the uncompressed header. | | | |
+--------------------+-------------+--------------------------+
|elided |not sent |use value stored in ctxt |
|send-value |send |build field from value |
|compute-IPv6-length |elided |compute IPv6 length |
|compute-UDP-length |elided |compute UDP length |
|compute-UDP-checksum|elided |compute UDP checksum |
|ESiid-DID |elided |build IID from L2 ES addr |
|LCiid-DID |elided |build IID from L2 LA addr |
\--------------------+-------------+--------------------------/
3.1.5. Not-sent Figure 3: Simplified Protocol Stack for LP-WAN
In the compression phase, a field assigned with this value is not Figure 3 lists all the functions defined to compress and decompress a
sent on the radio link. This influence the rule selection. field. The first column gives the function's name. The second and
third columns outlines the compression/decompression process.
In the decompression phase, the uncompressed value is the one stored As with 6LoWPAN, the compression process may produce some data, where
in the context. Since the value is not send on the radio link, it fields that were not compressed (or were partially compressed) will
cannot influence the flow selection. be sent in the order of the original packet. Information added by
the compression phase must be aligned on byte boundaries, but each
individual compression function may generate any size.
IPv6 protocol identifier, UDP ports number fields can be assigned to /-----------------+---------------------+----------------------------------------\
this function. This avoid to send then on the link. | Field |Function | Behavior |
+-----------------+---------------------+----------------------------------------+
|IPv6 version |elided |The value is not sent, but each end |
|IPv6 DiffServ | |agrees on a value, which can be |
|IPv6 Flow Label | |different from 0. |
|IPv6 Next Header |send-value |Depending on the matching operator, the |
| | |entire field value is sent or an |
| | |adjustment to the context value |
+-----------------+---------------------+----------------------------------------+
|IPv6 Length |compute-IPv6-length |Dedicated function to reconstruct value |
+-----------------+---------------------+----------------------------------------+
|IPv6 Hop Limit |elided+no matching |The receiver will put a value stored in |
| | |the context. It may be different from |
| | |one originally sent, but in a star |
| | |topology, there is not risk of loops |
| |elided+matching |Receiver and sender agree on the value. |
| | |If the value is not correct the packet |
| | |the rule is not selected |
| |send-value |Explicitly sent |
+-----------------+---------------------+----------------------------------------+
|IPv6 ESPrefix |elided |The 64 bit prefix is stored on the ctxt |
|IPv6 LCPrefix |send-value |Explicitly send 64 bits on the link |
+-----------------+---------------------+----------------------------------------+
|IPv6 ESiid |elided |IID is not sent, but stored in the ctxt |
|IPv6 LCiid |ESiid-DID | LCiid-DID|IID is built from the ES Device ID |
| |send-value |IID is explicitly sent on the link. The |
| | |size depends of the L2 technology |
+-----------------+---------------------+----------------------------------------+
|UDP ESport |elided |In the context |
|UDP LCport |send-value |Send the 2 bytes of the port number |
| | |or less if lsb matching is specified in |
| | |the matching operator. |
+-----------------+---------------------+----------------------------------------+
|UDP length |compute-UDP-length |Dedicated function to reconstruct value |
+-----------------+---------------------+----------------------------------------+
|UDP Checksum |compute-UDP-checksum |Dedicated function to reconstruct value |
+-----------------+---------------------+----------------------------------------+
3.1.6. just-check Figure 4: SCHC functions' example assignment for IPv6 and UDP
The field value is checked for the rule selection, but nothing is Figure 4 gives an example of function assignment to IPv6/UDP fields.
sent on the radio link.
This can be used to include L2 parameters such as addresses in the 4.1. Action functions
rule selection. 4.1.1. Elided
3.1.7. compute-IPv6-lenght, compute-UDP-length, compute-UDP-checksum The compressor do not sent the field value on the link. The
decompressor restore the field value with the one stored in the
matched rule.
Fields assigned with this functions are not sent on the radio link, 4.1.2. Send-value
they do not participate to the rule selection process. They are
computed during the decompression phase.
This functions are specific to a field in the header. The compressor send the field value on the link, if the matching
operator is "=". Otherwise the matching operator indicates the
information that will be sent on the link. For a LSB operator only
the Least Significant Bits are sent.
3.1.8. ESiid-MAC, LCiid-MAC 4.1.3. ESiid-DID, LCiid-DID
These functions are used to process respectively the End System and These functions are used to process respectively the End System and
the LPWA AP Interface Identifier. The IID value is computed from the LC Device Identifier (DID). The IID value is computed from
addresses present in the MAC header. The computation depends of the device ID present in the Layer 2 header. The computation depends of
technology and the MAC address size. The values of the field do not the technology and the device ID size.
participate to the flow selection since they are sent on the radio
link at layer 2.
These functions can be used in case of the star topology.
4. Examples 5. Examples
This section gives some scenarios of the compression mechanism. Note This section gives some scenarios of the compression mechanism for
that for reasons of simplicity in this example CoAP is not IPv6/UDP. The goal is to illustrate the SCHC behaviour.
compressed, it will be described later with the same principles. The
goal is to illustrate the SCHC behaviour.
4.1. IPv6/UDP compression in a star topology 5.1. IPv6/UDP compression in a star topology
The most common case will be a LPWA end-system embeds some The most common case will be a LPWA end-system embeds some
applications running over CoAP. Typically one will be for the device applications running over CoAP. In this example, the first flow is
management using the COMI/CoOL protocol (using UDP ports 123 and for instance for the device management based on CoAP using Link Local
124). The second one will be a CoAP server for measurements done by addresses and UDP ports 123 and 124. The second flow will be a CoAP
the end-system (using ports 5683). A third UDP traffic is for legacy server for measurements done by the end-system (using ports 5683) and
applications using different ports numbers. Figure 4 presents the Global Addresses alpha::IID/64 to beta::1/64. The last flow is for
protocol stack for this end-system. IPv6 and UDP are represented legacy applications using different ports numbers, the destination is
with dotted lines since these protocols are compressed on the radio gamma::1/64.
link. The context ID is represented by a SHIM (respectively 0, 1 and
2).
| Figure 5 presents the protocol stack for this end-system. IPv6 and
|/c |/a | UDP are represented with dotted lines since these protocols are
compressed on the radio link. The rule ID is represented by a shim
id (respectively 0, 1 and 2).
Managment Data
+----------+---------+---------+ +----------+---------+---------+
| CoAP | CoAP | legacy | | CoAP | CoAP | legacy |
+----||----+---||----+---||----+ +----||----+---||----+---||----+
. UDP . UDP | UDP | . UDP . UDP | UDP |
................................ ................................
. IPv6 . IPv6 . IPv6 . . IPv6 . IPv6 . IPv6 .
+--SHIM0------SHIM1-----SHIM2---------------------------+ +--SHIM0------SHIM1-----SHIM2--+
| 6LPWA L2 technologies | | 6LPWA L2 technologies |
+-------------------------------------------------------+ +------------------------------+
End System or LPWA GW End System or LPWA GW
Figure 4: Simplified Protocol Stack for LP-WAN
Note that in some LPWA technologies, only End Systems have a MAC
address. Therefore it is necessary to define an IID for the Link
Local address for the LPWA Compressor.
+----------------+------------------------+----------------+-----------------+
| Field | Function | Ctxt Value | Sent compressed |
+----------------+------------------------+----------------+-----------------+
| LPWA SHIM | send-value-filter | 0 | 0 |
+================+========================+================+=================+
|IPv6 version | ignore | | |
|IPv6 DiffServ | not-sent | 0 | |
|IPv6 Flow Label | not-sent | 0 | |
|IPv6 Length | compute-IPv6-length |----------------| |
|IPv6 Next Header| not-sent | 17 | |
|IPv6 Hop Limit | ignore | 1 | |
|IPv6 ESprefix | not-sent | FE80::/64 | |
|IPv6 ESiid | ESiid-MAC | | |
|IPv6 LCprefix | not-sent | FE80::/64 | |
|IPv6 LCiid | LCiid-value | ::1 | |
+================+========================+================+=================+
|UDP ESport | not-sent | 123 | |
|UDP LCport | not-sent | 124 | |
|UDP Length | compute-UDP-length |----------------| |
|UDP checksum | compute-UDP-checksum |----------------| |
+================+========================+================+=================+
+----------------+------------------------+----------------+-----------------+
| Field | Function | Ctxt Value | Sent compressed |
+----------------+------------------------+----------------+-----------------+
| LPWA SHIM | send-value-filter | 1 | 1 |
+================+========================+================+=================+
|IPv6 version | ignore | | |
|IPv6 DiffServ | not-sent | 0 | |
|IPv6 Flow Label | not-sent | 0 | |
|IPv6 Length | compute-IPv6-length |----------------| |
|IPv6 Next Header| not-sent | 17 | |
|IPv6 Hop Limit | ignore | 1 | |
|IPv6 ESprefix | not-sent | FE80::/64 | |
|IPv6 ESiid | ESiid-MAC | | |
|IPv6 LCprefix | not-sent | FE80::/64 | |
|IPv6 LCiid | LCiid-value | ::1 | |
+================+========================+================+=================+
|UDP ESport | not-sent | 5683 | |
|UDP LCport | not-sent | 5683 | |
|UDP Length | compute-UDP-length |----------------| |
|UDP checksum | compute-UDP-checksum |----------------| |
+================+========================+================+=================+
+----------------+------------------------+----------------+-----------------+
| Field | Function | Ctxt Value | Sent compressed |
+----------------+------------------------+----------------+-----------------+
| LPWA SHIM | send-value-filter | 2 | 2 |
+================+========================+================+=================+
|IPv6 version | ignore | | |
|IPv6 DiffServ | not-sent | 0 | |
|IPv6 Flow Label | not-sent | 0 | |
|IPv6 Length | compute-IPv6-length |----------------| |
|IPv6 Next Header| not-sent | 17 | |
|IPv6 Hop Limit | ignore | 1 | |
|IPv6 ESprefix | not-sent | FE80::/64 | |
|IPv6 ESiid | ESiid-MAC | | |
|IPv6 LCprefix | not-sent | FE80::/64 | |
|IPv6 LCiid | LCiid-value | ::1 | |
+================+========================+================+=================+
|UDP ESport | send-value | | port number |
|UDP LCport | send-value | | port number |
|UDP Length | compute-UDP-length |----------------| |
|UDP checksum | compute-UDP-checksum |----------------| |
+================+========================+================+=================+
Figure 5: Simplified Protocol Stack for LP-WAN Figure 5: Simplified Protocol Stack for LP-WAN
Figure 6 shows an alternative way to compress more efficiently port Note that in some LPWA technologies, only End Systems have a device
numbers. The send-value-lsb allows to send in one byte the two ports ID . Therefore it is necessary to define statically an IID for the
number differences. Since the compressed information must be aligned Link Local address for the LPWA Compressor.
on byte boundary, it has been chosen in the example a size of 4 bits
for each lsb.
+----------------+------------------------+----------------+-----------------+
| Field | Function | Ctxt Value | Sent compressed |
+----------------+------------------------+----------------+-----------------+
| LPWA SHIM | send-value-filter | 2 | 2 |
+================+========================+================+=================+
|IPv6 version | ignore | | |
|IPv6 DiffServ | not-sent | 0 | |
|IPv6 Flow Label | not-sent | 0 | |
|IPv6 Length | compute-IPv6-length |----------------| |
|IPv6 Next Header| not-sent | 17 | |
|IPv6 Hop Limit | ignore | 1 | |
|IPv6 ESprefix | not-sent | FE80::/64 | |
|IPv6 ESiid | ESiid-MAC | | |
|IPv6 LCprefix | not-sent | FE80::/64 | |
|IPv6 LCiid | LCiid-value | ::1 | |
+================+========================+================+=================+
|UDP ESport | send-value-lsb | 4+ES ref val | lsb |
|UDP LCport | send-value-lsb | 4+LC ref val | lsb |
|UDP Length | compute-UDP-length |----------------| |
|UDP checksum | compute-UDP-checksum |----------------| |
+================+========================+================+=================+
Figure 6: Alternative compressions of port numbers +----------------+---------+--------+--------+-------------++------+
| Field | Value | Match | Match | Function || Sent |
+----------------+---------+-----------------+-------------++------+
|LPWA SHIM |0 | No | = | send-value || 0 |
|ESDevice-ID |dev-id | No | = | elided || |
+================+=========+========+========+=============++======+
|IPv6 version |6 | = | No | elided || |
|IPv6 DiffServ |0 | = | No | elided || |
|IPv6 Flow Label |0 | = | No | elided || |
|IPv6 Length |XXXXXXXXX| No | No | comp-IPv6-l || |
|IPv6 Next Header|17 | = | No | elided || |
|IPv6 Hop Limit |255 | No | No | elided || |
|IPv6 ESprefix |FE80::/64| = | No | elided || |
|IPv6 ESiid | | No | No | ESiid-DID || |
|IPv6 LCprefix |FE80::/64| = | No | elided || |
|IPv6 LCiid |::1 | = | No | elided || |
+================+=========+========+========+=============++======+
|UDP ESport |123 | = | No | elided || |
|UDP LCport |124 | = | No | elided || |
|UDP Length |XXXXXXXXX| No | No | comp-UDP-l || |
|UDP checksum |XXXXXXXXX| No | No | comp-UDP-c || |
+================+=========+========+========+=============++======+
4.2. Global addresses +----------------+---------+--------+--------+-------------++------+
| Field | Value | Match | Match | Function || Sent |
+----------------+---------+-----------------+-------------++------+
|LPWA SHIM |1 | No | = | send-value || 1 |
|ESDevice-ID |dev-id | No | = | elided || |
+================+=========+========+========+=============++======+
|IPv6 version |6 | = | No | elided || |
|IPv6 DiffServ |0 | = | No | elided || |
|IPv6 Flow Label |0 | = | No | elided || |
|IPv6 Length |XXXXXXXXX| No | No | comp-IPv6-l || |
|IPv6 Next Header|17 | = | No | elided || |
|IPv6 Hop Limit |255 | No | No | elided || |
|IPv6 ESprefix |alpha/64 | = | No | elided || |
|IPv6 ESiid | | No | No | ESiid-DID || |
|IPv6 LCprefix |beta/64 | = | No | elided || |
|IPv6 LCiid |::1000 | = | No | elided || |
+================+=========+========+========+=============++======+
|UDP ESport |5683 | = | No | elided || |
|UDP LCport |5683 | = | No | elided || |
|UDP Length |XXXXXXXXX| No | No | comp-UDP-l || |
|UDP checksum |XXXXXXXXX| No | No | comp-UDP-c || |
+================+=========+========+========+=============++======+
The scenario depicted Figure 7, management remains with Link Local +----------------+---------+--------+--------+-------------++------+
addresses, but the CoAP message are sent to an external server | Field | Value | Match | Match | Function || Sent |
2001:db8:1::1 and the legacy to another server 2001:db8:2::1/64. The +----------------+---------+-----------------+-------------++------+
EC must be configured with the prefix used by the LC to forward |LPWA SHIM |2 | No | = | send-value || 2 |
traffic. This prefix could be changed using a management procedure |ESDevice-ID |dev-id | No | = | elided || |
if needed. +================+=========+========+========+=============++======+
|IPv6 version |6 | = | No | elided || |
|IPv6 DiffServ |0 | = | No | elided || |
|IPv6 Flow Label |0 | = | No | elided || |
|IPv6 Length |XXXXXXXXX| No | No | comp-IPv6-l || |
|IPv6 Next Header|17 | = | No | elided || |
|IPv6 Hop Limit |255 | No | No | elided || |
|IPv6 ESprefix |alpha/64 | = | No | elided || |
|IPv6 ESiid | | No | No | ESiid-DID || |
|IPv6 LCprefix |gamma/64 | = | No | elided || |
|IPv6 LCiid |::1000 | = | No | elided || |
+================+=========+========+========+=============++======+
|UDP ESport |8720 | lsb(4) | No | elided || lsb |
|UDP LCport |8720 | lsb(4) | No | elided || lsb |
|UDP Length |XXXXXXXXX| No | No | comp-UDP-l || |
|UDP checksum |XXXXXXXXX| No | No | comp-UDP-c || |
+================+=========+========+========+=============++======+
+----------------+------------------------+----------------+-----------------+ Figure 6: Simplified Protocol Stack for LP-WAN
| Field | Function | Ctxt Value | Sent compressed |
+----------------+------------------------+----------------+-----------------+
| LPWA SHIM | send-value-filter | 0 | 0 |
+================+========================+================+=================+
|IPv6 version | ignore | | |
|IPv6 DiffServ | not-sent | 0 | |
|IPv6 Flow Label | not-sent | 0 | |
|IPv6 Length | compute-IPv6-length |----------------| |
|IPv6 Next Header| not-sent | 17 | |
|IPv6 Hop Limit | ignore | 1 | |
|IPv6 ESprefix | not-sent | FE80::/64 | |
|IPv6 ESiid | ESiid-MAC | | |
|IPv6 LCprefix | not-sent | FE80::/64 | |
|IPv6 LCiid | LCiid-value | ::1 | |
+================+========================+================+=================+
|UDP ESport | not-sent | 123 | |
|UDP LCport | not-sent | 124 | |
|UDP Length | compute-UDP-length |----------------| |
|UDP checksum | compute-UDP-checksum |----------------| |
+================+========================+================+=================+
+----------------+------------------------+----------------+-----------------+ All the fields described in the three rules Figure 6 are present in
| Field | Function | Ctxt Value | Sent compressed | the IPv6 and UDP headers. Two fields have been added at the begin,
+----------------+------------------------+----------------+-----------------+ they are used to identify the rule id for decompression when the
| LPWA SHIM | send-value-filter | 1 | 1 | other end receives the compressed header. The shim id is read either
+================+========================+================+=================+ from the L2 header or from the first bit in the payload depending on
|IPv6 version | ignore | | | the technology. The ESDevice-ID value is found in the L2 header.
|IPv6 DiffServ | not-sent | 0 | |
|IPv6 Flow Label | not-sent | 0 | |
|IPv6 Length | compute-IPv6-length |----------------| |
|IPv6 Next Header| not-sent | 17 | |
|IPv6 Hop Limit | ignore | 1 | |
|IPv6 ESprefix | not-sent |2001:db8:3::/64 | |
|IPv6 ESiid | ESiid-MAC | | |
|IPv6 LCprefix | not-sent |2001:bd8:1::/64 | |
|IPv6 LCiid | LCiid-value | ::1 | |
+================+========================+================+=================+
|UDP ESport | not-sent | 5683 | |
|UDP LCport | not-sent | 5683 | |
|UDP Length | compute-UDP-length |----------------| |
|UDP checksum | compute-UDP-checksum |----------------| |
+================+========================+================+=================+
+----------------+------------------------+----------------+-----------------+ The second and third rules use global addresses. The way the ES
| Field | Function | Ctxt Value | Sent compressed | learn the prefix is not in the scope of the document. One possible
+----------------+------------------------+----------------+-----------------+ way is to use a management protocol to set up in both end rules the
| LPWA SHIM | send-value-filter | 2 | 2 | prefix used on the LPWA network.
+================+========================+================+=================+
|IPv6 version | ignore | | |
|IPv6 DiffServ | not-sent | 0 | |
|IPv6 Flow Label | not-sent | 0 | |
|IPv6 Length | compute-IPv6-length |----------------| |
|IPv6 Next Header| not-sent | 17 | |
|IPv6 Hop Limit | ignore | 1 | |
|IPv6 ESprefix | not-sent |2001:db8:3::/64 | |
|IPv6 ESiid | ESiid-MAC | | |
|IPv6 LCprefix | not-sent |2001:db8:2::/64 | |
|IPv6 LCiid | LCiid-value | ::1 | |
+================+========================+================+=================+
|UDP ESport | send-value | | port number |
|UDP LCport | send-value | | port number |
|UDP Length | compute-UDP-length |----------------| |
|UDP checksum | compute-UDP-checksum |----------------| |
+================+========================+================+=================+
Figure 7: Compression with global addresses The third rule compresses port numbers on 4 bits. This value is
selected to maintain alignment on byte boundaries for the compressed
header.
5. CoAP compression 6. Acknowledgements
TBD Thanks to Dominique Barthel, Alexander Pelov, Juan Carlos Zuniga for
useful design consideration.
6. Normative References 7. Normative References
[I-D.minaburo-lp-wan-gap-analysis] [I-D.minaburo-lp-wan-gap-analysis]
Minaburo, A., Pelov, A., and L. Toutain, "LP-WAN GAP Minaburo, A., Pelov, A., and L. Toutain, "LP-WAN GAP
Analysis", draft-minaburo-lp-wan-gap-analysis-01 (work in Analysis", draft-minaburo-lp-wan-gap-analysis-01 (work in
progress), February 2016. progress), February 2016.
[RFC4944] Montenegro, G., Kushalnagar, N., Hui, J., and D. Culler, [RFC4944] Montenegro, G., Kushalnagar, N., Hui, J., and D. Culler,
"Transmission of IPv6 Packets over IEEE 802.15.4 "Transmission of IPv6 Packets over IEEE 802.15.4
Networks", RFC 4944, DOI 10.17487/RFC4944, September 2007, Networks", RFC 4944, DOI 10.17487/RFC4944, September 2007,
<http://www.rfc-editor.org/info/rfc4944>. <http://www.rfc-editor.org/info/rfc4944>.
 End of changes. 61 change blocks. 
424 lines changed or deleted 292 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/