One document matched: draft-gomez-6lo-optimized-fragmentation-header-00.xml


<?xml version="1.0" encoding="US-ASCII"?>
<!-- This template is for creating an Internet Draft using xml2rfc,
     which is available here: http://xml.resource.org. -->
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!-- One method to get references from the online citation libraries.
     There has to be one entity for each item to be referenced. 
     An alternate method (rfc include) is described in the references. -->
<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC2629 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2629.xml">
<!ENTITY RFC3552 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3552.xml">
<!ENTITY I-D.narten-iana-considerations-rfc2434bis SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.narten-iana-considerations-rfc2434bis.xml">
]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<!-- used by XSLT processors -->
<!-- For a complete list and description of processing instructions (PIs), 
     please see http://xml.resource.org/authoring/README.html. -->
<!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds might want to use.
     (Here they are set differently than their defaults in xml2rfc v1.32) -->
<?rfc strict="yes" ?>
<!-- give errors regarding ID-nits and DTD validation -->
<!-- control the table of contents (ToC) -->
<?rfc toc="yes"?>
<!-- generate a ToC -->
<?rfc tocdepth="4"?>
<!-- the number of levels of subsections in ToC. default: 3 -->
<!-- control references -->
<?rfc symrefs="yes"?>
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] -->
<?rfc sortrefs="yes" ?>
<!-- sort the reference entries alphabetically -->
<!-- control vertical white space 
     (using these PIs as follows is recommended by the RFC Editor) -->
<?rfc compact="no"?>
<!-- do not start each main section on a new page -->
<?rfc subcompact="no" ?>
<!-- keep one blank line between list items -->
<!-- end of list of popular I-D processing instructions -->
<rfc category="std" docName="draft-gomez-6lo-optimized-fragmentation-header-00"
     ipr="trust200902">
  <!-- category values: std, bcp, info, exp, and historic
     ipr values: full3667, noModification3667, noDerivatives3667
     you can add the attributes updates="NNNN" and obsoletes="NNNN" 
     they will automatically be output with "(if approved)" -->

  <!-- ***** FRONT MATTER ***** -->

  <front>
    <!-- The abbreviated title is used in the page header - it is only necessary if the 
         full title is longer than 39 characters -->

    <title abbrev="6lo fragmentation header">
    Optimized 6LoWPAN Fragmentation Header</title>

    <!-- add 'role="editor"' below for the editors if appropriate -->

    <!-- Another author who claims to be an editor -->

 



    <author fullname="Carles Gomez" initials="C.G" surname="Gomez">
      <organization>UPC/i2CAT</organization>

      <address>
        <postal>
          <street>C/Esteve Terradas, 7</street>

          <city>Castelldefels</city>

          <region/>

          <code>08860</code>

          <country>Spain</country>
        </postal>

        <phone/>

        <facsimile/>

        <email>carlesgo@entel.upc.edu</email>

        <uri/>
      </address>
    </author>

   <author fullname="Josep Paradells" initials="J.P" surname="Paradells">
      <organization>UPC/i2CAT</organization>

      <address>
        <postal>
          <street>C/Jordi Girona, 1-3</street>

          <city>Barcelona</city>

          <region/>

          <code>08034</code>

          <country>Spain</country>
        </postal>

        <phone/>

        <facsimile/>

        <email>josep.paradells@entel.upc.edu</email>

        <uri/>
      </address>
    </author>

    <author fullname="Jon Crowcroft" initials="J.C" surname="Crowcroft">
      <organization>University of Cambridge</organization>

      <address>
        <postal>
          <street>JJ Thomson Avenue</street>

          <city>Cambridge</city>

          <region>CB3 0FD</region>

          <code/>

          <country>United Kingdom</country>
        </postal>

        <phone/>

        <facsimile/>

        <email>jon.crowcroft@cl.cam.ac.uk</email>

        <uri/>
      </address>
    </author>

         <!-- uri and facsimile elements may also be added -->
      

    <date month="October" year="2016"/>

    <!-- If the month and year are both specified and are the current ones, xml2rfc will fill 
         in the current day for you. If only the current year is specified, xml2rfc will fill 
	 in the current day and month for you. If the year is not the current one, it is 
	 necessary to specify at least a month (xml2rfc assumes day="1" if not specified for the 
	 purpose of calculating the expiry date).  With drafts it is normally sufficient to 
	 specify just the year. -->

    <!-- Meta-data Declarations -->

    <area>INT</area>

    <workgroup>6lo Working Group</workgroup>

    <!-- WG name at the upperleft corner of the doc,
         IETF is fine for individual submissions.  
	 If this element is not present, the default is "Network Working Group",
         which is used by the RFC Editor as a nod to the history of the IETF. -->

    <!---->

    <abstract>
      <t> RFC 4944 specifies 6LoWPAN fragmentation, in order to support the IPv6 MTU 
   requirement over IEEE 802.15.4-2003 networks. The 6LoWPAN fragmentation 
   header format comprises a 4-byte format for the first fragment, and a 5-byte 
   format for subsequent fragments. This specification defines a more efficient 
   3-byte, optimized 6LoWPAN fragmentation header for all fragments. 
</t>
    </abstract>
  </front>

  <middle>
    <section title="Introduction ">

      <t>IPv6 over Low-Power Wireless Personal Area Network (6LoWPAN) was originally 
   designed as an adaptation layer intended to enable IPv6 over IEEE 802.15.4-
   2003 networks <xref
      target="RFC4944"/>. One of the 6LoWPAN protocol suite components is 
   fragmentation, which fulfills the IPv6 MTU requirement of 1280 bytes 
   <xref
      target="RFC2460"/> over a radio interface with a layer two (L2) payload size around 
   100 bytes (in the best case) and without fragmentation support <xref
      target="RFC4944"/>. </t>




      <t>RFC 4944 defines the 6LoWPAN fragmentation header format, which comprises a 
   4-byte format for the first fragment, and a 5-byte format for subsequent 
   fragments. This specification defines a more efficient 3-byte, optimized 
   6LoWPAN Fragmentation Header (6LoFH).  The benefits of using 6LoFH 
   are the following:</t>


                        <t> --       Reduced overhead for transporting an IPv6 packet that requires 
   fragmentation (see Annex A). This decreases consumption of energy and 
   bandwidth, which are typically limited resources in the scenarios where 
   6LoWPAN fragmentation is used.</t>
                  <t>         -- Because the datagram offset can be expressed in increments of a
   single octet, 6LoFH enables the transport of IPv6 packets over L2
   data units with a maximum payload size as small as only 4 bytes in
   the most extreme case. Note that RFC 4944 fragmentation can only be used over 
   L2 technologies with a maximum L2 payload size of at least 13 bytes.</t>

<t> In comparison with the 6LoWPAN fragmentation header, parsing of the 6loFH format is also simplified, as the format has a constant size, and a 'symmetric' shape for both the first fragment and subsequent fragments. However, receiver buffer management will involve greater complexity as explained in Section 3. </t>

      <section title="Conventions used in this document">
        <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 <xref
        target="RFC2119"/></t>
      </section>
   
    </section>






    <section title="6LoFH rules and format">
      <t>If an entire payload (e.g., IPv6) datagram fits within a single
L2 data unit, it is unfragmented and a fragmentation header is not needed.  If the datagram does not fit within a single L2 data unit, it SHALL be broken into fragments. The first fragment SHALL contain the first fragment header as defined in <xref
      target="fig.firstfragment"/>.</t>

      <figure anchor="fig.firstfragment"
              title="First Fragment">
        <artwork><![CDATA[
                           1                   2         
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3  
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |1 1 0 0 1|    datagram_size    |  datagram_tag |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

]]></artwork>
      </figure>

      <t>
   The second and subsequent fragments (up to and including the
   last) SHALL contain a fragmentation header that conforms to the
   format shown in <xref target="fig.nextfragments"/>. </t>

<figure anchor="fig.nextfragments"
              title="Subsequent Fragments">
        <artwork><![CDATA[

                           1                   2                                
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3  
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |1 1 0 1 0|   datagram_offset   |  datagram_tag |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

]]></artwork>
      </figure>

      <t>
   datagram_size:  This 11-bit field encodes the size of the entire IP
      packet before link-layer fragmentation (but after IP layer
      fragmentation).  For IPv6, the datagram size SHALL be
      40 octets (the size of the uncompressed IPv6 header) more than the
      value of Payload Length in the IPv6 header <xref
      target="RFC4944"/> of the
      packet.  Note that this packet may already be fragmented by hosts
      involved in the communication, i.e., this field needs to encode a
      maximum length of 1280 octets (the required by IPv6).</t>

      <t>
        datagram_tag:  The value of datagram_tag (datagram tag) SHALL be the
      same for all fragments of a payload (e.g., IPv6) datagram.
      The sender SHALL increment datagram_tag for successive, fragmented
      datagrams.  The incremented value of datagram_tag SHALL wrap from
      255 back to zero.  This field is 8 bits long, and its initial
      value is not defined.</t>

      <t>
    datagram_offset:  This field is present only in the second and
      subsequent fragments and SHALL specify the offset, in
      increments of 1 octet, of the fragment from the beginning of the
      payload datagram.  The first octet of the datagram (e.g., the
      start of the IPv6 header) has an offset of zero; the implicit
      value of datagram_offset in the first fragment is zero.  This
      field is 11 bits long. </t>

      <t>
    The recipient of link fragments SHALL use (1) the sender's L2
   source address, (2) the destination's L2 address, (3)
   datagram_size, and (4) datagram_tag to identify all the 
   fragments that belong to a given datagram. </t>

      <t>
Upon receipt of a link fragment, the recipient starts constructing
   the original unfragmented packet whose size is datagram_size.  It
   uses the datagram_offset field to determine the location of the
   individual fragments within the original unfragmented packet.  For
   example, it may place the data payload (except the encapsulation
   header) within a payload datagram reassembly buffer at the location
   specified by datagram_offset.  The size of the reassembly buffer
   SHALL be determined from datagram_size. </t>

      <t>
If a fragment recipient disassociates from its L2 network, the recipient   
   MUST discard all link fragments of all partially
   reassembled payload datagrams, and fragment senders MUST discard all
   not yet transmitted link fragments of all partially transmitted
   payload (e.g., IPv6) datagrams.  Similarly, when a node first
   receives a fragment with a given datagram_tag, it starts a reassembly
   timer.  When this time expires, if the entire packet has not been
   reassembled, the existing fragments MUST be discarded and the
   reassembly state MUST be flushed.  The reassembly timeout MUST be set
   to a maximum of TBD seconds). </t>

    </section>

    <section title="Changes from RFC 4944 fragmentation header and rationale">
      <t>The main changes introduced in this specification to the fragmentation header format defined in RFC 4944 are listed below, together with their rationale:
      </t>

      <t>-- The datagram size field is only included in the first fragment. Rationale: In the RFC 4944 fragmentation header, the datagram size was included in all fragments to ease the task of reassembly at the receiver, since in an IEEE 802.15.4 mesh network,  the fragment that arrives earliest to a destination is not necessarily the first fragment transmitted by the source. Nevertheless, the
   fragmentation format defined in this document supports reordering, at the 
   expense of additional complexity in this regard. </t>

      <t>-- The datagram tag size is reduced from 2 bytes to 1 byte. Rationale: Given the low bit rate, as well as the relatively low message rate 
   in IEEE 802.15.4 scenarios, ambiguities due to datagram tag wrapping events
   are unlikely despite the reduced tag space.  </t>

      <t>-- The datagram offset size is increased from 8 bits to 11 bits. Rationale: This allows to express the datagram offset in single-octet increments.</t>
    </section>


   
    <section anchor="IANA" title="IANA Considerations">
      <t>This document allocates the following sixteen RFC 4944 Dispatch type values:</t>

      <t>	11001 000</t>

      <t>through</t>

      <t>	11001 111</t>

      <t>	and</t>

      <t>	11010 000</t>

      <t>through</t>

      <t>	11010 111</t>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>6LoWPAN fragmentation attacks have been analyzed in the literature. Countermeasures to these have been proposed as well <xref
      target="HHWH"/>.</t>

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

       <t>In another type of attack, the malicious node is required to have 
   overhearing capabilities. If an attacker can overhear a fragment, it can 
   send a spoofed duplicate (e.g. with random payload) to the destination. A 
   receiver cannot distinguish legitimate from spoofed fragments. Therefore, 
   the original IPv6 packet will be considered corrupt and will be dropped. To 
   protect resource-constrained nodes from this attack, it has been proposed 
   to establish a binding among the fragments to be transmitted by a node, by 
   applying content-chaining to the different fragments, based on 
   cryptographic hash functionality. The aim of this technique is to allow a 
   receiver to identify illegitimate fragments.</t>

       <t>Further attacks may involve sending overlapped fragments (i.e. comprising 
   some overlapping parts of the original datagram) or announcing a datagram 
   size in the first fragment that does not reflect the actual amount of data 
   carried by the fragments. Implementers should make sure that correct 
   operation is not affected by such events.</t>

    </section>

    <!-- This PI places the pagebreak correctly (before the section title) in the text output. -->

    <!-- Possibly a 'Contributors' section ... -->

    
    <section anchor="ACKs" title="Acknowledgments">
      <t>In section 2, the authors have reused extensive parts of text available in section 5.3 of RFC 4944, and would like to thank the authors of RFC 4944.</t>

      <t>The authors would like to thank Carsten Bormann, Tom Phinney, Ana Minaburo and Laurent Toutain for valuable comments that helped improve the document.</t>

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

    <section title="Annex A. Quantitative performance comparison of RFC 4944 fragmentation header with 6LoFH">
  

 <figure anchor="AdaptOverhead"
              title="Adaptation layer fragmentation overhead (in bytes) required to transport an IPv6 datagram">
        <artwork><![CDATA[
                   +-------------------------------------------------------+      
                   |                IPv6 datagram size (bytes)             |
                   +-------------+-------------+-------------+-------------+
                   |     40      |    100      |     640     |     1280    |
+------------------+-------------+-------------+-------------+-------------+
|L2 payload (bytes)| 4944 |6LoFH | 4944 |6LoFH | 4944 |6LoFH | 4944 |6LoFH | 
+------------------+-------------+-------------+-------------+-------------+
|       10         | ---- |  18  | ---- |  45  | ---- | 276  | ---- |  549 |    
+------------------+-------------+------+------+------+------+-------------+
|       20         |  19  |   9  |  59  |  18  | 394  | 114  |  794 |  228 |
+------------------+-------------+------+------+------+------+-------------+
|       40         |   0  |   0  |  19  |   9  |  99  |  54  |  199 |  105 |
+------------------+-------------+------+------+------+------+-------------+
|       60         |   0  |   0  |   9  |   6  |  69  |  36  |  134 |   69 |
+------------------+-------------+------+------+------+------+-------------+
|       80         |   0  |   0  |   9  |   6  |  44  |  27  |   89 |   51 |
+------------------+-------------+------+------+------+------+-------------+ 
|      100         |   0  |   0  |   0  |   0  |  39  |  21  |   74 |   42 |
+------------------+-------------+------+------+------+------+-------------+ 
]]></artwork>
      </figure>

      <t>Note 1: while IEEE 802.15.4-2003 allows a maximum L2 payload size between 81 
   and 102 bytes, a range of L2 payload size between 10 and 100 bytes is 
   considered in the study to illustrate the performance of 6LoFH also for other 
   potential L2 technologies with short payload size and without fragmentation 
   support.</t>

      <t>Note 2: with the RFC 4944 fragmentation header it is not possible to transport IPv6 datagrams of the considered sizes over a 10-byte payload L2 technology.</t>
  
    </section>

  </middle>

  <!--  *****BACK MATTER ***** -->

  <back>
    <!-- References split into informative and normative -->

    <!-- There are 2 ways to insert reference entries from the citation libraries:
     1. define an ENTITY at the top, and use "ampersand character"RFC2629; here (as shown)
     2. simply use a PI "less than character"?rfc include="reference.RFC.2119.xml"?> here
        (for I-Ds: include="reference.I-D.narten-iana-considerations-rfc2434bis.xml")

     Both are cited textually in the same manner: by using xref elements.
     If you use the PI option, xml2rfc will, by default, try to find included files in the same
     directory as the including file. You can also define the XML_LIBRARY environment variable
     with a value containing a set of directories to search.  These can be either in the local
     filing system or remote ones accessed by http (http://domain/dir/... ).-->


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

      <?rfc include='reference.RFC.2460.xml'?>

      <?rfc include='reference.RFC.4944.xml'?>

      <?rfc include='reference.RFC.6282.xml'?>
      
    </references>

    <references title="Informative References">
      <!-- Here we use entities that we defined at the beginning. -->
      <?rfc include='reference.I-D.minaburo-lpwan-gap-analysis'?>

      <reference anchor="HHWH">
        <front>
          <title>6LoWPAN fragmentation attacks and mitigation mechanisms</title>

          <author fullname="Rene" initials="R." surname=" Hummen et al">
          </author>

          <date year="2013"/>
        </front>
      </reference>
      
    </references>

    <!-- -->
  </back>
</rfc>

PAFTECH AB 2003-20262026-04-22 20:49:55