<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc toc="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc linkmailto="no" ?>
<?rfc rfcedstyle="yes"?>
<?rfc-ext allow-markup-in-artwork="yes" ?>
<?rfc-ext include-references-in-index="yes" ?>
<rfc category="exp" docName="draft-irtf-icnrg-icnlowpan-08" ipr="trust200902"
     submissionType="IRTF">
  <front>
    <title abbrev="ICN Adaptation to LoWPANs">ICN Adaptation to LoWPAN
    Networks (ICN LoWPAN)</title>

    <author fullname="Cenk Gundogan" initials="C." surname="Gundogan">
      <organization abbrev="HAW Hamburg">HAW Hamburg</organization>

      <address>
        <postal>
          <street>Berliner Tor 7</street>

          <city>Hamburg</city>

          <code>D-20099</code>

          <country>Germany</country>
        </postal>

        <phone>+4940428758067</phone>

        <email>cenk.guendogan@haw-hamburg.de</email>

        <uri>http://inet.haw-hamburg.de/members/cenk-gundogan</uri>
      </address>
    </author>

    <author fullname="Thomas C. Schmidt" initials="TC." surname="Schmidt">
      <organization abbrev="HAW Hamburg">HAW Hamburg</organization>

      <address>
        <postal>
          <street>Berliner Tor 7</street>

          <city>Hamburg</city>

          <code>D-20099</code>

          <country>Germany</country>
        </postal>

        <email>t.schmidt@haw-hamburg.de</email>

        <uri>http://inet.haw-hamburg.de/members/schmidt</uri>
      </address>
    </author>

    <author fullname="Matthias Waehlisch" initials="M." surname="Waehlisch">
      <organization abbrev="link-lab &amp; FU Berlin">link-lab &amp; FU
      Berlin</organization>

      <address>
        <postal>
          <street>Hoenower Str. 35</street>

          <city>Berlin</city>

          <code>D-10318</code>

          <country>Germany</country>
        </postal>

        <email>mw@link-lab.net</email>

        <uri>http://www.inf.fu-berlin.de/~waehl</uri>
      </address>
    </author>

    <author fullname="Christopher Scherb" initials="C." surname="Scherb">
      <organization abbrev="University of Basel">University of
      Basel</organization>

      <address>
        <postal>
          <street>Spiegelgasse 1</street>

          <city>Basel</city>

          <code>CH-4051</code>

          <country>Switzerland</country>
        </postal>

        <email>christopher.scherb@unibas.ch</email>
      </address>
    </author>

    <author fullname="Claudio Marxer" initials="C." surname="Marxer">
      <organization abbrev="University of Basel">University of
      Basel</organization>

      <address>
        <postal>
          <street>Spiegelgasse 1</street>

          <city>Basel</city>

          <code>CH-4051</code>

          <country>Switzerland</country>
        </postal>

        <email>claudio.marxer@unibas.ch</email>
      </address>
    </author>

    <author fullname="Christian Tschudin" initials="C." surname="Tschudin">
      <organization abbrev="University of Basel">University of
      Basel</organization>

      <address>
        <postal>
          <street>Spiegelgasse 1</street>

          <city>Basel</city>

          <code>CH-4051</code>

          <country>Switzerland</country>
        </postal>

        <email>christian.tschudin@unibas.ch</email>
      </address>
    </author>

    <date/>

    <workgroup>ICN Research Group</workgroup>

    <abstract>
      <t>This document defines a convergence layer for CCNx and NDN over IEEE
      802.15.4 LoWPAN networks. A new frame format is specified to adapt CCNx
      and NDN packets to the small MTU size of IEEE 802.15.4. For that,
      syntactic and semantic changes to the TLV-based header formats are
      described. To support compatibility with other LoWPAN technologies that
      may coexist on a wireless medium, the dispatching scheme provided by
      6LoWPAN is extended to include new dispatch types for CCNx and NDN.
      Additionally, the link fragmentation component of the 6LoWPAN
      dispatching framework is applied to ICN chunks. In its second part, the
      document defines stateless and stateful compression schemes to improve
      efficiency on constrained links. Stateless compression reduces TLV
      expressions to static header fields for common use cases. Stateful
      compression schemes elide state local to the LoWPAN and replace names in
      data packets by short local identifiers.</t>

      <t>This document is a product of the IRTF Information-Centric
      Networking Research Group (ICNRG).</t>
    </abstract>
  </front>

  <middle>
    <section anchor="intro" title="Introduction">
      <t>The Internet of Things (IoT) has been identified as a promising
      deployment area for Information Centric Networks (ICN), as
      infrastructureless access to content, resilient forwarding, and
      in-network data replication demonstrated notable advantages over the
      traditional host-to-host approach on the Internet <xref
      target="NDN-EXP1"/>, <xref target="NDN-EXP2"/>. Recent studies <xref
      target="NDN-MAC"/> have shown that an appropriate mapping to link layer
      technologies has a large impact on the practical performance of an ICN.
      This will be even more relevant in the context of IoT communication
      where nodes often exchange messages via low-power wireless links under
      lossy conditions. In this memo, we address the base adaptation of data
      chunks to such link layers for the ICN flavors NDN <xref target="NDN"/>
      and CCNx <xref target="RFC8569"/>, <xref target="RFC8609"/>.</t>

      <t>The IEEE 802.15.4 <xref target="ieee802.15.4"/> link layer is used in
      low-power and lossy networks (see <spanx style="verb">LLN</spanx> in
      <xref target="RFC7228"/>), in which devices are typically
      battery-operated and constrained in resources. Characteristics of LLNs
      include an unreliable environment, low bandwidth transmissions, and
      increased latencies. IEEE 802.15.4 admits a maximum physical layer
      packet size of 127 octets. The maximum frame header size is 25 octets,
      which leaves 102 octets for the payload. IEEE 802.15.4 security features
      further reduce this payload length by up to 21 octets, yielding a net of
      81 octets for CCNx or NDN packet headers, signatures and content.</t>

      <t>6LoWPAN <xref target="RFC4944"/><xref target="RFC6282">, </xref> is a
      convergence layer that provides frame formats, header compression and
      link fragmentation for IPv6 packets in IEEE 802.15.4 networks. The
      6LoWPAN adaptation introduces a dispatching framework that prepends
      further information to 6LoWPAN packets, including a protocol identifier
      for IEEE 802.15.4 payload and meta information about link
      fragmentation.</t>

      <t>Prevalent Type-Length-Value (TLV) based packet formats such as in
      CCNx and NDN are designed to be generic and extensible. This leads to
      header verbosity which is inappropriate in constrained environments of
      IEEE 802.15.4 links. This document presents ICN LoWPAN, a convergence
      layer for IEEE 802.15.4 motivated by 6LoWPAN. ICN LoWPAN compresses
      packet headers of CCNx as well as NDN and allows for an increased
      effective payload size per packet. Additionally, reusing the dispatching
      framework defined by 6LoWPAN enables compatibility between coexisting
      wireless networks of competing technologies. This also allows to reuse
      the link fragmentation scheme specified by 6LoWPAN for ICN LoWPAN.</t>

      <t>ICN LoWPAN defines a more space efficient representation of CCNx and
      NDN packet formats. This syntactic change is described for CCNx and NDN
      separately, as the header formats and TLV encodings differ notably. For
      further reductions, default header values suitable for constrained IoT
      networks are selected in order to elide corresponding TLVs. Experimental
      evaluations of the ICN LoWPAN header compression schemes in <xref
      target="ICNLOWPAN"/> illustrate a reduced message overhead, a shortened
      message airtime, and an overall decline in power consumption for typical
      Class 2 devices compared to uncompressed ICN messages.</t>

      <t>In a typical IoT scenario (see <xref target="fig-iot_network">
      </xref>), embedded devices are interconnected via a quasi-stationary
      infrastructure using a border router (BR) that uplinks the constrained
      LoWPAN network by some Gateway with the public Internet. In ICN based
      IoT networks, non-local Interest and Data messages transparently travel
      through the BR up and down between a Gateway and the embedded devices
      situated in the constrained LoWPAN.</t>

      <figure anchor="fig-iot_network" title="IoT Stub Network">
        <artwork align="center"><![CDATA[
               |Gateway Services|
               -------------------------
                     |
                 ,--------,
                 |        |
                 |   BR   |
                 |        |
                 '--------'
                              LoWPAN
               O            O
                      O
             O                O   embedded
               O      O     O     devices
                O         O
                     ]]></artwork>
      </figure>

      <t>
        The draft has received fruitful reviews by members of the ICN community and the research group (see Acknowledgments) for a period of two years.
        It is the consensus of ICNRG that this document should be published in the IRTF Stream of the RFC series.
        This document does not constitute an IETF standard.
      </t>
    </section>

    <section title="Terminology">
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
      "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
      document are to be interpreted as described in RFC 2119 <xref
      target="RFC2119"/>. The use of the term, "silently ignore" is not
      defined in RFC 2119. However, the term is used in this document and can
      be similarly construed.</t>

      <t>This document uses the terminology of <xref target="RFC7476"/>, <xref
      target="RFC7927"/>, and <xref target="RFC7945"/> for ICN entities.</t>

      <t>The following terms are used in the document and defined as follows:
      <list hangIndent="14" style="hanging">
          <t hangText="ICN LoWPAN:">Information-Centric Networking over
          Low-power Wireless Personal Area Network</t>

          <t hangText="LLN">Low-Power and Lossy Network</t>

          <t hangText="CCNx:">Content-Centric Networking Architecture</t>

          <t hangText="NDN:">Named Data Networking Architecture</t>

          <t hangText="time-value:">a time value measured in seconds</t>

          <t hangText="time-code:">an 8-bit encoded time-value</t>
        </list></t>
    </section>

    <section anchor="ICNLoWPAN" title="Overview of ICN LoWPAN ">
      <section title="Link-Layer Convergence">
        <t>ICN LoWPAN provides a convergence layer that maps ICN packets onto
        constrained link-layer technologies. This includes features such as
        link-layer fragmentation, protocol separation on the link-layer level,
        and link-layer address mappings. The stack traversal is visualized in
        <xref target="fig.intro.hbh"/>.</t>

        <figure anchor="fig.intro.hbh"
                title="ICN LoWPAN convergence layer for IEEE 802.15.4">
          <artwork align="center"><![CDATA[
      Device 1                                         Device 2
,------------------,           Router            ,------------------,
|  Application   . |     __________________      | ,-> Application  |
|----------------|-|    |    NDN / CCNx    |     |-|----------------|
|  NDN / CCNx    | |    | ,--------------, |     | |    NDN / CCNx  |
|----------------|-|    |-|--------------|-|     |-|----------------|
|  ICN LoWPAN    | |    | |  ICN LoWPAN  | |     | |    ICN LoWPAN  |
|----------------|-|    |-|--------------|-|     |-|----------------|
|  Link-Layer    | |    | |  Link-Layer  | |     | |    Link-Layer  |
'----------------|-'    '-|--------------|-'     '-|----------------'
                 '--------'              '---------'
                    ]]></artwork>
        </figure>

        <t><xref target="sec.lowpan_adaptation"/> of this document defines the
        convergence layer for IEEE 802.15.4.</t>
      </section>

      <section title="Stateless Header Compression">
        <t>ICN LoWPAN also defines a stateless header compression scheme with
        the main purpose of reducing header overhead of ICN packets. This is
        of particular importance for link-layers with small MTUs. The
        stateless compression does not require pre-configuration of global
        state.</t>

        <t>The CCNx and NDN header formats are composed of Type-Length-Value
        (TLV) fields to encode header data. The advantage of TLVs is its
        native support of variably structured data. The main disadvantage of
        TLVs is the verbosity that results from storing the type and length of
        the encoded data.</t>

        <t>The stateless header compression scheme makes use of compact bit
        fields to indicate the presence of optional TLVs in the uncompressed
        packet. The order of set bits in the bit fields corresponds to the
        order of each TLV in the packet. Further compression is achieved by
        specifying default values and reducing the codomain of certain header
        fields.</t>

        <t><xref target="fig.TLV.compressed"/> demonstrates the stateless
        header compression idea. In this example, the first type of the first
        TLV is removed and the corresponding bit in the bit field is set. The
        second TLV represents a fixed-length TLV (e.g., the Nonce TLV in NDN),
        so that the type and the length fields are removed. The third TLV
        represents a boolean TLV (e.g., the MustBeFresh selector in NDN) for
        which the type, length and the value fields are elided.</t>

        <figure anchor="fig.TLV.compressed"
                title="Compression using a compact bit field - bits encode the inclusion of TLVs.">
          <artwork align="center"><![CDATA[
Uncompressed:

   Variable-length TLV      Fixed-length TLV      Boolean TLV
,-----------------------,-----------------------,-------------,
+-------+-------+-------+-------+-------+-------+------+------+
|  TYP  |  LEN  |  VAL  |  TYP  |  LEN  |  VAL  |  TYP | LEN  |
+-------+-------+-------+-------+-------+-------+------+------+

Compressed:

  +---+---+---+---+---+---+---+---+
  | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 |  Bit field
  +---+---+---+---+---+---+---+---+
    |       |                   |
 ,--'       '----,              '- Boolean Value
 |               |
+-------+-------+-------+
|  LEN  |  VAL  |  VAL  |
+-------+-------+-------+
'---------------'-------'
  Var-len Value  Fixed-len Value
                    ]]></artwork>
        </figure>

        <t>Stateless TLV compression for NDN is defined in <xref
        target="sec.ndn"/>. <xref target="sec.ccnx"/> defines the stateless
        TLV compression for CCNx.</t>

        <t>The extensibility of this compression is described in <xref
        target="sec.dispatch.ext"/> and allows future documents to update the
        compression rules outlined in this manuscript.</t>
      </section>

      <section title="Stateful Header Compression">
        <t>ICN LoWPAN further employs two orthogonal stateful compression
        schemes for packet size reductions which are defined in <xref
        target="stateful.compression"/>. These mechanisms rely on shared
        contexts that are either distributed and maintained in the entire
        LoWPAN, or are generated on-demand hop-wise on a particular
        Interest-data path.</t>

        <t>The shared context identification is defined in <xref
        target="stateful.compression.local"/>. The hop-wise name compression
        "en-route" is specified in <xref
        target="stateful.compression.en-route"/>.</t>
      </section>
    </section>

    <section anchor="sec.lowpan_adaptation" title="IEEE 802.15.4 Adaptation">
      <section anchor="sec.lowpan_encap" title="LoWPAN Encapsulation">
        <t>The IEEE 802.15.4 frame header does not provide a protocol
        identifier for its payload. This causes problems of misinterpreting
        frames when several network layers coexist on the same link. To
        mitigate errors, 6LoWPAN defines dispatches as encapsulation headers
        for IEEE 802.15.4 frames (see Section 5 of <xref target="RFC4944"/>).
        Multiple LoWPAN encapsulation headers can prepend the actual payload
        and each encapsulation header is identified by a dispatch type.</t>

        <t><xref target="RFC8025"/> further specifies dispatch pages to switch
        between different contexts. When a LoWPAN parser encounters a <spanx
        style="verb">Page switch</spanx> LoWPAN encapsulation header, then all
        following encapsulation headers are interpreted by using a dispatch
        table as specified by the <spanx style="verb">Page switch</spanx>
        header. Page 0 and page 1 are reserved for 6LoWPAN. This document uses
        page TBD1 (<spanx style="verb">1111 TBD1 (0xFTBD1)</spanx>) for ICN LoWPAN.</t>

        <t>The base dispatch format (<xref target="fig.disp.base"/>) is used
        and extended by CCNx and NDN in <xref target="sec.ndn"/> and <xref
        target="sec.ccnx"/>.</t>

        <figure anchor="fig.disp.base"
                title="Base dispatch format for ICN LoWPAN">
          <artwork align="center"><![CDATA[
  0   1   2  ...
+---+---+-----------
| P | C | M |
+---+---+-----------
           ]]></artwork>
        </figure>

        <t><list hangIndent="4" style="hanging">
            <t hangText="P: Protocol"><list hangIndent="12" style="hanging">
                <t hangText="0:">The included protocol is NDN.</t>

                <t hangText="1:">The included protocol is CCNx.</t>
              </list></t>

            <t hangText="C: Compression"><list hangIndent="12" style="hanging">
                <t hangText="0:">The message is uncompressed.</t>

                <t hangText="1:">The message is compressed.</t>
              </list></t>

            <t hangText="M: Message Type"><list hangIndent="12"
                style="hanging">
                <t hangText="0:">The payload contains an Interest message.</t>

                <t hangText="1:">The payload contains a Data message.</t>
              </list></t>
          </list></t>

        <t>ICN LoWPAN frames with compressed CCNx and NDN messages (C=1) use
        the extended dispatch format in <xref
        target="fig.disp.base.compr"/>.</t>

        <figure anchor="fig.disp.base.compr"
                title="Extended dispatch format for compressed ICN LoWPAN">
          <artwork align="center"><![CDATA[
  0   1   2   3   4  ...
+---+---+---+---+---+---
| P | 1 | M |CID|EXT|
+---+---+---+---+---+---
           ]]></artwork>
        </figure>

        <t><list hangIndent="4" style="hanging">
            <t hangText="CID: Context Identifier"><list hangIndent="12"
                style="hanging">
                <t hangText="0:">No context identifiers are present.</t>

                <t hangText="1:">Context identifier(s) are present (see <xref
                target="stateful.compression.local"/>).</t>
              </list></t>

            <t hangText="EXT: Extension"><list hangIndent="12" style="hanging">
                <t hangText="0:">No extension octets are present.</t>

                <t hangText="1:">Extension octet(s) are present (see <xref
                target="sec.dispatch.ext"/>).</t>
              </list></t>
          </list></t>

        <t>The encapsulation format for ICN LoWPAN is displayed in <xref
        target="fig.ICN-LoWPAN.header"/>.</t>

        <figure anchor="fig.ICN-LoWPAN.header"
                title="LoWPAN Encapsulation with ICN-LoWPAN">
          <artwork align="center"><![CDATA[
+------...------+------...-----+--------+-------...-------+-----...
| IEEE 802.15.4 | RFC4944 Disp.|  Page  | ICN LoWPAN Disp.| Payl. /
+------...------+------...-----+--------+-------...-------+-----...
          ]]></artwork>
        </figure>

        <t><list hangIndent="16" style="hanging">
            <t hangText="IEEE 802.15.4:">The IEEE 802.15.4 header.</t>

            <t hangText="RFC4944 Disp.:">Optional additional dispatches
            defined in Section 5.1 of <xref target="RFC4944"/></t>

            <t hangText="Page:">Page Switch. TBD1 for ICN LoWPAN.</t>

            <t hangText="ICN LoWPAN:">Dispatches as defined in <xref
            target="sec.ndn"/> and <xref target="sec.ccnx"/>.</t>

            <t hangText="Payload:">The actual (un-)compressed CCNx or NDN
            message.</t>
          </list></t>

        <section anchor="sec.dispatch.ext" title="Dispatch Extensions">
          <t>Extension octets allow for the extensibility of the initial
          compression rule set. The base format for an extension octet is
          depicted in <xref target="fig.ext.base"/>.</t>

          <figure anchor="fig.ext.base"
                  title="Base format for dispatch extensions.">
            <artwork align="center"><![CDATA[
  0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
| - | - | - | - | - | - | - |EXT|
+---+---+---+---+---+---+---+---+
        ]]></artwork>
          </figure>

          <t><list hangIndent="4" style="hanging">
              <t hangText="EXT: Extension"><list hangIndent="12"
                  style="hanging">
                  <t hangText="0:">No other extension octet follows.</t>

                  <t hangText="1:">A further extension octet follows.</t>
                </list></t>
            </list></t>

          <t>Extension octets are numbered according to their order. Future
          documents MUST follow the naming scheme <spanx style="verb">EXT_0, EXT_1, ...</spanx>,
          when updating or referring to a specific dispatch extension octet.
          Amendments that require an exchange of configurational parameters
          between devices SHOULD use manifests to encode structured data in a
          well-defined format, as, e.g., outlined in <xref
          target="I-D.irtf-icnrg-flic"/>.</t>
        </section>
      </section>

      <section anchor="sec.Fragmentation" title="Link Fragmentation">
        <t>Small payload sizes in the LoWPAN require fragmentation for various
        network layers. Therefore, Section 5.3 of <xref target="RFC4944"/>
        defines a protocol-independent fragmentation dispatch type, a
        fragmentation header for the first fragment, and a separate
        fragmentation header for subsequent fragments. ICN LoWPAN adopts this
        fragmentation handling of <xref target="RFC4944"/>.</t>

        <t>The Fragmentation LoWPAN header can encapsulate other dispatch
        headers. The order of dispatch types is defined in Section 5 of <xref
        target="RFC4944"/>. <xref target="fig.fr_first"/> shows the
        fragmentation scheme. The reassembled ICN LoWPAN frame does not
        contain any fragmentation headers and is depicted in <xref
        target="fig.fr_done"/>.</t>

        <figure anchor="fig.fr_first" title="Fragmentation scheme">
          <artwork align="center"><![CDATA[
+------...------+----...----+--------+------...-------+--------...
| IEEE 802.15.4 | Frag. 1st |  Page  |   ICN LoWPAN   | Payload  /
+------...------+----...----+--------+------...-------+--------...

+------...------+----...----+--------...
| IEEE 802.15.4 | Frag. 2nd | Payload  /
+------...------+----...----+--------...

                .
                .
                .

+------...------+----...----+--------...
| IEEE 802.15.4 | Frag. Nth | Payload  /
+------...------+----...----+--------...
                  ]]></artwork>
        </figure>

        <figure anchor="fig.fr_done" title="Reassembled ICN LoWPAN frame">
          <artwork align="center"><![CDATA[
+------...------+--------+------...-------+--------...
| IEEE 802.15.4 |  Page  |   ICN LoWPAN   | Payload  /
+------...------+--------+------...-------+--------...
                  ]]></artwork>
        </figure>
      </section>
    </section>

    <section anchor="sec.ndn" title="Space-efficient Message Encoding for NDN">
      <section anchor="sec.tlvencoding" title="TLV Encoding">
        <t>The NDN packet format consists of TLV fields using the TLV encoding
        that is described in <xref target="NDN-PACKET-SPEC"/>. Type and length
        fields are of variable size, where numbers greater than 252 are
        encoded using multiple octets.</t>

        <t>If the type or length number is less than <spanx style="verb">253</spanx>,
        then that number is encoded into the actual type or length field. If
        the number is greater or equals <spanx style="verb">253</spanx> and
        fits into 2 octets, then the type or length field is set to <spanx
        style="verb">253</spanx> and the number is encoded in the next
        following 2 octets in network byte order, i.e., from the most
        significant byte (MSB) to the least significant byte (LSB). If the
        number is greater than 2 octets and fits into 4 octets, then the type
        or length field is set to <spanx style="verb">254</spanx> and the
        number is encoded in the subsequent 4 octets in network byte order.
        For larger numbers, the type or length field is set to <spanx
        style="verb">255</spanx> and the number is encoded in the subsequent 8
        octets in network byte order.</t>

        <t>In this specification, compressed NDN TLVs make use of a different
        TLV encoding scheme that reduces size. Instead of using the first
        octet as a marker for the number of following octets, the compressed
        NDN TLV scheme uses a method to chain a variable number of octets
        together. If an octet equals <spanx style="verb">255 (0xFF)</spanx>,
        then the following octet will also be interpreted. The actual value of
        a chain equals the sum of all constituents.</t>

        <t>If the type or length number is less than <spanx style="verb">255</spanx>,
        then that number is encoded into the actual type or length field
        (<xref target="fig.ndntlvscompressed"/> a). If the type or length
        number (X) fits into 2 octets, then the first octet is set to <spanx
        style="verb">255</spanx> and the subsequent octet equals <spanx
        style="verb">X mod 255</spanx> (<xref target="fig.ndntlvscompressed"/>
        b). Following this scheme, a variable-sized number (X) is encoded
        using multiple octets of <spanx style="verb">255</spanx> with a
        trailing octet containing <spanx style="verb">X mod 255</spanx> (<xref
        target="fig.ndntlvscompressed"/> c).</t>

        <figure anchor="fig.ndntlvscompressed"
                title="Compressed NDN TLV encoding scheme">
          <artwork align="center"><![CDATA[
    0 1 2 3 4 5 6 7
   +-+-+-+-+-+-+-+-+
a) |   < 255 (X)   | = X
   +-+-+-+-+-+-+-+-+

    0                   1
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
b) |      255      |   < 255 (X)   | = 255 + X
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

    0
    0 1 2 3 4 5 6 7
   +-+-+-+-+-+-+-+-+-+-+-.....-+-+-+-+-+-+-+-+-+-+-+
c) |      255      |      255      |   < 255 (X)   | = (N * 255) + X
   +-+-+-+-+-+-+-+-+-+-+-.....-+-+-+-+-+-+-+-+-+-+-+
                          (N)
          ]]></artwork>
        </figure>
      </section>

      <section anchor="sec.ndn.namecompression" title="Name TLV Compression">
        <t>This Name TLV compression encodes length fields of two consecutive
        NameComponent TLVs into one octet, using 4 bits each. This process
        limits the length of a NameComponent TLV to 15 octets. A length of 0
        marks the end of the compressed Name TLV. An example for this encoding
        is presented in <xref target="fig.ndnshortnco"/>.</t>

        <figure anchor="fig.ndnshortnco"
                title="Name TLV compression for /HAW/Room/481/Humid/99">
          <artwork align="center"><![CDATA[
                Name: /HAW/Room/481/Humid/99

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0 0 1 1|0 1 0 0|       H       |       A       |       W       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       R       |       o       |       o       |       m       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0 0 1 1|0 1 0 1|       4       |       8       |       1       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       H       |       u       |       m       |       i       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       d       |0 0 1 0|0 0 0 0|       9       |       9       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
               ]]></artwork>
        </figure>
      </section>

      <section title="Interest Messages">
        <section title="Uncompressed Interest Messages">
          <t>An uncompressed Interest message uses the base dispatch format
          (see <xref target="fig.disp.base"/>) and sets the P, C as well as the M
          flag to <spanx style="verb">0</spanx> (<xref
          target="fig.ndn.int.uncompr"/>). <spanx style="verb">RSV</spanx>
          MUST be set to 0. The Interest message is handed to the NDN network
          stack without modifications.</t>

          <figure anchor="fig.ndn.int.uncompr"
                  title="Dispatch format for uncompressed NDN Interest messages">
            <artwork align="center"><![CDATA[
  0   1   2        ...        7
+---+---+-----------------------+
| 0 | 0 | 0 |        RSV        |
+---+---+-----------------------+
               ]]></artwork>
          </figure>
        </section>

        <section title="Compressed Interest Messages">
          <t>The compressed Interest message uses the extended dispatch format
          (<xref target="fig.disp.base.compr"/>) and sets the P flag to <spanx style="verb">0</spanx>,
          the C flag to <spanx style="verb">1</spanx> and the M flag to <spanx style="verb">0</spanx>.
          If an Interest message contains TLVs that are not mentioned in the
          following compression rules, then this message MUST be sent
          uncompressed.</t>

          <t>This specification assumes that a HopLimit TLV is part of the
          original Interest message. If such HopLimit TLV is not present, it
          will be set with a default value of DEFAULT_NDN_HOPLIMIT prior to
          the compression.</t>

          <t>In the default use case, the Interest message is compressed with
          the following minimal rule set: <list style="numbers">
              <t>The <spanx style="verb">Type</spanx> field of the outermost
              MessageType TLV is removed.</t>

              <t>The Name TLV is compressed according to <xref
              target="sec.ndn.namecompression"/>. For this, all NameComponents
              are expected to be of type GenericNameComponent with a length
              greater than 0. An ImplicitSha256DigestComponent or
              ParametersSha256DigestComponent MAY appear at the end of the
              name. In any other case, the message MUST be sent
              uncompressed.</t>

              <t>InterestLifetime TLV is moved to the end of the compressed
              Interest and is encoded as described in <xref
              target="sec.timetlv"/>. If a lifetime is not a valid time-value,
              then the lifetime is rounded up to the nearest valid time-value
              as specified in <xref target="sec.timetlv"/>.</t>

              <t>The Type and Length fields of Nonce TLV, HopLimit TLV and
              InterestLifetime TLV are elided. The Nonce value has a length of
              4 octets and the HopLimit value has a length of 1 octet. The
              compressed InterestLifetime (<xref target="sec.timetlv"/>) has a
              length of 1 octet. The presence of an InterestLifetime TLV is
              deduced from the remaining length to parse.</t>
            </list></t>

          <t>The compressed NDN LoWPAN Interest message is visualized in <xref
          target="fig.ndn.int.newformat"/>.</t>

          <figure anchor="fig.ndn.int.newformat"
                  title="Compression of NDN LoWPAN Interest Message">
            <artwork align="center"><![CDATA[
T = Type, L = Length, V = Value, Vc = Compressed Value

+---------+---------+                 +---------+
|  Msg T  |  Msg L  |                 |  Msg L  |
+---------+---------+---------+       +---------+
| Name T  | Name L  | Name V  |       | Name Vc |
+---------+---------+---------+       +---------+---------+
| CBPfx T | CBPfx L |                 | FWDH L  | FWDH Vc |
+---------+---------+                 +---------+---------+
| MBFr T  | MBFr L  |                 | NONC V  |
+---------+---------+---------+  ==>  +---------+
| FWDH T  | FWDH L  | FWDH V  |       |  HPL V  |
+---------+---------+---------+       +---------+---------+
| NONC T  | NONC L  | NONC V  |       |  APM L  | APM Vc  |
+---------+---------+---------+       +---------+---------+
|  ILT T  |  ILT L  |  ILT V  |       |  ILT Vc |
+---------+---------+---------+       +---------+
|  HPL T  |  HPL L  |  HPL V  |
+---------+---------+---------+
|  APM T  |  APM L  |  APM V  |
+---------+---------+---------+
               ]]></artwork>
          </figure>

          <t>Further TLV compression is indicated by the ICN LoWPAN dispatch
          in <xref target="fig.ndn.intcompr"/>.</t>

          <figure anchor="fig.ndn.intcompr"
                  title="Dispatch format for compressed NDN Interest messages">
            <artwork align="center"><![CDATA[
  0                                       1
  0   1   2   3   4   5   6   7   8   9   0   1   2   3   4   5
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 0 | 1 | 0 |CID|EXT|PFX|FRE|FWD|APM|DIG|          RSV          |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
               ]]></artwork>
          </figure>

          <t><list hangIndent="4" style="hanging">
              <t hangText="CID: Context Identifier">See <xref
              target="fig.disp.base.compr"/>.</t>

              <t hangText="EXT: Extension"><list hangIndent="8"
                  style="hanging">
                  <t hangText="0:">No extension octet follows.</t>

                  <t hangText="1:">Extension octet <spanx style="verb">EXT_0</spanx>
                  follows immediately. See <xref
                  target="sec.ndn.interest.ext0"/>.</t>
                </list></t>

              <t hangText="PFX: CanBePrefix TLV"><list hangIndent="12"
                  style="hanging">
                  <t hangText="0:">The uncompressed message does not include a
                  CanBePrefix TLV.</t>

                  <t hangText="1:">The uncompressed message does include a
                  CanBePrefix TLV and is removed from the compressed
                  message.</t>
                </list></t>

              <t hangText="FRE: MustBeFresh TLV"><list hangIndent="12"
                  style="hanging">
                  <t hangText="0:">The uncompressed message does not include a
                  MustBeFresh TLV.</t>

                  <t hangText="1:">The uncompressed message does include a
                  MustBeFresh TLV and is removed from the compressed
                  message.</t>
                </list></t>

              <t hangText="FWD: ForwardingHint TLV"><list hangIndent="12"
                  style="hanging">
                  <t hangText="0:">The uncompressed message does not include a
                  ForwardingHint TLV.</t>

                  <t hangText="1:">The uncompressed message does include a
                  ForwardingHint TLV. The Type field is removed from the
                  compressed message. Further, all link delegation types and
                  link preference types are removed. All included names are
                  compressed according to <xref
                  target="sec.ndn.namecompression"/>. If any name is not
                  compressible, the message MUST be sent uncompressed.</t>
                </list></t>

              <t hangText="APM: ApplicationParameters TLV"><list
                  hangIndent="12" style="hanging">
                  <t hangText="0:">The uncompressed message does not include
                  an ApplicationParameters TLV.</t>

                  <t hangText="1:">The uncompressed message does include an
                  ApplicationParameters TLV. The Type field is removed from
                  the compressed message.</t>
              </list></t>

              <t hangText="DIG: ImplicitSha256DigestComponent TLV"><list
                  hangIndent="12" style="hanging">
                  <t hangText="0:">The name does not include an
                  ImplicitSha256DigestComponent as the last TLV.</t>

                  <t hangText="1:">The name does include an
                  ImplicitSha256DigestComponent as the last TLV. The Type and
                  Length fields are omitted.</t>
                </list></t>

              <t hangText="RSV: Reserved">Must be set to 0.</t>

            </list></t>
        </section>

        <section anchor="sec.ndn.interest.ext0" title="Dispatch Extension">
          <t>The <spanx style="verb">EXT_0</spanx> octet follows the
          description in <xref target="sec.dispatch.ext"/> and is illustrated
          in <xref target="fig.ndn.interest.ext0"/>.</t>

          <figure anchor="fig.ndn.interest.ext0" title="EXT_0 format">
            <artwork align="center"><![CDATA[
  0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
|  NCS  |        RSV        |EXT|
+---+---+---+---+---+---+---+---+
               ]]></artwork>
          </figure>

          <t><list hangIndent="4" style="hanging">
              <t hangText="NCS: Name Compression Strategy"><list
                  hangIndent="12" style="hanging">
                  <t hangText="00:">Names are compressed with the default name
                  compression strategy (see <xref
                  target="sec.ndn.namecompression"/>).</t>

                  <t hangText="01:">Reserved.</t>

                  <t hangText="10:">Reserved.</t>

                  <t hangText="11:">Reserved.</t>
                </list></t>

              <t hangText="RSV: Reserved">Must be set to 0.</t>

              <t hangText="EXT: Extension"><list hangIndent="8"
                  style="hanging">
                  <t hangText="0:">No extension octet follows.</t>

                  <t hangText="1:">A further extension octet follows
                  immediately.</t>
                </list></t>
            </list></t>
        </section>
      </section>

      <section title="Data Messages">
        <section title="Uncompressed Data Messages">
          <t>An uncompressed Data message uses the base dispatch format and
          sets the P as well as the C flag to <spanx style="verb">0</spanx> and the M flag to
          <spanx style="verb">1</spanx> (<xref
          target="fig.ndn.data.uncompr"/>). <spanx style="verb">RSV</spanx>
          MUST be set to 0. The Data message is handed to the NDN network
          stack without modifications.</t>

          <figure anchor="fig.ndn.data.uncompr"
                  title="Dispatch format for uncompressed NDN Data messages">
            <artwork align="center"><![CDATA[
  0   1   2         ...        7
+---+---+---+-------------------+
| 0 | 0 | 1 |        RSV        |
+---+---+---+-------------------+
                   ]]></artwork>
          </figure>
        </section>

        <section title="Compressed Data Messages">
          <t>The compressed Data message uses the extended dispatch format
          (<xref target="fig.disp.base.compr"/>) and sets the P flag to <spanx style="verb">0</spanx>. The C and M
          flags are set to <spanx style="verb">1</spanx>. If a Data message
          contains TLVs that are not mentioned in the following compression
          rules, then this message MUST be sent uncompressed.</t>

          <t>By default, the Data message is compressed with the following
          base rule set: <list style="numbers">
              <t>The <spanx style="verb">Type</spanx> field of the outermost
              MessageType TLV is removed.</t>

              <t>The Name TLV is compressed according to <xref
              target="sec.ndn.namecompression"/>. For this, all NameComponents
              are expected to be of type GenericNameComponent and to have a
              length greater than 0. In any other case, the message MUST be
              sent uncompressed.</t>

              <t>The MetaInfo TLV Type and Length fields are elided from the
              compressed Data message.</t>

              <t>The FreshnessPeriod TLV MUST be moved to the end of the
              compressed Data message and the length is set to 1. Type and
              Length fields are elided and the value is encoded as described
              in <xref target="sec.timetlv"/>. If the freshness period is not
              a valid time-value, then the message MUST be sent uncompressed
              in order to preserve the security envelope of the Data message.
              The presence of a FreshnessPeriod TLV is deduced from the
              remaining length to parse.</t>

              <t>The Type fields of the SignatureInfo TLV, SignatureType TLV
              and SignatureValue TLV are removed.</t>
            </list></t>

          <t>The compressed NDN LoWPAN Data message is visualized in <xref
          target="fig.ndn.data.newformat"/>.</t>

          <figure anchor="fig.ndn.data.newformat"
                  title="Compression of NDN LoWPAN Data Message">
            <artwork align="center"><![CDATA[
T = Type, L = Length, V = Value, Vc = Compressed Value

+---------+---------+                 +---------+
|  Msg T  |  Msg L  |                 |  Msg L  |
+---------+---------+---------+       +---------+
| Name T  | Name L  | Name V  |       | Name Vc |
+---------+---------+---------+       +---------+---------+
| Meta T  | Meta L  |                 | CTyp L  | CType V |
+---------+---------+---------+       +---------+---------+
| CTyp T  | CTyp L  | CTyp V  |       | FBID V  |
+---------+---------+---------+  ==>  +---------+---------+
| FrPr T  | FrPr L  | FrPr V  |       | CONT L  | CONT V  |
+---------+---------+---------+       +---------+---------+
| FBID T  | FBID L  | FBID V  |       |  Sig L  |
+---------+---------+---------+       +---------+---------+
| CONT T  | CONT L  | CONT V  |       | SInf L  | SInf Vc |
+---------+---------+---------+       +---------+---------+
|  Sig T  |  Sig L  |                 | SVal L  | SVal Vc |
+---------+---------+---------+       +---------+---------+
| SInf T  | SInf L  | SInf V  |       | FrPr Vc |
+---------+---------+---------+       +---------+
| SVal T  | SVal L  | SVal V  |
+---------+---------+---------+
               ]]></artwork>
          </figure>

          <t>Further TLV compression is indicated by the ICN LoWPAN dispatch
          in <xref target="fig.ndn.datacompr"/>.</t>

          <figure anchor="fig.ndn.datacompr"
                  title="Dispatch format for compressed NDN Data messages">
            <artwork align="center"><![CDATA[
  0                                       1
  0   1   2   3   4   5   6   7   8   9   0   1   2   3   4   5
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 0 | 1 | 1 |CID|EXT|FBI|CON|KLO|              RSV              |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
               ]]></artwork>
          </figure>

          <t><list hangIndent="4" style="hanging">
              <t hangText="CID: Context Identifier">See <xref
              target="fig.disp.base.compr"/>.</t>

              <t hangText="EXT: Extension"><list hangIndent="8"
                  style="hanging">
                  <t hangText="0:">No extension octet follows.</t>

                  <t hangText="1:">Extension octet <spanx style="verb">EXT_0</spanx>
                  follows immediately. See <xref
                  target="sec.ndn.data.ext0"/>.</t>
                </list></t>

              <t hangText="FBI: FinalBlockId TLV"><list hangIndent="12"
                  style="hanging">
                  <t hangText="0:">The uncompressed message does not include a
                  FinalBlockId TLV.</t>

                  <t hangText="1:">The uncompressed message does include a
                  FinalBlockId and it is encoded according to <xref
                  target="sec.ndn.namecompression"/>. If the FinalBlockId TLV
                  is not compressible, then the message MUST be sent
                  uncompressed.</t>
                </list></t>

              <t hangText="CON: ContentType TLV"><list hangIndent="12"
                  style="hanging">
                  <t hangText="0:">The uncompressed message does not include a
                  ContentType TLV.</t>

                  <t hangText="1:">The uncompressed message does include a
                  ContentType TLV. The Type field is removed from the
                  compressed message.</t>
                </list></t>

              <t hangText="KLO: KeyLocator TLV"><list hangIndent="12"
                  style="hanging">
                  <t hangText="0:">If the included SignatureType requires a
                  KeyLocator TLV, then the KeyLocator represents a name and is
                  compressed according to <xref
                  target="sec.ndn.namecompression"/>. If the the name is not
                  compressible, then the message MUST be sent
                  uncompressed.</t>

                  <t hangText="1:">If the included SignatureType requires a
                  KeyLocator TLV, then the KeyLocator represents a KeyDigest.
                  The Type field of this KeyDigest is removed.</t>
                </list></t>

              <t hangText="RSV: Reserved">Must be set to 0.</t>
            </list></t>
        </section>

        <section anchor="sec.ndn.data.ext0" title="Dispatch Extension">
          <t>The <spanx style="verb">EXT_0</spanx> octet follows the
          description in <xref target="sec.dispatch.ext"/> and is illustrated
          in <xref target="fig.ndn.data.ext0"/>.</t>

          <figure anchor="fig.ndn.data.ext0" title="EXT_0 format">
            <artwork align="center"><![CDATA[
  0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
|  NCS  |        RSV        |EXT|
+---+---+---+---+---+---+---+---+
               ]]></artwork>
          </figure>

          <t><list hangIndent="4" style="hanging">
              <t hangText="NCS: Name Compression Strategy"><list
                  hangIndent="12" style="hanging">
                  <t hangText="00:">Names are compressed with the default name
                  compression strategy (see <xref
                  target="sec.ndn.namecompression"/>).</t>

                  <t hangText="01:">Reserved.</t>

                  <t hangText="10:">Reserved.</t>

                  <t hangText="11:">Reserved.</t>
                </list></t>

              <t hangText="RSV: Reserved">Must be set to 0.</t>

              <t hangText="EXT: Extension"><list hangIndent="8"
                  style="hanging">
                  <t hangText="0:">No extension octet follows.</t>

                  <t hangText="1:">A further extension octet follows
                  immediately.</t>
                </list></t>
            </list></t>
        </section>
      </section>
    </section>

    <section anchor="sec.ccnx"
             title="Space-efficient Message Encoding for CCNx">
      <section title="TLV Encoding">
        <t>The generic CCNx TLV encoding is described in <xref
        target="RFC8609"/>. Type and Length fields attain the common fixed
        length of 2 octets.</t>

        <t>The TLV encoding for CCNx LoWPAN is changed to the more space
        efficient encoding described in <xref target="sec.tlvencoding"/>.
        Hence NDN and CCNx use the same compressed format for writing
        TLVs.</t>
      </section>

      <section title="Name TLV Compression">
        <t>Name TLVs are compressed using the scheme already defined in <xref
        target="sec.ndn.namecompression"/> for NDN. If a Name TLV contains
        T_IPID, T_APP, or organizational TLVs, then the name remains
        uncompressed.</t>
      </section>

      <section title="Interest Messages">
        <section title="Uncompressed Interest Messages">
          <t>An uncompressed Interest message uses the base dispatch format
          (see <xref target="fig.disp.base"/>) and sets the P flag to <spanx style="verb">1</spanx>.
          The C and M flags are set to <spanx style="verb">0</spanx> (<xref
          target="fig.ccnx.int.uncompr"/>). <spanx style="verb">RSV</spanx>
          MUST be set to 0. The Interest message is handed to the CCNx network
          stack without modifications.</t>

          <figure anchor="fig.ccnx.int.uncompr"
                  title="Dispatch format for uncompressed CCNx Interest messages">
            <artwork align="center"><![CDATA[
  0   1   2        ...        7
+---+---+-----------------------+
| 1 | 0 | 0 |        RSV        |
+---+---+-----------------------+
               ]]></artwork>
          </figure>
        </section>

        <section anchor="sec.ccnxintcompbaseheader"
                 title="Compressed Interest Messages">
          <t>The compressed Interest message uses the extended dispatch format
          (<xref target="fig.disp.base.compr"/>) and sets the P and C flags to <spanx
          style="verb">1</spanx>. The M flag is set to <spanx style="verb">0</spanx>.
          If an Interest message contains TLVs that are not mentioned in the
          following compression rules, then this message MUST be sent
          uncompressed.</t>

          <t>In the default use case, the Interest message is compressed with
          the following minimal rule set: <list style="numbers">
              <t>The Type and Length fields of the CCNx Message TLV are elided
              and are obtained from the Fixed Header on decompression.</t>
            </list></t>

          <t>The compressed CCNx LoWPAN Interest message is visualized in
          <xref target="fig.ccnx.int.newformat"/>.</t>

          <figure anchor="fig.ccnx.int.newformat"
                  title="Compression of CCNx LoWPAN Interest Message">
            <artwork align="center"><![CDATA[
T = Type, L = Length, V = Value

+--------------------------+           +--------------------------+
|  Uncompr. Fixed Header   |           |   Compr. Fixed Header    |
+--------------------------+           +--------------------------+
+--------+--------+--------+           +--------+
| ILT T  | ILT L  | ILT V  |           | ILT V  |
+--------+--------+--------+           +--------+
| MSGH T | MSGH L | MSGH V |           | MSGH V |
+--------+--------+--------+           +--------+
+--------+--------+                    +--------+
| MSGT T | MSGT L |                    | Name V |
+--------+--------+--------+           +--------+
| Name T | Name L | Name V |    ==>    | KIDR V |
+--------+--------+--------+           +--------+
| KIDR T | KIDR L | KIDR V |           | OBHR V |
+--------+--------+--------+           +--------+--------+
| OBHR T | OBHR L | OBHR V |           | PAYL L | PAYL V |
+--------+--------+--------+           +--------+--------+
| PAYL T | PAYL L | PAYL V |           | VALG L | VALG V |
+--------+--------+--------+           +--------+--------+
| VALG T | VALG L | VALG V |           | VPAY L | VPAY V |
+--------+--------+--------+           +--------+--------+
| VPAY T | VPAY L | VPAY V |
+--------+--------+--------+
               ]]></artwork>
          </figure>

          <t>Further TLV compression is indicated by the ICN LoWPAN dispatch
          in <xref target="fig.ccnx.intcompr"/>.</t>

          <figure anchor="fig.ccnx.intcompr"
                  title="Dispatch format for compressed CCNx Interest messages">
            <artwork align="center"><![CDATA[
  0                                       1
  0   1   2   3   4   5   6   7   8   9   0   1   2   3   4   5
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 1 | 1 | 0 |CID|EXT|VER|FLG|PTY|HPL|FRS|PAY|ILT|MGH|KIR|CHR|VAL|
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
                 ]]></artwork>
          </figure>

          <t><list hangIndent="4" style="hanging">
              <t hangText="CID: Context Identifier">See <xref
              target="fig.disp.base.compr"/>.</t>

              <t hangText="EXT: Extension"><list hangIndent="8"
                  style="hanging">
                  <t hangText="0:">No extension octet follows.</t>

                  <t hangText="1:">Extension octet <spanx style="verb">EXT_0</spanx>
                  follows immediately. See <xref
                  target="sec.ccnx.interest.ext0"/>.</t>
                </list></t>

              <t
              hangText="VER: CCNx protocol version in the fixed header"><list
                  hangIndent="8" style="hanging">
                  <t hangText="0:">The Version field equals 1 and is removed
                  from the fixed header.</t>

                  <t hangText="1:">The Version field is carried in-line.</t>
                </list></t>

              <t hangText="FLG: Flags field in the fixed header"><list
                  hangIndent="8" style="hanging">
                  <t hangText="0:">The Flags field equals 0 and is removed
                  from the Interest message.</t>

                  <t hangText="1:">The Flags field is carried in-line.</t>
                </list></t>

              <t hangText="PTY: PacketType field in the fixed header"><list
                  hangIndent="8" style="hanging">
                  <t hangText="0:">The PacketType field is elided and assumed
                  to be <spanx style="verb">PT_INTEREST</spanx></t>

                  <t hangText="1:">The PacketType field is elided and assumed
                  to be <spanx style="verb">PT_RETURN</spanx></t>
                </list></t>

              <t hangText="HPL: HopLimit field in the fixed header"><list
                  hangIndent="8" style="hanging">
                  <t hangText="0:">The HopLimit field is carried in-line</t>

                  <t hangText="1:">The HopLimit field is elided and assumed to
                  be <spanx style="verb">1</spanx></t>
                </list></t>

              <t hangText="FRS: Reserved field in the fixed header"><list
                  hangIndent="8" style="hanging">
                  <t hangText="0:">The Reserved field is carried in-line</t>

                  <t hangText="1:">The Reserved field is elided and assumed to
                  be <spanx style="verb">0</spanx></t>
                </list></t>

              <t hangText="PAY: Optional Payload TLV"><list hangIndent="8"
                  style="hanging">
                  <t hangText="0:">The Payload TLV is absent.</t>

                  <t hangText="1:">The Payload TLV is present and the type
                  field is elided.</t>
                </list></t>

              <t
              hangText="ILT: Optional Hop-By-Hop InterestLifetime TLV"><list
                  hangIndent="8" style="hanging">
                  <t>See <xref target="sec.ccnxhbhint"/> for further details
                  on the ordering of hop-by-hop TLVs.</t>

                  <t hangText="0:">No InterestLifetime TLV is present in the
                  Interest message.</t>

                  <t hangText="1:">An InterestLifetime TLV is present with a
                  fixed length of 1 octet and is encoded as described in <xref
                  target="sec.timetlv"/>. The type and length fields are
                  elided. If a lifetime is not a valid time-value, then the
                  lifetime is rounded up to the nearest valid time-value (see
                  <xref target="sec.timetlv"/>).</t>
                </list></t>

              <t hangText="MGH: Optional Hop-By-Hop MessageHash TLV"><list
                  hangIndent="8" style="hanging">
                  <t>See <xref target="sec.ccnxhbhint"/> for further details
                  on the ordering of hop-by-hop TLVs.</t>

                  <t>This TLV is expected to contain a T_SHA-256 TLV. If
                  another hash is contained, then the Interest MUST be sent
                  uncompressed.</t>

                  <t hangText="0:">The MessageHash TLV is absent.</t>

                  <t hangText="1:">A T_SHA-256 TLV is present and the type as
                  well as the length fields are removed. The length field is
                  assumed to represent 32 octets. The outer Message Hash TLV
                  is omitted.</t>
                </list></t>

              <t hangText="KIR: Optional KeyIdRestriction TLV"><list
                  hangIndent="8" style="hanging">
                  <t>This TLV is expected to contain a T_SHA-256 TLV. If
                  another hash is contained, then the Interest MUST be sent
                  uncompressed.</t>

                  <t hangText="0:">The KeyIdRestriction TLV is absent.</t>

                  <t hangText="1:">A T_SHA-256 TLV is present and the type as
                  well as the length fields are removed. The length field is
                  assumed to represent 32 octets. The outer KeyIdRestriction
                  TLV is omitted.</t>
                </list></t>

              <t
              hangText="CHR: Optional ContentObjectHashRestriction TLV"><list
                  hangIndent="8" style="hanging">
                  <t>This TLV is expected to contain a T_SHA-256 TLV. If
                  another hash is contained, then the Interest MUST be sent
                  uncompressed.</t>

                  <t hangText="0:">The ContentObjectHashRestriction TLV is
                  absent.</t>

                  <t hangText="1:">A T_SHA-256 TLV is present and the type as
                  well as the length fields are removed. The length field is
                  assumed to represent 32 octets. The outer
                  ContentObjectHashRestriction TLV is omitted.</t>
                </list></t>

              <t
              hangText="VAL: Optional ValidationAlgorithm and ValidationPayload TLVs"><list
                  hangIndent="8" style="hanging">
                  <t hangText="0:">No validation related TLVs are present in
                  the Interest message.</t>

                  <t hangText="1:">Validation related TLVs are present in the
                  Interest message. An additional octet follows immediately
                  that handles validation related TLV compressions and is
                  described in <xref target="sec.ccnx.intval"/>.</t>
                </list></t>

            </list></t>

          <section anchor="sec.ccnxhbhint"
                   title="Hop-By-Hop Header TLVs Compression" toc="exclude">
            <t>Hop-By-Hop Header TLVs are unordered. For an Interest message,
            two optional Hop-By-Hop Header TLVs are defined in <xref
            target="RFC8609"/>, but several more can be defined in higher
            level specifications. For the compression specified in the
            previous section, the Hop-By-Hop TLVs are ordered as follows:
            <list style="numbers">
                <t>Interest Lifetime TLV</t>

                <t>Message Hash TLV</t>
              </list></t>

            <t>Note: Other Hop-By-Hop Header TLVs than those two remain
            uncompressed.</t>
          </section>

          <section anchor="sec.ccnx.intval" title="Validation" toc="exclude">
            <figure anchor="fig.ccnx.dispatchintval"
                    title="Dispatch for Interset Validations">
              <artwork align="center"><![CDATA[
0       1       2       3       4       5       6       7       8
+-------+-------+-------+-------+-------+-------+-------+-------+
|         ValidationAlg         |     KeyID     |      RSV      |
+-------+-------+-------+-------+-------+-------+-------+-------+
                        ]]></artwork>
            </figure>

            <t><list hangIndent="4" style="hanging">
                <t
                hangText="ValidationALg: Optional ValidationAlgorithm TLV"><list
                    hangIndent="8" style="hanging">
                    <t hangText="0000:">An uncompressed ValidationAlgorithm
                    TLV is included.</t>

                    <t hangText="0001:">A T_CRC32C ValidationAlgorithm TLV is
                    assumed, but no ValidationAlgorithm TLV is included.</t>

                    <t hangText="0010:">A T_CRC32C ValidationAlgorithm TLV is
                    assumed, but no ValidationAlgorithm TLV is included.
                    Additionally, a Sigtime TLV is inlined without a type and
                    a length field.</t>

                    <t hangText="0011:">A T_HMAC-SHA256 ValidationAlgorithm
                    TLV is assumed, but no ValidationAlgorithm TLV is
                    included.</t>

                    <t hangText="0100:">A T_HMAC-SHA256 ValidationAlgorithm
                    TLV is assumed, but no ValidationAlgorithm TLV is included.
                    Additionally, a Sigtime TLV is inlined without a type and
                    a length field.</t>

                    <t hangText="0101:">Reserved.</t>

                    <t hangText="0110:">Reserved.</t>

                    <t hangText="0111:">Reserved.</t>

                    <t hangText="1000:">Reserved.</t>

                    <t hangText="1001:">Reserved.</t>

                    <t hangText="1010:">Reserved.</t>

                    <t hangText="1011:">Reserved.</t>

                    <t hangText="1100:">Reserved.</t>

                    <t hangText="1101:">Reserved.</t>

                    <t hangText="1110:">Reserved.</t>

                    <t hangText="1111:">Reserved.</t>
                  </list></t>

                <t
                hangText="KeyID: Optional KeyID TLV within the ValidationAlgorithm TLV"><list
                    hangIndent="8" style="hanging">
                    <t hangText="00:">The KeyId TLV is absent.</t>

                    <t hangText="01:">The KeyId TLV is present and
                    uncompressed.</t>

                    <t hangText="10:">A T_SHA-256 TLV is present and the type
                    field as well as the length fields are removed. The length
                    field is assumed to represent 32 octets. The outer KeyId
                    TLV is omitted.</t>

                    <t hangText="11:">A T_SHA-512 TLV is present and the type
                    field as well as the length fields are removed. The length
                    field is assumed to represent 64 octets. The outer KeyId
                    TLV is omitted.</t>
                </list></t>

                <t hangText="RSV: Reserved">Must be set to 0.</t>

              </list></t>

            <t>The ValidationPayload TLV is present if the ValidationAlgorithm
            TLV is present. The type field is omitted.</t>
          </section>
        </section>

        <section anchor="sec.ccnx.interest.ext0" title="Dispatch Extension">
          <t>The <spanx style="verb">EXT_0</spanx> octet follows the
          description in <xref target="sec.dispatch.ext"/> and is illustrated
          in <xref target="fig.ccnx.interest.ext0"/>.</t>

          <figure anchor="fig.ccnx.interest.ext0" title="EXT_0 format">
            <artwork align="center"><![CDATA[
0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
|  NCS  |        RSV        |EXT|
+---+---+---+---+---+---+---+---+
              ]]></artwork>
          </figure>

          <t><list hangIndent="4" style="hanging">
              <t hangText="NCS: Name Compression Strategy"><list
                  hangIndent="12" style="hanging">
                  <t hangText="00:">Names are compressed with the default name
                  compression strategy (see <xref
                  target="sec.ndn.namecompression"/>).</t>

                  <t hangText="01:">Reserved.</t>

                  <t hangText="10:">Reserved.</t>

                  <t hangText="11:">Reserved.</t>
                </list></t>

              <t hangText="RSV: Reserved">Must be set to 0.</t>

              <t hangText="EXT: Extension"><list hangIndent="8"
                  style="hanging">
                  <t hangText="0:">No extension octet follows.</t>

                  <t hangText="1:">A further extension octet follows
                  immediately.</t>
                </list></t>
            </list></t>
        </section>
      </section>

      <section title="Content Objects">
        <section title="Uncompressed Content Objects">
          <t>An uncompressed Content object uses the base dispatch format (see
          <xref target="fig.disp.base"/>) and sets the P and M flags to <spanx style="verb">1</spanx>.
          The C flag is to <spanx style="verb">0</spanx> (<xref target="fig.ccnx.data.uncompr"/>).
          <spanx style="verb">RSV</spanx>
          MUST be set to 0. The Content object is handed to the CCNx network
          stack without modifications.</t>

          <figure anchor="fig.ccnx.data.uncompr"
                  title="Dispatch format for uncompressed CCNx Content objects">
            <artwork align="center"><![CDATA[
  0   1   2         ...        7
+---+---+-----------------------+
| 1 | 0 | 1 |        RSV        |
+---+---+-----------------------+
               ]]></artwork>
          </figure>
        </section>

        <section title="Compressed Content Objects">
          <t>The compressed Content object uses the extended dispatch format
          (<xref target="fig.disp.base.compr"/>) and sets the P, C as well
          as the M flag to <spanx style="verb">1</spanx>. If a Content object
          contains TLVs that are not mentioned in the following compression
          rules, then this message MUST be sent uncompressed.</t>

          <t>By default, the Content object is compressed with the following
          base rule set: <list style="numbers">
              <t>The PacketType field is elided from the Fixed Header.</t>

              <t>The Type and Length fields of the CCNx Message TLV are elided
              and are obtained from the Fixed Header on decompression.</t>
            </list></t>

          <t>The compressed CCNx LoWPAN Data message is visualized in <xref
          target="fig.ccnx.data.newformat"/>.</t>

          <figure anchor="fig.ccnx.data.newformat"
                  title="Compression of CCNx LoWPAN Data Message">
            <artwork align="center"><![CDATA[
T = Type, L = Length, V = Value

+--------------------------+           +--------------------------+
|  Uncompr. Fixed Header   |           |   Compr. Fixed Header    |
+--------------------------+           +--------------------------+
+--------+--------+--------+           +--------+
| RCT T  | RCT L  | RCT V  |           | RCT V  |
+--------+--------+--------+           +--------+--------+
| MSGH T | MSGH L | MSGH V |           | MSGH L | MSGH V |
+--------+--------+--------+           +--------+--------+
+--------+--------+                    +--------+
| MSGT T | MSGT L |                    | Name V |
+--------+--------+--------+           +--------+
| Name T | Name L | Name V |    ==>    | EXPT V |
+--------+--------+--------+           +--------+--------+
| PTYP T | PTYP L | PTYP V |           | PAYL L | PAYL V |
+--------+--------+--------+           +--------+--------+
| EXPT T | EXPT L | EXPT V |           | VALG L | VALG V |
+--------+--------+--------+           +--------+--------+
| PAYL T | PAYL L | PAYL V |           | VPAY L | VPAY V |
+--------+--------+--------+           +--------+--------+
| VALG T | VALG L | VALG V |
+--------+--------+--------+
| VPAY T | VPAY L | VPAY V |
+--------+--------+--------+
               ]]></artwork>
          </figure>

          <t>Further TLV compression is indicated by the ICN LoWPAN dispatch
          in <xref target="fig.ccnx.datacompr"/>.</t>

          <figure anchor="fig.ccnx.datacompr"
                  title="Dispatch format for compressed CCNx Content objects">
            <artwork align="center"><![CDATA[
  0                                       1
  0   1   2   3   4   5   6   7   8   9   0   1   2   3   4   5
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 1 | 1 | 1 |CID|EXT|VER|FLG|FRS|PAY|RCT|MGH| PLTYP |EXP|VAL|RSV|
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
           ]]></artwork>
          </figure>

          <t><list hangIndent="4" style="hanging">
              <t hangText="CID: Context Identifier">See <xref
              target="fig.disp.base.compr"/>.</t>

              <t hangText="EXT: Extension"><list hangIndent="8"
                  style="hanging">
                  <t hangText="0:">No extension octet follows.</t>

                  <t hangText="1:">Extension octet <spanx style="verb">EXT_0</spanx>
                  follows immediately. See <xref
                  target="sec.ccnx.data.ext0"/>.</t>
                </list></t>

              <t
              hangText="VER: CCNx protocol version in the fixed header"><list
                  hangIndent="8" style="hanging">
                  <t hangText="0:">The Version field equals 1 and is removed
                  from the fixed header.</t>

                  <t hangText="1:">The Version field is carried in-line.</t>
                </list></t>

              <t hangText="FLG: Flags field in the fixed header">See <xref
              target="sec.ccnxintcompbaseheader"/>.</t>

              <t hangText="FRS: Reserved field in the fixed header">See <xref
              target="sec.ccnxintcompbaseheader"/>.</t>

              <t hangText="PAY: Optional Payload TLV">See <xref
              target="sec.ccnxintcompbaseheader"/>.</t>

              <t
              hangText="RCT: Optional Hop-By-Hop RecommendedCacheTime TLV"><list
                  hangIndent="8" style="hanging">
                  <t hangText="0:">The Recommended Cache Time TLV is
                  absent.</t>

                  <t hangText="1:">The Recommended Cache Time TLV is present
                  and the type as well as the length fields are elided.</t>
                </list></t>

              <t hangText="MGH: Optional Hop-By-Hop MessageHash TLV"><list
                  hangIndent="8" style="hanging">
                  <t>See <xref target="sec.ccnxhbhdata"/> for further details
                  on the ordering of hop-by-hop TLVs.</t>

                  <t>This TLV is expected to contain a T_SHA-256 TLV. If
                  another hash is contained, then the Content Object MUST be
                  sent uncompressed.</t>

                  <t hangText="0:">The MessageHash TLV is absent.</t>

                  <t hangText="1:">A T_SHA-256 TLV is present and the type as
                  well as the length fields are removed. The length field is
                  assumed to represent 32 octets. The outer Message Hash TLV
                  is omitted.</t>
                </list></t>

              <t><list hangIndent="4" style="hanging">
                  <t hangText="PLTYP: Optional PayloadType TLV"><list
                      hangIndent="8" style="hanging">
                      <t hangText="00:">The PayloadType TLV is absent.</t>

                      <t hangText="01:">The PayloadType TLV is absent and
                      T_PAYLOADTYPE_DATA is assumed.</t>

                      <t hangText="10:">The PayloadType TLV is absent and
                      T_PAYLOADTYPE_KEY is assumed.</t>

                      <t hangText="11:">The PayloadType TLV is present and
                      uncompressed.</t>
                    </list></t>
                </list></t>

              <t hangText="EXP: Optional ExpiryTime TLV"><list hangIndent="8"
                  style="hanging">
                  <t hangText="0:">The ExpiryTime TLV is absent.</t>

                  <t hangText="1:">The ExpiryTime TLV is present and the type
                  as well as the length fields are elided.</t>
                </list></t>

              <t
              hangText="VAL: Optional ValidationAlgorithm and ValidationPayload TLVs">See
              <xref target="sec.ccnxintcompbaseheader"/>.</t>

              <t hangText="RSV: Reserved">Must be set to 0.</t>

            </list></t>

          <section anchor="sec.ccnxhbhdata"
                   title="Hop-By-Hop Header TLVs Compression" toc="exclude">
            <t>Hop-By-Hop Header TLVs are unordered. For a Content Object
            message, two optional Hop-By-Hop Header TLVs are defined in <xref
            target="RFC8609"/>, but several more can be defined in higher
            level specifications. For the compression specified in the
            previous section, the Hop-By-Hop TLVs are ordered as follows:
            <list style="numbers">
                <t>Recommended Cache Time TLV</t>

                <t>Message Hash TLV</t>
              </list></t>

            <t>Note: Other Hop-By-Hop Header TLVs than those two remain
            uncompressed.</t>
          </section>
        </section>

        <section anchor="sec.ccnx.data.ext0" title="Dispatch Extension">
          <t>The <spanx style="verb">EXT_0</spanx> octet follows the
          description in <xref target="sec.dispatch.ext"/> and is illustrated
          in <xref target="fig.ccnx.data.ext0"/>.</t>

          <figure anchor="fig.ccnx.data.ext0" title="EXT_0 format">
            <artwork align="center"><![CDATA[
0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
|  NCS  |        RSV        |EXT|
+---+---+---+---+---+---+---+---+
              ]]></artwork>
          </figure>

          <t><list hangIndent="4" style="hanging">
              <t hangText="NCS: Name Compression Strategy"><list
                  hangIndent="12" style="hanging">
                  <t hangText="00:">Names are compressed with the default name
                  compression strategy (see <xref
                  target="sec.ndn.namecompression"/>).</t>

                  <t hangText="01:">Reserved.</t>

                  <t hangText="10:">Reserved.</t>

                  <t hangText="11:">Reserved.</t>
                </list></t>

              <t hangText="RSV: Reserved">Must be set to 0.</t>

              <t hangText="EXT: Extension"><list hangIndent="8"
                  style="hanging">
                  <t hangText="0:">No extension octet follows.</t>

                  <t hangText="1:">A further extension octet follows
                  immediately.</t>
                </list></t>
            </list></t>
        </section>
      </section>
    </section>

    <section anchor="sec.timetlv" title="Compressed Time Encoding">
      <t>This document adopts the compact time representation <xref
      target="I-D.gundogan-icnrg-ccnx-timetlv"/> for relative time values.
      Exponent (e) and mantissa (m) values are encoded in a 1-octet wide
      representation as depicted in <xref target="fig.time-code"/>.</t>

      <figure anchor="fig.time-code"
              title="A time-code with exponent and mantissa to encode a logarithmic range time representation.">
        <artwork align="center"><![CDATA[
        <--         one octet         -->
        +---+---+---+---+---+---+---+---+
        |  exponent (e) |  mantissa (m) |
        +---+---+---+---+---+---+---+---+
        ]]></artwork>
      </figure>

      <t>The mantissa size is set to 3 bits, the exponent size to 5 bits, and
      a bias of -5 is applied. This allows for a time representation that
      ranges from milliseconds with high precision to days with low precision.
      The base unit for time values are seconds. A time-value is calculated
      using the following formula, where (e) represents the exponent, (m) the
      mantissa, (m_max = 8) the maximum mantissa value, and (b) the bias.
      <list style="hanging">
          <t hangText="Subnormal (e == 0):">(0 + m/m_max) * 2^(1+b)</t>

          <t hangText="Normalized (e &gt; 0):">(1 + m/m_max) * 2^(e+b)</t>
        </list> The subnormal form provides a gradual underflow from the
      smallest normalized number towards zero.</t>

      <t>This configuration allows for the following ranges: <list
          style="symbols">
          <t>Minimum subnormal number: 0 seconds</t>

          <t>Maximum subnormal number: ~0.054688 seconds</t>

          <t>Minimum normalized number: ~0.062500 seconds</t>

          <t>Maximum normalized number: ~3.987284 years</t>
        </list></t>

      <t>Valid time-values are always positive numbers. An invalid time-value
      (t, in seconds) MUST be rounded down to the nearest valid time-value
      using this algorithm, where (e) represents the number of bits for the
      exponent, (m) the number of bits for the mantissa, and (m_max = 8) the
      maximum mantissa value. The bias (b) is set to -5 as before. <list
          style="symbols">
          <t>e := floor( log2( t/(2^-b) ))</t>

          <t>m := floor( 8 * (t / 2^(e+b) - 1 ))</t>
        </list></t>
    </section>

    <section anchor="stateful.compression" title="Stateful Header Compression">
      <t>Stateful header compression in ICN LoWPAN enables packet size
      reductions in two ways. First, common information that is shared
      throughout the local LoWPAN may be memorized in context state at all
      nodes and omitted from communication. Second, redundancy in a single
      Interest-data exchange may be removed from ICN stateful forwarding on a
      hop-by-hop bases and memorized in en-route state tables.</t>

      <section anchor="stateful.compression.local" title="LoWPAN-local State">
        <t>A context identifier (CID) is an octet that refers to a particular
        conceptual context between network devices and MAY be used to replace
        frequently appearing information, such as name prefixes, suffixes, or
        meta information, such as Interest lifetime.</t>

        <figure anchor="fig.cid" title="Context Identifier.">
          <artwork align="center"><![CDATA[
  0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
| X |         ContextID         |
+---+---+---+---+---+---+---+---+
                    ]]></artwork>
        </figure>

        <t>The ContextID refers to a locally-scoped unique identifier that
        represents contextual state shared between sender and receiver of the
        corresponding frame (see <xref target="fig.cid"/>).</t>

        <t>Such state shared between senders and receivers is removed from the
        compressed packet prior to sending, and reinserted after reception
        prior to passing to the upper stack.</t>

        <t>The initial distribution and maintenance of shared context is out
        of scope of this document. Frames containing unknown or invalid CIDs
        MUST be silently discarded.</t>
      </section>

      <section anchor="stateful.compression.en-route" title="En-route State">
        <t>In CCNx and NDN, Name TLVs are included in Interest messages, and
        they return in data messages. Returning Name TLVs either equal the
        original Name TLV, or they contain the original Name TLV as a prefix.
        ICN LoWPAN reduces this redundancy in responses by replacing Name TLVs
        with single octets that represent link-local HopIDs. HopIDs are
        carried as Context Identifiers of link-local scope as shown in <xref
        target="fig.hopid"/>.</t>

        <figure anchor="fig.hopid" title="Context Identifier as HopID.">
          <artwork align="center"><![CDATA[
  0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
| X |          HopID            |
+---+---+---+---+---+---+---+---+
                    ]]></artwork>
        </figure>

        <t>A HopID is valid, if not all ID bits are set to zero and invalid
        otherwise. This yields 127 distinct HopIDs. If this range (1...127) is
        exhausted, the messages MUST be sent without en-route state
        compression until new HopIDs are available. An ICN LoWPAN node that
        forwards without replacing the name by a HopID (without en-route
        compression) MUST invalidate the HopID by setting all ID-bits to
        zero.</t>

        <t>While an Interest is traversing, a forwarder generates an ephemeral
        HopID that is tied to a PIT entry. Each HopID MUST be unique within
        the local PIT and only exists during the lifetime of a PIT entry. To
        maintain HopIDs, the local PIT is extended by two new columns: HIDi
        (inbound HopIDs) and HIDo (outbound HopIDs).</t>

        <t>HopIDs are included in Interests and stored on the next hop with
        the resulting PIT entry in the HIDi column. The HopID is replaced with
        a newly generated local HopID before the Interest is forwarded. This
        new HopID is stored in the HIDo column of the local PIT (see <xref
        target="fig.enroute-a"/>). <figure anchor="fig.enroute-a"
            title="Setting compression state en-route (Interest).">
            <artwork align="center"><![CDATA[
    PIT of B      PIT Extension          PIT of C      PIT Extension
+--------+------++------+------+     +--------+------++------+------+
| Prefix | Face || HIDi | HIDo |     | Prefix | Face || HIDi | HIDo |
+========+======++======+======+     +========+======++======+======+
|  /p0   | F_A  || h_A  | h_B  |     |  /p0   | F_A  || h_A  |      |
+--------+------++------+------+     +--------+------++------+------+
                    ^       |                            ^
              store |       '----------------------, ,---' store
                    |                 send         v |
,---,         /p0, h_A          ,---,         /p0, h_B          ,---,
| A | ------------------------> | B | ------------------------> | C |
'---'                           '---'                           '---'
                  ]]></artwork>
          </figure></t>

        <t>Responses include HopIDs that were obtained from Interests. If the
        returning Name TLV equals the original Name TLV, then the name is
        entirely elided. Otherwise, the distinct suffix is included along with
        the HopID. When a response is forwarded, the contained HopID is
        extracted and used to match against the correct PIT entry by
        performing a lookup on the HIDo column. The HopID is then replaced
        with the corresponding HopID from the HIDi column prior to forwarding
        the response (<xref target="fig.enroute-b"/>). <figure
            anchor="fig.enroute-b"
            title="Eliding Name TLVs using en-route state (data).">
            <artwork align="center"><![CDATA[
    PIT of B      PIT Extension          PIT of C      PIT Extension
+--------+------++------+------+     +--------+------++------+------+
| Prefix | Face || HIDi | HIDo |     | Prefix | Face || HIDi | HIDo |
+========+======++======+======+     +========+======++======+======+
|  /p0   | F_A  || h_A  | h_B  |     |  /p0   | F_A  || h_A  |      |
+--------+------++------+------+     +--------+------++------+------+
                    |       ^                            |
               send |       '----------------------, ,---' send
                    v                 match        | v
,---,              h_A          ,---,              h_B          ,---,
| A | <------------------------ | B | <------------------------ | C |
'---'                           '---'                           '---'
                    ]]></artwork>
          </figure></t>

        <t>It should be noted that each forwarder of an Interest in an ICN
        LoWPAN network can individually decide whether to participate in
        en-route compression or not. However, an ICN LoWPAN node SHOULD use
        en-route compression whenever the stateful compression mechanism is
        activated.</t>

        <t>Note also that the extensions of the PIT data structure are
        required only at ICN LoWPAN nodes, while regular NDN/CCNx forwarders
        outside of an ICN LoWPAN domain do not need to implement these
        extensions.</t>
      </section>

      <section title="Integrating Stateful Header Compression">
        <t>A CID appears whenever the CID flag is set (see <xref
        target="fig.disp.base.compr"/>). The CID is appended to the last ICN
        LoWPAN dispatch octet as shown in <xref target="fig.cid.loc"/>.</t>

        <figure anchor="fig.cid.loc"
                title="LoWPAN Encapsulation with ICN LoWPAN and CIDs">
          <artwork align="center"><![CDATA[
...-------+--------+-------...-------+--...-+-------...
/  ...    |  Page  | ICN LoWPAN Disp.| CIDs | Payload /
...-------+--------+-------...-------+--...-+-------...
          ]]></artwork>
        </figure>

        <t>Multiple CIDs are chained together, with the most significant bit
        indicating the presence of a subsequent CID (<xref
        target="fig.cid.chain"/>).</t>

        <figure anchor="fig.cid.chain"
                title="Chaining of context identifiers.">
          <artwork align="center"><![CDATA[
 +-+-+-+-+-+-+-+-+     +-+-+-+-+-+-+-+-+     +-+-+-+-+-+-+-+-+
 |1|     CID     | --> |1|     CID     | --> |0|     CID     |
 +-+-+-+-+-+-+-+-+     +-+-+-+-+-+-+-+-+     +-+-+-+-+-+-+-+-+
                    ]]></artwork>
        </figure>

        <t>The HopID is always included as the very first CID.</t>

        <t/>
      </section>
    </section>

    <section anchor="sec.ndn.constvars"
             title="ICN LoWPAN Constants and Variables">
      <t>This is a summary of all ICN LoWPAN constants and variables. <list
          hangIndent="8" style="hanging">
          <t hangText="DEFAULT_NDN_HOPLIMIT:">255</t>
        </list></t>
    </section>

    <section anchor="implementationnotice"
             title="Implementation Report and Guidance">
      <t>The ICN LoWPAN scheme defined in this document has been implemented as
      an extension of the NDN/CCNx software stack <xref target="CCN-LITE"/> in
      its IoT version on RIOT <xref target="RIOT"/>. An experimental
      evaluation for NDN over ICN LOWPAN with varying configurations has been
      performed in <xref target="ICNLOWPAN"/>. Energy profilings and
      processing time measurements indicate significant energy savings, while
      amortized costs for processing show no penalties.</t>

      <section title="Preferred Configuration">
        <t>The header compression performance depends on certain aspects and
        configurations. It works best for the following cases: <list
            style="symbols">
            <t>Each name component is of GenericNameComponent type and is
            limited to a length of 15 bytes.</t>

            <t>Relative time values use a compressed encoding as per <xref
            target="sec.timetlv"/>.</t>

            <t>Contextual state (e.g., prefixes) is distributed, such that
            long names can be elided from Interest and data messages.</t>
          </list></t>
      </section>

      <section title="Further Experimental Deployments">
        <t>An investigation of ICN LoWPAN in large-scale deployments with
        varying traffic patterns using larger samples of the different board
        types available remains as future work. Especially for the stateful
        en-route compression and link fragmentation, complex deployment
        scenarios may provide a better insight regarding compression
        parameters. Multiple implementations that generate and deploy the
        compression options of this memo in different ways will also add to
        the experience and understanding of the benefits and limitations of
        the proposed schemes.</t>
      </section>
    </section>

    <section anchor="security.considerations" title="Security Considerations">
      <t>Main memory is typically a scarce resource of constrained networked
      devices. Fragmentation as described in this memo preserves fragments and
      purges them only after a packet is reassembled, which requires a
      buffering of all fragments. This scheme is able to handle fragments for
      distinctive packets simultaneously, which can lead to overflowing packet
      buffers that cannot hold all necessary fragments for packet reassembly.
      Implementers are thus urged to make use of appropriate buffer
      replacement strategies for fragments.</t>

      <t>The stateful header compression generates ephemeral HopIDs for
      incoming and outgoing Interests and consumes them on returning Data
      packets. Forged Interests can deplete the number of available HopIDs,
      thus leading to a denial of compression service for subsequent content
      requests.</t>

      <t>To further alleviate the problems caused by forged fragments or
      Interest initiations, proper protective mechanisms for accessing the
      link-layer should be deployed.</t>
    </section>

    <section anchor="iana" title="IANA Considerations">
      <section title="Reserving Space in the 6LoWPAN Dispatch Type Field Registry">
        <t>IANA has assigned dispatch values of the <spanx style="verb">6LoWPAN Dispatch Type Field</spanx>
        registry <xref target="RFC4944"/><xref target="RFC8025"/> with Page
        TBD1 for ICN LoWPAN. <xref
        target="tab.iana.dispatches"/> represents updates to the registry.</t>

        <texttable anchor="tab.iana.dispatches"
                   title="Dispatch types for NDN and CCNx with page TBD1.">
          <ttcol align="center">Bit Pattern</ttcol>

          <ttcol align="center">Page</ttcol>

          <ttcol align="left">Header Type</ttcol>

          <c>00 0xxxxx</c>

          <c>TBD1</c>

          <c>Uncompressed NDN Interest messages</c>

          <c>00 1xxxxx</c>

          <c>TBD1</c>

          <c>Uncompressed NDN Data messages</c>

          <c>01 0xxxxx</c>

          <c>TBD1</c>

          <c>Compressed NDN Interest messages</c>

          <c>01 1xxxxx</c>

          <c>TBD1</c>

          <c>Compressed NDN Data messages</c>

          <c>10 0xxxxx</c>

          <c>TBD1</c>

          <c>Uncompressed CCNx Interest messages</c>

          <c>10 1xxxxx</c>

          <c>TBD1</c>

          <c>Uncompressed CCNx Content Object messages</c>

          <c>11 0xxxxx</c>

          <c>TBD1</c>

          <c>Compressed CCNx Interest messages</c>

          <c>11 1xxxxx</c>

          <c>TBD1</c>

          <c>Compressed CCNx Content Object messages</c>
        </texttable>
      </section>
    </section>
  </middle>

  <back>
    <references title="Normative References">
      <?rfc include="reference.RFC.2119"?>

      <?rfc include="reference.RFC.4944"?>

      <?rfc include="reference.RFC.6282"?>

      <reference anchor="ieee802.15.4"
                 target="https://standards.ieee.org/findstds/standard/802.15.4-2015.html">
        <front>
          <title>IEEE Std. 802.15.4-2015</title>

          <author surname="IEEE Computer Society"/>

          <date month="April" year="2016"/>
        </front>
      </reference>
    </references>

    <references title="Informative References">
      <?rfc include="reference.RFC.7476"?>

      <?rfc include="reference.RFC.7927"?>

      <?rfc include="reference.RFC.7945"?>

      <?rfc include="reference.RFC.7228"?>

      <!--<?rfc include="reference.RFC.7400"?>-->

      <?rfc include="reference.RFC.8025"?>

      <?rfc include="reference.RFC.8609"?>

      <?rfc include="reference.RFC.8569"?>

      <?rfc include="reference.I-D.draft-irtf-icnrg-flic-02"?>

      <reference anchor="CCN-LITE" target="http://ccn-lite.net/">
        <front>
          <title>CCN-lite: A lightweight CCNx and NDN implementation</title>

          <author/>

          <date/>
        </front>
      </reference>

      <reference anchor="RIOT"
                 target="https://doi.org/10.1109/JIOT.2018.2815038">
        <front>
          <title>RIOT: an Open Source Operating System for Low-end Embedded
          Devices in the IoT</title>

          <author initials="E." surname="Baccelli">
            <organization>INRIA</organization>
          </author>

          <author initials="C." surname="Gundogan">
            <organization>HAW Hamburg</organization>
          </author>

          <author initials="O." surname="Hahm">
            <organization>INRIA and FU Berlin</organization>
          </author>

          <author initials="P." surname="Kietzmann">
            <organization>HAW Hamburg</organization>
          </author>

          <author initials="MS." surname="Lenders">
            <organization>FU Berlin</organization>
          </author>

          <author initials="H." surname="Petersen">
            <organization>FU Berlin</organization>
          </author>

          <author initials="K." surname="Schleiser">
            <organization>INRIA and FU Berlin</organization>
          </author>

          <author initials="TC." surname="Schmidt">
            <organization>HAW Hamburg</organization>
          </author>

          <author initials="M." surname="Waehlisch">
            <organization>FU Berlin</organization>
          </author>

          <date month="December" year="2018"/>
        </front>

        <seriesInfo name="IEEE Internet of Things Journal"
                    value="Vol. 5, No. 6, p. 4428-4440"/>
      </reference>

      <reference anchor="NDN-EXP1"
                 target="http://dx.doi.org/10.1145/2660129.2660144">
        <front>
          <title>Information Centric Networking in the IoT: Experiments with
          NDN in the Wild</title>

          <author initials="E." surname="Baccelli">
            <organization>INRIA</organization>
          </author>

          <author initials="C." surname="Mehlis">
            <organization>FU Berlin</organization>
          </author>

          <author initials="O." surname="Hahm">
            <organization>INRIA</organization>
          </author>

          <author initials="TC." surname="Schmidt">
            <organization>HAW Hamburg</organization>
          </author>

          <author initials="M." surname="Waehlisch">
            <organization>FU Berlin</organization>
          </author>

          <date month="September" year="2014"/>
        </front>

        <seriesInfo name="Proc. of 1st ACM Conf. on Information-Centric Networking (ICN-2014)"
                    value="ACM DL, pp. 77-86"/>
      </reference>

      <reference anchor="NDN-EXP2"
                 target="https://doi.org/10.1145/3267955.3267967">
        <front>
          <title>NDN, CoAP, and MQTT: A Comparative Measurement Study in the
          IoT</title>

          <author initials="C." surname="Gundogan">
            <organization>HAW Hamburg</organization>
          </author>

          <author initials="P." surname="Kietzmann">
            <organization>HAW Hamburg</organization>
          </author>

          <author initials="M." surname="Lenders">
            <organization>FU Berlin</organization>
          </author>

          <author initials="H." surname="Petersen">
            <organization>FU Berlin</organization>
          </author>

          <author initials="TC." surname="Schmidt">
            <organization>HAW Hamburg</organization>
          </author>

          <author initials="M." surname="Waehlisch">
            <organization>FU Berlin</organization>
          </author>

          <date month="September" year="2018"/>
        </front>

        <seriesInfo name="Proc. of 5th ACM Conf. on Information-Centric Networking (ICN-2018)"
                    value="ACM DL, pp. 159-171"/>
      </reference>

      <reference anchor="NDN-MAC"
                 target="https://doi.org/10.1145/3125719.3125737">
        <front>
          <title>The Need for a Name to MAC Address Mapping in NDN: Towards
          Quantifying the Resource Gain</title>

          <author initials="P." surname="Kietzmann">
            <organization>HAW Hamburg</organization>
          </author>

          <author initials="C." surname="Gundogan">
            <organization>HAW Hamburg</organization>
          </author>

          <author initials="TC." surname="Schmidt">
            <organization>HAW Hamburg</organization>
          </author>

          <author initials="O." surname="Hahm">
            <organization>riot-os.org</organization>
          </author>

          <author initials="M." surname="Waehlisch">
            <organization>FU Berlin</organization>
          </author>

          <date month="September" year="2017"/>
        </front>

        <seriesInfo name="Proc. of 4th ACM Conf. on Information-Centric Networking (ICN-2017)"
                    value="ACM DL, pp. 36-42"/>
      </reference>

      <reference anchor="NDN" target="https://doi.org/10.1145/1658939.1658941">
        <front>
          <title>Networking Named Content</title>

          <author initials="V." surname="Jacobson"/>

          <author initials="D." surname="Smetters"/>

          <author initials="J." surname="Thornton"/>

          <author initials="M." surname="Plass"/>

          <date year="2009"/>
        </front>

        <seriesInfo name="5th Int. Conf. on emerging Networking Experiments and Technologies"
                    value="(ACM CoNEXT)"/>
      </reference>

      <reference anchor="NDN-PACKET-SPEC"
                 target="https://named-data.net/doc/NDN-packet-spec/0.3/">
        <front>
          <title>NDN Packet Format Specification</title>

          <author/>

          <date/>
        </front>
      </reference>

      <reference anchor="TLV-ENC-802.15.4"
                 target="https://datatracker.ietf.org/meeting/interim-2015-icnrg-01/materials/slides-interim-2015-icnrg-1-2">
        <front>
          <title>CCN and NDN TLV encodings in 802.15.4 packets</title>

          <author/>

          <date/>
        </front>
      </reference>

      <reference anchor="WIRE-FORMAT-CONSID"
                 target="https://datatracker.ietf.org/meeting/interim-2015-icnrg-01/materials/slides-interim-2015-icnrg-1-8">
        <front>
          <title>CCN/NDN Protocol Wire Format and Functionality
          Considerations</title>

          <author/>

          <date/>
        </front>
      </reference>

      <reference anchor="ICNLOWPAN" target="">
        <front>
          <title>ICNLoWPAN -- Named-Data Networking in Low Power IoT
          Networks</title>

          <author initials="C." surname="Gundogan">
            <organization>HAW Hamburg</organization>
          </author>

          <author initials="P." surname="Kietzmann">
            <organization>HAW Hamburg</organization>
          </author>

          <author initials="TC." surname="Schmidt">
            <organization>HAW Hamburg</organization>
          </author>

          <author initials="M." surname="Waehlisch">
            <organization>FU Berlin</organization>
          </author>

          <date month="May" year="2019"/>
        </front>

        <seriesInfo name="Proc. of 18th IFIP Networking Conference" value=""/>
      </reference>

      <reference anchor="I-D.gundogan-icnrg-ccnx-timetlv">
        <front>
          <title>An Alternative Delta Time encoding for CCNx using Interval
          Time from RFC5497</title>

          <author fullname="Cenk Gundogan" initials="C" surname="Gundogan">
            <organization/>
          </author>

          <author fullname="Thomas C. Schmidt" initials="TC" surname="Schmidt">
            <organization/>
          </author>

          <author fullname="Dave Oran" initials="D" surname="Oran">
            <organization/>
          </author>

          <author fullname="Matthias Waehlisch" initials="M"
                  surname="Waehlisch">
            <organization/>
          </author>

          <date day="4" month="November" year="2019"/>
        </front>

        <seriesInfo name="Internet-Draft"
                    value="draft-gundogan-icnrg-ccnx-timetlv-00"/>

        <format target="http://www.ietf.org/internet-drafts/draft-gundogan-icnrg-ccnx-timetlv-00.txt"
                type="TXT"/>
      </reference>
    </references>

    <section anchor="sec.EstimatedSizeReduction"
             title="Estimated Size Reduction">
      <t>In the following a theoretical evaluation is given to estimate the
      gains of ICN LoWPAN compared to uncompressed CCNx and NDN messages.</t>

      <t>We assume that <spanx style="verb">n</spanx> is the number of name
      components, <spanx style="verb">comps_n</spanx> denotes the sum of n
      name component lengths. We also assume that the length of each name
      component is lower than 16 bytes. The length of the content is given by
      <spanx style="verb">clen</spanx>. The lengths of TLV components is
      specific to the CCNx or NDN encoding and outlined below.</t>

      <section title="NDN">
        <t>The NDN TLV encoding has variable-sized TLV fields. For simplicity,
        the 1 octet form of each TLV component is assumed. A typical TLV
        component therefore is of size 2 (type field + length field) + the
        actual value.</t>

        <section title="Interest">
          <t><xref target="fig.Size.NDN.interest.uncompressed"/> depicts the
          size requirements for a basic, uncompressed NDN Interest containing
          a CanBePrefix TLV, a MustBeFresh TLV, a InterestLifetime TLV set to
          4 seconds and a HopLimit TLV set to 6. Numbers below represent the
          amount of octets.</t>

          <figure anchor="fig.Size.NDN.interest.uncompressed"
                  title="Estimated size of an uncompressed NDN Interest">
            <artwork align="center"><![CDATA[
------------------------------------,
Interest TLV            = 2         |
  ---------------------,            |
  Name                 |  2 +       |
    NameComponents      = 2n +      |
                       |  comps_n   |
  ---------------------'             = 21 + 2n + comps_n
  CanBePrefix           = 2         |
  MustBeFresh           = 2         |
  Nonce                 = 6         |
  InterestLifetime      = 4         |
  HopLimit              = 3         |
------------------------------------'
            ]]></artwork>
          </figure>

          <t><xref target="fig.Size.NDN.interest.compressed"/> depicts the
          size requirements after compression.</t>

          <figure anchor="fig.Size.NDN.interest.compressed"
                  title="Estimated size of a compressed NDN Interest">
            <artwork align="center"><![CDATA[
------------------------------------,
Dispatch Page Switch    = 1         |
NDN Interset Dispatch   = 2         |
Interest TLV            = 1         |
-----------------------,            |
Name                   |             = 10 + n/2 + comps_n
  NameComponents        = n/2 +     |
                       |  comps_n   |
-----------------------'            |
Nonce                   = 4         |
HopLimit                = 1         |
InterestLifetime        = 1         |
------------------------------------'
                        ]]></artwork>
          </figure>

          <t>The size difference is: <vspace/> 11 + 1.5n octets.</t>

          <t>For the name <spanx style="verb">/DE/HH/HAW/BT7</spanx>, the
          total size gain is 17 octets, which is 43% of the uncompressed
          packet.</t>
        </section>

        <section title="Data">
          <t><xref target="fig.Size.NDN.Data.uncompressed"/> depicts the size
          requirements for a basic, uncompressed NDN Data containing a
          FreshnessPeriod as MetaInfo. A FreshnessPeriod of 1 minute is
          assumed and the value is encoded using 1 octet. An HMACWithSha256 is
          assumed as signature. The key locator is assumed to contain a Name
          TLV of length klen.</t>

          <figure anchor="fig.Size.NDN.Data.uncompressed"
                  title="Estimated size of an uncompressed NDN Data">
            <artwork align="center"><![CDATA[
------------------------------------,
Data TLV                = 2         |
  ---------------------,            |
  Name                 |  2 +       |
    NameComponents      = 2n +      |
                       |  comps_n   |
  ---------------------'            |
  ---------------------,            |
  MetaInfo             |            |
    FreshnessPeriod     = 6          = 53 + 2n + comps_n +
                       |            |  clen + klen
  ---------------------'            |
  Content               = 2 + clen  |
  ---------------------,            |
  SignatureInfo        |            |
    SignatureType      |            |
      KeyLocator        = 41 + klen |
  SignatureValue       |            |
    DigestSha256       |            |
  ---------------------'            |
------------------------------------'
                        ]]></artwork>
          </figure>

          <t><xref target="fig.Size.NDN.Data.compressed"/> depicts the size
          requirements for the compressed version of the above Data
          packet.</t>

          <figure anchor="fig.Size.NDN.Data.compressed"
                  title="Estimated size of a compressed NDN Data">
            <artwork align="center"><![CDATA[
------------------------------------,
Dispatch Page Switch    = 1         |
NDN Data Dispatch       = 2         |
-----------------------,            |
Name                   |             = 38 + n/2 + comps_n +
  NameComponents        = n/2 +     |  clen + klen
                       |  comps_n   |
-----------------------'            |
Content                 = 1 + clen  |
KeyLocator              = 1 + klen  |
DigestSha256            = 32        |
FreshnessPeriod         = 1         |
------------------------------------'
                        ]]></artwork>
          </figure>

          <t>The size difference is: <vspace/> 15 + 1.5n octets.</t>

          <t>For the name <spanx style="verb">/DE/HH/HAW/BT7</spanx>, the
          total size gain is 21 octets.</t>
        </section>
      </section>

      <section title="CCNx">
        <t>The CCNx TLV encoding defines a 2-octet encoding for type and
        length fields, summing up to 4 octets in total without a value.</t>

        <section title="Interest">
          <t><xref target="fig.Size.CCNx.interest.uncompressed"/> depicts the
          size requirements for a basic, uncompressed CCNx Interest. No
          Hop-By-Hop TLVs are included, the protocol version is assumed to be
          1 and the reserved field is assumed to be 0. A KeyIdRestriction TLV
          with T_SHA-256 is included to limit the responses to Content Objects
          containing the specific key.</t>

          <figure anchor="fig.Size.CCNx.interest.uncompressed"
                  title="Estimated size of an uncompressed CCNx Interest">
            <artwork align="center"><![CDATA[
------------------------------------,
Fixed Header            = 8         |
Message                 = 4         |
  ---------------------,            |
  Name                 |  4 +        = 56 + 4n + comps_n
    NameSegments        = 4n +      |
                       |  comps_n   |
  ---------------------'            |
  KeyIdRestriction      = 40        |
------------------------------------'
                        ]]></artwork>
          </figure>

          <t><xref target="fig.Size.CCNx.interest.compressed"/> depicts the
          size requirements after compression.</t>

          <figure anchor="fig.Size.CCNx.interest.compressed"
                  title="Estimated size of a compressed CCNx Interest">
            <artwork align="center"><![CDATA[
------------------------------------,
Dispatch Page Switch    = 1         |
CCNx Interest Dispatch  = 2         |
Fixed Header            = 3         |
-----------------------,            |
Name                   |             = 38 + n/2 + comps_n
  NameSegments          = n/2 +     |
                       |  comps_n   |
-----------------------'            |
T_SHA-256               = 32        |
------------------------------------'
                        ]]></artwork>
          </figure>

          <t>The size difference is: <vspace/> 18 + 3.5n octets.</t>

          <t>For the name <spanx style="verb">/DE/HH/HAW/BT7</spanx>, the size
          is reduced by 53 octets, which is 53% of the uncompressed
          packet.</t>
        </section>

        <section title="Content Object">
          <t><xref target="fig.Size.CCNx.Data.uncompressed"/> depicts the size
          requirements for a basic, uncompressed CCNx Content Object
          containing an ExpiryTime Message TLV, an HMAC_SHA-256 signature, the
          signature time and a hash of the shared secret key. In the fixed
          header, the protocol version is assumed to be 1 and the reserved
          field is assumed to be 0</t>

          <figure anchor="fig.Size.CCNx.Data.uncompressed"
                  title="Estimated size of an uncompressed CCNx Content Object">
            <artwork align="center"><![CDATA[
------------------------------------,
Fixed Header            = 8         |
Message                 = 4         |
  ---------------------,            |
  Name                 |  4 +       |
    NameSegments        = 4n +      |
                       |  comps_n   |
  ---------------------'            |
  ExpiryTime            = 12         = 124 + 4n + comps_n + clen
  Payload               = 4 + clen  |
  ---------------------,            |
  ValidationAlgorithm  |            |
    T_HMAC-256          = 56        |
      KeyId            |            |
    SignatureTime      |            |
  ---------------------'            |
  ValidationPayload     = 36        |
------------------------------------'
                        ]]></artwork>
          </figure>

          <t><xref target="fig.Size.CCNx.Data.compressed"/> depicts the size
          requirements for a basic, compressed CCNx Data.</t>

          <figure anchor="fig.Size.CCNx.Data.compressed"
                  title="Estimated size of a compressed CCNx Data Object">
            <artwork align="center"><![CDATA[
------------------------------------,
Dispatch Page Switch    = 1         |
CCNx Content Dispatch   = 3         |
Fixed Header            = 2         |
-----------------------,            |
Name                   |            |
  NameSegments          = n/2 +     |
                       |  comps_n    = 89 + n/2 + comps_n + clen
-----------------------'            |
ExpiryTime              = 8         |
Payload                 = 1 + clen  |
T_HMAC-SHA256           = 32        |
SignatureTime           = 8         |
ValidationPayload       = 34        |
------------------------------------'
                        ]]></artwork>
          </figure>

          <t>The size difference is: <vspace/> 35 + 3.5n octets.</t>

          <t>For the name <spanx style="verb">/DE/HH/HAW/BT7</spanx>, the size
          is reduced by 70 octets, which is 40% of the uncompressed packet
          containing a 4-octet payload.</t>
        </section>
      </section>
    </section>

    <section numbered="no" title="Acknowledgments">
      <t>This work was stimulated by fruitful discussions in the ICNRG
      research group and the communities of RIOT and CCNlite. We would like to
      thank all active members for constructive thoughts and feedback. In
      particular, the authors would like to thank (in alphabetical order)
      Peter Kietzmann, Dirk Kutscher, Martine Lenders, Colin Perkins, Junxiao Shi. The
      hop-wise stateful name compression was brought up in a discussion by
      Dave Oran, which is gratefully acknowledged. Larger parts of this work
      are inspired by <xref target="RFC4944"/> and <xref target="RFC6282"/>.
      Special mentioning goes to Mark Mosko as well as G.Q. Wang and Ravi
      Ravindran as their previous work in <xref target="TLV-ENC-802.15.4"/>
      and <xref target="WIRE-FORMAT-CONSID"/> provided a good base for our
      discussions on stateless header compression mechanisms. This work was
      supported in part by the German Federal Ministry of Research and
      Education within the projects I3 and RAPstore.</t>
    </section>
  </back>
</rfc>
