lpwan Working Group                                          A. Minaburo
Internet-Draft                                                    Acklio
Intended status: Standards Track                              L. Toutain
Expires: December 31, 2018 April 25, 2019                                   IMT-Atlantique
                                                                C. Gomez
                                    Universitat Politecnica de Catalunya
                                                              D. Barthel
                                                             Orange Labs
                                                           June 29,
                                                              JC. Zuniga
                                                                  SIGFOX
                                                        October 22, 2018

  LPWAN Static Context Header Compression (SCHC) and fragmentation for
                              IPv6 and UDP
               draft-ietf-lpwan-ipv6-static-context-hc-16
               draft-ietf-lpwan-ipv6-static-context-hc-17

Abstract

   This document defines the Static Context Header Compression (SCHC)
   framework, which provides both header compression and fragmentation
   functionalities.  SCHC has been tailored designed for Low Power Wide Area
   Networks (LPWAN).

   SCHC compression is based on a common static context stored in both
   the LPWAN devices device and the network side.  This document defines a
   header compression mechanism and its application to compress IPv6/UDP
   headers.

   This document also specifies a fragmentation and reassembly mechanism
   that is used to support the IPv6 MTU requirement over the LPWAN
   technologies.  Fragmentation is needed for IPv6 datagrams that, after
   SCHC compression or when such compression was not possible, still
   exceed the layer two layer-2 maximum payload size.

   The SCHC header compression and fragmentation mechanisms are
   independent of the specific LPWAN technology over which they are
   used.  Note that this  This document defines generic functionalities and
   advisedly offers
   flexibility with regard to parameter settings and mechanism choices.  Such
   Technology-specific and product-specific settings and choices are
   expected to be made grouped into Profiles specified in other technology-specific documents.

Status of This Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF).  Note that other groups may also distribute
   working documents as Internet-Drafts.  The list of current Internet-
   Drafts is at https://datatracker.ietf.org/drafts/current/.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   This Internet-Draft will expire on December 31, 2018. April 25, 2019.

Copyright Notice

   Copyright (c) 2018 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (https://trustee.ietf.org/license-info) in effect on the date of
   publication of this document.  Please review these documents
   carefully, as they describe your rights and restrictions with respect
   to this document.  Code Components extracted from this document must
   include Simplified BSD License text as described in Section 4.e of
   the Trust Legal Provisions and are provided without warranty as
   described in the Simplified BSD License.

Table of Contents

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   4
   2.  Requirements Notation . . . . . . . . . . . . . . . . . . . .   5
   3.  LPWAN Architecture  . . . . . . . . . . . . . . . . . . . . .   5
   4.  Terminology . . . . . . . . . . . . . . . . . . . . . . . . .   6
   5.  SCHC overview . . . . . . . . . . . . . . . . . . . . . . . .   9   8
     5.1.  SCHC Packet format  . . . . . . . . . . . . . . . . . . .  10
     5.2.  Functional mapping  . . . . . . . . . . . . . . . . . . .  11
   6.  Rule ID . . . . . . . . . . . . . . . . . . . . . . . . . . .  13  12
   7.  Static Context Header Compression  Compression/Decompression . . . . . . . . . . . . . . . . .  13 .  12
     7.1.  SCHC C/D Rules  . . . . . . . . . . . . . . . . . . . . .  14  12
     7.2.  Rule ID for SCHC C/D  . . . . . . . . . . . . . . . . . .  16  14
     7.3.  Packet processing . . . . . . . . . . . . . . . . . . . .  16  15
     7.4.  Matching operators  . . . . . . . . . . . . . . . . . . .  18  16
     7.5.  Compression Decompression Actions (CDA) . . . . . . . . .  18  17
       7.5.1.  processing variable-length fields . . . . . . . . . .  17
       7.5.2.  not-sent CDA  . . . . . . . . . . . . . . . . . . . .  20
       7.5.2.  18
       7.5.3.  value-sent CDA  . . . . . . . . . . . . . . . . . . .  20
       7.5.3.  18
       7.5.4.  mapping-sent CDA  . . . . . . . . . . . . . . . . . .  20
       7.5.4.  18
       7.5.5.  LSB CDA . . . . . . . . . . . . . . . . . . . . . . .  20
       7.5.5.  19
       7.5.6.  DevIID, AppIID CDA  . . . . . . . . . . . . . . . . .  21
       7.5.6.  19
       7.5.7.  Compute-* . . . . . . . . . . . . . . . . . . . . . .  21  19
   8.  Fragmentation  Fragmentation/Reassembly  . . . . . . . . . . . . . . . . . .  20
     8.1.  Overview  . . . . . . . . . .  21
     8.1.  Overview . . . . . . . . . . . . . .  20
     8.2.  SCHC F/R Tools  . . . . . . . . . .  21
     8.2.  Fragmentation Tools . . . . . . . . . . .  20
       8.2.1.  Messages  . . . . . . . .  22
     8.3.  Reliability modes . . . . . . . . . . . . . .  20
       8.2.2.  Tiles, Windows, Bitmaps, Timers, Counters . . . . . .  25
     8.4.  Fragmentation Formats  21
       8.2.3.  Integrity Checking  . . . . . . . . . . . . . . . . .  23
       8.2.4.  Header Fields . . . . . .  27
       8.4.1.  Fragments that are not the last one . . . . . . . . .  27
       8.4.2.  All-1 fragment . . . . .  24
     8.3.  SCHC F/R Message Formats  . . . . . . . . . . . . . .  29
       8.4.3. . .  26
       8.3.1.  SCHC ACK Fragment format  . . . . . . . . . . . . . . . .  26
       8.3.2.  SCHC ACK format . . .  31
       8.4.4.  Abort formats . . . . . . . . . . . . . . . .  27
       8.3.3.  SCHC ACK REQ format . . . .  33
     8.5.  Baseline mechanism . . . . . . . . . . . . .  30
       8.3.4.  SCHC Abort formats  . . . . . .  35
       8.5.1.  No-ACK . . . . . . . . . . .  31
     8.4.  SCHC F/R modes  . . . . . . . . . . . .  36
       8.5.2.  ACK-Always . . . . . . . . .  33
       8.4.1.  No-ACK mode . . . . . . . . . . . .  36
       8.5.3.  ACK-on-Error . . . . . . . . .  33
       8.4.2.  ACK-Always  . . . . . . . . . . .  39
     8.6.  Supporting multiple window sizes . . . . . . . . . .  36
       8.4.3.  ACK-on-Error  . . . . . . .  40
     8.7.  Downlink SCHC Fragment transmission . . . . . . . . . . .  41 . .  42
   9.  Padding management  . . . . . . . . . . . . . . . . . . . . .  42  49
   10. SCHC Compression for IPv6 and UDP headers . . . . . . . . . .  43  50
     10.1.  IPv6 version field . . . . . . . . . . . . . . . . . . .  43  50
     10.2.  IPv6 Traffic class field . . . . . . . . . . . . . . . .  43  51
     10.3.  Flow label field . . . . . . . . . . . . . . . . . . . .  44  51
     10.4.  Payload Length field . . . . . . . . . . . . . . . . . .  44  51
     10.5.  Next Header field  . . . . . . . . . . . . . . . . . . .  44  52
     10.6.  Hop Limit field  . . . . . . . . . . . . . . . . . . . .  45  52
     10.7.  IPv6 addresses fields  . . . . . . . . . . . . . . . . .  45  52
       10.7.1.  IPv6 source and destination prefixes . . . . . . . .  45  52
       10.7.2.  IPv6 source and destination IID  . . . . . . . . . .  46  53
     10.8.  IPv6 extensions  . . . . . . . . . . . . . . . . . . . .  46  53
     10.9.  UDP source and destination port  . . . . . . . . . . . .  46  53
     10.10. UDP length field . . . . . . . . . . . . . . . . . . . .  47  54
     10.11. UDP Checksum field . . . . . . . . . . . . . . . . . . .  47  54
   11. IANA Considerations . . . . . . . . . . . . . . . . . . . . .  48  55
   12. Security considerations . . . . . . . . . . . . . . . . . . .  48  55
     12.1.  Security considerations for SCHC
            Compression/Decompression  . . . . . . . . . . . . . . .  48  55
     12.2.  Security considerations for SCHC
            Fragmentation/Reassembly . . . . . . . . . . . . . . . .  48  55
   13. Acknowledgements  . . . . . . . . . . . . . . . . . . . . . .  49  56
   14. References  . . . . . . . . . . . . . . . . . . . . . . . . .  50  57
     14.1.  Normative References . . . . . . . . . . . . . . . . . .  50  57
     14.2.  Informative References . . . . . . . . . . . . . . . . .  50  57
   Appendix A.  SCHC Compression Examples  . . . . . . . . . . . . .  51  58
   Appendix B.  Fragmentation Examples . . . . . . . . . . . . . . .  54  61
   Appendix C.  Fragmentation State Machines . . . . . . . . . . . .  60  68
   Appendix D.  SCHC Parameters - Ticket #15  . . . . . . . . . . . .  67 . . . . . .  75
   Appendix E.  Supporting multiple window sizes for fragmentation .  77
   Appendix F.  Downlink SCHC Fragment transmission  . . . . . . . .  77
   Appendix G.  Note . . . . . . . . . . . . . . . . . . . . . . . .  68  78
   Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . .  69  78

1.  Introduction

   This document defines the Static Context Header Compression (SCHC)
   framework, which provides both header compression and fragmentation
   functionalities.  SCHC has been tailored designed for Low Power Wide Area
   Networks (LPWAN).

   Header compression is needed to efficiently bring for efficient Internet connectivity to
   the node within an LPWAN network.  Some LPWAN networks properties can
   be exploited to get an efficient header compression:

   o  The network topology is star-oriented, which means that all
      packets between the same source-destination pair follow the same
      path.  For the needs of this document, the architecture can simply
      be described as Devices (Dev) exchanging information with LPWAN
      Application Servers (App) through a Network
      Gateways Gateway (NGW).

   o  Because devices embed built-in applications, the traffic flows to
      be compressed are known in advance.  Indeed, new applications
      cannot be easily are
      less frequently installed in an LPWAN devices, device, as they would are in
      computers a
      computer or smartphones.

   The Static Context Header Compression (SCHC) is defined for this
   environment. smartphone.

   SCHC compression uses a context, context in which information about header
   fieds
   fields is stored.  This context is static: the values of the header
   fields do not change over time.  This avoids complex
   resynchronization mechanisms, mechanisms.  Indeed, downlink is often more
   restricted/expensive, perhaps completely unavailable [RFC8376].  A
   compression protocol that would be incompatible relies on feedback is not compatible with LPWAN
   characteristics.
   the characteristics of such LPWANs.

   In most cases, a small context identifier is enough to represent the
   full IPv6/UDP headers.  The SCHC header compression mechanism is
   independent of the specific LPWAN technology over which it is used.

   LPWAN technologies impose some strict limitations on traffic.  For
   instance, devices are sleeping most of the time and MAY may receive data
   during short periods of time after transmission to preserve battery.
   LPWAN technologies are also characterized, among others, characterized by a very greatly reduced data
   unit and/or payload size (see [RFC8376]).  However, some
   of these LPWAN
   technologies do not provide fragmentation functionality,
   therefore the only option for them functionality; to support
   the IPv6 MTU requirement of 1280 bytes [RFC8200] is to use [RFC8200], they require a
   fragmentation protocol at the adaptation layer, layer below IPv6.  In response to this
   need,
   Accordingly, this document also defines a an fragmentation/reassembly
   mechanism, which
   mechanism for LPWAN technologies to supports the IPv6 MTU requirement over LPWAN
   technologies.  Such functionality has been designed under the
   assumption that there MTU.  Its
   implementation is no out-of-sequence delivery of data units
   between the entity performing fragmentation and optional.  If not interested, the entity performing
   reassembly.

   Note that this reader can safely
   skip its description.

   This document defines generic functionality and
   purposefully offers flexibility
   with regard to parameter parameters settings and mechanism choices.  Such
   Technology-specific settings and product-specific and choices are
   expected to be made grouped into Profiles specified in other, technology-specific other documents.

2.  Requirements Notation

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
   "OPTIONAL" in this document are to be interpreted as described in BCP
   14 [RFC2119] [RFC8174] when, and only when, they appear in all
   capitals, as shown here.

3.  LPWAN Architecture

   LPWAN technologies have similar network architectures but different
   terminologies.  Using the terminology defined in [RFC8376], we can
   identify different types of entities in a typical LPWAN network, see
   Figure 1:

   o Devices (Dev) are the end-devices or hosts (e.g. sensors,
   actuators, etc.).  There can be a very high density of devices per
   radio gateway.

   o The Radio Gateway (RGW), which is the end point of the constrained
   link.

   o The Network Gateway (NGW) is the interconnection node between the
   Radio Gateway and the Internet.

   o LPWAN-AAA Server, which controls the user authentication and the
   applications.

   o Application Server (App)
                                              +------+
    ()   ()   ()       |                      |LPWAN-|
     ()  () () ()     / \       +---------+   | AAA  |
   () () () () () () /   \======|    ^    |===|Server|  +-----------+
    ()  ()   ()     |           | <--|--> |   +------+  |APPLICATION|
   ()  ()  ()  ()  / \==========|    v    |=============|   (App)   |
     ()  ()  ()   /   \         +---------+             +-----------+
    Dev        Radio Gateways         NGW

                       Figure 1: LPWAN Architecture

4.  Terminology

   This section defines the terminology and acronyms used in this
   document.

   Note that the SCHC acronym is pronounced like "sheek" in English (or
   "chic" in French).  Therefore, this document writes "a SCHC Packet"
   instead of "an SCHC Packet".

   o  Abort.  A SCHC Fragment format to signal the other end-point that
      the on-going fragment transmission is stopped and finished.

   o  All-0.  The SCHC Fragment format for the last fragment of a window
      that is not the last one of a SCHC Packet (see window in this
      glossary).

   o  All-1.  The SCHC Fragment format for the last fragment of the SCHC
      Packet.

   o  All-0 empty.  An All-0 SCHC Fragment without payload.  It is used
      to request the SCHC ACK with the encoded Bitmap when the
      Retransmission Timer expires, in a window that is not the last one
      of a packet.

   o  All-1 empty.  An All-1 SCHC Fragment without payload.  It is used
      to request the SCHC ACK with the encoded Bitmap when the
      Retransmission Timer expires in the last window of a packet.

   o  App: LPWAN Application.  An application sending/receiving IPv6
      packets to/from the Device.

   o  AppIID: Application Interface Identifier.  The IID that identifies
      the application server interface.

   o  Bi: Bidirectional.  Characterises a Rule Entry Field Descriptor that applies
      to headers of packets travelling in either direction (Up and Dw,
      see this glossary).

   o  Bitmap: a bit field in the SCHC ACK message that tells the sender
      which SCHC Fragments in a window of fragments were correctly
      received.

   o  C: Checked bit.  Used in an acknowledgement (SCHC ACK) header to
      determine if the MIC locally computed by the receiver matches (1)
      the received MIC or not (0).

   o  CDA: Compression/Decompression Action.  Describes the reciprocal
      pair of actions that are performed at the compressor to compress a
      header field and at the decompressor to recover the original
      header field value.

   o  Compression Residue.  The bits that need to be sent (beyond the
      Rule ID itself) after applying the SCHC compression over each
      header field.

   o  Context: A set of Rules used to compress/decompress headers.

   o  Dev: Device.  A node connected to an LPWAN.  A Dev SHOULD
      implement SCHC.

   o  DevIID: Device Interface Identifier.  The IID that identifies the
      Dev interface.

   o  DI: Direction Indicator.  This field tells which direction of
      packet travel (Up, Dw or Bi) a Rule applies to.  This allows for
      assymmetric processing.

   o  DTag: Datagram Tag. This SCHC F/R header field is set to the same
      value for all SCHC Fragments carrying the same SCHC Packet.

   o  Dw: Downlink direction for compression/decompression in both
      sides, from SCHC C/D in the network to SCHC C/D in the Dev.

   o  FCN: Fragment Compressed Number.  This SCHC F/R header field
      carries an efficient representation of a larger-sized fragment
      number.

   o  Field Description.  A line in the Rule table.

   o  FID: Field Identifier.  This is an index to describe the header
      fields in a Rule.

   o  FL: Field Length is the length of the packet header field.  It is
      expressed in bits for header fields of fixed lengths or as a type
      (e.g. variable, token length, ...) for field lengths that are
      unknown at the time of Rule creation.  The length of a header
      field is defined in the corresponding protocol specification. specification (such
      as IPv6 or UDP).

   o  FP: Field Position is a value that is used to identify the
      position where each instance of a field appears in the header.

   o  IID: Interface Identifier.  See the IPv6 addressing architecture
      [RFC7136]

   o  Inactivity Timer.  A timer used after receiving a SCHC Fragment to
      detect when, due to a communication error, there is no possibility
      to continue an on-going fragmented SCHC Packet transmission.

   o  L2: Layer two.  The immediate lower layer SCHC interfaces with.
      It is provided by an underlying LPWAN technology.  It does not
      necessarily correspond to the OSI model definition of Layer 2.

   o  L2 Word: this is the minimum subdivision of payload data that the
      L2 will carry.  In most L2 technologies, the L2 Word is an octet.
      In bit-oriented radio technologies, the L2 Word might be a single
      bit.  The L2 Word size is assumed to be constant over time for
      each device.

   o  MIC: Message Integrity Check.  A SCHC F/R header field computed
      over the fragmented SCHC Packet and potential fragment padding,
      used for error detection after SCHC Packet reassembly.

   o  MO: Matching Operator.  An operator used to match a value
      contained in a header field with a value contained in a Rule.

   o  Padding (P).  Extra bits that may be appended by SCHC to a data
      unit that it passes to the underlying Layer 2 for transmission.
      SCHC itself operates on bits, not bytes, and does not have any
      alignment prerequisite.  See Section 9.

   o  Retransmission Timer.  A timer used by the SCHC Fragment sender
      during an on-going fragmented  Profile: SCHC Packet transmission to detect
      possible link errors when waiting for offers variations in the way it is operated, with a
      number of parameters listed in Appendix D.  A Profile indicates a
      particular setting of all these parameters.  Both ends of a possible incoming SCHC
      ACK.
      session must be provisioned with the same Profile information and
      with the same set of Rules before the session starts, so that
      there is no ambiguity in how they expect to communicate.

   o  Rule: A set of header field values.

   o  Rule entry: A column in a Rule that describes a parameter of the
      header field.

   o  Rule ID: An identifier for a Rule.  SCHC C/D on both sides share
      the same Rule ID for a given packet.  A set of Rule IDs are used
      to support SCHC F/R functionality.

   o  SCHC ACK: A SCHC acknowledgement for fragmentation.  This message
      is used to report on the success of reception of a set of SCHC
      Fragments.  See Section 8 for more details.

   o  SCHC C/D: Static Context Header Compression Compressor/
      Decompressor.  A mechanism used on both sides, at the Dev and at
      the network, to achieve Compression/Decompression of headers.
      SCHC C/D uses Rules to perform compression and decompression.

   o  SCHC F/R: Static Context Header Compression Fragmentation/
      Reassembly.  A protocol used on both sides, at the Dev and at the
      network, to achieve Fragmentation/Reassembly of SCHC Packets.
      SCHC F/R has three reliability modes.

   o  SCHC Fragment: A data unit that carries a subset of a SCHC Packet.
      SCHC F/R is needed when the size of a SCHC packet exceeds the
      available payload size of the underlying L2 technology data unit.
      See Section 8.

   o  SCHC Packet: A packet (e.g. an IPv6 packet) whose header has been
      compressed as per the header compression mechanism defined in this
      document.  If the header compression process is unable to actually
      compress the packet header, the packet with the uncompressed
      header is still called a SCHC Packet (in this case, a Rule ID is
      used to indicate that the packet header has not been compressed).
      See Section 7 for more details.

   o  TV: Target value.  A value contained in a Rule that will be
      matched with the value of a header field.

   o  Up: Uplink direction for compression/decompression in both sides,
      from the Dev SCHC C/D to the network SCHC C/D.

   o  W: Window bit.  A SCHC Fragment header field used in ACK-on-Error
      or ACK-Always mode Section 8, which carries the same value

   Additional terminology for all
      SCHC Fragments of a window.

   o  Window: A subset of the optional SCHC Fragments needed to carry a SCHC
      Packet (see Fragmentation /
   Reassembly mechanism (SCHC F/R) is found in Section 8). 8.2.

5.  SCHC overview

   SCHC can be abstracted characterized as an adaptation layer between IPv6 and the
   underlying LPWAN technology.  SCHC comprises two sublayers (i.e. the
   Compression sublayer and the Fragmentation sublayer), as shown in
   Figure 2.

                +----------------+
                |      IPv6      |
             +- +----------------+
             |  |   Compression  |
       SCHC <   +----------------+
             |  |  Fragmentation |
             +- +----------------+
                |LPWAN technology|
                +----------------+

        Figure 2: Protocol stack comprising IPv6, SCHC and an LPWAN
                                technology

   As per this document, when a packet (e.g. an IPv6 packet) needs to be
   transmitted, header compression is first applied to the packet.  The
   resulting packet after header compression (whose header may or may
   not actually be smaller than that of the original packet) is called a
   SCHC Packet.  If the SCHC Packet size exceeds needs to be fragmented by the layer 2 (L2) MTU,
   optional SCHC Fragmentation, fragmentation is then applied to the
   SCHC Packet.  The SCHC Packet or the SCHC Fragments are then
   transmitted over the LPWAN.  The reciprocal operations take place at
   the receiver.  This process is illustrated in Figure 3.

   A packet (e.g. an IPv6 packet)
            |                                           ^
            v                                           |
   +------------------+                      +--------------------+
   | SCHC Compression |                      | SCHC Decompression |
   +------------------+                      +--------------------+
            |                                           ^
            |   If no fragmentation (*)                 |
            +-------------- SCHC Packet  -------------->|
            |                                           |
            v                                           |
   +--------------------+                       +-----------------+
   | SCHC Fragmentation |                       | SCHC Reassembly |
   +--------------------+                       +-----------------+
         |     ^                                     |     ^
         |     |                                     |     |
         |     +-------------- SCHC ACK -------------+     |
         |                                                 |
         +-------------- SCHC Fragments -------------------+

           SENDER                                    RECEIVER

   *: the decision to use Fragmentation or not is left to each LPWAN
      technology over which SCHC is applied. See LPWAN
      technology-specific documents. Profile.

         Figure 3: SCHC operations taking place at the sender SENDER and the receiver RECEIVER

5.1.  SCHC Packet format

   The SCHC Packet is composed of the Compressed Header followed by the
   payload from the original packet (see Figure 4).  The Compressed
   Header itself is composed of a the Rule ID and a Compression Residue. Residue,
   which is the output of the compression actions of the Rule that was
   applied (see Section 7).  The Compression Residue may be absent, see Section 7. empty.  Both
   the Rule ID and the Compression Residue potentially have a variable
   size, and generally are not a mutiple of bytes in size.

   |  Rule ID +  Compression Residue |
   +---------------------------------+--------------------+
   |      Compressed Header          |      Payload       |
   +---------------------------------+--------------------+

                           Figure 4: SCHC Packet

   The Fragment Header size is variable and depends on the Fragmentation
   parameters.  The Fragment payload contains a part of the SCHC Packet
   Compressed Header, a part of the SCHC Packet Payload or both.  Its
   size depends on the L2 data unit, see Section 8.  The SCHC Fragment
   has the following format:

   | Rule ID + DTAG + W + FCN [+ MIC ] |   Partial  SCHC Packet  |
   +-----------------------------------+-------------------------+
   |        Fragment Header            |   Fragment  Payload     |
   +-----------------------------------+-------------------------+

                          Figure 5: SCHC Fragment

   The SCHC ACK is only used for Fragmentation.  It has the following
   format:

   |Rule ID + DTag + W|
   +------------------+-------- ... ---------+
   |    ACK Header    |    encoded Bitmap    |
   +------------------+-------- ... ---------+

                            Figure 6: SCHC ACK

   The SCHC ACK Header and the encoded Bitmap both have variable size.

5.2.  Functional mapping

   Figure 7 5 below maps the functional elements of Figure 3 onto the
   LPWAN architecture elements of Figure 1.

        Dev                                                 App
   +----------------+                                  +--------------+
   | APP1 APP2 APP3 |                                  |APP1 APP2 APP3|
   |                |                                  |              |
   |       UDP      |                                  |     UDP      |
   |      IPv6      |                                  |    IPv6      |
   |                |                                  |              |
   |SCHC C/D and F/R|                                  |              |
   +--------+-------+                                  +-------+------+
            |   +--+     +----+     +-----------+              .
            +~~ |RG| === |NGW | === |   SCHC    |... Internet ..
                +--+     +----+     |F/R and C/D|
                                    +-----------+

                          Figure 7: 5: Architecture

   SCHC C/D and SCHC F/R are located on both sides of the LPWAN
   transmission, i.e. on the Dev side and on the Network side.

   Let's describe the

   The operation in the Uplink direction. direction is as follows.  The Device
   application packets use uses IPv6 or IPv6/UDP protocols.  Before sending
   these the
   packets, the Dev compresses their headers using SCHC C/D and, if the
   SCHC Packet resulting from the compression exceeds the maximum
   payload size of the underlying LPWAN technology, needs to be fragmented by
   SCHC, SCHC F/R is performed (see Section 8).  The resulting SCHC
   Fragments are sent as
   one or more L2 frames to an LPWAN Radio Gateway (RG) which forwards them
   to a Network Gateway (NGW).  The NGW sends the data to a SCHC F/
   R F/R for
   re-assembly (if needed) and then to the SCHC C/D for decompression.
   After decompression, the packet can be sent over the Internet to one
   or several LPWAN Application Servers (App).

   The SCHC F/R and C/D on the Network side can be located in the NGW NGW,
   or somewhere else as long as a tunnel is established between them and
   the NGW.  Note that, for some LPWAN technologies, it MAY be suitable
   to locate the SCHC F/
   R F/R functionality nearer the NGW, in order to
   better deal with time constraints of such technologies.

   The SCHC C/D and F/R on both sides MUST share the same set of Rules.  After decompression, the packet
   can be sent over the Internet to one or several LPWAN Application
   Servers (App).

   The SCHC C/D and F/R process is symmetrical, therefore the
   description of the Downlink direction trivially derives from is symmetrical to the one
   above.

6.  Rule ID

   Rule IDs are identifiers used to select the correct context either
   for Compression/Decompression or for Fragmentation/Reassembly.

   The size of the Rule IDs is not specified in this document, as it is
   implementation-specific and can vary according to the LPWAN
   technology and the number of Rules, among others.  It is defined in
   Profiles.

   The Rule IDs are used:

   o  In the SCHC C/D context, to identify the Rule (i.e., the set of
      Field Descriptions) that is used to compress a packet header.

   o  At least one Rule ID MAY be allocated to tagging packets for which
      SCHC compression was not possible (no matching Rule was found).

   o  In SCHC F/R, to identify the specific modes and settings of SCHC
      Fragments being transmitted, and to identify the SCK SCHC ACKs,
      including their modes and settings.  Note that in the case of
      bidirectional communication, when F/R is used
      for both communication directions, at least two Rule ID values are
      therefore needed for F/R.

7.  Static Context Header Compression

   In order to perform header compression, this document defines a
   mechanism called Static Context Header  Compression/Decompression

   Compression (SCHC), which with SCHC is based on using context, i.e. a set of Rules
   to compress or decompress headers.  SCHC avoids context
   synchronization, which is the most
   bandwidth-consuming operation consumes considerable bandwidth in other
   header compression mechanisms such as RoHC [RFC5795].  Since the nature
   content of packets is highly predictable in LPWAN networks, static
   contexts MAY be stored beforehand to omit transmitting some
   information over the air.  The contexts MUST be stored at both ends,
   and they can be learned by a provisioning protocol or by out of band
   means, or they can be pre-
   provisioned. pre-provisioned.  The way the contexts are
   provisioned on both ends is out of the scope of this document.

7.1.  SCHC C/D Rules

   The main idea of the SCHC compression scheme is to transmit the Rule
   ID to the other end instead of sending known field values.  This Rule
   ID identifies a Rule that provides the closest match to the original
   packet values.  Hence, when a value is known by both ends, it is only
   necessary to send the corresponding Rule ID over the LPWAN network.
   How
   The manner by which Rules are generated is out of the scope of this
   document.  The Rules MAY be changed at run-time but the way to do mechanism is
   out of scope of this will be
   specified in another document.

   The context contains a list of Rules (cf. (see Figure 8). 6).  Each Rule
   itself contains a list of Field Descriptions composed of a Field
   Identifier (FID), a Field Length (FL), a Field Position (FP), a
   Direction Indicator (DI), a Target Value (TV), a Matching Operator
   (MO) and a Compression/Decompression Action (CDA).

     /-----------------------------------------------------------------\
     |                         Rule N                                  |
    /-----------------------------------------------------------------\|
    |                       Rule i                                    ||
   /-----------------------------------------------------------------\||
   |  (FID)            Rule 1                                        |||
   |+-------+--+--+--+------------+-----------------+---------------+|||
   ||Field 1|FL|FP|DI|Target Value|Matching Operator|Comp/Decomp Act||||
   |+-------+--+--+--+------------+-----------------+---------------+|||
   ||Field 2|FL|FP|DI|Target Value|Matching Operator|Comp/Decomp Act||||
   |+-------+--+--+--+------------+-----------------+---------------+|||
   ||...    |..|..|..|   ...      | ...             | ...           ||||
   |+-------+--+--+--+------------+-----------------+---------------+||/
   ||Field N|FL|FP|DI|Target Value|Matching Operator|Comp/Decomp Act|||
   |+-------+--+--+--+------------+-----------------+---------------+|/
   |                                                                 |
   \-----------------------------------------------------------------/

               Figure 8: 6: A Compression/Decompression Context

   A Rule does not describe how to parse a packet header to find each
   field.  This MUST be known from the compressor/decompressor.  Rules
   only describe the compression/decompression behavior for each header
   field.  In a Rule, the Field Descriptions are listed in the order in
   which the fields appear in the packet header.

   A Rule also describes what Compression Residue is sent. sent in the Compression Residue.  The
   Compression Residue is assembled by concatenating the residues for
   each field, in the order the Field Descriptions appear in the Rule.

   The Context describes the header fields and its values with the
   following entries:

   o  Field ID (FID) is a unique value to define the header field.

   o  Field Length (FL) represents the length of the field.  It can be
      either a fixed value (in bits) if the length is known when the
      Rule is created or a type if the length is variable.  The length
      of a header field is defined in the corresponding protocol
      specification.  The type defines the process to compute the
      length, its unit (bits, bytes,...) and the value to be sent before
      the Compression Residue.

   o  Field Position (FP): most often, a field only occurs once in a
      packet header.  Some fields may occur multiple times in a header.
      FP indicates which occurrence this Field Description applies to.
      The default value is 1 (first occurence).

   o  A Direction Indicator (DI) indicates the packet direction(s) this
      Field Description applies to.  Three values are possible:

      *  UPLINK (Up): this Field Description is only applicable to
         packets sent by the Dev to the App,

      *  DOWNLINK (Dw): this Field Description is only applicable to
         packets sent from the App to the Dev,

      *  BIDIRECTIONAL (Bi): this Field Description is applicable to
         packets travelling both Up and Dw.

   o  Target Value (TV) is the value used to make the match with against the packet
      header field.  The Target Value can be of any type (integer,
      strings, etc.).  For instance, it  It can be a single value or a more complex
      structure (array, list, etc.), such as a JSON or a CBOR structure.

   o  Matching Operator (MO) is the operator used to match the Field
      Value and the Target Value.  The Matching Operator may require
      some parameters.  MO is only used during the compression phase.
      The set of MOs defined in this document can be found in
      Section 7.4.

   o  Compression Decompression Action (CDA) describes the compression
      and decompression processes to be performed after the MO is
      applied.  Some CDAs MAY require parameter values for their
      operation.  CDAs are used in both the compression and the
      decompression functions.  The set of CDAs defined in this document
      can be found in Section 7.5.

7.2.  Rule ID for SCHC C/D

   Rule IDs are sent by the compression function in one side and are
   received for the decompression function in the other side.  In SCHC
   C/D, the Rule IDs are specific to a Dev. Hence, multiple Dev
   instances MAY use the same Rule ID to define different header
   compression contexts.  To identify the correct Rule ID, the SCHC C/D
   needs to correlate associate the Rule ID with the Dev identifier to find the
   appropriate Rule to be applied.

7.3.  Packet processing

   The compression/decompression process follows several steps:

   o  Compression Rule selection: The goal is to identify which Rule(s)
      will be used to compress the packet's headers.  When doing performing
      decompression, on the network side the SCHC C/D needs to find the
      correct Rule based on the L2 address and address; in this way, it can use the
      DevIID and the Rule ID.  On the Dev side, only the Rule ID is
      needed to identify the correct Rule since the Dev typically only
      holds Rules that apply to itself.  The Rule will be selected by
      matching the Fields Descriptions to the packet header as described
      below.  When the selection of a Rule is done, this Rule is used to
      compress the header.  The detailed steps for compression Rule
      selection are the following:

      *  The first step is to choose the Field Descriptions by their
         direction, using the Direction Indicator (DI).  A Field
         Description that does not correspond to the appropriate DI will
         be ignored.  If all the fields of the packet do not have a
         Field Description with the correct DI, the Rule is discarded
         and SCHC C/D proceeds to explore consider the next Rule.

      *  When the DI has matched, then the next step is to identify the
         fields according to Field Position (FP).  If FP does not
         correspond, the Rule is not used and the SCHC C/D proceeds to
         consider the next Rule.

      *  Once the DI and the FP correspond to the header information,
         each packet field's value is then compared to the corresponding
         Target Value (TV) stored in the Rule for that specific field
         using the matching operator (MO).

         If all the fields in the packet's header satisfy all the
         matching operators (MO) of a Rule (i.e. all MO results are
         True), the fields of the header are then compressed according
         to the Compression/Decompression Actions (CDAs) and a
         compressed header (with possibly a Compression Residue) SHOULD
         be obtained.  Otherwise, the next Rule is tested.

      *  If no eligible compression Rule is found, then the header MUST
         be sent without compression.  This MAY compression, using a Rule ID dedicated to this
         purpose.  Sending the header uncompressed but may require the
         use of the SCHC F/R process.

   o  Sending: If an eligible Rule is found, the The Rule ID is sent to the other end followed by the
      Compression Residue (which could be empty) or the uncompressed
      header, and directly followed by the payload.  The Compression
      Residue is the concatenation of the Compression Residues for each
      field according to the CDAs for that Rule.  The way the Rule ID is
      sent depends on the specific underlying LPWAN technology. Profile.  For example, it can be either
      included in an L2 header or sent in the first byte of the L2
      payload.  (Cf. (see Figure 9). 4).  This process will be specified in the LPWAN technology-specific document
      Profile and is out of the scope of the present document.  On LPWAN
      technologies that are byte-oriented, the compressed header
      concatenated with the original packet payload is padded to a
      multiple of 8 bits, if needed.  See Section 9 for details.

   o  Decompression: When doing decompression, on the network side the
      SCHC C/D needs to find the correct Rule based on the L2 address
      and in this way, it can use the DevIID and the Rule ID.  On the
      Dev side, only the Rule ID is needed to identify the correct Rule
      since the Dev only holds Rules that apply to itself.

      The receiver identifies the sender through its device-id or source
      identifier (e.g.  MAC address, if it exists) and selects the appropriate Rule from the Rule ID.  If a source identifier is present in the L2 technology,
      it is used to select
      using the Rule ID.  This Rule describes the compressed header
      format and associates the values received Compression Residue to each of
      the header fields.  The  For each field in the header, the receiver
      applies the CDA action associated to that field in order to
      reconstruct the original header fields. field value.  The CDA application
      order can be different from the order given by in which the fields are
      listed in the Rule.  For instance,  In particular, Compute-* SHOULD MUST be applied at the end,
      after the application of the CDAs of all the other CDAs.

   +--- ... --+------- ... -------+------------------+
   |  Rule ID |Compression Residue|  packet payload  |
   +--- ... --+------- ... -------+------------------+

   |----- compressed header ------|

                     Figure 9: SCHC C/D Packet Format fields it computes
      on.

7.4.  Matching operators

   Matching Operators (MOs) are functions used by both SCHC C/D
   endpoints involved in the header compression/decompression.  They are
   not typed and can be indifferently applied to integer, string or any other data
   type.  The result of the operation can either be True or False.  MOs
   are defined as follows:

   o  equal: The match result is True if a the field value in a packet and the value in packet
      matches the TV are equal. TV.

   o  ignore: No check is done between a the field value in a the packet and a
      the TV in the Rule.  The result of the matching is always true.

   o  MSB(x): A match is obtained if the most significant x bits of the
      packet header field value are equal to the TV in the Rule.  The x
      parameter of the MSB MO indicates how many bits are involved in
      the comparison.  If the FL is described as variable, the length
      must be a multiple of the unit.  For example, x must be multiple
      of 8 if the unit of the variable length is in bytes.

   o  match-mapping: With match-mapping, the Target Value is a list of
      values.  Each value of the list is identified by a short ID (or
      index).  Compression is achieved by sending the index instead of
      the original header field value.  This operator matches if the
      header field value is equal to one of the values in the target
      list.

7.5.  Compression Decompression Actions (CDA)

   The Compression Decompression Action (CDA) describes the actions
   taken during the compression of headers fields, and inversely, the
   action taken by the decompressor to restore the original value.

   /--------------------+-------------+----------------------------\
   |  Action            | Compression | Decompression              |
   |                    |             |                            |
   +--------------------+-------------+----------------------------+
   |not-sent            |elided       |use value stored in context |
   |value-sent          |send         |build from received value   |
   |mapping-sent        |send index   |value from index on a table |
   |LSB                 |send LSB     |TV, received value          |
   |compute-length      |elided       |compute length              |
   |compute-checksum    |elided       |compute UDP checksum        |
   |DevIID              |elided       |build IID from L2 Dev addr  |
   |AppIID              |elided       |build IID from L2 App addr  |
   \--------------------+-------------+----------------------------/

              Figure 10: 7: Compression and Decompression Actions

   Figure 10 7 summarizes the basic functions actions that can be used to compress
   and decompress a field.  The first column lists shows the actions action's name.
   The second and third columns outline show the reciprocal compression/
   decompression behavior for each action.

   Compression is done in the order that Fields the Field Descriptions appear
   in a Rule.  The result of each Compression/Decompression Action is
   appended to the working accumulated Compression Residue in that same order.
   The receiver knows the size of each compressed field field, which can be
   given by the Rule or MAY be sent with the compressed header.

7.5.1.  processing variable-length fields

   If the field is identified as being variable in the Field
   Description, Description as being of
   variable size, then the size of the Compression Residue value (using
   the unit defined in the FL) MUST first be sent first using the following
   coding: as follows:

   o  If the size is between 0 and 14, it is sent as a 4-bits unsigned
      integer.

   o  For values between 15 and 254, the first 4 bits sent are set to 1 0b1111 is transmitted and then the
      size is sent using as an 8 bits unsigned integer.

   o  For higher larger values of size, the first 12 bits are set to 1 size, 0xfff is transmitted and then the
      next two bytes contain the size value as a 16 bits unsigned
      integer.

   If a field is not present in the packet but exists in the Rule and
   its FL is specified as being variable, size 0 MUST be sent to denote
   its absence.

7.5.1.

7.5.2.  not-sent CDA

   The not-sent function action is generally used when the field value is
   specified in a Rule and therefore known by both the Compressor and
   the Decompressor.  This action is generally SHOULD be used with the "equal" MO.
   If MO is "ignore", there is a risk to have a decompressed field value
   different from the original field that was compressed.

   The compressor does not send any Compression Residue for a field on
   which not-sent compression is applied.

   The decompressor restores the field value with the Target Value
   stored in the matched Rule identified by the received Rule ID.

7.5.2.

7.5.3.  value-sent CDA

   The value-sent action is generally used when the field value is not
   known by both the Compressor and the Decompressor.  The value is sent
   as a residue in the compressed message header.  Both Compressor and
   Decompressor MUST know the size of the field, either implicitly (the
   size is known by both sides) or by explicitly indicating the length
   in the Compression Residue, as defined in Section 7.5. 7.5.1.  This function action
   is generally used with the "ignore" MO.

7.5.3.

7.5.4.  mapping-sent CDA

   The mapping-sent action is used to send a smaller an index (the index into the
   Target Value list of values) instead of the original value.  This
   function
   action is used together with the "match-mapping" MO.

   On the compressor side, the match-mapping Matching Operator searches
   the TV for a match with the header field value and the mapping-sent
   CDA appends the corresponding index to the Compression Residue to be
   sent.  On the decompressor side, the CDA uses the received index to
   restore the field value by looking up the list in the TV.

   The number of bits sent is the minimal size for coding all the
   possible indices.

7.5.4.

7.5.5.  LSB CDA

   The LSB action is used together with the "MSB(x)" MO to avoid sending
   the most significant part of the packet field if that part is already
   known by the receiving end.  The number of bits sent is the original
   header field length minus the length specified in the MSB(x) MO.

   The compressor sends the Least Significant Bits (e.g.  LSB of the
   length field).  The decompressor concatenates the x most significant
   bits of Target Value and the received residue.

   If this action needs to be done on a variable length field, the size
   of the Compression Residue in bytes MUST be sent as described in
   Section 7.5.

7.5.5. 7.5.1.

7.5.6.  DevIID, AppIID CDA

   These functions actions are used to process respectively the Dev and the App
   Interface Identifiers (DevIID and AppIID) of the IPv6 addresses.
   AppIID CDA is less common since most current LPWAN technologies
   frames contain a single L2 address, which is the Dev's address.

   The IID value MAY be computed from the Device ID present in the L2
   header, or from some other stable identifier.  The computation is
   specific to each LPWAN technology Profile and MAY depend on the Device ID size.

   In the downlink direction (Dw), at the compressor, this the DevIID CDA may
   be used to generate the L2 addresses on the LPWAN, based on the
   packet destination address.

7.5.6.
   packet's Destination Address.

7.5.7.  Compute-*

   Some fields are may be elided during compression and reconstructed during
   decompression.  This is the case for length and checksum, so:

   o  compute-length: computes the length assigned to this field.  This
      CDA MAY be used to compute IPv6 length or UDP length.

   o  compute-checksum: computes a checksum from the information already
      received by the SCHC C/D.  This field MAY be used to compute UDP
      checksum.

8.  Fragmentation  Fragmentation/Reassembly

8.1.  Overview

   In LPWAN technologies, the L2 data unit size MTU typically varies ranges from tens to
   hundreds of bytes.  The SCHC F/R (Fragmentation /Reassembly)
   MAY be used either because after applying SCHC C/D or when SCHC C/D
   is  Some of these technologies do not possible the entire SCHC Packet still exceeds the L2 data
   unit. have an
   internal fragmentation/reassembly mechanism.

   The SCHC F/R Fragmentation/Reassembly (SCHC F/R) functionality defined in this document has been designed
   under the assumption that data unit out-of-sequence delivery will not
   happen between the entity performing fragmentation and the entity
   performing reassembly.  This assumption allows reducing the
   complexity and overhead of the SCHC F/R mechanism.

   This document also assumes that the L2 data unit size does not vary
   while a fragmented SCHC Packet is being transmitted.

   To adapt the SCHC F/R offered
   as an option for such LPWAN technologies to cope with the capabilities IPv6 MTU
   requirement of LPWAN technologies, it 1280 bytes [RFC8200].  It is required to enable optional SCHC Fragment retransmission and to implement.
   If it is not needed, its description can be safely ignored.

   This specification includes several SCHC F/R modes, which allow for a
   range of reliability options such as optional SCHC Fragment
   retransmission.  More modes may be defined in the future.

   The same SCHC F/R mode MUST be used for sending all SCHC Fragments of the
   same fragmented SCHC
   Fragments. Packet.  This document does not make any
   decision with regard to which SCHC Fragment delivery reliability mode mode(s) will be used over a specific
   LPWAN technology.  These details  This will be defined in other
   technology-specific documents. Profiles.

   SCHC F/R uses the knowledge of the L2 Word size (see Section 4) to
   encode some messages.  Therefore, SCHC MUST know the L2 Word size.
   SCHC F/R usually generates SCHC Fragments and SCHC ACKs that are, for most of
   them, are
   multiples of L2 Words.  The padding overhead is kept to the absolute minimum.  See
   minimum (see Section 9. 9).

8.2.  Fragmentation  SCHC F/R Tools

   This subsection describes the different tools that are used to enable
   the SCHC F/R functionality defined in this document, such as fields
   in document.  These tools
   include the SCHC F/R header frames (see the related formats in
   Section 8.4), windows and timers.

   o  Rule ID.  The Rule ID is present in the SCHC Fragment header messages, tiles, windows, counters, timers and
      in the SCHC ACK
   header formats. fields.

   The Rule ID tools are described here in a generic manner.  Their application
   to each SCHC Fragment
      header F/R mode is found in Section 8.4.

8.2.1.  Messages

   The messages that can be used to identify by SCHC F/R are the following:

   o  SCHC Fragment: A data unit that carries a piece of a SCHC Fragment is being carried,
      which Packet
      from the sender to the receiver.

   o  SCHC F/R reliability mode ACK: An acknowledgement for fragmentation, by the receiver to
      the sender.  This message is used and which window size is
      used.  The Rule ID in to report on the successful
      reception of pieces of, or the whole of the fragmented SCHC Fragment header also allows
      interleaving non-fragmented SCHC Packets and SCHC Fragments that
      carry other
      Packet.

   o  SCHC Packets.  The Rule ID in ACK REQ: An explicit request for a SCHC ACK identifies ACK.  By the sender
      to the receiver.

   o  SCHC Sender-Abort: A message as by the sender telling the receiver
      that it has aborted the transmission of a fragmented SCHC ACK. Packet.

   o  Fragment Compressed Number (FCN).  The FCN is included in all  SCHC
      Fragments.  This field can be understood as a truncated, efficient
      representation Receiver-Abort: A message by the receiver to tell the sender
      to abort the transmission of a larger-sized fragment number, and does not
      carry fragmented SCHC Packet.

8.2.2.  Tiles, Windows, Bitmaps, Timers, Counters

8.2.2.1.  Tiles

   The SCHC Packet is fragmented into pieces, hereafter called tiles.
   The tiles MUST be contiguous.

   See Figure 8 for an absolute example.

                                  SCHC Packet
       +----+--+-----+---+----+-+---+---+-----+...-----+----+---+------+
Tiles  |    |  |     |   |    | |   |   |     |        |    |   |      |
       +----+--+-----+---+----+-+---+---+-----+...-----+----+---+------+

                Figure 8: a SCHC Packet fragmented in tiles

   Each SCHC Fragment number.  There are two FCN
      reserved values that are used for controlling message carries at least one tile in its Payload,
   if the Payload field is present.

8.2.2.2.  Windows

   Some SCHC F/R
      process, as described next:

      *  The FCN value with modes may handle successive tiles in groups, called
   windows.

   If windows are used

   o  all the bits equal to 1 (All-1) denotes the
         last SCHC Fragment windows of a packet.  The SCHC Packet, except the last window one, MUST
      contain the same number of a packet tiles.  This number is
         called an All-1 window.

      *  The FCN value with all WINDOW_SIZE.

   o  WINDOW_SIZE MUST be specified in a Profile.

   o  the bits equal to windows are numbered.

   o  their numbers MUST increase from 0 (All-0) denotes upward, from the
         last SCHC Fragment start of a window that is not the last one of
      SCHC Packet to its end.

   o  the
         packet.  Such a last window is called an All-0 window.

      The rest of the FCN values MUST contain WINDOW_SIZE tiles or less.

   o  tiles are assigned in a sequentially
      decreasing order, which has numbered within each window.

   o  the purpose to avoid possible
      ambiguity for tile numbers MUST decrement from WINDOW_SIZE - 1 downward,
      looking from the receiver that might arise under certain
      conditions.  In start of the SCHC Fragments, this field Packet toward its end.

   o  each tile of a SCHC Packet is therefore uniquely identified by a
      window number and a tile number within this window.

   See Figure 9 for an unsigned
      integer, with example.

         +---------------------------------------------...-------------+
         |                         SCHC Packet                         |
         +---------------------------------------------...-------------+

Tile #   | 4 | 3 | 2 | 1 | 0 | 4 | 3 | 2 | 1 | 0 | 4 |     | 0 | 4 | 3 |
Window # |-------- 0 --------|-------- 1 --------|- 2  ... 27 -|-- 28 -|

    Figure 9: a size SCHC Packet fragmented in tiles grouped in 28 windows,
                           with WINDOW_SIZE = 5

   When windows are used

   o  information on the correct reception of N bits.  In the No-ACK mode, tiles belonging to the size
      same window MUST be grouped together.

   o  it is
      set to 1 bit (N=1), All-0 RECOMMENDED that this information is used kept in all SCHC Fragments and All-1
      for Bitmaps.

   o  Bitmaps MAY be sent back to the last one.  For sender in a SCHC ACK message.

   o  Each window has a Bitmap.

8.2.2.3.  Bitmaps

   Each bit in the other reliability modes, it is
      recommended to use Bitmap for a number of bits (N) equal window corresponds to or greater than
      3.  Nevertheless, the appropriate value of N MUST be defined a tile in the corresponding technology-specific profile documents.  For
   window.  Each Bitmap has therefore WINDOW_SIZE bits.  The bit at the
   left-most position corresponds to the tile numbered WINDOW_SIZE - 1.
   Consecutive bits, going right, correspond to sequentially decreasing
   tile numbers.  In Bitmaps for windows that are not the last one of a fragmented
   SCHC Packet, the
      FCN for the last SCHC Fragment in such windows is an All-0.  This
      indicates that bit at the window is finished and communication proceeds
      according right-most position corresponds to the reliability mode in use.  The FCN for
   tile numbered 0.  In the last
      SCHC Fragment in Bitmap for the last window is an All-1, indicating window, the last
      SCHC Fragment of bit at the SCHC Packet.  It is also important
   right-most position corresponds either to note
      that, in the No-ACK mode tile numbered 0 or when N=1, the to a
   tile that is sent/received as "the last SCHC Fragment one of the packet will carry a FCN equal to 1, while all previous SCHC
      Fragments will carry a FCN to 0.  For further details see Packet"
   without explicitely stating its number (see Section 8.5.  The highest FCN in 8.3.1.2).

   At the window, denoted MAX_WIND_FCN,
      MUST be receiver
   o  a value equal to or smaller than 2^N-2.  (Example for N=5,
      MAX_WIND_FCN MAY be bit set to 23, then subsequent FCNs are set
      sequentially and 1 in decreasing order, and the FCN will wrap from 0
      back to 23). Bitmap indicates that a tile associated with
      that bit position has been correctly received for that window.

   o  Datagram Tag (DTag).  The DTag field, if present, is  a bit set to 0 in the
      same value for all SCHC Fragments carrying the same SCHC
      packet, and to different values Bitmap indicates that no tile associated
      with that bit position has been correctly received for different SCHC Packets.  Using
      this field, the sender can interleave fragments from different
      SCHC Packets, while the receiver can still tell them apart.  In
      the SCHC Fragment formats, that
      window.

   WINDOW_SIZE finely controls the size of the DTag field is T bits,
      which MAY be set to a value greater than or equal to 0 bits.  For
      each new SCHC Packet processed by Bitmap sent in the sender, DTag MUST SCHC
   ACK message, which may be
      sequentially increased, from 0 to 2^T - 1 wrapping back from 2^T -
      1 critical to 0.  In the some LPWAN technologies.

8.2.2.4.  Timers and counters

   Some SCHC ACK format, DTag carries the same value as
      the DTag field in F/R modes can use the SCHC Fragments for which following timers and counters

   o  Inactivity Timer: this SCHC ACK is
      intended.  When there is no Dtag, there timer can be only one SCHC
      Packet in transit.  Only after all its fragments have been
      transmitted can another used to unlock a SCHC Packet be sent.  The length of DTag,
      denoted T, Fragment
      receiver that is not specified in this document because receiving a SCHC F/R message while it is
      technology dependant.  It will
      expecting one.

   o  Retransmission Timer: this timer can be defined in the corresponding
      technology-specific documents, based on the number of simultaneous
      packets that are used by a SCHC Fragment
      sender to be supported.

   o  W (window): W is set a 1-bit field.  This field carries timeout on expecting a SCHC ACK.

   o  Attempts: this counter counts the same value requests for all SCHC Fragments of a window, and it ACKs.
      MAX_ACK_REQUESTS is complemented for the
      next window.  The initial value for this field threshold at which an exception is 0.  In the SCHC
      ACK format, this field also has a size of 1 bit.  In all SCHC
      ACKs, the W bit carries the same value as the W bit carried by the raised.

8.2.3.  Integrity Checking

   The reassembled SCHC Fragments whose reception Packet is being positively or negatively
      acknowledged by checked for integrity at the SCHC ACK.

   o  Message receive
   end.  Integrity Check (MIC).  This field checking is computed performed by computing a MIC at the
   sender over the complete SCHC Packet side and before SCHC
      fragmentation.  The MIC allows the receiver transmitting it to check errors in the
      reassembled packet, while it also enables compressing receiver for comparison with
   the locally computed MIC.

   The MIC supports UDP checksum elision by use of SCHC compression. C/D (see
   Section 10.11).

   The CRC32 as polynomial 0xEDB88320 (i.e. the reverse representation of
   the polynomial used e.g. in the Ethernet standard [RFC3385]) is recommended
   RECOMMENDED as the default algorithm for computing the MIC.
   Nevertheless, other MIC lengths or other algorithms MAY be required and are defined in
   by the technology-specific
      documents as well as Profile.

   Note that the length in bits concatenation of the MIC used.

   o  C (MIC checked): C is a 1-bit field.  This field is used in the complete SCHC ACK packets to report the outcome of the MIC check, i.e.
      whether Packet and the reassembled packet was correctly received or not.  A
      value
   potential padding bits of 1 represents a positive MIC check at the receiver side
      (i.e. the MIC computed by the receiver matches the received MIC).

   o  Retransmission Timer.  A last SCHC Fragment sender uses it after the
      transmission does not generally
   constitute an integer number of a window bytes.  For implementers to detect a transmission error be able
   to use byte-oriented CRC libraries, it is RECOMMENDED that the
   concatenation of the complete SCHC ACK corresponding to this window.  Depending on Packet and the
      reliability mode, it will lead last fragment
   potential padding bits be zero-extended to a request a SCHC ACK
      retransmission (in ACK-Always mode) or it will trigger the
      transmission of the next window (in ACK-on-Error mode).  The
      duration of this timer is not defined in this document byte boundary and MUST be
      defined in
   that the corresponding technology-specific documents.

   o  Inactivity Timer. MIC be computed on that byte array.  A Profile MAY specify
   another behaviour.

8.2.4.  Header Fields

   The SCHC Fragment receiver uses it to take action
      when there F/R messages use the following fields (see the related
   formats in Section 8.3):

   o  Rule ID: this field is a problem present in all the transmission of SCHC fragments.
      Such a problem could be detected by the receiver not getting F/R messages.  It
      is used to identify

      *  that a
      single SCHC Fragment during a given period of time.  When this
      happens, an Abort F/R message will be sent (see related text later in
      this section).  Initially, and each time a is being carried, as opposed to an
         unfragmented SCHC Fragment Packet,

      *  which SCHC F/R mode is
      received, used

      *  and among this mode

         +  if windows are used and what the timer is reinitialized.  The duration value of this timer
      is not defined in this document WINDOW_SIZE is,

         +  what other optional fields are present and MUST be defined in what the
      corresponding technology-specific document.

   o  Attempts.  This counter counts field
            sizes are.

      Therefore, the requests for a missing Rule ID allows SCHC
      ACK.  When it reaches the value MAX_ACK_REQUESTS, the sender
      assumes there are recurrent F/R interleaving non-fragmented
      SCHC Fragment transmission errors Packets and
      determines SCHC Fragments that an Abort is needed. carry other SCHC Packets, or
      interleaving SCHC Fragments that use different SCHC F/R modes or
      different parameters.

   o  Datagram Tag (DTag).  The default value
      MAX_ACK_REQUESTS DTag field is not stated in this document, optional.  Its presence
      and it size (called T, in bits) is
      expected to be defined by each Profile for each
      Rule ID.

      When there is no DTag, there can be only one fragmented SCHC
      Packet in transit for a given Rule ID.

      If present, DTag

      *  MUST be set to the corresponding technology-specific
      document.  The Attempts same value for all the SCHC F/R messages
         related to the same fragmented SCHC Packet,

      *  MUST be set to different values for SCHC F/R messages related
         to different SCHC Packets that are being fragmented under the
         same Rule ID and that may overlap during the fragmented
         transmission.

      A sequence counter that is defined per window.  It is
      initialized incremented for each time a new window fragmented
      SCHC Packet, counting from 0 to up to (2^T)-1 and wrapping back to
      0 is used. RECOMMENDED for maximum traceability and replay avoidance.

   o  Bitmap.  W: The Bitmap W field is a sequence of bits carried optional.  It is only present if windows are
      used.  Its presence and size (called M, in a bits) is defined by
      each SCHC ACK.
      Each bit in the Bitmap corresponds F/R mode and each Profile for each Rule ID.

      This field carries information pertaining to the window a SCHC fragment of F/R
      message relates to.  If present, W MUST carry the
      current window, and provides feedback on whether same value for
      all the SCHC Fragment
      has been received or not.  The right-most position F/R messages related to the same window.  Depending
      on the Bitmap
      reports if mode and Profile, W may carry the All-0 or All-1 fragment has been received full window number, or not.
      Feedback on
      just the SCHC fragment with least significant bit or any other partial representation
      of the highest window number.

   o  Fragment Compressed Number (FCN).  The FCN value field is
      provided present in the
      SCHC Fragment Header.  Its size (called N, in bits) is defined by
      each Profile for each Rule ID.

      This field conveys information about the bit progress in the left-most position sequence
      of the Bitmap.  In
      the Bitmap, a bit set to 1 indicates that the tiles being transmitted by SCHC Fragment messages.  For
      example, it can contain a partial, efficient representation of FCN
      corresponding to that bit position has been correctly sent and
      received. a
      larger-sized tile number.  The text above describes the internal representation description of the Bitmap.  When inserted in exact use of the
      FCN field is left to each SCHC ACK F/R mode.  However, two values are
      reserved for transmission from special purposes.  They help control the receiver to SCHC F/R
      process:

      *  The FCN value with all the sender, bits equal to 1 (called All-1)
         signals the Bitmap is shortened for energy/
      bandwidth optimisation, see more details in Section 8.4.3.1.

   o  Abort.  On expiration very last tile of a SCHC Packet.  By extension, if
         windows are used, the Inactivity timer, or when Attempts
      reaches MAX_ACK_REQUESTS or upon occurrence last window of some other error,
      the sender or the receiver may use the Abort.  When the receiver
      needs to abort a packet is called the on-going fragmented SCHC Packet transmission,
      it sends
         All-1 window.

      *  If windows are used, the Receiver-Abort format.  When FCN value with all the sender needs bits equal to
      abort the transmission, it sends the Sender-Abort format.  None of 0
         (called All-0) signals the Aborts are acknowledged.

8.3.  Reliability modes

   This specification defines three reliability modes: No-ACK, ACK-
   Always, and ACK-on-Error.  ACK-Always and ACK-on-Error operate on
   windows last tile of SCHC Fragments.  A a window of SCHC Fragments that is a subset of not
         the full set last one of the SCHC Fragments needed to carry packet.  By extension, such a SCHC Packet.

   o  No-ACK.  No-ACK window
         is the simplest SCHC Fragment reliability mode. called an All-0 window.

      The receiver does not generate overhead in the form highest value of
      acknowledgements (ACKs).  However, this mode does not enhance
      reliability beyond FCN (an unsigned integer) is called
      MAX_WIND_FCN.  Since All-1 is reserved, MAX_WIND_FCN MUST be
      stricly less that offered by the underlying LPWAN
      technology.  In the No-ACK mode, (2^N)-1.

   o  Message Integrity Check (MIC).  This field only appears in the receiver MUST NOT issue
      All-1 SCHC
      ACKs.  See further details Fragments.  Its size (called T, in bits) is defined by
      each Profile for each Rule ID.

      See Section 8.5.1. 8.2.3 for the MIC default size, default polynomials
      and details on its computation.

   o  ACK-Always.  The ACK-Always mode provides flow control using  C (integrity Check): C is a
      windowing scheme. 1-bit field.  This mode field is also able to handle long bursts of
      lost SCHC Fragments since detection of such events can be done
      before used in
      the end of SCHC ACK message to report on the reassembled SCHC Packet transmission as long as
      integrity check (see Section 8.2.3).

      A value of 1 tells that the
      window size integrity check was performed and is short enough.  However, such benefit comes at the
      expense
      successful.  A value of SCHC ACK use.  In ACK-Always, 0 tells that the receiver sends a SCHC
      ACK after integrity check was not
      performed, or that is was a window of SCHC Fragments has been received. failure.

   o  Compressed Bitmap.  The SCHC
      ACK Compressed Bitmap is used to inform the sender which SCHC Fragments together with
      windows and Bitmaps (see Section 8.2.2.3).  Its presence and size
      is defined for each F/R mode for each Rule ID.

      This field appears in the
      current window have been well received.  Upon a SCHC ACK
      reception, message to report on the sender retransmits
      receiver Bitmap (see Section 8.3.2.1).

8.3.  SCHC F/R Message Formats

   This section defines the lost SCHC Fragments.  When a Fragment formats, the SCHC ACK is lost and the sender has not received it by the
      expiration of the Retransmission Timer, format,
   the sender uses a SCHC ACK
      request by sending REQ format and the All-0 empty SCHC Abort formats.

8.3.1.  SCHC Fragment when it is not
      the last window and the All-1 empty Fragment when it is the last
      window.  The maximum number of SCHC ACK requests is
      MAX_ACK_REQUESTS.  If MAX_ACK_REQUESTS is reached, the
      transmission needs to be aborted.  See further details in
      Section 8.5.2.

   o  ACK-on-Error.  The ACK-on-Error mode is suitable for links
      offering relatively low L2 data unit loss probability.  In this
      mode, the SCHC Fragment receiver reduces the number of SCHC ACKs
      transmitted, which MAY be especially beneficial in asymmetric
      scenarios.  The receiver transmits a SCHC ACK only after the
      complete window transmission and if at least one SCHC Fragment of
      this window has been lost.  An exception to this behavior is in
      the last window, where the receiver MUST transmit a SCHC ACK,
      including the C bit set based on the MIC checked result, even if
      all the SCHC Fragments of the last window have been correctly
      received.  The SCHC ACK gives the state of all the SCHC Fragments
      of the current window (received or lost).  Upon a SCHC ACK
      reception, the sender retransmits any lost SCHC Fragments based on
      the SCHC ACK.  If a SCHC ACK is not transmitted back by the
      receiver at the end of a window, the sender assumes that all SCHC
      Fragments have been correctly received.  When a SCHC ACK is lost,
      the sender assumes that all SCHC Fragments covered by the lost
      SCHC ACK have been successfully delivered, so the sender continues
      transmitting the next window of SCHC Fragments.  If the next SCHC
      Fragments received belong to the next window and it is still
      expecting fragments from the previous window, the receiver will
      abort the on-going fragmented packet transmission.  See further
      details in Section 8.5.3.

   The same reliability mode MUST be used for all SCHC Fragments of a
   SCHC Packet.  The decision on which reliability mode will be used and
   whether the same reliability mode applies to all SCHC Packets is an
   implementation problem and is out of the scope of this document.

   Note that the reliability mode choice is not necessarily tied to a
   particular characteristic of the underlying L2 LPWAN technology, e.g.
   the No-ACK mode MAY be used on top of an L2 LPWAN technology with
   symmetric characteristics for uplink and downlink.  This document
   does not make any decision as to which SCHC Fragment reliability
   modes are relevant for a specific LPWAN technology.

   Examples of the different reliability modes described are provided in
   Appendix B.

8.4.  Fragmentation Formats

   This section defines the SCHC Fragment format, including the All-0
   and All-1 formats and their "empty" variations, the SCHC ACK format
   and the Abort formats.

   A SCHC Fragment conforms to the general format shown in Figure 11. 10.
   It comprises a SCHC Fragment Header and a SCHC Fragment Payload.  In
   addition, the last SCHC Fragment carries as many padding bits as
   needed to fill up an L2 Word.  The
   SCHC Fragment Payload carries a
   subset of the SCHC Packet.  The SCHC Fragment is the data unit passed
   on to the L2 for transmission. one or several tile(s).

   +-----------------+-----------------------+~~~~~~~~~~~~~~~~~~~~~
   | Fragment Header |   Fragment payload Payload    | padding (as needed)
   +-----------------+-----------------------+~~~~~~~~~~~~~~~~~~~~~

   Figure 11: 10: SCHC Fragment general format.  Presence of a padding field
                                is optional

8.4.1.

8.3.1.1.  Regular SCHC Fragment

   The Regular SCHC Fragment format is shown in Figure 11.  Regular SCHC
   Fragments are generally used to carry tiles that are not the last one

   In ACK-Always or ACK-on-Error,
   of a SCHC Fragments except the last one
   SHALL conform to the detailed format defined in Figure 12.

    |----- Fragment Header -----|
              |-- T --|1|-- N --|
    +-- ... --+- ... -+-+- ... -+--------...-------+
    | Rule ID | Packet.  The DTag  |W|  FCN  | Fragment payload |
    +-- ... --+- ... -+-+- ... -+--------...-------+

     Figure 12: Fragment Detailed Format for Fragments except the Last
                     One, ACK-Always field and ACK-on-Error

   In the No-ACK mode, W field are optional.

 |--- SCHC Fragments except the last one SHALL conform
   to the detailed format defined in Figure 13.

    |---- Fragment Header ----|
           |-- T --|-- --|-M-|-- N --|
 +-- ... --+- ... -+- -+---+- ... -+--------...-------+ -+--------...-------+~~~~~~~~~~~~~~~~~~~~~
 | Rule ID | DTag  | W |  FCN  | Fragment payload Payload | padding (as needed)
 +-- ... --+- ... -+- -+---+- ... -+--------...-------+ -+--------...-------+~~~~~~~~~~~~~~~~~~~~~

       Figure 13: Fragment 11: Detailed Header Format for Regular SCHC Fragments except the Last
                             One, No-ACK mode

   The total size of FCN field MUST NOT contain all bits set to 1.

   If the fragment header is not necessarily a multiple size of the L2 Word size.  To build the fragment payload, SCHC F/R MUST
   take from Fragment Payload does not nicely complement
   the SCHC Packet Header size in a number of bits way that makes would make the SCHC Fragment an exact a
   multiple of the L2 Words.  As a consequence, no Word, then padding
   bit is used for these fragments.

8.4.1.1.  All-0 fragment bits MUST be added.

   The All-0 format is used for sending the last SCHC Fragment Payload of a
   window that is not the last window of the SCHC Packet.

   |----- Fragment Header -----|
             |-- T --|1|-- N --|
   +-- ... --+- ... -+-+- ... -+--------...-------+
   | Rule ID | DTag  |W|  0..0 | Fragment payload |
   +-- ... --+- ... -+-+- ... -+--------...-------+

                 Figure 14: All-0 fragment detailed format

   This is simply with FCN == 0 (called an instance of the format described in Figure 12.  An
   All-0 fragment payload SCHC Fragment) MUST be at least the size of an L2 Word.  The
   rationale is that the All-0 empty fragment (see Section 8.4.1.2)
   needs to be distinguishable from the All-0 regular fragment, that, even in the presence of padding.

8.4.1.2.  All-0 empty fragment

   The All-0 empty fragment is padding, an exception to the All-0 fragment
   described above.  It is used by a sender SCHC
   Fragment needs to request be distinguishable from the
   retransmission of a SCHC ACK by the receiver.  It is only used in
   ACK-Always mode.

   |----- Fragment Header -----|
             |-- T --|1|-- N --|
   +-- ... --+- ... -+-+- ... -+~~~~~~~~~~~~~~~~~~~~~
   | Rule ID | DTag  |W|  0..0 | padding (as needed)      (no payload)
   +-- ... --+- ... -+-+- ... -+~~~~~~~~~~~~~~~~~~~~~

              Figure 15: All-0 empty fragment detailed format

   The size of REQ message,
   which has the All-0 fragment same header is generally not a multiple of
   the L2 Word size.  Therefore, an All-0 empty fragment generally needs
   padding bits.  The padding bits are always less than an L2 Word.

   Since an All-0 but has no payload MUST be at least the size of an L2 Word, a
   receiver can distinguish an All-0 empty fragment from a regular All-0
   fragment, even in the presence of padding.

8.4.2. (see Section 8.3.3).

8.3.1.2.  All-1 fragment

   In the No-ACK mode, the last SCHC Fragment of a SCHC Packet SHALL
   contain a

   The All-1 SCHC Fragment header that conforms to the detailed format is shown in Figure 16.

   |---------- Fragment Header ----------|
                |-- T --|-N=1-|
   +---- ... ---+- ... -+-----+-- ... --+---...---+~~~~~~~~~~~~~~~~~~~~~
   |   Rule ID  | DTag  |  1  |   MIC   | payload | padding (as needed)
   +---- ... ---+- ... -+-----+-- ... --+---...---+~~~~~~~~~~~~~~~~~~~~~

   Figure 16: 12.  The All-1 SCHC
   Fragment Detailed Format for the Last Fragment, No-
                                 ACK mode

   In ACK-Always or ACK-on-Error mode, is generally used to carry the very last fragment tile of a SCHC
   Packet SHALL contain and a SCHC Fragment header that conforms to MIC, or a MIC only.  The DTag field, the
   detailed format shown in Figure 17.

  |---------- W field and the
   Payload are optional.

|-------- SCHC Fragment Header ----------| -------|
          |-- T --|1|-- --|-M-|-- N --|
+-- ... --+- ... -+-+- -+---+- ... -+-- -+- ... --+---...---+~~~~~~~~~~~~~~~~~~~~~ -+------...-----+~~~~~~~~~~~~~~~~~~
| Rule ID | DTag  |W|  | W | 11..1 |  MIC  | payload Frag Payload | padding pad. (as needed)
+-- ... --+- ... -+-+- -+---+- ... -+-- -+- ... --+---...---+~~~~~~~~~~~~~~~~~~~~~ -+------...-----+~~~~~~~~~~~~~~~~~~
                        (FCN)

          Figure 17: All-1 Fragment 12: Detailed Format format for the Last Fragment, ACK-
                          Always or ACK-on-Error

   The total size of the All-1 SCHC Fragment header is generally not a
   multiple of the L2 Word size.  The All-1 fragment being

   If the last one size of the SCHC Packet, SCHC F/R cannot freely choose Fragment Payload does not nicely complement
   the payload SCHC Header size to
   align the fragment to an L2 Word.  Therefore, padding bits are
   generally appended to the All-1 fragment to in a way that would make it the SCHC Fragment a
   multiple of the L2
   Words in size.

   The MIC Word, then padding bits MUST be computed on the payload and the padding bits. added.

   The
   rationale is that the SCHC Reassembler needs to check the correctness
   of the reassembled SCHC packet but has no way of knowing where the
   payload ends.  Indeed, the latter requires decompressing the SCHC
   Packet.

   An All-1 fragment payload SCHC Fragment message MUST be at least the distinguishable by size of an L2 Word.
   The rationale is that the All-1 empty fragment from
   a SCHC Sender-Abort message (see Section 8.4.2.1)
   needs to be distinguishable from the All-1 fragment, even in the
   presence of padding.  This may entail saving an L2 Word from the
   previous fragment payload to make the payload of this All-1 fragment
   big enough.

   The values for N, T and 8.3.4.1) that has the length of MIC are not specified in this
   document, same
   T, M and SHOULD be determined in other documents (e.g.
   technology-specific profile documents).

   The length of N values.  This is trivially achieved by having the MIC MUST be at least
   larger than an L2 Word size.  The
   rationale is to be able to distinguish a Sender-Abort (see
   Section 8.4.4) from an All-1 Fragment, even in Word, or by having the presence of
   padding.

8.4.2.1.  All-1 empty fragment

   The All-1 empty fragment format is Payload larger than an All-1 fragment format without a
   payload (see Figure 18).  It L2
   Word.  This is used by a fragment sender, in either
   ACK-Always or ACK-on-Error, to request a retransmission of also naturally achieved if the SCHC
   ACK for the All-1 window.

   The size of the All-1 empty fragment header Sender-Abort
   Header is generally not a multiple of the L2 Word size.  Therefore, an All-1 empty fragment
   generally needs padding bits. Words.

8.3.2.  SCHC ACK format

   The padding bits are always less than
   an L2 Word.

   Since an All-1 payload SCHC ACK message MUST be at least obey the size of an L2 Word, a
   receiver can distinguish an All-1 empty fragment from a regular All-1
   fragment, even format shown in Figure 13.  The
   DTag field, the presence of padding.

   |---------- Fragment W field and the Compressed Bitmap field are optional.
   The Compressed Bitmap field can only be present in SCHC F/R modes
   that use windows.

  |---- SCHC ACK Header --------| ----|
              |-- T --|1|-- N --|
   +-- --|-M-|1|
  +---- ... --+- ... -+-+- ... -+- ... -+~~~~~~~~~~~~~~~~~~~ -+---+-+~~~~~~~~~~~~~~~~~~
  |  Rule ID  |  DTag  |W|  1..1 |  MIC | W |1| padding as needed (no payload)
   +--                (success)
  +---- ... --+- ... -+-+- ... -+- ... -+~~~~~~~~~~~~~~~~~~~

       Figure 18: All-1 for Retries format, also called All-1 empty

8.4.3.  SCHC ACK format

   The format of a SCHC ACK that acknowledges a window that is not the
   last one (denoted as All-0 window) is shown in Figure 19.

               |-- T --|1| -+---+-+~~~~~~~~~~~~~~~~~~

  +---- ... --+- ... -+-+---- -+---+-+------ ... -----+ ------+~~~~~~~~~~~~~~~
  |  Rule ID  |  DTag |W|encoded | W |0|Compressed Bitmap| (no payload) pad. as needed (failure)
  +---- ... --+- ... -+-+---- -+---+-+------ ... -----+ ------+~~~~~~~~~~~~~~~
                           C

                 Figure 19: ACK format for All-0 windows

   To acknowledge the last window 13: Format of a packet (denoted as All-1 window), the SCHC ACK message

   The SCHC ACK Header contains a C bit (i.e.  MIC checked) following (see Section 8.2.4).

   If the W C bit is set to 1 to
   indicate that the MIC (integrity check computed by the receiver matches the MIC
   present in successful), no Bitmap is
   carried and padding bits MUST be appended as needed to fill up the All-1 fragment.
   last L2 Word.

   If the MIC check fails, the C bit is set to 0 (integrity check not performed or failed)
   and if windows are used,

   o  a representation of the Bitmap for the All-1 window follows.

               |-- T --|1|1|
   +---- ... --+- ... -+-+-+
   |  Rule ID  |  DTag |W|1| (MIC correct)
   +---- ... --+- ... -+-+-+

   +---- ... --+- ... -+-+-+----- ... -----+
   |  Rule ID  |  DTag |W|0|encoded Bitmap |(MIC Incorrect)
   +---- ... --+- ... -+-+-+----- ... -----+
                          C

             Figure 20: Format of a SCHC ACK for All-1 windows

   The Rule ID and Dtag values in referred to by the SCHC ACK messages W
      field MUST follow the C bit

   o  padding bits MUST be
   identical appended as needed to fill up the ones used in last L2
      Word

   If the SCHC Fragments that C bit is 1 or windows are being
   acknowledged.  This allows matching the SCHC ACK and the
   corresponding SCHC Fragments.

   The Bitmap carries information on the reception of each fragment of not used, the window C bit MUST be followed
   by padding bits as described in Section 8.2. needed to fill up the last L2 Word.

   See Appendix D Section 8.2.2.3 for a discussion on description of the size Bitmap.

   The representation of the Bitmaps.

   In Bitmap that is transmitted MUST be the
   compressed version specified in Section 8.3.2.1, in order to reduce
   the SCK SCHC ACK size, message size.

8.3.2.1.  Bitmap Compression

   For transmission, the Compressed Bitmap that is actually
   transmitted is shortened ("encoded") as explained in Section 8.4.3.1.

8.4.3.1.  Bitmap Encoding

   The the SCHC ACK that is transmitted message is truncated
   defined by applying the following algorithm: the longest contiguous sequence of bits algorithm (see Figure 14 for a follow-along
   example):

   o  Build a temporary SCHC ACK message that
   starts contains the Header
      followed by the original Bitmap.

   o  Positioning scissors at the end of the Bitmap, after its last bit.

   o  While the bit on the left of the scissors is 1 and belongs to the
      Bitmap, keep moving left, then stop.  When this is done,

   o  While the scissors are not on an L2 Word boundary of the SCHC ACK, where ACK
      message and there is a Bitmap bit on the bits of that
   sequence are all set to 1, are all part right of the Bitmap scissors,
      keep moving right, then stop.

   o  At this point, cut and finish
   exactly at drop off any bits to the end right of the Bitmap, if
      scissors

   When one such sequence exists, MUST
   NOT or more bits have effectively been dropped off as a result
   of the above algorithm, the SCHC ACK message is a multiple of L2
   Words, no padding bits will be transmitted. appended.

   Because the SCHC Fragment sender knows the
   actual Bitmap size, size of the original
   Bitmap, it can reconstruct the original Bitmap from the
   shortened bitmap.

   When shortening effectively takes place, Compressed
   Bitmap received in the SCHC SCH ACK is a multiple
   of L2 Words, and padding MUST NOT be appended.  When shortening does
   not happen, padding bits MUST be appended as needed to fill up the
   last L2 Word. message.

   Figure 21 14 shows an example where L2 Words are actually bytes and
   where the original Bitmap contains 17 bits, the last 15 of which are
   all set to 1.

   |--

   |---- SCHC ACK Header --|-------- ----|--------      Bitmap     --------|
               |-- T --|-M-|1|
   +---- ... --+- ... -+---+-+---------------------------------+
   |  Rule ID  |  DTag  |W|1|0|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1| | W |0|1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1|
   +---- ... --+- ... -+---+-+---------------------------------+
                            C      |
           next L2 Word boundary ->|  next L2 Word |  next L2 Word |

   Figure 21: A non-encoded 14: Tentative SCHC ACK message with Bitmap before compression

   Figure 22 15 shows that the last 14 bits are not sent.

   |---- SCHC ACK Header ----|CpBmp|
               |-- T --|1| --|-M-|1|
   +---- ... --+- ... -+-+-+-+-+ -+---+-+-----+
   |  Rule ID  |  DTag |W|1|0|1| | W |0|1 0 1|
   +---- ... --+- ... -+-+-+-+-+ -+---+-+-----+
                            C      |
           next L2 Word boundary ->|

   Figure 22: Optimized Bitmap format 15: Actual SCHC ACK message with Compressed Bitmap, no padding

   Figure 23 16 shows an example of a SCHC ACK with FCN tile numbers ranging
   from 6 down to 0, where the Bitmap indicates that the second and the fifth SCHC
   Fragments
   fourth tile of the window have not been correctly received.

                          6

   |---- SCHC ACK Header ----|--- Bitmap --|
               |-- T --|-M-|1|6 5 4 3 2 1 0 (*)
               |-- T --|1|
   +-----------+-------+-+-+-+-+-+-+-+-+ 0| (tile #)
   +-----------+-------+---+-+-------------+
   |  Rule ID  |  DTag |W|1|0|1|1|0|1|1| | W |0|1 0 1 0 1 1 1|      with Original Bitmap before tx
   +-----------+-------+-+-+-+-+-+-+-+-+
   +-----------+-------+---+-+-------------+
                            C
       next L2 Word boundary ->|<-- L2 Word -->|
       (*)=(FCN values)

   +-----------+-------+-+-+-+-+-+-+-+-+~~~+

   +-----------+-------+---+-+-------------+~~~+
   |  Rule ID  |  DTag |W|1|0|1|1|0|1|1|Pad|        Encoded Bitmap
   +-----------+-------+-+-+-+-+-+-+-+-+~~~+ | W |0|1 0 1 0 1 1 1|Pad|  transmitted SCHC ACK
   +-----------+-------+---+-+-------------+~~~+
                            C
       next L2 Word boundary ->|<-- L2 Word -->|

   Figure 23: 16: Example of a Bitmap before transmission, and the
          transmitted one, for a window that is not the last one SCHC ACK message, missing tiles, with padding

   Figure 24 17 shows an example of a SCHC ACK with FCN ranging from 6 down
   to 0, where MIC integrity check has not been performed or has failed but and
   the Bitmap indicates that there is no missing tile in that window.

   |---- SCHC Fragment.

   |- Fragmentation Header-|6 ACK Header ----|--- Bitmap --|
               |-- T --|-M-|1|6 5 4 3 2 1 7 (*)
               |-- T --|1| 0| (tile #)
   +-----------+-------+---+-+-------------+
   |  Rule ID  |  DTag |W|0|1|1|1|1|1|1|1| | W |0|1 1 1 1 1 1 1|      with Original Bitmap before tx
   +-----------+-------+---+-+-------------+
                            C
       next L2 Word boundary ->|<-- L2 Word -->|
                          C ->|

   +---- ... --+- ... -+-+-+-+ -+---+-+-+
   |  Rule ID  |  DTag |W|0|1|                      Encoded Bitmap | W |0|1|                  transmitted SCHC ACK
   +---- ... --+- ... -+-+-+-+ -+---+-+-+
                            C
       next L2 Word boundary ->|
      (*) = (FCN values indicating the order)

   Figure 24: 17: Example of a SCHC ACK message, no missing tile, no padding

8.3.3.  SCHC ACK REQ format

   The SCHC ACK REQ is used by a sender to explicitely request a SCHC
   ACK from the Bitmap receiver.  Its format is described in ACK-Always or ACK-on-Error for Figure 18.  The
   DTag field and the last window

8.4.4. W field are optional.

   |---- SCHC ACK REQ Header ----|
             |-- T --|-M-|-- N --|
   +-- ... --+- ... -+---+- ... -+~~~~~~~~~~~~~~~~~~~~~
   | Rule ID | DTag  | W |  0..0 | padding (as needed)      (no payload)
   +-- ... --+- ... -+---+- ... -+~~~~~~~~~~~~~~~~~~~~~

                  Figure 18: SCHC ACK REQ detailed format

   The size of the SCHC ACK REQ header is generally not a multiple of
   the L2 Word size.  Therefore, a SCHC ACK REQ generally needs padding
   bits.

   Note that the SCHC ACK REQ has the same header as an All-0 SCHC
   Fragment (see Section 8.3.1.1) but it doesn't have a payload.  A
   receiver can distinguish the former form the latter by the message
   length, even in the presence of padding.  This is possible because

   o  the padding bits are always stricly less than an L2 Word.

   o  the size of an All-0 SCHC Fragment Payload is at least the size of
      an L2 Word,

8.3.4.  SCHC Abort formats

8.3.4.1.  SCHC Sender-Abort

   When a SCHC Fragment sender needs to abort the an on-going fragmented
   SCHC Packet transmission, it sends a Sender-Abort. SCHC Sender-Abort message to the
   SCHC Fragment receiver.

   The SCHC Sender-Abort format (see Figure 25) is a variation of the All-1 fragment, with
   neither a MIC nor a payload.  All-1 fragments contain at least a MIC. described in Figure 19.  The absence of DTag
   field and the MIC indicates a Sender-Abort.

   |--- W field are optional.

   |---- Sender-Abort Header ---|
   +--- ----|
             |-- T --|-M-|-- N --|
   +-- ... ---+- --+- ... -+-+-...-+~~~~~~~~~~~~~~~~~~~~~ -+---+- ... -+~~~~~~~~~~~~~~~~~~~~~
   | Rule ID | DTag  |W| FCN  | W | 11..1 | padding (as needed)
   +---
   +-- ... --+- ... ---+- -+---+- ... -+-+-...-+~~~~~~~~~~~~~~~~~~~~~ -+~~~~~~~~~~~~~~~~~~~~~

                    Figure 25: 19: SCHC Sender-Abort format.  All FCN field bits in this format
                               are

   If the W field is present,

   o  the fragment sender MUST set it to 1 all 1's.  Other values are
      RESERVED.

   o  the fragment receiver MUST check its value.  If the value is
      different from all 1's, the message MUST be ignored.

   The size of the SCHC Sender-Abort header is generally not a multiple
   of the L2 Word size.  Therefore, a SCHC Sender-Abort generally needs
   padding bits.

   Since

   Note that the SCHC Sender-Abort has the same header as an All-1 fragment SCHC
   Fragment (see Section 8.3.1.2), but that it does not include a MIC MUST be at least the size of an L2 Word,
   nor a payload.  The receiver can distinguish a Sender-Abort distinguishes the former from an All-1 fragment, the latter
   by the message length, even in the presence of padding.  This is
   possible through different combinations

   o  the size of the Sender-Abort Header may be made such that it is
      not padded

   o  or the total size of the MIC and the Payload of an All-1 SCHC
      Fragment is at least the size of an L2 Word

   o  or through other alignment and size combinations

   The SCHC Sender-Abort MUST NOT be acknowledged.

8.3.4.2.  SCHC Receiver-Abort

   When a SCHC Fragment receiver needs to abort the an on-going fragmented
   SCHC Packet transmission, it transmits a Receiver-Abort.  The
   Receiver-Abort format is a variation on the SCHC ACK format, creating
   an exception in the encoded Bitmap algorithm.  As shown in Figure 26,
   a Receiver-Abort is coded as a SCHC ACK message with a shortened
   Bitmap set to 1 up
   to the first L2 Word boundary, followed by an
   extra L2 Word full of 1's.  Such a message never occurs in a regular
   acknowledgement and is detected as a Receiver-Abort. SCHC Fragment sender.

   The Rule ID and Dtag values in the Receive-Abort message MUST be
   identical to the ones used in the fragments of the SCHC Packet the
   transmission of which is being aborted.

   A Receiver-Abort format is aligned to L2 Words, by design.  Therefore,
   padding MUST NOT be appended.

   |- described in Figure 20.  The DTag
   field and the W field are optional.

   |--- Receiver-Abort Header -| ---|
                 |--- T ---|-M-|1|
   +---- ... ----+-- ... --+-+-+-+-+-+-+-+-+-+-+-+-+ --+---+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Rule ID   |   DTag  |W|  | W |1| 1..1|      1..1     |
   +---- ... ----+-- ... --+-+-+-+-+-+-+-+-+-+-+-+-+ --+---+-+-+-+-+-+-+-+-+-+-+-+-+
                                C
               next L2 Word boundary ->|<-- L2 Word -->|

                   Figure 26: 20: SCHC Receiver-Abort format

   Neither

   If the Sender-Abort nor W field is present,

   o  the Receiver-Abort messages fragment receiver MUST set it to all 1's.  Other values are ever
   acknowledged or retransmitted.

   Use cases for
      RESERVED.

   o  the Sender-Abort and Receiver-Abort messages are
   explained in Section 8.5 or Appendix C.

8.5.  Baseline mechanism fragment sender MUST check its value.  If after applying the value is
      different from all 1's, the message MUST be ignored.

   Note that the SCHC Receiver-Abort has the same header compression (or when as a SCHC header
   compression is not possible) ACK
   message.  The bits that follow the SCHC Packet Receiver-Abort Header MUST be
   as follows

   o  if the Header does not fit within end at an L2 Word boundary, append bits set
      to 1 as needed to reach the
   payload of a single next L2 data unit, Word boundary

   o  append exactly one more L2 Word with bits all set to 1's

   Such a bit pattern never occurs in a regular SCHC ACK.  This is how
   the fragment sender recognizes a SCHC Packet SHALL Receiver-Abort.

   A SCHC Receiver-Abort is aligned to L2 Words, by design.  Therefore,
   padding MUST NOT be broken
   into appended.

   The SCHC Fragments and the fragments SHALL Receiver-Abort MUST NOT be sent to acknowledged.

8.4.  SCHC F/R modes

   This specification includes several SCHC F/R modes, which allow for

   o  a range of reliability options, such as optional SCHC Fragment
      retransmission

   o  support of different LPWAN characteristics, such as variable MTU.

   More modes may be defined in the fragment
   receiver. future.

8.4.1.  No-ACK mode

   The No-ACK mode has been designed under the assumption that data unit
   out-of-sequence delivery does not occur between the entity performing
   fragmentation and the entity performing reassembly.  This mode
   supports LPWAN technologies that have a variable MTU.

   In No-ACK mode, there is no feedback communication from the fragment
   receiver needs to identify the fragment sender.  The sender just transmits all the
   SCHC Fragments that belong blindly.

   Padding is kept to a given SCHC Packet.  To this end, minimum: only the
   receiver SHALL use:

   o last SCHC Fragment is padded
   as needed.

   The sender's L2 source address (if present),

   o tile sizes are not required to be uniform.  Windows are not used.
   The destination's L2 address (if present),

   o Retransmission Timer is not used.  The Attempts counter is not
   used.

   Each Profile MUST specify which Rule ID,

   o  DTag (if present).

   Then, the fragment receiver MAY determine the SCHC Fragment
   reliability mode that ID value(s) is used for (are) allocated
   to this SCHC Fragment based on mode.  For brevity, the rest of Section 8.4.1 only refers to
   Rule ID in values that fragment.

   After a SCHC Fragment reception, the receiver starts constructing are allocated to this mode.

   The W field MUST NOT be present in the SCHC Packet.  It uses F/R messages.  SCHC ACK
   MUST NOT be sent.  SCHC ACK REQ MUST NOT be sent.  SCHC Sender-Abort
   MAY be sent.  SCHC Receiver-Abort MUST NOT be sent.

   The value of N (size of the FCN and the arrival order of each SCHC
   Fragment field) is RECOMMENDED to determine be 1.

   Each Profile, for each Rule ID value, MUST define

   o  the location presence or absence of the individual fragments within DTag field in the SCHC Packet.  For example, F/R
      messages, as well as its size if it is present,

   o  the receiver MAY place size and algorithm for the fragment
   payload within a payload reassembly buffer at MIC field in the location determined SCHC F/R messages,
      if different from the FCN, default,

   o  the arrival order expiration time of the SCHC Fragments, and the
   fragment payload sizes.  In ACK-on-Error or ACK-Always, the fragment
   receiver also uses Inactivity Timer

   Each Profile, for each Rule ID value, MAY define

   o  a value of N different from the W bit recommend one,

   o  what values will be sent in the received SCHC Fragments.  Note
   that FCN field, for values different
      from the size All-1 value.

   The receiver, for each pair of Rule ID and optional DTag values, MUST
   maintain

   o  one Inactivity Timer

8.4.1.1.  Sender behaviour

   At the beginning of the original, unfragmented packet cannot be
   determined from fragmentation headers.

   Fragmentation functionality uses of a new SCHC Packet, the FCN
   fragment sender MUST select a Rule ID and optional DTag value to transmit the pair
   for this SCHC
   Fragments.  It has a length Packet.  For brevity, the rest of N bits where Section 8.4.1 only
   refers to SCHC F/R messages bearing the All-1 Rule ID and All-0 FCN optional DTag
   values are used to control the fragmentation transmission. hereby selected.

   Each SCHC Fragment MUST contain exactly one tile in its Payload.  The rest
   of the FCN numbers
   tile MUST be assigned sequentially in a decreasing
   order, at least the first FCN size of a window is RECOMMENDED to be MAX_WIND_FCN,
   i.e. an L2 Word.  The sender MUST
   transmit the highest possible FCN value depending on SCHC Fragments messages in the FCN number of
   bits.

   In all modes, order that the tiles
   appear in the last SCHC Fragment Packet.  Except for the last tile of a packet SCHC
   Packet, each tile MUST contain be of a MIC
   which size that complements the SCHC
   Fragment Header so that the SCHC Fragment is used to check if there are errors or missing a multiple of L2 Words
   without the need for padding bits.  Except for the last one, the SCHC
   Fragments
   and MUST use the corresponding All-1 fragment format.  Note that a Regular SCHC Fragment with an All-0 format is considered the specified in
   Section 8.3.1.1.  The last SCHC Fragment of the current window.

   If MUST use the receiver receives All-1 format
   specified in Section 8.3.1.2.

   The MIC MUST be computed on the last fragment of a reassembled SCHC Packet (All-1),
   it checks for concatenated
   with the integrity padding bits of the reassembled last SCHC Packet, based on Fragment.  The rationale is
   that the MIC received.  In No-ACK, if SCHC Reassembler has no way of knowing where the integrity check indicates that payload of
   the reassembled last SCHC Packet does not match Fragment ends.  Indeed, this requires decompressing the original
   SCHC Packet
   (prior to fragmentation), Packet, which is out of the scope of the reassembled SCHC Packet MUST be
   discarded.  In ACK-on-Error or ACK-Always, Reassembler.

   The sender MAY transmit a MIC check is also
   performed by SCHC Sender-Abort.

   Figure 35 shows an example of a corresponding state machine.

8.4.1.2.  Receiver behaviour

   On receiving Regular SCHC Fragments,

   o  the fragment receiver after reception MUST reset the Inactivity Timer,

   o  the receiver assembles the payloads of each subsequent the SCHC Fragment retransmitted after Fragments

   On receiving an All-1 SCHC Fragment,

   o  the first MIC check.

   Notice that receiver MUST append the All-1 SCHC ACK for Fragment Payload and the All-1 window carries one more bit
   (the C bit) compared
      padding bits to the previously received SCHC ACKs Fragment Payloads for
      this SCHC Packet

   o  if an integrity checking is specified in the previous windows.  See
   Appendix D for a discussion on various options to deal Profile,

      *  the receiver MUST perform the integrity check

      *  if integrity checking fails, the receiver MUST drop the
         reassembled SCHC Packet and it MUST release all resources
         associated with this
   "bump" in Rule ID and optional DTag values.

   o  the reassembly operation concludes.

   On expiration of the Inactivity Timer, the receiver MUST drop the
   SCHC ACK.

   There are three reliability modes: No-ACK, ACK-Always Packet being reassembled and ACK-on-
   Error.  In ACK-Always it MUST release all resources
   associated with this Rule ID and ACK-on-Error, optional DTag values.

   On receiving a jumping window protocol
   uses two windows alternatively, identified as 0 and 1.  A SCHC
   Fragment with Sender-Abort, the receiver MAY release all FCN bits set to 0 (i.e. an All-0 fragment)
   indicates that
   resources associated with this Rule ID and optional DTag values.

   The MIC computed at the window is receiver MUST be computed over (i.e. the
   reassembled SCHC Packet and over the padding bits that were received
   in the SCHC Fragment is carrying the last
   one tile.

   Figure 36 shows an example of a corresponding state machine.

8.4.2.  ACK-Always

   The ACK-Always mode has been designed under the window) following assumptions

   o  Data unit out-of-sequence delivery does not occur between the
      entity performing fragmentation and allows to switch from one window to the next
   one. entity performing
      reassembly

   o  The All-1 FCN in L2 MTU value does not change while a fragmented SCHC Fragment indicates that it Packet is the last
   fragment of the packet
      being transmitted and therefore there will not
   be another window for this packet.

8.5.1.  No-ACK transmitted.

   In the No-ACK ACK-Always mode, there windows are used.  An acknowledgement, positive
   or negative, is no feedback communication from fed by the fragment receiver back to the fragment receiver.  The
   sender will send all at the SCHC fragments end of a
   packet without any possibility the transmission of knowing if errors or losses have
   occurred.  As, in this mode, there each window of SCHC
   Fragments.

   The tiles are not required to be of uniform size.  Padding is no need kept to identify specific
   a minimum: only the last SCHC Fragments, Fragment is padded as needed.

   In a one-bit FCN MAY be used.  Consequently, nutshell, the FCN
   All-0 value algorithm is used in the following: after a first blind
   transmission of all SCHC fragments except the last one, which
   carries an All-1 FCN and tiles of a window, the MIC.  The receiver will wait for SCHC
   Fragments and will set fragment sender
   iterates retransmitting the Inactivity timer.  The receiver will use tiles that are reported missing until the MIC contained in
   fragment receiver reports that all the last SCHC Fragment tiles belonging to check for errors.
   When the Inactivity Timer expires window
   have been correctly received, or if until too many attempts were made.
   The fragment sender only advances to the MIC check indicates next window of tiles when it
   has ascertained that all the reassembled packet does not match tiles belonging to the original one, current window
   have been fully and correctly received.  This results in a lock-step
   behaviour between the receiver
   will release all resources sender and the receiver, at the window
   granularity.

   Each Profile MUST specify which Rule ID value(s) is (are) allocated
   to reassembling this packet. mode.  For brevity, the rest of Section 8.4.1 only refers to
   Rule ID values that are allocated to this mode.

   The initial W field MUST be present and its size M MUST be 1 bit.
   WINDOW_SIZE MUST be equal to MAX_WIND_FCN + 1.

   Each Profile, for each Rule ID value, MUST define

   o  the value of N (size of the Inactivity Timer will be determined based on FCN field),

   o  the characteristics value of MAX_WIND_FCN

   o  the underlying LPWAN technology size and will be
   defined algorithm for the MIC field in other documents (e.g. technology-specific profile
   documents).

8.5.2.  ACK-Always

   In ACK-Always, the sender transmits SCHC Fragments by using F/R messages,
      if different from the two-
   jumping-windows procedure.  A delay between each SCHC fragment can be
   added to respect local regulations default,

   o  the presence or other constraints imposed by absence of the applications.  Each time a SCHC fragment is sent, DTag field in the FCN SCHC F/R
      messages, as well as its size if it is
   decreased by one.  When present,

   o  the FCN reaches value 0, if there are more
   SCHC Fragments remaining to be sent, the sender transmits the last
   SCHC Fragment of this window using MAX_ACK_REQUESTS,

   o  the All-0 fragment format.  It
   then starts expiration time of the Retransmission Timer

   o  the expiration time of the Inactivity Timer

   The sender, for each active pair of Rule ID and waits optional DTag values,
   MUST maintain

   o  one Attempts counter

   o  one Retransmission Timer

   The receiver, for a SCHC ACK.
   Otherwise, if FCN reaches 0 each pair of Rule ID and optional DTag values, MUST
   maintain

   o  one Inactivity Timer

8.4.2.1.  Sender behaviour

   At the sender transmits the last SCHC
   Fragment beginning of the fragmentation of a new SCHC Packet, the sender uses the All-1
   fragment
   format, which includes a MIC.  The sender sets the Retransmission
   Timer MUST select a Rule ID and waits DTag value pair for the this
   SCHC ACK Packet.  For brevity, the rest of Section 8.4.2 only refers to know if transmission errors have
   occurred.

   The Retransmission Timer is dimensioned based on
   SCHC F/R messages bearing the LPWAN technology Rule ID and optional DTag values hereby
   selected.

   Each SCHC Fragment MUST contain exactly one tile in use.  When its Payload.  All
   tiles with the Retransmission Timer expires, number 0 in their window, as well as the sender sends an
   All-0 empty (resp.  All-1 empty) fragment to request again last tile,
   MUST be at least the size of an L2 Word.

   In all SCHC
   ACK for Fragment messages, the window that ended W field MUST be filled with the All-0 (resp.  All-1) fragment
   just sent.  The
   least significant bit of the window number is not changed.

   After receiving an All-0 or All-1 fragment, that the receiver sends sender is
   currently processing.

   If a SCHC
   ACK with an encoded Bitmap reporting whether any SCHC fragments have
   been lost or not.  When the sender receives Fragment carries a tile that is not the last one of the
   SCHC ACK, Packet,

   o  it checks MUST be of the
   W bit carried by Regular type specified in Section 8.3.1.1

   o  the FCN field MUST contain the tile number

   o  each tile MUST be of a size that complements the SCHC ACK.  Any Fragment
      Header so that the SCHC ACK carrying Fragment is a multiple of L2 Words without
      the need for padding bits.

   The SCHC Fragment that carries the last tile MUST be an unexpected W
   bit value All-1 SCHC
   Fragment, described in Section 8.3.1.2.

   The bits on which the MIC is discarded.  If computed MUST be the W bit value SCHC Packet
   concatenated with the potential padding bits that are appended to the
   Payload of the received SCHC ACK
   is correct, Fragment that carries the last tile.

   The fragment sender analyzes MUST start by processing the rest of window numbered 0.

   In a "blind transmission" phase, it MUST transmit all the tiles
   composing the window, in decreasing tile number.

   Then, it enters an "equalization phase" in which it MUST initialize
   an Attempts counter to 0, it MUST start a Retransmission Timer and it
   MUST expect to receive a SCHC ACK.  Then,

   o  on receiving a SCHC ACK,

      *  if the SCHC ACK message,
   such as indicates that some tiles are missing at the encoded Bitmap and
         receiver, then the MIC.  If sender MUST transmit all the SCHC Fragments
   sent for this window tiles that have
         been well received, reported missing, it MUST increment Attempts, it MUST
         reset the Retransmission Timer and MUST expect to receive a
         SCHC ACK again.

      *  if at least the current window is not the last one
   more and the SCHC Fragment needs to be sent, ACK
         indicates that all tiles were correctly received, the sender advances its sending
   window
         MUST stop the Retransmission Timer, it MUST advance to the next
         fragmentation window value and sends it MUST start a blind transmission
         phase as described above.

      *  if the current window is the last one and the next SCHC Fragments.
   If no ACK
         indicates that more SCHC Fragments have to be tiles were received than the sender
         actually sent, then the fragmented fragment sender MUST send a SCHC Sender-
         Abort, it MUST release all resource associated with this SCHC
         Packet transmission is finished.

   However, and it MAY exit with an error condition.

      *  if the current window is the last one or more SCHC Fragments have not been received as per and the SCHC ACK (i.e. the corresponding bits are not set in the encoded
   Bitmap) then
         indicates that all tiles were correctly received yet integrity
         check was a failure, the fragment sender resends the missing MUST send a SCHC Fragments.  When
         Sender-Abort, it MUST release all
   missing resource associated with this
         SCHC Fragments have been retransmitted, Packet and it MAY exit with an error condition.

      *  if the sender starts current window is the
   Retransmission Timer, even if an All-0 or an All-1 has not been sent
   as part of this retransmission last one and waits for a SCHC ACK.  Upon
   receipt of the SCHC ACK, if one or more SCHC Fragments have not yet
   been received, ACK
         indicates that integrity checking was successful, the counter sender
         exits successfully.

   o  on Retransmission Timer expiration,
      *  if Attempts is increased and strictly less that MAX_ACK_REQUESTS, the
         fragment sender
   resends the missing MUST send a SCHC Fragments again.  When ACK REQ and MUST increment the
         Attempts reaches
   MAX_ACK_REQUESTS, counter.

      *  otherwise the fragment sender aborts the on-going fragmented MUST send a SCHC Sender-Abort, it
         MUST release all resource associated with this SCHC Packet transmission by sending a Sender-Abort message and releases
         it MAY exit with an error condition.

   At any resources for transmission of time,

   o  on receiving a SCHC Receiver-Abort, the packet.  The fragment sender also aborts
   an on-going fragmented MUST
      release all resource associated with this SCHC Packet transmission when and it MAY
      exit with an error condition.

   o  on receiving a failed MIC
   check is reported by SCHC ACK that bears a W value different from the receiver or when W
      value that it currently uses, the fragment sender MUST silently
      discard and ignore that SCHC ACK.

   Figure 37 shows an example of a corresponding state machine.

8.4.2.2.  Receiver behaviour

   On receiving a SCHC Fragment with a Rule ID and optional DTag pair
   not being processed at that time

   o  the receiver MAY check if the optional DTag value has not recently
      been sent is reported in used for that Rule ID value, thereby ensuring that the encoded Bitmap.

   On
      received SCHC Fragment is not a remnant of a prior fragmented SCHC
      Packet transmission.  If the other hand, at SCHC Fragment is determined to be
      such a remant, the beginning, receiver MAY silently ignore it and discard it.

   o  the receiver side expects MUST start a process to
   receive window 0.  Any assemble a new SCHC Fragment Packet
      with that Rule ID and DTag value pair.  That process MUST only
      examine received but not belonging to SCHC F/R messages with that Rule ID and DTag
      value pair and MUST only transmit SCHC F/R messages with that Rule
      ID and DTag value pair.

   o  the current receiver MUST start an Inactivity Timer.  It MUST initialise
      an Attempts counter to 0.  It MUST initialise a window is discarded.  All SCHC Fragments belonging counter to
      0.

   In the rest of this section, "local W bit" means the least
   significant bit of the
   correct window are accepted, and counter of the actual receiver.

   On reception of any SCHC Fragment number
   managed by F/R message, the receiver is computed based MUST reset the
   Inactivity Timer.

   Entering an "acceptance phase", the receiver MUST first initialise an
   empty Bitmap for this window, then

   o  on receiving a SCHC Fragment or SCHC ACK REQ with the W bit
      different from the local W bit, the FCN value.  The receiver prepares MUST silently ignore
      and discard that message.

   o  on receiving a SCHC Fragment with the encoded Bitmap W bit equal to report the correctly local W
      bit, the receiver MUST assemble the received tile based on the
      window counter and on the missing SCHC Fragments for FCN field in the current window.  After each SCHC Fragment is received, the receiver initializes and it
      MUST update the Inactivity
   Timer.  When Bitmap.

      *  if the Inactivity Timer expires, SCHC Fragment received is an All-0 SCHC Fragment, the transmission
         current window is
   aborted by determined to be a not-last window, and the
         receiver sending MUST send a Receiver-Abort message.

   When an All-0 fragment is received, it SCHC ACK for this window.  Then,

         +  If the Bitmap indicates that all the SCHC
   Fragments tiles of the current
            window have been sent correctly received, the receiver MUST
            increment its window counter and it enters the "acceptance
            phase" for that new window.

         +  If the Bitmap indicates that at least one tile is missing in
            the current window, the receiver enters the "equalization
            phase" for this window.  Since

      *  if the sender SCHC Fragment received is
   not obliged to always send a full window, some an All-1 SCHC Fragment, the
         padding bits of the All-1 SCHC Fragment number
   not set in MUST be assembled after
         the receiver memory may not correspond received tile, the current window is determined to losses.  The be the
         last window, the receiver sends MUST perform the corresponding integrity check and
         it MUST send a SCHC ACK, ACK for this window.  Then,

         +  If the Inactivity Timer is
   set and integrity check indicates that the transmission of full SCHC Packet
            has been correctly reassembled, the next window by receiver MUST enter the sender can start.
            "clean-up phase".

         +  If an All-0 fragment the integrity check indicates that the full SCHC Packet
            has not been received and all correctly reassembled, the receiver enters the
            "equalization phase" for this window.

   o  on receiving a SCHC Fragments of ACK REQ with the W bit equal to the local W
      bit, the receiver has not yet determined if the current window have also been received, is
      a not-last one or the last one, the receiver then expects MUST send a
   new Window and waits SCHC ACK
      for this window, and it keeps accepting incoming messages.

   In the next SCHC Fragment.  Upon receipt of a
   SCHC Fragment, "equalization phase":

   o  if the window value has not changed, the received is a not-last window
      *  on receiving a SCHC
   Fragments are part of Fragment or SCHC ACK REQ with a retransmission.  A W bit
         different from the local W bit the receiver MUST silently
         ignore and discard that has already
   received message.

      *  on receiving a SCHC ACK REQ with a W bit equal to the local W
         bit, the receiver MUST send a SCHC ACK for this window.

      *  on receiving a SCHC Fragment SHOULD with a W bit equal to the local W
         bit,

         +  if the SCHC Fragment received is an All-1 SCHC Fragment, the
            receiver MUST silently ignore it and discard it, it.

         +  otherwise, it updates the
   Bitmap.  If all receiver MUST update the bits of Bitmap and it MUST
            assemble the tile received.

      *  on the Bitmap are set to one, becoming fully populated with 1's, the receiver
         MUST send a SCHC ACK without waiting for an All-0 fragment this window, it MUST increment its
         window counter and it enters the
   Inactivity Timer is initialized.

   On "acceptance phase" for the other hand, new
         window.

   o  if the window value of is the next received last window

      *  on receiving a SCHC Fragment is set or SCHC ACK REQ with a W bit
         different from the local W bit the receiver MUST silently
         ignore and discard that message.

      *  on receiving a SCHC ACK REQ with a W bit equal to the next expected window value, local W
         bit, the receiver MUST send a SCHC ACK for this means that window.

      *  on receiving a SCHC Fragment with a W bit equal to the sender has local W
         bit,

         +  if the SCHC Fragment received a correct encoded Bitmap reporting that all is an All-0 SCHC Fragments have been Fragment, the
            receiver MUST silently ignore it and discard it.

         +  otherwise, the receiver MUST update the Bitmap and it MUST
            assemble the tile received.  The  If the SCHC Fragment received
            is an All-1 SCHC Fragment, the receiver then updates MUST assemble the
   value
            padding bits of the next expected window.

   When an All-1 fragment is received, it SCHC Fragment after the received
            tile.  It MUST perform the integrity check.  Then

            -  if the integrity check indicates that the last full SCHC
   Fragment of
               Packet has been correctly reassembled, the packet receiver MUST
               send a SCHC ACK and it enters the "clean-up phase".

            -  if the integrity check indicates that the full SCHC
               Packet has not been sent.  Since correctly reassembled,
               o  if the last SCHC Fragment received was an All-1 SCHC
                  Fragment, the receiver MUST send a SCHC ACK for this
                  window is not
   always full,

               o  it keeps accepting incoming messages.

   In the MIC will "clean-up phase":

   o  Any received SCHC F/R message with a W bit different from the
      local W bit MUST be used by silently ignored and discarded.

   o  Any received SCHC F/R message different from an All-1 SCHC
      Fragment or a SCHC ACK REQ MUST be silently ignored and discarded.

   o  On receiving an All-1 SCHC Fragment or a SCHC ACK REQ, the
      receiver to detect if all MUST send a SCHC Fragments ACK.

   o  On expiration of the packet have been received.  A correct MIC
   indicates Inactivity Timer, the end receive process for
      that SCHC Packet MAY exit

   At any time, on expiration of the transmission but Inactivity Timer, on receiving a
   SCHC Sender-Abort or when Attempts reaches MAX_ACK_REQUESTS, the
   receiver MUST stay
   alive for an Inactivity Timer period to answer to any empty All-1
   fragments the sender MAY send if a SCHC ACKs sent by Receiver-Abort, it MUST release all
   resource associated with this SCHC Packet and it MAY exit the receive
   process for that SCHC Packet.

   The MIC computed at the receiver are
   lost.  If MUST be computed over the MIC is incorrect, some
   reassembled SCHC Fragments have been lost. Packet and over the padding bits that were received
   in the SCHC Fragment carrying the last tile.

   Figure 38 shows an example of a corresponding state machine.

8.4.3.  ACK-on-Error

   The receiver sends ACK-on-Error mode supports LPWAN technologies that have variable
   MTU and out-of-order delivery.

   In ACK-on-Error mode, windows are used.  All tiles MUST be of equal
   size, except for the last one, which MUST be of the same size or
   smaller than the preceding ones.  WINDOW_SIZE MUST be equal to
   MAX_WIND_FCN + 1.

   A SCHC Fragment message carries one or more tiles, which may span
   multiple windows.  A SCHC ACK regardless reports on the reception of successful fragmented exactly one
   window of tiles.

   See Figure 21 for an example.

           +---------------------------------------------...-----------+
           |                       SCHC Packet reception or not, the Inactitivity Timer                         |
           +---------------------------------------------...-----------+

  Tile #   | 4 | 3 | 2 | 1 | 0 | 4 | 3 | 2 | 1 | 0 | 4 |     | 0 | 4 |3|
  Window # |-------- 0 --------|-------- 1 --------|- 2  ... 27 -|- 28-|

  SCHC Fragment msg    |-----------|

      Figure 21: a SCHC Packet fragmented in tiles, Ack-on-Error mode

   The W field is set.  In case
   of wide enough that it unambiguously represents an incorrect MIC,
   absolute window number.  The fragment receiver feeds SCHC ACKs back
   to the fragment sender about windows that it misses tiles of.  No
   SCHC ACK is fed back by the fragment receiver waits for windows that it
   knows have been fully received.

   The fragment sender retransmits SCHC Fragments for tiles that are
   reported missing.  It can advance to next windows even before it has
   ascertained that all tiles belonging to previous windows have been
   correctly received, and can still later retransmit SCHC Fragments
   with tiles belonging to previous windows.  Therefore, the same window.  After MAX_ACK_REQUESTS, sender and
   the receiver will abort
   the on-going may operate in a fully decoupled fashion.  The
   fragmented SCHC Packet transmission by transmitting a
   the Receiver-Abort format.  The receiver also aborts upon Inactivity
   Timer expiration by sending a Receiver-Abort message.

   If concludes when

   o  integrity checking shows that the sender receives a SCK ACK with a Bitmap containing a bit set
   for a fragmented SCHC Fragment that it Packet has not sent during been
      correctly reassembled at the transmission
   phase of receive end, and this window, it MUST abort information has
      been conveyed back to the sender,

   o  or too many retransmission attempts were made,

   o  or the receiver determines that the whole fragmentation and transmission of this
      fragmented SCHC Packet.

8.5.3.  ACK-on-Error

   The senders behavior Packet has been inactive for too long.

   Each Profile MUST specify which Rule ID value(s) is (are) allocated
   to this ACK-on-Error and ACK-Always mode.  For brevity, the rest of Section 8.4.3
   only refers to SCHC F/R messages with Rule ID values that are similar.
   allocated to this mode.

   The main difference is that W field MUST be present in ACK-on-Error the SCHC ACK with F/R messages.

   Each Profile, for each Rule ID value, MUST define

   o  the
   encoded Bitmap is tile size (a tile does not sent at the end need to be multiple of each window an L2 Word,
      but only when it MUST be at least one SCHC Fragment the size of an L2 Word)

   o  the current window has been lost.  Except value of M (size of the W field),
   o  the value of N (size of the FCN field),

   o  the value of MAX_WIND_FCN

   o  the size and algorithm for the last window where a MIC field in the SCHC ACK MUST be sent to finish F/R messages,
      if different from the
   transmission.

   In ACK-on-Error, default,

   o  the presence or absence of the DTag field in the SCHC F/R
      messages, as well as its size if it is present,

   o  the value of MAX_ACK_REQUESTS,

   o  the expiration time of the Retransmission Timer

   o  the expiration is considered as time of the Inactivity Timer

   The sender, for each active pair of Rule ID and optional DTag values,
   MUST maintain

   o  one Attempts counter

   o  one Retransmission Timer

   The receiver, for each pair of Rule ID and optional DTag values, MUST
   maintain

   o  one Inactivity Timer

8.4.3.1.  Sender behaviour

   At the beginning of the fragmentation of a positive acknowledgement new SCHC Packet,

   o  the fragment sender MUST select a Rule ID and DTag value pair for all windows but
      this SCHC Packet.  A Rule MUST NOT be selected if the last one.  This
   timer is set after sending an All-0 values of M
      and MAX_WIND_FCN for that Rule are such that the SCHC Packet
      cannot be fragmented in (2&#710;M) * (MAX_WIND_FCN+1) tiles or an All-1 fragment.  For an
   All-0 fragment, on timer expiration,
      less.

   o  the fragment sender resumes operation MUST initialize the Attempts counter to 0 for
      that Rule ID and
   sends DTag value pair.

   For brevity, the SCHC Fragments rest of Section 8.4.3 only refers to SCHC F/R
   messages bearing the next window. Rule ID and optional DTag values hereby
   selected.

   A SCHC Fragment message carries in its payload one or more tiles.  If
   more than one tile is carried in one SCHC Fragment
   o  the sender receives a selected tiles MUST be consecutive in the original SCHC ACK, it checks Packet

   o  they MUST be placed in the window value. SCHC
   ACKs Fragment Payload adjacent to one
      another, in the order they appear in the SCHC Packet, from the
      start of the SCHC Packet toward its end.

   In a SCHC Fragment message, the sender MUST fill the W field with an unexpected window number are discarded.  If the
   window number in of the received first tile sent in that SCHC ACK Fragment.

   If a SCHC Fragment carries more than one tile, or carries one tile
   that is correct, not the sender verifies if last one of the receiver has received all SCHC fragments Packet,

   o  it MUST be of the current window.
   When at least one Regular type specified in Section 8.3.1.1

   o  the FCN field MUST contain the tile number of the first tile sent
      in that SCHC Fragment has been lost,

   o  padding bits are appended to the counter Attempts tiles as needed to fit the
      Payload size constraint of Regular SCHC Fragments

   The bits on which the MIC is increased by one and computed MUST be the sender resends SCHC Packet
   concatenated with the padding bits that are appended to the Payload
   of the missing SCHC Fragments
   again.  When Attempts reaches MAX_ACK_REQUESTS, Fragment that carries the last tile.

   The fragment sender sends a
   Sender-Abort message and releases MAY send the last tile as the Payload of an All-1
   SCHC Fragment.

   The fragment sender MUST send SCHC Fragments such that, all together,
   they contain all resources for the on-going tiles of the fragmented SCHC Packet transmission.  When Packet.

   The fragment sender MUST send at least one All-1 SCHC Fragment.

   Note that the retransmission last tile of the
   missing a SCHC Fragments is finished, Packet can be sent in different
   ways, depending on Profiles and implementations

   o  in a Regular SCHC Fragment, either alone or as part of multiple
      tiles Payload

   o  in an All-1 SCHC Fragment

   However, the last tile MUST NOT have ever been sent both in a Regular
   SCHC Fragment and in a All-1 SCHC Fragment.

   The fragment sender starts listening MUST listen for a SCHC ACK (even if an All-0 or an All-1 has not been messages after having
   sent during the
   retransmission) and initializes the Retransmission Timer.

   After sending

   o  an All-1 fragment, the sender listens for SCHC Fragment
   o  or a SCHC ACK,
   initializes Attempts, and starts the Retransmission Timer.  If ACK REQ with the
   Retransmission Timer expires, Attempts is increased by one and an
   empty All-1 fragment is sent W field corresponding to request the SCHC ACK for the last
      window.  If Attempts reaches MAX_ACK_REQUESTS,

   A Profile MAY specify other times at which the fragment sender aborts the
   on-going fragmented MUST
   listen for SCHC Packet transmission by transmitting the
   Sender-Abort fragment.

   At the end of any window, if the sender receives a SCK ACK with a
   Bitmap containing a bit set for messages.

   Each time a fragment sender sends an All-1 SCHC Fragment that or a SCHC
   ACK REQ,

   o  it has not sent
   during MUST increment the transmission phase of that window, Attempts counter

   o  it MUST abort the whole
   fragmentation and transmission of this SCHC Packet.

   Unlike reset the sender, Retransmission Timer

   On Retransmission Timer expiration

   o  if Attempts is strictly less than MAX_ACK_REQUESTS, the receiver for ACK-on-Error has a larger amount
   of differences compared with ACK-Always.  First, fragment
      sender MUST send a SCHC ACK is not
   sent unless there is a lost SCHC Fragment or an unexpected behavior.
   With REQ with the exception of W field corresponding to
      the last window, where a SCHC ACK is always
   sent regardless of SCHC Fragment losses or not.  The receiver starts
   by expecting SCHC Fragments from window 0 and maintains it MUST increment the
   information regarding which Attempts counter

   o  otherwise the fragment sender MUST send a SCHC Fragments Sender-Abort and it receives.  After
      MUST release all resource associated with this SCHC Packet.

   On receiving a SCHC Fragment, the Inactivity Timer is set.  If no
   further SCHC Fragment are received and the Inactivity Timer expires,
   the SCHC Fragment receiver aborts ACK,

   o  if the on-going fragmented SCHC Packet
   transmission by transmitting W field in the Receiver-Abort data unit.

   Any SCHC Fragment not belonging ACK corresponds to the current last window is discarded.
   The actual of
      the SCHC Fragment number is computed based on Packet,

      *  if the FCN value.
   When an All-0 fragment C bit is received and set, the sender MAY release all resource
         associated with this SCHC Fragments have been
   received, the receiver updates the expected window value and expects
   a new window Packet and waits for MAY exit successfully

      *  otherwise,

         +  if the next SCHC Fragment.
   If ACK shows no missing tile at the window value of receiver, the next
            sender

            -  MUST send a SCHC Fragment has not changed, Sender-Abort

            -  MUST release all resource associated with this SCHC
               Packet

            -  MAY exit with an error condition

         +  otherwise

            -  the
   received fragment sender MUST send SCHC Fragment is a retransmission.  A receiver that has
   already received a Fragment discard it.  If messages
               containing all the tiles that are reported missing in the
               SCHC Fragments ACK.

            -  if the last message in this sequence of a
   window (that SCHC Fragment
               messages is not an All-1 SCHC Fragment, then the last one) have been received, the receiver
   does not fragment
               sender MUST send a SCHC ACK.  While ACK REQ with the receiver waits for W field
               corresponding to the next last window and if after the window value is set to sequence.

   o  otherwise, the next value, and if an
   All-1 fragment with the next value window arrived sender

      *  MUST send SCHC Fragment messages containing the receiver knows tiles that are
         reported missing in the last SCHC Fragment of ACK

      *  then it MAY send a SCHC ACK REQ with the packet has been sent.  Since W field corresponding
         to the last window is

   See Figure 39 for one among several possible examples of a Finite
   State Machine implementing a sender behaviour obeying this
   specification.

8.4.3.2.  Receiver behaviour

   On receiving a SCHC Fragment with a Rule ID and optional DTag pair
   not always full, being processed at that time

   o  the MIC will be used to detect receiver MAY check if all
   SCHC Fragments of the window have optional DTag value has not recently
      been received.  A correct MIC check
   indicates used for that Rule ID value, thereby ensuring that the end
      received SCHC Fragment is not a remnant of the a prior fragmented SCHC
      Packet transmission.  An ACK
   is sent by  If the SCHC Fragment receiver.  In case of an incorrect MIC,
   the receiver waits for SCHC Fragments belonging is determined to be
      such a remant, the same window or
   the expiration of the Inactivity Timer.  The latter will lead receiver MAY silently ignore it and discard it.

   o  the receiver MUST start a process to abort the on-going assemble a new SCHC fragmented packet transmission by
   transmitting the Receiver-Abort message.

   If, after receiving an All-0 fragment the receiver missed some Packet
      with that Rule ID and DTag value pair.  That process MUST only
      examine received SCHC
   Fragments, the receiver uses a F/R messages with that Rule ID and DTag
      value pair and MUST only transmit SCHC ACK F/R messages with that Rule
      ID and DTag value pair.

   o  the encoded Bitmap receiver MUST start an Inactivity Timer.  It MUST initialise
      an Attempts counter to
   ask the retransmission 0.

   On reception of the missing fragments and expect to receive any SCHC Fragments with F/R message, the actual window.  While waiting receiver MUST reset the
   retransmission an All-0 empty fragment is received,
   Inactivity Timer.

   On reception of a SCHC Fragment message, the receiver
   sends again MUST assemble
   the received tiles based on the W and FCN fields of the SCHC ACK with
   Fragment.

   o  if the encoded Bitmap, FCN is All-1, if a Payload is present, the full SCHC
   Fragments received belongs to another window or an All-1 fragment
      Fragment Payload MUST be assembled including the padding bits.
      This is
   received, because the transmission size of the last tile is aborted not known by sending a Receiver-Abort
   fragment.  Once it has received all the missing fragments it waits
   for
      receiver, therefore padding bits are indistinguishable from the next window fragments.

8.6.  Supporting multiple window sizes

   For ACK-Always or ACK-on-Error, implementers MAY opt to support a
   single window size or multiple window sizes.  The latter, when
   feasible, may provide performance optimizations.  For example, a
   large window size SHOULD be used for packets that need to
      tile data bits, at this stage.  They will be carried removed by a large number of SCHC Fragments.  However, when the number of
   SCHC Fragments required to carry a packet is low, a smaller window
   size, and thus a shorter Bitmap, MAY be sufficient to provide
   feedback on all SCHC Fragments.
      C/D sublayer.  If multiple window sizes are
   supported, the Rule ID MAY be used to signal size of the SCHC Fragment Payload exceeds or
      equals the window size in use
   for a specific packet transmission.

   Note that of one regular tile plus the same window size of an L2 Word,
      this SHOULD raise an error flag.

   o  otherwise, tiles MUST be used for the transmission of
   all SCHC Fragments that belong to assembled based on the same SCHC Packet.

8.7.  Downlink SCHC Fragment transmission

   In some LPWAN technologies, as part of energy-saving techniques,
   downlink transmission a priori known
      size and padding bits MUST be discarded.  The latter is only possible immediately after an uplink
   transmission.  In order to avoid potentially high delay in
      because

      *  the
   downlink transmission size of a fragmented SCHC Packet, the SCHC Fragment
   receiver MAY perform tiles is known a priori,

      *  tiles are larger than an uplink transmission as soon as possible after L2 Word

      *  padding bits are always strictly less than an L2 Word

   On reception of a SCHC Fragment that is not the last one.  Such uplink
   transmission MAY be triggered by the L2 (e.g. an L2 ACK sent in
   response to a REQ or of an All-1 SCHC Fragment encapsulated in a L2 frame Fragment,

   o  if the receiver has at least one window that requires
   an L2 ACK) or it MAY be triggered from an upper layer.

   For downlink transmission of knows has tiles
      missing, it MUST return a fragmented SCHC Packet in ACK-Always
   mode, ACK for the SCHC Fragment receiver MAY support timer-based lowest-numbered such
      window,

   o  otherwise,

      *  if it has received at least one tile, it MUST return a SCHC ACK
   retransmission.  In this mechanism,
         for the highest-numbered window it currently has tiles for

      *  otherwise it MUST return a SCHC Fragment receiver
   initializes ACK for window numbered 0

   A Profile MAY specify other times and starts circumstances at which a timer (the Inactivity Timer is used) after
   the transmission of
   receiver sends a SCHC ACK, except when and which window the SCHC ACK is sent reports
   about in
   response to the last SCHC Fragment of these circumstances.

   On sending a packet (All-1 fragment).  In
   the latter case, the SCHC Fragment ACK, the receiver does not start a timer
   after transmission of MUST increase the SCHC ACK.

   If, after transmission Attempts
   counter.

   From reception of a SCHC ACK that is not an All-1 fragment,
   and before expiration of the corresponding Inactivity timer, the SCHC
   Fragment receiver receives a SCHC Fragment that belongs to the
   current window (e.g. onward, a missing SCHC Fragment from the current window)
   or to the next window, receiver MUST
   check the Inactivity timer for integrity of the reassembled SCHC ACK is
   stopped.  However, if the Inactivity timer expires, the Packet at least every
   time it prepares for sending a SCHC ACK is
   resent and the Inactivity timer is reinitialized and restarted.

   The default initial value for the Inactivity timer, as well as the
   maximum number last window.

   On reception of retries for a specific SCHC ACK, denoted
   MAX_ACK_RETRIES, are not defined in Sender-Abort, the receiver MUST release all
   resource associated with this document, and need to be
   defined in other documents (e.g. technology-specific profiles).  The
   initial value SCHC Packet.

   On expiration of the Inactivity timer is expected to be greater than
   that of Timer, the Retransmission timer, in order to make sure that receiver MUST send a
   (buffered) SCHC Fragment to be retransmitted can find an opportunity
   for that transmission.

   When the SCHC Fragment sender transmits the All-1 fragment,
   Receiver-Abort and it starts
   its Retransmission Timer MUST release all resource associated with a large timeout value (e.g. several
   times that of the initial Inactivity timer).  If a SCHC ACK is
   received before expiration of this timer, the SCHC Fragment sender
   retransmits any lost
   SCHC Fragments reported by Packet.

   On the SCHC ACK, or if Attempts counter exceeding MAX_ACK_REQUESTS, the receiver MUST
   send a SCHC ACK confirms successful reception of Receiver-Abort and it MUST release all resource
   associated with this SCHC Fragments of
   the last window, the transmission Packet.

   Reassembly of the fragmented SCHC Packet is
   considered complete.  If the timer expires, and no SCHC ACK concludes when

   o  a Sender-Abort has been received since the start of

   o  or the timer, Inactivity Timer has expired

   o  or the Attempts counter has exceeded MAX_ACK_REQUESTS

   o  or when at least an All-1 SCHC Fragment sender
   assumes that the All-1 fragment has been successfully received (and
   possibly, and
      integrity checking of the last reassembled SCHC ACK has been lost: this mechanism assumes
   that Packet is successful.

   The MIC computed at the retransmission timer for receiver MUST be computed over the All-1 fragment is long enough
   to allow several
   reassembled SCHC ACK retries if Packet and over the All-1 fragment has not;been padding bits that were received by
   in the SCHC Fragment receiver, carrying the last tile.

   See Figure 40 for one among several possible examples of a Finite
   State Machine implementing a receiver behaviour obeying this
   specification, and it also assumes that it is unlikely that several ACKs become all lost). meant to match the sender Finite State
   Machine of Figure 39.

9.  Padding management

   SCHC C/D and SCHC F/R operate on bits, not bytes.  SCHC itself does
   not have any alignment prerequisite.  The size of SCHC Packets can be
   any number of bits.  If the Layer 2 layer below SCHC constrains the L2 Data Unit payload
   to align to some boundary, called L2 Words (for example, bytes), SCHC
   will meet that constraint and produce messages with the correct
   alignement.  This may entail adding extra bits (called bits, called padding bits). bits.

   When padding occurs, the number of appended bits is MUST be strictly
   less than the L2 Word size.

   Padding happens at most once for each Packet going through the full during SCHC chain, i.e. Compression
   and (optionally) optional SCHC Fragmentation (see Figure 2).  If a SCHC Packet is
   sent unfragmented (see Figure 27), 22), it is padded as needed. needed for
   transmission.  If a SCHC Packet is fragmented, it is not padded in
   itself, only the last
   fragment is SCHC Fragments are padded as needed. needed for
   transmission.  Some SCHC F/R modes only pad the very last SCHC
   Fragment.

   A packet (e.g. an IPv6 packet)
            |                                           ^ (padding bits
            v                                           |       dropped)
   +------------------+                      +--------------------+
   | SCHC Compression |                      | SCHC Decompression |
   +------------------+                      +--------------------+
            |                                           ^
            |   If no fragmentation                     |
            +---- SCHC Packet + padding as needed ----->|
            |                                           | (MIC checked
            v                                           |  and removed)
   +--------------------+                       +-----------------+
   | SCHC Fragmentation |                       | SCHC Reassembly |
   +--------------------+                       +-----------------+
        |       ^                                   |       ^
        |       |                                   |       |
        |       +------------- SCHC ACK ------------+       |
        |                                                   |
        +---------------
        +------- SCHC Fragments --------------------+
        +--- last SCHC Frag with MIC + padding as needed ---+ needed---------+

           SENDER                                    RECEIVER

          Figure 27: 22: SCHC operations, including padding as needed

   Each technology-specific document Profile MUST specify the size of the L2 Word.  The L2 Word might
   actually be a single bit, in which case at most zero bits of padding
   will be appended to any message, i.e. no padding will take place at
   all.

   A Profile MAY define the value of the padding bits.  The RECOMMENDED
   value is 0.

10.  SCHC Compression for IPv6 and UDP headers

   This section lists the different IPv6 and UDP header fields and how
   they can be compressed.

10.1.  IPv6 version field

   This field always holds the same value.  Therefore, in the Rule, TV
   is set to 6, MO to "equal" and CDA to "not-sent".

10.2.  IPv6 Traffic class field

   If the DiffServ field does not vary and is known by both sides, the
   Field Descriptor in the Rule SHOULD contain a TV with this well-known
   value, an "equal" MO and a "not-sent" CDA.

   Otherwise,

   Otherwise (e.g.  ECN bits are to be transmitted), two possibilities
   can be considered depending on the variability of the value:

   o  One possibility is to not compress the field and send the original
      value.  In the Rule, TV is not set to any particular value, MO is
      set to "ignore" and CDA is set to "value-sent".

   o  If some upper bits in the field are constant and known, a better
      option is to only send the LSBs.  In the Rule, TV is set to a
      value with the stable known upper part, MO is set to MSB(x) and
      CDA to LSB(y). LSB.

10.3.  Flow label field

   If the Flow Label field does not vary and is known by both sides, the
   Field Descriptor in the Rule SHOULD contain a TV with this well-known
   value, an "equal" MO and a "not-sent" CDA.

   Otherwise, two possibilities can be considered:

   o  One possibility is to not compress the field and send the original
      value.  In the Rule, TV is not set to any particular value, MO is
      set to "ignore" and CDA is set to "value-sent".

   o  If some upper bits in the field are constant and known, a better
      option is to only send the LSBs.  In the Rule, TV is set to a
      value with the stable known upper part, MO is set to MSB(x) and
      CDA to LSB(y). LSB.

10.4.  Payload Length field

   This field can be elided for the transmission on the LPWAN network.
   The SCHC C/D recomputes the original payload length value.  In the
   Field Descriptor, TV is not set, MO is set to "ignore" and CDA is
   "compute-IPv6-length".

   If the payload length needs to be sent and does not need to be coded
   in 16 bits, the TV can be set to 0x0000, the MO set to MSB(16-s)
   where 's' is the number of bits to code the maximum length, and CDA
   is set to LSB(s). LSB.

10.5.  Next Header field

   If the Next Header field does not vary and is known by both sides,
   the Field Descriptor in the Rule SHOULD contain a TV with this Next
   Header value, the MO SHOULD be "equal" and the CDA SHOULD be "not-
   sent".

   Otherwise, TV is not set in the Field Descriptor, MO is set to
   "ignore" and CDA is set to "value-sent".  Alternatively, a matching-
   list MAY also be used.

10.6.  Hop Limit field

   The field behavior for this field is different for Uplink and
   Downlink.  In Uplink, since there is no IP forwarding between the Dev
   and the SCHC C/D, the value is relatively constant.  On the other
   hand, the Downlink value depends of Internet routing and MAY change
   more frequently.  One neat way of processing this field is to use the
   Direction Indicator (DI) to distinguish both directions:

   o  in the Uplink, elide the field: the TV in the Field Descriptor is
      set to the known constant value, the MO is set to "equal" and the
      CDA is set to "not-sent".

   o  in the Downlink, send the value: TV is not set, MO is set to
      "ignore" and CDA is set to "value-sent".

10.7.  IPv6 addresses fields

   As in 6LoWPAN [RFC4944], IPv6 addresses are split into two 64-bit
   long fields; one for the prefix and one for the Interface Identifier
   (IID).  These fields SHOULD be compressed.  To allow for a single
   Rule being used for both directions, these values are identified by
   their role (DEV or APP) and not by their position in the frame header
   (source or destination).

10.7.1.  IPv6 source and destination prefixes

   Both ends MUST be synchronized with the appropriate prefixes.  For a
   specific flow, the source and destination prefixes can be unique and
   stored in the context.  It can be either a link-local prefix or a
   global prefix.  In that case, the TV for the source and destination
   prefixes contain the values, the MO is set to "equal" and the CDA is
   set to "not-sent".

   If the Rule is intended to compress packets with different prefix
   values, match-mapping SHOULD be used.  The different prefixes are
   listed in the TV, the MO is set to "match-mapping" and the CDA is set
   to "mapping-sent".  See Figure 29 24

   Otherwise, the TV contains the prefix, the MO is set to "equal" and
   the CDA is set to "value-sent".

10.7.2.  IPv6 source and destination IID

   If the DEV or APP IID are based on an LPWAN address, then the IID can
   be reconstructed with information coming from the LPWAN header.  In
   that case, the TV is not set, the MO is set to "ignore" and the CDA
   is set to "DevIID" or "AppIID".  Note that the LPWAN technology
   generally carries a single identifier corresponding to the DEV.
   Therefore AppIID cannot be used.

   For privacy reasons or if the DEV address is changing over time, a
   static value that is not equal to the DEV address SHOULD be used.  In
   that case, the TV contains the static value, the MO operator is set
   to "equal" and the CDF CDA is set to "not-sent".  [RFC7217] provides some
   methods that MAY be used to derive this static identifier.

   If several IIDs are possible, then the TV contains the list of
   possible IIDs, the MO is set to "match-mapping" and the CDA is set to
   "mapping-sent".

   It MAY also happen that the IID variability only expresses itself on
   a few bytes.  In that case, the TV is set to the stable part of the
   IID, the MO is set to "MSB" and the CDA is set to "LSB".

   Finally, the IID can be sent in extenso on the LPWAN.  In that case,
   the TV is not set, the MO is set to "ignore" and the CDA is set to
   "value-sent".

10.8.  IPv6 extensions

   No Rule is currently defined that processes IPv6 extensions.  If such
   extensions are needed, their compression/decompression Rules can be
   based on the MOs and CDAs described above.

10.9.  UDP source and destination port

   To allow for a single Rule being used for both directions, the UDP
   port values are identified by their role (DEV or APP) and not by
   their position in the frame header (source or destination).  The SCHC C/D
   MUST be aware of the traffic direction (Uplink, Downlink) to select
   the appropriate field.  The following Rules apply for DEV and APP
   port numbers.

   If both ends know the port number, it can be elided.  The TV contains
   the port number, the MO is set to "equal" and the CDA is set to "not-
   sent".

   If the port variation is on few bits, the TV contains the stable part
   of the port number, the MO is set to "MSB" and the CDA is set to
   "LSB".

   If some well-known values are used, the TV can contain the list of
   these values, the MO is set to "match-mapping" and the CDA is set to
   "mapping-sent".

   Otherwise the port numbers are sent over the LPWAN.  The TV is not
   set, the MO is set to "ignore" and the CDA is set to "value-sent".

10.10.  UDP length field

   The UDP length can be computed from the received data.  In that case,
   the TV is not set, the MO is set to "ignore" and the CDA is set to
   "compute-length".

   If the payload is small, the TV can be set to 0x0000, the MO set to
   "MSB" and the CDA to "LSB".

   In other cases, the length SHOULD be sent and the CDA is replaced by
   "value-sent".

10.11.  UDP Checksum field

   The UDP checksum operation is mandatory with IPv6 [RFC8200] for most
   packets but recognizes that there are exceptions to that default
   behavior.

   For instance, protocols that use UDP as a tunnel encapsulation may
   enable zero-checksum mode for a specific port (or set of ports) for
   sending and/or receiving.  [RFC8200] also stipulates that any node
   implementing zero-checksum mode must follow the requirements
   specified in "Applicability Statement for the Use of IPv6 UDP
   Datagrams with Zero Checksums" [RFC6936].

   6LoWPAN Header Compression [RFC6282] also authorizes to send UDP
   datagram that are deprived of the checksum protection when an upper
   layer guarantees the integrity of the UDP payload and pseudo-header
   all the way between the compressor that elides the UDP checksum and
   the decompressor that computes again it.  A specific example of this
   is when a Message Integrity Check (MIC) protects the compressed
   message all along that path with a strength that is identical or
   better to the UDP checksum.

   In a similar fashion, this specification allows a SCHC compressor to
   elide the UDP checks when another layer guarantees an identical or
   better integrity protection for the UDP payload and the pseudo-
   header.  In this case, the TV is not set, the MO is set to "ignore"
   and the CDA is set to "compute-checksum".

   In particular, when SCHC fragmentation is used, a fragmentation MIC
   of 2 bytes or more provides equal or better protection than the UDP
   checksum; in that case, if the compressor is collocated with the
   fragmentation point and the decompressor is collocated with the
   packet reassembly point, then compressor MAY elide the UDP checksum.
   Whether and when the UDP Checksum is elided is to be specified in the
   technology-specific documents.
   Profile.

   Since the compression happens before the fragmentation, implementors
   should understand the risks when dealing with unprotected data below
   the transport layer and take special care when manipulating that
   data.

   In other cases, the checksum SHOULD be explicitly sent.  The TV is
   not set, the MO is set to "ignore" and the CDA is set to "value-
   sent".

11.  IANA Considerations

   This document has no request to IANA.

12.  Security considerations

12.1.  Security considerations for SCHC Compression/Decompression

   A malicious header compression could cause the reconstruction of a
   wrong packet that does not match with the original one.  Such a
   corruption MAY be detected with end-to-end authentication and
   integrity mechanisms.  Header Compression does not add more security
   problem than what is already needed in a transmission.  For instance,
   to avoid an attack, never re-construct a packet bigger than some
   configured size (with 1500 bytes as generic default).

12.2.  Security considerations for SCHC Fragmentation/Reassembly

   This subsection describes potential attacks to LPWAN SCHC F/R and
   suggests possible countermeasures.

   A node can perform a buffer reservation attack by sending a first
   SCHC Fragment to a target.  Then, the receiver will reserve buffer
   space for the IPv6 packet.  Other incoming fragmented SCHC Packets
   will be dropped while the reassembly buffer is occupied during the
   reassembly timeout.  Once that timeout expires, the attacker can
   repeat the same procedure, and iterate, thus creating a denial of
   service attack.  The (low) cost to mount this attack is linear with
   the number of buffers at the target node.  However, the cost for an
   attacker can be increased if individual SCHC Fragments of multiple
   packets can be stored in the reassembly buffer.  To further increase
   the attack cost, the reassembly buffer can be split into SCHC
   Fragment-sized buffer slots.  Once a packet is complete, it is
   processed normally.  If buffer overload occurs, a receiver can
   discard packets based on the sender behavior, which MAY help identify
   which SCHC Fragments have been sent by an attacker.

   In another type of attack, the malicious node is required to have
   overhearing capabilities.  If an attacker can overhear a SCHC
   Fragment, it can send a spoofed duplicate (e.g. with random payload)
   to the destination.  If the LPWAN technology does not support
   suitable protection (e.g. source authentication and frame counters to
   prevent replay attacks), a receiver cannot distinguish legitimate
   from spoofed SCHC Fragments.  Therefore, the original IPv6 packet
   will be considered corrupt and will be dropped.  To protect resource-
   constrained nodes from this attack, it has been proposed to establish
   a binding among the SCHC Fragments to be transmitted by a node, by
   applying content-chaining to the different SCHC Fragments, based on
   cryptographic hash functionality.  The aim of this technique is to
   allow a receiver to identify illegitimate SCHC Fragments.

   Further attacks MAY involve sending overlapped fragments (i.e.
   comprising some overlapping parts of the original IPv6 datagram).
   Implementers SHOULD make sure that the correct operation is not
   affected by such event.

   In ACK-on-Error, a malicious node MAY force a SCHC Fragment sender to
   resend a SCHC Fragment a number of times, with the aim to increase
   consumption of the SCHC Fragment sender's resources.  To this end,
   the malicious node MAY repeatedly send a fake ACK to the SCHC
   Fragment sender, with a Bitmap that reports that one or more SCHC
   Fragments have been lost.  In order to mitigate this possible attack,
   MAX_ACK_RETRIES MAY be set to a safe value which allows to limit the
   maximum damage of the attack to an acceptable extent.  However, note
   that a high setting for MAX_ACK_RETRIES benefits SCHC Fragment
   reliability modes, therefore the trade-off needs to be carefully
   considered.

13.  Acknowledgements

   Thanks to Carsten Bormann, Philippe Clavier, Diego Dujovne, Eduardo
   Ingles Sanchez, Arunprabhu Kandasamy, Rahul Jadhav, Sergio Lopez
   Bernal, Antony Markovski, Alexander Pelov, Pascal Thubert, Juan Carlos Zuniga, Diego
   Dujovne, Charles Perkins, Edgar
   Ramos, and Shoichi Sakane Sakane, and Pascal Thubert for useful design
   consideration and comments.

14.  References

14.1.  Normative References

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119,
              DOI 10.17487/RFC2119, March 1997,
              <https://www.rfc-editor.org/info/rfc2119>.

   [RFC7217]  Gont, F., "A Method for Generating Semantically Opaque
              Interface Identifiers with IPv6 Stateless Address
              Autoconfiguration (SLAAC)", RFC 7217,
              DOI 10.17487/RFC7217, April 2014,
              <https://www.rfc-editor.org/info/rfc7217>.

   [RFC8174]  Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
              2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
              May 2017, <https://www.rfc-editor.org/info/rfc8174>.

14.2.  Informative References

   [RFC3385]  Sheinwald, D., Satran, J., Thaler, P., and V. Cavanna,
              "Internet Protocol Small Computer System Interface (iSCSI)
              Cyclic Redundancy Check (CRC)/Checksum Considerations",
              RFC 3385, DOI 10.17487/RFC3385, September 2002,
              <https://www.rfc-editor.org/info/rfc3385>.

   [RFC4944]  Montenegro, G., Kushalnagar, N., Hui, J., and D. Culler,
              "Transmission of IPv6 Packets over IEEE 802.15.4
              Networks", RFC 4944, DOI 10.17487/RFC4944, September 2007,
              <https://www.rfc-editor.org/info/rfc4944>.

   [RFC5795]  Sandlund, K., Pelletier, G., and L-E. Jonsson, "The RObust
              Header Compression (ROHC) Framework", RFC 5795,
              DOI 10.17487/RFC5795, March 2010,
              <https://www.rfc-editor.org/info/rfc5795>.

   [RFC6282]  Hui, J., Ed. and P. Thubert, "Compression Format for IPv6
              Datagrams over IEEE 802.15.4-Based Networks", RFC 6282,
              DOI 10.17487/RFC6282, September 2011,
              <https://www.rfc-editor.org/info/rfc6282>.

   [RFC6936]  Fairhurst, G. and M. Westerlund, "Applicability Statement
              for the Use of IPv6 UDP Datagrams with Zero Checksums",
              RFC 6936, DOI 10.17487/RFC6936, April 2013,
              <https://www.rfc-editor.org/info/rfc6936>.

   [RFC7136]  Carpenter, B. and S. Jiang, "Significance of IPv6
              Interface Identifiers", RFC 7136, DOI 10.17487/RFC7136,
              February 2014, <https://www.rfc-editor.org/info/rfc7136>.

   [RFC8200]  Deering, S. and R. Hinden, "Internet Protocol, Version 6
              (IPv6) Specification", STD 86, RFC 8200,
              DOI 10.17487/RFC8200, July 2017,
              <https://www.rfc-editor.org/info/rfc8200>.

   [RFC8376]  Farrell, S., Ed., "Low-Power Wide Area Network (LPWAN)
              Overview", RFC 8376, DOI 10.17487/RFC8376, May 2018,
              <https://www.rfc-editor.org/info/rfc8376>.

Appendix A.  SCHC Compression Examples

   This section gives some scenarios of the compression mechanism for
   IPv6/UDP.  The goal is to illustrate the behavior of SCHC.

   The most common case using the mechanisms defined in this document
   will be a LPWAN Dev that embeds some applications running over CoAP.
   In this example, three flows are considered.  The first flow is for
   the device management based on CoAP using Link Local IPv6 addresses
   and UDP ports 123 and 124 for Dev and App, respectively.  The second
   flow will be a CoAP server for measurements done by the Device (using
   ports 5683) and Global IPv6 Address prefixes alpha::IID/64 to
   beta::1/64.  The last flow is for legacy applications using different
   ports numbers, the destination IPv6 address prefix is gamma::1/64.

   Figure 28 23 presents the protocol stack for this Device.  IPv6 and UDP
   are represented with dotted lines since these protocols are
   compressed on the radio link.

    Management   Data
   +----------+---------+---------+
   |   CoAP   |  CoAP   | legacy  |
   +----||----+---||----+---||----+
   .   UDP    .  UDP    |   UDP   |
   ................................
   .   IPv6   .  IPv6   .  IPv6   .
   +------------------------------+
   |    SCHC Header compression   |
   |      and fragmentation       |
   +------------------------------+
   |      LPWAN L2 technologies   |
   +------------------------------+
            DEV or NGW

              Figure 28: 23: Simplified Protocol Stack for LP-WAN

   Note that in some LPWAN technologies, only the Devs have a device ID.
   Therefore, when such technologies are used, it is necessary to
   statically define an IID for the Link Local address for the SCHC C/D.

   Rule 0
    +----------------+--+--+--+---------+--------+------------++------+
    | Field          |FL|FP|DI| Value   | Match  | Comp Decomp|| Sent |
    |                |  |  |  |         | Opera. | Action     ||[bits]|
    +----------------+--+--+--+---------+---------------------++------+
    |IPv6 version    |4 |1 |Bi|6        | equal  | not-sent   ||      |
    |IPv6 DiffServ   |8 |1 |Bi|0        | equal  | not-sent   ||      |
    |IPv6 Flow Label |20|1 |Bi|0        | equal  | not-sent   ||      |
    |IPv6 Length     |16|1 |Bi|         | ignore | comp-length||      |
    |IPv6 Next Header|8 |1 |Bi|17       | equal  | not-sent   ||      |
    |IPv6 Hop Limit  |8 |1 |Bi|255      | ignore | not-sent   ||      |
    |IPv6 DEVprefix  |64|1 |Bi|FE80::/64| equal  | not-sent   ||      |
    |IPv6 DevIID     |64|1 |Bi|         | ignore | DevIID     ||      |
    |IPv6 APPprefix  |64|1 |Bi|FE80::/64| equal  | not-sent   ||      |
    |IPv6 AppIID     |64|1 |Bi|::1      | equal  | not-sent   ||      |
    +================+==+==+==+=========+========+============++======+
    |UDP DEVport     |16|1 |Bi|123      | equal  | not-sent   ||      |
    |UDP APPport     |16|1 |Bi|124      | equal  | not-sent   ||      |
    |UDP Length      |16|1 |Bi|         | ignore | comp-length||      |
    |UDP checksum    |16|1 |Bi|         | ignore | comp-chk   ||      |
    +================+==+==+==+=========+========+============++======+

    Rule 1
    +----------------+--+--+--+---------+--------+------------++------+
    | Field          |FL|FP|DI| Value   | Match  | Action     || Sent |
    |                |  |  |  |         | Opera. | Action     ||[bits]|
    +----------------+--+--+--+---------+--------+------------++------+
    |IPv6 version    |4 |1 |Bi|6        | equal  | not-sent   ||      |
    |IPv6 DiffServ   |8 |1 |Bi|0        | equal  | not-sent   ||      |
    |IPv6 Flow Label |20|1 |Bi|0        | equal  | not-sent   ||      |
    |IPv6 Length     |16|1 |Bi|         | ignore | comp-length||      |
    |IPv6 Next Header|8 |1 |Bi|17       | equal  | not-sent   ||      |
    |IPv6 Hop Limit  |8 |1 |Bi|255      | ignore | not-sent   ||      |
    |IPv6 DEVprefix  |64|1 |Bi|[alpha/64, match- |mapping-sent||  [1]   1  |
    |                |  |  |  |fe80::/64] mapping|            ||      |
    |IPv6 DevIID     |64|1 |Bi|         | ignore | DevIID     ||      |
    |IPv6 APPprefix  |64|1 |Bi|[beta/64,| match- |mapping-sent||  [2]   2  |
    |                |  |  |  |alpha/64,| mapping|            ||      |
    |                |  |  |  |fe80::64]|        |            ||      |
    |IPv6 AppIID     |64|1 |Bi|::1000   | equal  | not-sent   ||      |
    +================+==+==+==+=========+========+============++======+
    |UDP DEVport     |16|1 |Bi|5683     | equal  | not-sent   ||      |
    |UDP APPport     |16|1 |Bi|5683     | equal  | not-sent   ||      |
    |UDP Length      |16|1 |Bi|         | ignore | comp-length||      |
    |UDP checksum    |16|1 |Bi|         | ignore | comp-chk   ||      |
    +================+==+==+==+=========+========+============++======+

    Rule 2
    +----------------+--+--+--+---------+--------+------------++------+
    | Field          |FL|FP|DI| Value   | Match  | Action     || Sent |
    |                |  |  |  |         | Opera. | Action     ||[bits]|
    +----------------+--+--+--+---------+--------+------------++------+
    |IPv6 version    |4 |1 |Bi|6        | equal  | not-sent   ||      |
    |IPv6 DiffServ   |8 |1 |Bi|0        | equal  | not-sent   ||      |
    |IPv6 Flow Label |20|1 |Bi|0        | equal  | not-sent   ||      |
    |IPv6 Length     |16|1 |Bi|         | ignore | comp-length||      |
    |IPv6 Next Header|8 |1 |Bi|17       | equal  | not-sent   ||      |
    |IPv6 Hop Limit  |8 |1 |Up|255      | ignore | not-sent   ||      |
    |IPv6 Hop Limit  |8 |1 |Dw|         | ignore | value-sent ||  [8]   8  |
    |IPv6 DEVprefix  |64|1 |Bi|alpha/64 | equal  | not-sent   ||      |
    |IPv6 DevIID     |64|1 |Bi|         | ignore | DevIID     ||      |
    |IPv6 APPprefix  |64|1 |Bi|gamma/64 | equal  | not-sent   ||      |
    |IPv6 AppIID     |64|1 |Bi|::1000   | equal  | not-sent   ||      |
    +================+==+==+==+=========+========+============++======+
    |UDP DEVport     |16|1 |Bi|8720     | MSB(12)| LSB        || [4]   4  |
    |UDP APPport     |16|1 |Bi|8720     | MSB(12)| LSB        || [4]   4  |
    |UDP Length      |16|1 |Bi|         | ignore | comp-length||      |
    |UDP checksum    |16|1 |Bi|         | ignore | comp-chk   ||      |
    +================+==+==+==+=========+========+============++======+

                         Figure 29: 24: Context Rules

   All the fields described in the three Rules depicted on Figure 29 24 are
   present in the IPv6 and UDP headers.  The DevIID-DID value is found
   in the L2 header.

   The second and third Rules use global addresses.  The way the Dev
   learns the prefix is not in the scope of the document.

   The third Rule compresses port numbers to 4 bits.

Appendix B.  Fragmentation Examples

   This section provides examples for the different fragment reliability
   modes specified in this document.

   Figure 30 25 illustrates the transmission in No-ACK mode of an IPv6
   packet a SCHC
   Packet that needs 11 fragments. SCHC Fragments.  FCN is 1 bit wide.

           Sender               Receiver
             |-------FCN=0-------->|
             |-------FCN=0-------->|
             |-------FCN=0-------->|
             |-------FCN=0-------->|
             |-------FCN=0-------->|
             |-------FCN=0-------->|
             |-------FCN=0-------->|
             |-------FCN=0-------->|
             |-------FCN=0-------->|
             |-------FCN=0-------->|
             |-----FCN=1 + MIC --->|MIC checked: --->| Integrity check: success =>
           (End)

   Figure 30: 25: Transmission in No-ACK mode of an IPv6 packet a SCHC Packet carried by 11 fragments
                              SCHC Fragments

   In the following examples, N (i.e. the (the size if of the FCN field) is 3 bits.
   Therefore, the All-1 FCN value is 7.

   Figure 31 26 illustrates the transmission in ACK-on-Error mode of an IPv6
   packet that needs a SCHC
   Packet fragmented in 11 fragments, tiles, with one tile per SCHC Fragment,
   MAX_WIND_FCN=6 and no fragment
   loss. lost SCHC Fragment.

           Sender               Receiver
             |-----W=0, FCN=6----->|
             |-----W=0, FCN=5----->|
             |-----W=0, FCN=4----->|
             |-----W=0, FCN=3----->|
             |-----W=0, FCN=2----->|
             |-----W=0, FCN=1----->|
             |-----W=0, FCN=0----->|
         (no ACK)
             |-----W=1, FCN=6----->|
             |-----W=1, FCN=5----->|
             |-----W=1, FCN=4----->|
             |--W=1, FCN=7 + MIC-->|MIC checked: MIC-->| Integrity check: success =>
             |<----
             |<-- ACK, W=1 ------| W=1, C=1 ---| C=1
           (End)

       Figure 31: 26: Transmission in ACK-on-Error mode of an IPv6 packet
         carried by a SCHC Packet
         fragmented in 11 fragments, tiles, with one tile per SCHC Fragment,
                 MAX_WIND_FCN=6 and no loss. lost SCHC Fragment.

   Figure 32 27 illustrates the transmission in ACK-on-Error mode of an
   IPv6 packet that needs a SCHC
   Packet fragmented in 11 fragments, tiles, with one tile per SCHC Fragment,
   MAX_WIND_FCN=6 and three lost fragments. SCHC Fragments.

            Sender             Receiver
             |-----W=0, FCN=6----->|
             |-----W=0, FCN=5----->|
             |-----W=0, FCN=4--X-->|
             |-----W=0, FCN=3----->|
             |-----W=0, FCN=2--X-->|             7
             |-----W=0, FCN=1----->|             /
             |-----W=0, FCN=0----->|        6543210
             |<-----ACK, W=0-------|Bitmap:1101011
             |<-- ACK, W=0, C=0 ---| Bitmap:1101011
             |-----W=0, FCN=4----->|
             |-----W=0, FCN=2----->|
         (no ACK)
             |-----W=1, FCN=6----->|
             |-----W=1, FCN=5----->|
             |-----W=1, FCN=4--X-->|
             |- W=1, FCN=7 + MIC ->|MIC checked: failed
             |<-----ACK, W=1-------|C=0 ->| Integrity check: failure
             |<-- ACK, W=1, C=0 ---| C=0, Bitmap:1100001
             |-----W=1, FCN=4----->|MIC checked: FCN=4----->| Integrity check: success =>
             |<----
             |<-- ACK, W=1 ------|C=1, no Bitmap W=1, C=1 ---| C=1
           (End)

       Figure 32: 27: Transmission in ACK-on-Error mode of an IPv6 packet
        carried by a SCHC Packet
         fragmented in 11 fragments, tiles, with one tile per SCHC Fragment,
               MAX_WIND_FCN=6 and three lost
                                fragments. SCHC Fragments.

   Figure 33 28 shows an example of a transmission in ACK-on-Error mode of
   a SCHC Packet fragmented in 73 tiles, with N=5, MAX_WIND_FCN=27, M=2
   and 3 lost SCHC Fragments.

      Sender               Receiver
       |-----W=0, FCN=27----->| 4 tiles sent
       |-----W=0, FCN=23----->| 4 tiles sent
       |-----W=0, FCN=19----->| 4 tiles sent
       |-----W=0, FCN=15--X-->| 4 tiles sent (not received)
       |-----W=0, FCN=11----->| 4 tiles sent
       |-----W=0, FCN=7 ----->| 4 tiles sent
       |-----W=0, FCN=3 ----->| 4 tiles sent
       |-----W=1, FCN=27----->| 4 tiles sent
       |-----W=1, FCN=23----->| 4 tiles sent
       |-----W=1, FCN=19----->| 4 tiles sent
       |-----W=1, FCN=15----->| 4 tiles sent
       |-----W=1, FCN=11----->| 4 tiles sent
       |-----W=1, FCN=7 ----->| 4 tiles sent
       |-----W=1, FCN=3 --X-->| 4 tiles sent (not received)
       |-----W=2, FCN=27----->| 4 tiles sent
       |-----W=2, FCN=23----->| 4 tiles sent
   ^   |-----W=2, FCN=19----->| 1 tile sent
   |   |-----W=2, FCN=18----->| 1 tile sent
   |   |-----W=2, FCN=17----->| 1 tile sent
       |-----W=2, FCN=16----->| 1 tile sent
   s   |-----W=2, FCN=15----->| 1 tile sent
   m   |-----W=2, FCN=14----->| 1 tile sent
   a   |-----W=2, FCN=13--X-->| 1 tile sent (not received)
   l   |-----W=2, FCN=12----->| 1 tile sent
   l   |---W=2, FCN=31 + MIC->| Integrity check: failure
   e   |<--- ACK, W=0, C=0 ---| C=0, Bitmap:1111111111110000111111111111
   r   |-----W=0, FCN=15----->| 1 tile sent
       |-----W=0, FCN=14----->| 1 tile sent
   L   |-----W=0, FCN=13----->| 1 tile sent
   2   |-----W=0, FCN=12----->| 1 tile sent
       |<--- ACK, W=1, C=0 ---| C=0, Bitmap:1111111111111111111111110000
   M   |-----W=1, FCN=3 ----->| 1 tile sent
   T   |-----W=1, FCN=2 ----->| 1 tile sent
   U   |-----W=1, FCN=1 ----->| 1 tile sent
       |-----W=1, FCN=0 ----->| 1 tile sent
   |   |<--- ACK, W=2, C=0 ---| C=0, Bitmap:1111111111111101000000000001
   |   |-----W=2, FCN=13----->| Integrity check: success
   V   |<--- ACK, W=2, C=1 ---| C=1
     (End)

              Figure 28: ACK-on-Error mode with variable MTU.

   In this example, the L2 MTU becomes reduced just before sending the
   "W=2, FCN=19" fragment, leaving space for only 1 tile in each
   forthcoming SCHC Fragment.  Before retransmissions, the 73 tiles are
   carried by a total of 25 SCHC Fragments, the last 9 being of smaller
   size.

   Note 1: Bitmaps are shown prior to compression for transmission

   Note 2: other sequences of events (e.g. regarding when ACKs are sent
   by the Receiver) are also allowed by this specification.  Profiles
   may restrict this flexibility.

   Figure 29 illustrates the transmission in ACK-Always mode of an IPv6
   packet that needs a SCHC
   Packet fragmented in 11 fragments, tiles, with one tile per SCHC Fragment, with
   N=3, MAX_WIND_FCN=6 and no loss.

           Sender               Receiver
             |-----W=0, FCN=6----->|
             |-----W=0, FCN=5----->|
             |-----W=0, FCN=4----->|
             |-----W=0, FCN=3----->|
             |-----W=0, FCN=2----->|
             |-----W=0, FCN=1----->|
             |-----W=0, FCN=0----->|
             |<-----ACK, W=0-------|
             |<-- ACK, W=0, C=0 ---| Bitmap:1111111
             |-----W=1, FCN=6----->|
             |-----W=1, FCN=5----->|
             |-----W=1, FCN=4----->|
             |--W=1, FCN=7 + MIC-->|MIC checked: MIC-->| Integrity check: success =>
             |<-----ACK, W=1-------|
             |<-- ACK, W=1, C=1 ---| C=1 no Bitmap
           (End)

        Figure 33: 29: Transmission in ACK-Always mode of an IPv6 packet carried
        by a SCHC Packet
    fragmented in 11 fragments, tiles, with one tile per SCHC Fragment, with N=3,
                        MAX_WIND_FCN=6 and no lost fragment. loss.

   Figure 34 30 illustrates the transmission in ACK-Always mode of an IPv6
   packet that needs a SCHC
   Packet fragmented in 11 fragments, tiles, with one tile per SCHC Fragment, N=3,
   MAX_WIND_FCN=6 and three lost
   fragments. SCHC Fragments.

           Sender               Receiver
             |-----W=1,
             |-----W=0, FCN=6----->|
             |-----W=1,
             |-----W=0, FCN=5----->|
             |-----W=1,
             |-----W=0, FCN=4--X-->|
             |-----W=1,
             |-----W=0, FCN=3----->|
             |-----W=1,
             |-----W=0, FCN=2--X-->|             7
             |-----W=1,
             |-----W=0, FCN=1----->|             /
             |-----W=1,
             |-----W=0, FCN=0----->|        6543210
             |<-----ACK, W=1-------|Bitmap:1101011
             |-----W=1,
             |<-- ACK, W=0, C=0 ---| Bitmap:1101011
             |-----W=0, FCN=4----->|
             |-----W=1, FCN=2----->|
             |<-----ACK, W=1-------|Bitmap:
             |-----W=0, FCN=2----->|
             |<-- ACK, W=0, C=0 ---| Bitmap:1111111
             |-----W=1, FCN=6----->|
             |-----W=0,
             |-----W=1, FCN=5----->|
             |-----W=0,
             |-----W=1, FCN=4--X-->|
             |--W=0,
             |--W=1, FCN=7 + MIC-->|MIC checked: failed
             |<-----ACK, W=0-------| C= 0 MIC-->| Integrity check: failure
             |<-- ACK, W=1, C=0 ---| C=0, Bitmap:11000001
             |-----W=0, FCN=4----->|MIC checked:
             |-----W=1, FCN=4----->| Integrity check: success =>
             |<-----ACK, W=0-------| C= 1 no Bitmap
             |<-- ACK, W=1, C=1 ---| C=1
           (End)

        Figure 34: 30: Transmission in ACK-Always mode of an IPv6 packet carried
      by a SCHC Packet
       fragmented in 11 fragments, tiles, with one tile per SCHC Fragment, N=3,
               MAX_WIND_FCN=6 and three lost fragments. SCHC Fragments.

   Figure 35 31 illustrates the transmission in ACK-Always mode of an IPv6
   packet that needs a SCHC
   Packet fragmented in 6 fragments, tiles, with one tile per SCHC Fragment, N=3,
   MAX_WIND_FCN=6, three lost
   fragments SCHC Fragments and only one retry needed
   to recover each lost fragment. SCHC Fragment.

             Sender                Receiver
                |-----W=0, FCN=6----->|
                |-----W=0, FCN=5----->|
                |-----W=0, FCN=4--X-->|
                |-----W=0, FCN=3--X-->|
                |-----W=0, FCN=2--X-->|
                |--W=0, FCN=7 + MIC-->|MIC checked: failed
                |<-----ACK, W=0-------|C= 0 MIC-->| Integrity check: failure
                |<-- ACK, W=0, C=0 ---| C=0, Bitmap:1100001
                |-----W=0, FCN=4----->|MIC checked: failed FCN=4----->| Integrity check: failure
                |-----W=0, FCN=3----->|MIC checked: failed FCN=3----->| Integrity check: failure
                |-----W=0, FCN=2----->|MIC checked: FCN=2----->| Integrity check: success
                |<-----ACK, W=0-------|C=1 no Bitmap
                |<-- ACK, W=0, C=1 ---| C=1
              (End)

        Figure 35: 31: Transmission in ACK-Always mode of an IPv6 packet carried
    by 11 fragments, a SCHC Packet
       fragmented in 6 tiles, with one tile per SCHC Fragment, N=3,
                MAX_WIND_FCN=6, three lost framents and only
                 one retry needed for each lost fragment. SCHC Fragments.

   Figure 36 32 illustrates the transmission in ACK-Always mode of an IPv6
   packet that needs a SCHC
   Packet fragmented in 6 fragments, tiles, with one tile per SCHC Fragment, N=3,
   MAX_WIND_FCN=6, three lost
   fragments, SCHC Fragments, and the second SCHC ACK
   lost.

             Sender                Receiver
                |-----W=0, FCN=6----->|
                |-----W=0, FCN=5----->|
                |-----W=0, FCN=4--X-->|
                |-----W=0, FCN=3--X-->|
                |-----W=0, FCN=2--X-->|
                |--W=0, FCN=7 + MIC-->|MIC checked: failed
                |<-----ACK, W=0-------|C=0 MIC-->| Integrity check: failure
                |<-- ACK, W=0, C=0 ---| C=0, Bitmap:1100001
                |-----W=0, FCN=4----->|MIC checked: failed FCN=4----->| Integrity check: failure
                |-----W=0, FCN=3----->|MIC checked: failed FCN=3----->| Integrity check: failure
                |-----W=0, FCN=2----->|MIC checked: FCN=2----->| Integrity check: success
                |  X---ACK, W=0-------|C= 1 no Bitmap
                |<-X-ACK, W=0, C=1 ---| C=1
       timeout  |                     |
                |--W=0, FCN=7 + MIC-->|
                |<-----ACK, W=0-------|C= 1 no Bitmap
                |--- W=0, ACK REQ --->| ACK REQ
                |<-- ACK, W=0, C=1 ---| C=1
              (End)

        Figure 36: 32: Transmission in ACK-Always mode of an IPv6 packet carried
    by 11 fragments, a SCHC Packet
       fragmented in 6 tiles, with one tile per SCHC Fragment, N=3,
    MAX_WIND_FCN=6, three lost fragments, SCHC Fragments, and the second SCHC ACK
                                   lost.

   Figure 37 33 illustrates the transmission in ACK-Always mode of an IPv6
   packet that needs a SCHC
   Packet fragmented in 6 fragments, tiles, with N=3, MAX_WIND_FCN=6, with three
   lost
   fragments, SCHC Fragments, and one retransmitted fragment SCHC Fragment lost again.

              Sender                Receiver
                |-----W=0, FCN=6----->|
                |-----W=0, FCN=5----->|
                |-----W=0, FCN=4--X-->|
                |-----W=0, FCN=3--X-->|
                |-----W=0, FCN=2--X-->|
                |--W=0, FCN=7 + MIC-->|MIC checked: failed
                |<-----ACK, W=0-------|C=0 MIC-->| Integrity check: failure
                |<-- ACK, W=0, C=0 ---| C=0, Bitmap:1100001
                |-----W=0, FCN=4----->|MIC checked: failed FCN=4----->| Integrity check: failure
                |-----W=0, FCN=3----->|MIC checked: failed FCN=3----->| Integrity check: failure
                |-----W=0, FCN=2--X-->|
         timeout|                     |
                |--W=0, FCN=7 + MIC-->|All-0 empty
                |<-----ACK, W=0-------|C=0
                |--- W=0, ACK REQ --->| ACK REQ
                |<-- ACK, W=0, C=0 ---| C=0, Bitmap: 1111101
                |-----W=0, FCN=2----->|MIC checked: FCN=2----->| Integrity check: success
                |<-----ACK, W=0-------|C=1 no Bitmap
                |<-- ACK, W=0, C=1 ---| C=1
              (End)

        Figure 37: 33: Transmission in ACK-Always mode of an IPv6 packet carried
   by 11 fragments, a SCHC Packet
   fragmented in 6 tiles, with N=3, MAX_WIND_FCN=6, with three lost fragments, SCHC
        Fragments, and one retransmitted fragment SCHC Fragment lost again.

   Figure 38 34 illustrates the transmission in ACK-Always mode of an IPv6
   packet that needs a SCHC
   Packet fragmented in 28 fragments, tiles, with one tile per SCHC Fragment, N=5,
   MAX_WIND_FCN=23 and two lost fragments.  Note that MAX_WIND_FCN=23 may be useful when the
   maximum possible Bitmap size, considering the maximum lower layer
   technology payload size and the value of R, is 3 bytes.  Note also
   that the FCN of the last fragment of the packet is the one with
   FCN=31 (i.e.  FCN=2^N-1 for N=5, or equivalently, all FCN bits set to
   1). SCHC Fragments.

         Sender               Receiver
           |-----W=0, FCN=23----->|
           |-----W=0, FCN=22----->|
           |-----W=0, FCN=21--X-->|
           |-----W=0, FCN=20----->|
           |-----W=0, FCN=19----->|
           |-----W=0, FCN=18----->|
           |-----W=0, FCN=17----->|
           |-----W=0, FCN=16----->|
           |-----W=0, FCN=15----->|
           |-----W=0, FCN=14----->|
           |-----W=0, FCN=13----->|
           |-----W=0, FCN=12----->|
           |-----W=0, FCN=11----->|
           |-----W=0, FCN=10--X-->|
           |-----W=0, FCN=9 ----->|
           |-----W=0, FCN=8 ----->|
           |-----W=0, FCN=7 ----->|
           |-----W=0, FCN=6 ----->|
           |-----W=0, FCN=5 ----->|
           |-----W=0, FCN=4 ----->|
           |-----W=0, FCN=3 ----->|
           |-----W=0, FCN=2 ----->|
           |-----W=0, FCN=1 ----->|
           |-----W=0, FCN=0 ----->|
           |                      |lcl-Bitmap:110111111111101111111111
           |<------ACK, W=0-------|encoded Bitmap:1101111111111011                      |
           |<--- ACK, W=0, C=0 ---| Bitmap:110111111111101111111111
           |-----W=0, FCN=21----->|
           |-----W=0, FCN=10----->|
           |<------ACK, W=0-------|no Bitmap
           |<--- ACK, W=0, C=0 ---| Bitmap:111111111111111111111111
           |-----W=1, FCN=23----->|
           |-----W=1, FCN=22----->|
           |-----W=1, FCN=21----->|
           |--W=1, FCN=31 + MIC-->|MIC checked: sucess =>
           |<------ACK, W=1-------|no Bitmap MIC-->| Integrity check: success
           |<--- ACK, W=1, C=1 ---| C=1
         (End)

        Figure 38: 34: Transmission in ACK-Always mode of an IPv6 packet carried
    by a SCHC Packet
       fragmented in 28 fragments, tiles, with one tile per SCHC Fragment, N=5,
               MAX_WIND_FCN=23 and two lost fragments. SCHC Fragments.

Appendix C.  Fragmentation State Machines

   The fragmentation state machines of the sender and the receiver, one
   for each of the different reliability modes, are described in the
   following figures:

                +===========+
   +------------+  Init     |
   |  FCN=0     +===========+
   |  No Window
   |  No Bitmap
   |                   +-------+
   |          +========+==+    | More Fragments
   |          |           | <--+ ~~~~~~~~~~~~~~~~~~~~
   +--------> |   Send    |      send Fragment (FCN=0)
              +===+=======+
                  |  last fragment
                  |  ~~~~~~~~~~~~
                  |  FCN = 1
                  v  send fragment+MIC
              +============+
              |    END     |
              +============+

            Figure 39: 35: Sender State Machine for the No-ACK Mode

                         +------+ Not All-1
              +==========+=+    | ~~~~~~~~~~~~~~~~~~~
              |            + <--+ set Inactivity Timer
              |  RCV Frag  +-------+
              +=+===+======+       |All-1 &
      All-1 &   |   |              |MIC correct
    MIC wrong   |   |Inactivity    |
                |   |Timer Exp.    |
                v   |              |
     +==========++  |              v
     |   Error   |<-+     +========+==+
     +===========+        |    END    |
                          +===========+

           Figure 40: 36: Receiver State Machine for the No-ACK Mode
                 +=======+
                 | INIT  |       FCN!=0 & more frags
                 |       |       ~~~~~~~~~~~~~~~~~~~~~~
                 +======++  +--+ send Window + frag(FCN)
                    W=0 |   |  | FCN-
     Clear local Bitmap lcl_bm       |   |  v set local Bitmap lcl_bm
          FCN=max value |  ++==+========+
                        +> |            |
   +---------------------> |    SEND    |
   |                       +==+===+=====+
   |      FCN==0 & more frags |   | last frag
   |    ~~~~~~~~~~~~~~~~~~~~~ |   | ~~~~~~~~~~~~~~~
   |               set local-Bitmap lcl_bm |   | set local-Bitmap lcl_bm
   |   send wnd + frag(all-0) |   | send wnd+frag(all-1)+MIC
   |       set Retrans_Timer  |   | set Retrans_Timer
   |                          |   |
   |Recv_wnd == wnd &         |   |
   |Lcl_Bitmap==recv_Bitmap&
   |lcl_bm==recv_bm &         |   |  +----------------------+  +-----------------------+
   |more frag                 |   |  |lcl-Bitmap!=rcv-Bitmap|  | lcl_bm!=rcv-bm        |
   |~~~~~~~~~~~~~~~~~~~~~~    |   |  | ~~~~~~~~~             |
   |Stop Retrans_Timer        |   |  | Attemp++ Attempt++             v
   |clear local_Bitmap lcl_bm              v   v  |                +=====+=+
   |window=next_window   +====+===+==+===+            |Resend |
   +---------------------+               |            |Missing|
                    +----+     Wait      |            |Frag   |
   not expected wnd |    |    Bitmap     |            +=======+
   ~~~~~~~~~~~~~~~~ +--->+               ++Retrans_Timer Exp  |
       discard frag      +==+=+===+=+==+=+| ~~~~~~~~~~~~~~~~~ |
                            | |   | ^  ^  |reSend(empty)All-* |
                            | |   | |  |  |Set Retrans_Timer  |
                            | |   | |  +--+Attemp++  +--+Attempt++          |
   MIC_bit==1 &             | |   | +-------------------------+
   Recv_window==window &    | |   |   all missing frags sent
                no more frag| |   |   ~~~~~~~~~~~~~~~~~~~~~~
    ~~~~~~~~~~~~~~~~~~~~~~~~| |   |   Set Retrans_Timer
          Stop Retrans_Timer| |   |
    +=============+         | |   |
    |     END     +<--------+ |   |
    +=============+           |   | Attemp Attempt > MAX_ACK_REQUESTS
               All-1 Window & |   | ~~~~~~~~~~~~~~~~~~
                MIC_bit ==0 & |   v Send Abort
      Lcl_Bitmap==recv_Bitmap
             lcl_bm==recv_bm  | +=+===========+
                 ~~~~~~~~~~~~ +>|    ERROR    |
                   Send Abort   +=============+

          Figure 41: 37: Sender State Machine for the ACK-Always Mode

    Not All- & w=expected +---+   +---+w = Not expected
    ~~~~~~~~~~~~~~~~~~~~~ |   |   |   |~~~~~~~~~~~~~~~~
    Set local_Bitmap(FCN) lcl_bm(FCN)       |   v   v   |discard
                         ++===+===+===+=+
   +---------------------+     Rcv      +--->* ABORT
   |  +------------------+   Window     |
   |  |                  +=====+==+=====+
   |  |       All-0 & w=expect |  ^ w =next & not-All
   |  |     ~~~~~~~~~~~~~~~~~~ |  |~~~~~~~~~~~~~~~~~~~~~
   |  |    set lcl_Bitmap(FCN)| lcl_bm(FCN)     |  |expected = next window
   |  |      send local_Bitmap lcl_bm       |  |Clear local_Bitmap lcl_bm
   |  |                        |  |
   |  | w=expct w=expected & not-All   |  |
   |  | ~~~~~~~~~~~~~~~~~~     |  |
   |  |     set lcl_Bitmap(FCN)+-+ lcl_bm(FCN)+-+ |  | +--+ w=next & All-0
   |  |     if lcl_Bitmap lcl_bm full | | |  | |  | ~~~~~~~~~~~~~~~
   |  |     send lcl_Bitmap lcl_bm    | | |  | |  | expct expected = nxt wnd
   |  |                    v | v  | |  | Clear lcl_Bitmap
   | lcl_bm
   |  w=expct &  |w=expected& All-1 +=+=+=+==+=++ | set lcl_Bitmap(FCN) lcl_bm(FCN)
   |  |  ~~~~~~~~~~~  +->+    Wait   +<+ send lcl_Bitmap lcl_bm
   |  |    discard    +--|    Next   |
   |  | All-0  +---------+  Window   +--->* ABORT
   |  | ~~~~~  +-------->+========+=++
   |  | snd lcl_bm  All-1 & w=next| |  All-1 & w=nxt
   |  |                & MIC wrong| |  & MIC right
   |  |          ~~~~~~~~~~~~~~~~~| | ~~~~~~~~~~~~~~~~~~
   |  |            set local_Bitmap(FCN)| lcl_bm(FCN)| |set lcl_Bitmap(FCN) lcl_bm(FCN)
   |  |                send local_Bitmap| lcl_bm| |send local_Bitmap lcl_bm
   |  |                           | +----------------------+
   |  |All-1 & w=expct w=expected         |                        |
   |  |& MIC wrong                v   +---+ w=expctd w=expected &   |
   |  |~~~~~~~~~~~~~~~~~~~~  +====+=====+ | MIC wrong      |
   |  |set local_Bitmap(FCN) lcl_bm(FCN)       |          +<+ ~~~~~~~~~~~~~~ |
   |  |send local_Bitmap lcl_bm           | Wait End |   set lcl_btmp(FCN)| lcl_bm(FCN)|
   |  +--------------------->+          +--->* ABORT       |
   |                         +===+====+=+-+ All-1&MIC wrong|
   |                             |    ^   | ~~~~~~~~~~~~~~~|
   |      w=expected & MIC right |    +---+   send lcl_btmp lcl_bm  |
   |      ~~~~~~~~~~~~~~~~~~~~~~ |                         |
   |       set local_Bitmap(FCN) lcl_bm(FCN)       | +-+ Not All-1           |
   |        send local_Bitmap lcl_bm          | | | ~~~~~~~~~           |
   |                             | | |  discard            |
   |All-1 & w=expctd
   |All-1&w=expected & MIC right | | |                     |
   |~~~~~~~~~~~~~~~~~~~~~~~~~~~~ v | v +----+All-1         |
   |set local_Bitmap(FCN) lcl_bm(FCN)            +=+=+=+=+==+ |~~~~~~~~~     |
   |send local_Bitmap lcl_bm                |          +<+Send lcl_btmp lcl_bm   |
   +-------------------------->+    END   |                |
                               +==========+<---------------+

          --->* ABORT
               ~~~~~~~
               Inactivity_Timer = expires
           When DWN_Link DWL
             IF Inactivity_Timer expires
                Send DWL Request
                Attemp++
                Attempt++

         Figure 42: 38: Receiver State Machine for the ACK-Always Mode

                  +=======+
                  |       |
                  | INIT  |
                  |       |       FCN!=0 & more frags
                  +======++  +--+       ~~~~~~~~~~~~~~~~~~~~~~
                         W=0 |   |
     Frag RuleID trigger |  send Window   +--+ Send cur_W + frag(FCN)
          ~~~~~~~~~~~~~~~~~~ frag(FCN);
     ~~~~~~~~~~~~~~~~~~~ |   |  |  FCN-
          Clear local Bitmap FCN--;
  cur_W=0; FCN=max_value;|   |  |  v set local Bitmap
               FCN=max value [cur_W, cur_Bmp]
    clear [cur_W, Bmp_n];|   |  ++=============+
                             +>  v
          clear rcv_Bmp  |  ++==+==========+         **BACK_TO_SEND
                         +->+              |     cur_W==rcv_W &
      **BACK_TO_SEND        |     SEND     |
    +------------------------->     [cur_W,Bmp_n]==rcv_Bmp
+-------------------------->+              |     & more frags
|  +----------------------->+              |     ~~~~~~~~~~~~
|  |                        ++===+=========+     cur_W++;
|                           ++=====+=======+  |      FCN==0 & more frags|   |last frag      clear [cur_W, Bmp_n]
|  |  ~~~~~~~~~~~~~~~~~~~~~~~|     |~~~~~~~~~~~~~~~~~   |~~~~~~~~~
|  |        set local-Bitmap| cur_Bmp;     |   |set local-Bitmap [cur_W, Bmp_n];
|      send wnd  |send cur_W + frag(all-0)| frag(All-0);|   |send wnd+frag(all-1)+MIC cur_W + frag(All-1)+MIC;
|  |        set Retrans_Timer|   |set Retrans_Timer
|  |                         |   | +-----------------------------------+
|  |Retrans_Timer expires &  |   |   lcl-Bitmap!=rcv-Bitmap |cur_W==rcv_W&[cur_W,Bmp_n]!=rcv_Bmp|
|  |more fragments Frags               |   | |  ~~~~~~~~~~~~~~~~~~~              |
|   ~~~~~~~~~~~~~~~~~~~~~~  |~~~~~~~~~~~~~~~~~~~~     |   |   Attemp++ |  Attempts++; W=cur_W              |
|  |stop Retrans_Timer Retrans_Timer;      |   |  +-----------------+
    |clear local-Bitmap | +--------+             rcv_W==Wn &|
|  |[cur_W,Bmp_n]==cur_Bmp;  v   v | |        v
    |window = next window  +=====+=====+==+==+         +====+====+
    +----------------------+                 +     [Wn,Bmp_n]!=rcv_Bmp|
|  |cur_W++            +=====+===+=+=+==+   +=+=========+   ~~~~~~~~~~~|
|  +-------------------+                |   | Resend    |
    +--------------------->+   Attempts++;|
+----------------------+   Wait Bitmap x ACK   |   | Missing   |         W=Wn |                  +-- +
+--------------------->+                |   | Frag Frags(W)  +<-------------+
|         rcv_W==Wn &+-+                | not expected wnd   +======+====+
|   ++=+===+===+===+==+         +======+==+ [Wn,Bmp_n]!=rcv_Bmp| ++=+===+===+==+==+          | ~~~~~~~~~~~~~~~~
|      ~~~~~~~~~~~~~~|  ^ |   |   |  ^             |
|    discard frag  +----+        send (cur_W,+--+ |   |   |   +-------------------+  +-------------+
|        ALL-0-empty)     |   |   |     all missing frag sent
    |Retrans_Timer expires & sent(W)
|                         |   |     ~~~~~~~~~~~~~~~~~~~~~   |       No more Frag     ~~~~~~~~~~~~~~~~~
|  Retrans_Timer expires &|   |   |     Set     set Retrans_Timer
| ~~~~~~~~~~~~~~~~~~~~~~~            No more Frags|   |   |
|           ~~~~~~~~~~~~~~|   |  Stop Retrans_Timer   |
|      stop Retrans_Timer;|   |   |  Send ALL-1-empty
|(re)send frag(All-1)+MIC |   |   |
+-------------------------+   |   |
                 cur_W==rcv_W&|   |
       [cur_W,Bmp_n]==rcv_Bmp&|   |
         Local_Bitmap==Recv_Bitmap|   |
         ~~~~~~~~~~~~~~~~~~~~~~~~~|   |Attemp Attempts > MAX_ACK_REQUESTS
    +=========+Stop Retrans_Timer
  No more Frags & MIC flag==OK|   |   |~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~
            ~~~~~~~~~~~~~~~~~~|   |   END   +<------------------+   v  Send send Abort
    +=========+                     +=+=========+
 +=========+stop Retrans_Timer|   |  +===========+
 |   END   +<-----------------+   +->+   ERROR   |
 +=========+                         +===========+

         Figure 43: 39: Sender State Machine for the ACK-on-Error Mode

   This is an example only.  The specification in Section 8.4.3.1 is
   open to very different sequencing of operations.

                   +=======+        New frag RuleID received
                   |       |        ~~~~~~~~~~~~~
                   | INIT  +-------+cur_W=0;clear([cur_W,Bmp_n]);
                   +=======+       |sync=0
                                   |
      Not All- All* & w=expected rcv_W==cur_W+---+ | +---+   +---+w = Not expected
      ~~~~~~~~~~~~~~~~~~~~~
        ~~~~~~~~~~~~~~~~~~~~ |   | |   |~~~~~~~~~~~~~~~~
      Set local_Bitmap(FCN) |  (E)
        set[cur_W,Bmp_n(FCN)]|   v v   |discard
                           ++===+===+===+=+
   +-----------------------+ v   |
                            ++===+=+=+===+=+
     +----------------------+              +--+ All-0 & full All-0&Full[cur_W,Bmp_n]
     |           ABORT *<---+  Rcv Window  |  | ~~~~~~~~~~~~ ~~~~~~~~~~
     |  +--------------------+  +-------------------+              +<-+ w =next cur_W++;set Inact_timer;
     |  |     All-0 empty +->+=+=+===+======+                +->+=+=+=+=+=+====+    clear lcl_Bitmap [cur_W,Bmp_n]
     |  |     ~~~~~~~~~~~ All-0 empty(Wn)|    | | | ^ ^
     |  |     send bitmap ~~~~~~~~~~~~~~ +----+ |   |w=expct & not-All | | |rcv_W==cur_W & full sync==0;
     |  | sendACK([Wn,Bmp_n])   |   |~~~~~~~~~~~~~~~~~~~~~~~~ | | |& Full([cur_W,Bmp_n])
     |   |set lcl_Bitmap; w =nxt  |                       | | | |& All* || last_miss_frag
     |  |      All-0 & w=expect                       | |     w=next | |~~~~~~~~~~~~~~~~~~~~~~
     |  |    All* & no_full Bitmap rcv_W==cur_W|(C)| |sendACK([cur_W,Bmp_n]);
     |  |              & sync==0| | | |cur_W++; clear([cur_W,Bmp_n])
     |  |&no_full([cur_W,Bmp_n])| |(E)|
     |  |      ~~~~~~~~~~~~~~~~ | | | |    ~~~~~~~~              +========+
     |  |      ~~~~~~~~~~~~~~~~~ sendACK([cur_W,Bmp_n])| | |    Send abort| Error/ |              | Error/ |      send local_Bitmap
     |  |  +---------->+ Abort                       | | | |   +----+     | Abort  | +-------->+========+
     |  |                       v v | |   |   all-1       ^    |     +===+====+
     |    All-0 empty    +====+===+==+=+=+ ~~~~~~~  |                   +===+=+=+=+===+=+ (D)        ^
     |  |  ~~~~~~~~~~~~~                +--+    Wait x     | Send abort  |         |
     |  send lcl_btmp +->|  | All-0 empty(Wn)+->| Missing Fragm.| Frags |<-+         |
     |  |                   +==============++ ~~~~~~~~~~~~~~    +=============+=+            |
     |  | sendACK([Wn,Bmp_n])             +--------------+
     |  |                                       *ABORT
     v  v
    (A)(B)
                                      (D) All* || last_miss_frag
      (C) All* & sync>0                   & rcv_W!=cur_W & sync>0
          ~~~~~~~~~~~~                    & Full([rcv_W,Bmp_n])
          Wn=oldest[not full(W)];         ~~~~~~~~~~~~~~~~~~~~
          sendACK([Wn,Bmp_n])             Wn=oldest[not full(W)];
                                          sendACK([Wn,Bmp_n]);sync--

                                ABORT-->* Uplink Only &
   |  |                             Inactivity_Timer =
                                          Inact_Timer expires
      (E) Not All* & rcv_W!=cur_W         || Attempts > MAX_ACK_REQUESTS
          ~~~~~~~~~~~~~~~~~~~~            ~~~~~~~~~~~~~~~~~~~~~
          sync++; cur_W=rcv_W;            send Abort
          set[cur_W,Bmp_n(FCN)]

     (A)(B)
      |  |                             ~~~~~~~~~~~~~~~~~~~~~~~~~~
   |
      |                              Send Abort  |  |All-1 All-1 & w=expect rcv_W==cur_W & MIC wrong MIC!=OK        All-0 empty(Wn)
      |  |~~~~~~~~~~~~~~~~~~~~~~~~~~~~  | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~     +-+  All-1  ~~~~~~~~~~
      |  |set local_Bitmap(FCN)  | sendACK([cur_W,Bmp_n],MIC=0)     | v  ~~~~~~~~~~  sendACK([Wn,Bmp_n])
      |  |send local_Bitmap     +===========+==+ snd lcl_btmp  |                      +===========+=++
      |  +--------------------->+   Wait End   +-+
      |                         +=====+=+====+=+ | w=expct & All-1
      |       w=expected     rcv_W==cur_W & MIC right MIC==OK    | |    ^   | MIC wrong & rcv_W==cur_W
      |     ~~~~~~~~~~~~~~~~~~~~~~    | |    +---+ ~~~~~~~~~
   |  set & send local_Bitmap(FCN) MIC!=OK
      |  sendACK([cur_W,Bmp_n],MIC=1) | set lcl_Bitmap(FCN) |          ~~~~~~~~~~~~~~~~~~~
      |                               | | sendACK([cur_W,Bmp_n],MIC=0);
      |                               | |          Attempts++
      |All-1 & w=expected Full([cur_W,Bmp_n])    | |
      |& MIC==OK & MIC right sync==0            | +-->* ABORT
   |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |~~~~~~~~~~~~~~~~~~~            v
   |set & send local_Bitmap(FCN) +=+==========+
      |sendACK([cur_W,Bmp_n],MIC=1) +=+=========+
      +---------------------------->+    END    |
                                 +============+
               --->*
                                    +===========+

            ABORT
                    Only -->* Uplink
                    Inactivity_Timer Only &
                       Inact_Timer = expires
                    ~~~~~~~~~~~~~~~~~~~~~~~~~~
                    Send
                       || Attempts > MAX_ACK_REQUESTS
                       ~~~~~~~~~~~~~~~~~~~~~
                       send Abort

        Figure 44: 40: Receiver State Machine for the ACK-on-Error Mode

Appendix D.  SCHC Parameters - Ticket #15

   This section gives lists the list of parameters information that need to be defined provided in the
   LPWAN technology-specific documents.

   o  Define the most  Most common uses case and how SCHC may be deployed. cases, deployment scenarios

   o  LPWAN Architecture.  Explain  Mapping of the SCHC entities (Compression and
      Fragmentation), how/where they are represented in the
      corresponding technology architecture.  If applicable, explain architectural elements onto the
      various LPWAN
      architecture

   o  Assessment of LPWAN integrity checking

   o  Various potential channel conditions for the technology and the
      corresponding recommended use of SCHC C/D and F/R.

   o  L2 fragmentation decision

   o  Technology developers must evaluate F/R

   This section lists the parameters that L2 has strong enough
      integrity checking need to match SCHC's assumption. be defined in the
   Profile.

   o  Rule ID numbering system, scheme, fixed-sized or variable-sized Rule IDs,
      number of Rules

   o  Size of Rules, the Rule IDs

   o  The way the Rule ID is sent (L2 or L3) and how (describe) transmitted

   o  Fragmentation delivery  Padding: size of the L2 Word (for most LPWAN technologies, this
      would be a byte; for some technologies, a bit)

   o  Decision to use SCHC fragmentation mechanism or not.  If yes:

      *  reliability mode used mode(s) used, in which cases (e.g. based on link
         channel condition)

   o  Define the

      *  Rule ID values assigned to each mode in use

      *  presence and number of bits for FCN (N) and DTag (T)

   o  in particular, is for each Rule ID value

      *  support for interleaved packet transmission supported and transmission, to what extent

   o  The MIC algorithm to be used

      *  WINDOW_SIZE, for modes that use windows

      *  number of bits for W (M) for each Rule ID value, for modes that
         use windows

      *  number of bits for FCN (N) for each Rule ID value

      *  value of MAX_WIND_FCN and use of FCN values, if applicable to
         the size, SCHC F/R mode.

      *  size of MIC and algorithm for its computation, for each Rule
         ID, if different from the default CRC32

   o CRC32.  Byte fill-up with
         zeroes or other mechanism, to be specified.

      *  Retransmission Timer duration

   o for each Rule ID value, if
         applicable to the SCHC F/R mode

      *  Inactivity Timer duration

   o  Define for each Rule ID value, if applicable
         to the SCHC F/R mode

      *  MAX_ACK_REQUEST (number of attempts)

   o  Padding: size of value for each Rule ID value, if applicable to
         the SCHC F/R mode

   o  if L2 Word (for most technologies, a byte; for
      some technologies, is wider than a bit).  Value of the padding bits (1 or 0).
      The bit and SCHC fragmentation is used,
      value of the padding bits needs to be specified (0 or 1).  This is needed because the
      padding bits of the last fragment are included in the MIC calculation.

   o  Take into account that
      computation.

   A Profile MAY define a delay to be added between each SCHC message
   transmission to respect local regulations or other constraints
   imposed by the length applications.

   o  Note on soliciting downlink transmissions: In some LPWAN
      technologies, as part of Rule ID + N + T + W when
      possible energy-saving techniques, downlink
      transmission is good only possible immediately after an uplink
      transmission.  In order to have avoid potentially high delay in the
      downlink transmission of a multiple fragmented SCHC Packet, the SCHC
      Fragment receiver may want to perform an uplink transmission as
      soon as possible after reception of 8 bits a SCHC Fragment that is not
      the last one.  Such uplink transmission may be triggered by the L2
      (e.g. an L2 ACK sent in response to complete a byte
      and avoid padding SCHC Fragment encapsulated
      in a L2 PDU that requires an L2 ACK) or it may be triggered from
      an upper layer.

   o  In  the ACK format following parameters need to have be addressed in documents other
      than this one but not forcely in the LPWAN technology-specific
      documents:

      *  The way the contexts are provisioned

      *  The way the Rules as generated

Appendix E.  Supporting multiple window sizes for fragmentation

   For ACK-Always or ACK-on-Error, implementers MAY opt to support a length
   single window size or multiple window sizes.  The latter, when
   feasible, may provide performance optimizations.  For example, a
   large window size SHOULD be used for Rule ID + T + W bit into packets that need to be carried
   by a
      complete large number of byte SCHC Fragments.  However, when the number of
   SCHC Fragments required to do optimization more easily

   o  The technology documents will describe if carry a packet is low, a smaller window
   size, and thus a shorter Bitmap, MAY be sufficient to provide
   feedback on all SCHC Fragments.  If multiple window sizes are
   supported, the Rule ID is constrained
      by any alignment

   o  When fragmenting MAY be used to signal the window size in ACK-on-Error or ACK-Always mode, it is
      expected use
   for a specific packet transmission.

   Note that the last same window (called All-1 window) will not be
      fully utilised, i.e. there won't size MUST be fragments with used for the transmission of
   all FCN values
      from MAX_WIND_FCN downto 1 and finally All-1.  It is worth noting SCHC Fragments that belong to the same SCHC Packet.

Appendix F.  Downlink SCHC Fragment transmission

   For downlink transmission of a fragmented SCHC Packet in ACK-Always
   mode, the SCHC Fragment receiver MAY support timer-based SCHC ACK
   retransmission.  In this document mechanism, the SCHC Fragment receiver
   initializes and starts a timer (the Inactivity Timer is used) after
   the transmission of a SCHC ACK, except when the SCHC ACK is sent in
   response to the last SCHC Fragment of a packet (All-1 fragment).  In
   the latter case, the SCHC Fragment receiver does not mandate start a timer
   after transmission of the SCHC ACK.

   If, after transmission of a SCHC ACK that other windows (called
      All-0 windows) are fully utilised either.  This document purposely
      does is not specify that an All-1 windows use Bitmaps with the same
      number of bits as All-0 windows do.  By default, Bitmaps for All-0 fragment,
   and All-1 windows are before expiration of the same size MAX_WIND_FCN + 1.  But corresponding Inactivity timer, the SCHC
   Fragment receiver receives a
      technology-specific document MAY revert SCHC Fragment that decision.  The
      rationale belongs to the
   current window (e.g. a missing SCHC Fragment from the current window)
   or to the next window, the Inactivity timer for reverting the decision could be SCHC ACK is
   stopped.  However, if the following: Note
      that Inactivity timer expires, the SCHC ACK sent is
   resent and the Inactivity timer is reinitialized and restarted.

   The default initial value for the Inactivity timer, as well as the
   maximum number of retries for a response specific SCHC ACK, denoted
   MAX_ACK_RETRIES, are not defined in this document, and need to an All-1 fragment includes be
   defined in a C bit Profile.  The initial value of the Inactivity timer is
   expected to be greater than that of the Retransmission timer, in
   order to make sure that a (buffered) SCHC ACK Fragment to be
   retransmitted can find an opportunity for other windows don't have.  Therefore, that transmission.

   When the SCHC ACK for Fragment sender transmits the All-1 window is one bit bigger.  An L2
      technology fragment, it starts
   its Retransmission Timer with a severely constrained payload size might decide large timeout value (e.g. several
   times that of the initial Inactivity timer).  If a SCHC ACK is
   received before expiration of this "bump" in timer, the SCHC Fragment sender
   retransmits any lost SCHC Fragments reported by the SCHC ACK, or if
   the SCHC ACK for confirms successful reception of all SCHC Fragments of
   the last fragment is a bad
      resource usage.  It could thus mandate that window, the All-1 window transmission of the fragmented SCHC Packet is
      not allowed to use
   considered complete.  If the FCN value 1 timer expires, and no SCHC ACK has been
   received since the start of the timer, the SCHC Fragment sender
   assumes that the All-1 fragment has been successfully received (and
   possibly, the last SCHC ACK
      Bitmap size is reduced by 1 bit.  This provides room for the C bit
      without creating a bump in has been lost: this mechanism assumes
   that the SCHC ACK.

   And retransmission timer for the following parameters need All-1 fragment is long enough
   to be addressed in another document
   but not forcely in the technology-specific one:

   o  The way allow several SCHC ACK retries if the contexts are provisioning

   o  The way All-1 fragment has not;been
   received by the Rules as generated SCHC Fragment receiver, and it also assumes that it
   is unlikely that several ACKs become all lost).

Appendix E. G.  Note

   Carles Gomez has been funded in part by the Spanish Government
   (Ministerio de Educacion, Cultura y Deporte) through the Jose
   Castillejo grant CAS15/00336, and by the ERDF and the Spanish
   Government through project TEC2016-79988-P.  Part of his contribution
   to this work has been carried out during his stay as a visiting
   scholar at the Computer Laboratory of the University of Cambridge.

Authors' Addresses
   Ana Minaburo
   Acklio
   1137A avenue des Champs Blancs
   35510 Cesson-Sevigne Cedex
   France

   Email: ana@ackl.io

   Laurent Toutain
   IMT-Atlantique
   2 rue de la Chataigneraie
   CS 17607
   35576 Cesson-Sevigne Cedex
   France

   Email: Laurent.Toutain@imt-atlantique.fr

   Carles Gomez
   Universitat Politecnica de Catalunya
   C/Esteve Terradas, 7
   08860 Castelldefels
   Spain

   Email: carlesgo@entel.upc.edu

   Dominique Barthel
   Orange Labs
   28 chemin du Vieux Chene
   38243 Meylan
   France

   Email: dominique.barthel@orange.com

   Juan Carlos Zuniga
   SIGFOX
   425 rue Jean Rostand
   Labege  31670
   France

   Email: JuanCarlos.Zuniga@sigfox.com