<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<?rfc strict='yes'?>
<?rfc iprnotified='no'?>
<rfc category="std" docName="draft-templin-6man-ipid-ext-05" ipr="trust200902" updates="8200, 8900">
  <front>
    <title abbrev="IPv6 Extended Fragment Header">IPv6 Extended Fragment Header</title>

    <author fullname="Fred L. Templin" initials="F. L." role="editor"
            surname="Templin">
      <organization>Boeing Research &amp; Technology</organization>

      <address>
        <postal>
          <street>P.O. Box 3707</street>

          <city>Seattle</city>

          <region>WA</region>

          <code>98124</code>

          <country>USA</country>
        </postal>

        <email>fltemplin@acm.org</email>
      </address>
    </author>

    <date day="6" month="December" year="2023"/>

    <keyword>I-D</keyword>

    <keyword>Internet-Draft</keyword>

    <abstract>
      <t>The Internet Protocol, version 4 (IPv4) header includes a 16-bit
      Identification field in all packets, but this length is too small to
      ensure reassembly integrity even at moderate data rates in modern
      networks. Even for Internet Protocol, version 6 (IPv6), the 32-bit
      Identification field included when a Fragment Header is present may
      be smaller than desired for some applications. This specification
      addresses these limitations by defining an IPv6 Destination Options
      Extended Fragment Header option that includes a 64-bit Identification;
      it further defines control messaging services for fragmentation and
      reassembly congestion management.</t>
    </abstract>
  </front>

  <middle>
    <section anchor="intro" title="Introduction">
      <t>The Internet Protocol, version 4 (IPv4) header includes a 16-bit
      Identification in all packets <xref target="RFC0791"/>, but this
      length is too small to ensure reassembly integrity even at moderate
      data rates in modern networks <xref target="RFC4963"/><xref target=
      "RFC6864"/><xref target="RFC8900"/>. For Internet Protocol, version
      6 (IPv6), the Identification field is only present in packets that
      include a Fragment Header where its standard length is 32-bits <xref
      target="RFC8200"/>, but even this length may be too small for some
      applications. This specification therefore defines a means to extend
      the IPv6 Identification length through the introduction of a new
      IPv6 Destination Options Extended Fragment Header option.</t>

      <t>The IPv6 Extended Fragment Header option may be useful for
      networks that engage fragmentation and reassembly at extreme data
      rates, or for cases when advanced packet Identification uniqueness
      assurance is critical. The specification further defines a messaging
      service for adaptive realtime response to congestion related to
      fragmentation and reassembly. Together, these extensions support
      robust fragmentation and reassembly services as well as packet
      Identification uniqueness for IPv6.</t>
    </section>

    <section anchor="term" title="Terminology">
      <t>This document uses the term "IP" to refer generically to either
      protocol version (i.e., IPv4 or IPv6), and uses the term "IP ID" to
      refer generically to the IP Identification field whether in simple
      or extended form.</t>

      <t>The terms "Maximum Transmission Unit (MTU)", "Effective MTU to
      Receive (EMTU_R)", "Effective MTU to Send (EMTU_S)" and "Maximum
      Segment Lifetime (MSL)" are used exactly the same as for standard
      Internetworking terminology <xref target="RFC1122"/>. The term MSL
      is equivalent to the term "maximum datagram lifetime (MDL)" defined
      in <xref target="RFC0791"/><xref target="RFC6864"/>.</t>

      <t>The term "Packet Too Big (PTB)" refers to an IPv6 "Packet Too
      Big" <xref target="RFC8201"/><xref target="RFC4443"/> message.</t>

      <t>The term "flow" refers to a sequence of packets sent from a particular
      source to a particular unicast, anycast or multicast destination
      <xref target="RFC6437"/>.</t>

      <t>The term "source" refers to either the original end system that
      produces an IP packet or an encapsulation ingress intermediate system
      on the path.</t>

      <t>The term "destination" refers to either a decapsulation egress
      intermediate system on the path or the final end system that consumes
      an IP packet.</t>

      <t>The term "intermediate system" refers to a node on the path from the
      (original) source to the (final) destination that forward packets not
      addressed to itself. Intermediate systems that decrement the IP header
      TTL/Hop Limit are also known as "routers".</t>

      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
      "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
      "OPTIONAL" in this document are to be interpreted as described in BCP 14
      <xref target="RFC2119"/><xref target="RFC8174"/> when, and only when,
      they appear in all capitals, as shown here.</t>
    </section>

    <section anchor="motivate" title="Motivation">
      <t>Studies over many decades have shown that upper layer protocols often
      achieve greater performance by configuring segment sizes that exceed
      the path Maximum Transmission Unit (MTU). When the segment size exceeds
      the path MTU, IP fragmentation at some layer is a natural consequence.
      However, the 4-octet (32-bit) IPv6 Identification field may be too
      small to ensure reassembly integrity at sufficiently high data rates,
      especially when the source resets the starting sequence number often
      to maintain an unpredictable profile <xref target="RFC7739"/>. This
      specification therefore proposes to fortify the IP ID by extending
      its length.</t>

      <t>A recent study <xref target="I-D.templin-dtn-ltpfrag"/> proved that
      configuring segment sizes that cause IPv4 packets to exceed the path
      MTU (thereby invoking IPv4 fragmentation and reassembly) provides
      substantial performance increases at high data rates in comparison
      with using smaller segment sizes as long as fragment loss is negligible.
      This contradicts decades of assertions to the contrary and validates
      the Internet architecture which includes fragmentation and reassembly
      as core functions.</t>

      <t>An alternative to extending the IP ID was also examined in which
      IPv4 packets were first encapsulated in IPv6 headers then subjected
      to IPv6 fragmentation where a 4-octet Identification field already
      exists. While this IPv4-in-IPv6 encapsulation followed by IPv6
      fragmentation also showed a performance increase for larger segment
      sizes in comparison with using MTU-sized or smaller segments, the
      magnitude of increase was significantly smaller than for invoking
      IP fragmentation directly without first applying encapsulation.</t>

      <t>Widely deployed implementations also often employ a common code
      base for both IPv4 and IPv6 fragmentation/reassembly since their
      algorithms are so similar. It therefore follows that IPv4
      fragmentation and reassembly can support higher data rates than
      IPv6 when full (uncompressed) headers are used, while IPv6 may
      perform better when header compression is applied.</t>

      <t>In addition to accommodating higher data rates in the presence
      of fragmentation and reassembly, extending the IP ID can enable
      other important services. For example, an extended IP ID can
      support a duplicate packet detection service in which the network
      remembers recent IP ID values for a flow to aid detection of
      potential duplicates (note however that the network layer must
      not incorrectly flag intentional lower layer retransmissions
      as duplicates). An extended IP ID can also provide a packet
      sequence number that allows communicating peers to exclude any
      packets with IP ID values outside of a current sequence number
      window for a flow as potential spurious transmissions.</t>

      <t>For these reasons, it is clear that a robust IP fragmentation
      and reassembly service can provide a useful tool for performance
      maximization in the Internet and that an extended IP ID can provide
      greater uniqueness assurance. This document therefore presents a
      means to extend the IPv6 ID to better support these services
      through the introduction of an IPv6 Extended Fragment Header
      Destination Option.</t>
    </section>

    <section anchor="IPv6-ext" title="IPv6 Extended Fragment Header">
      <t>For a standard 4-octet IPv6 Identification, the source can
      simply include an ordinary IPv6 Fragment Header as specified in
      <xref target="RFC8200"/> with the Fragment Offset field and
      M flag set either to values appropriate for a fragmented
      packet or the value 0 for an unfragmented packet. The source
      then includes a 4-octet Identification value for the packet.</t>

      <t>For an extended Identification and/or for paths that do not
      recognize the standard IPv6 Fragment Header, this specification
      permits the source to instead include an IPv6 Extended Fragment
      Header in a Destination Options Header. The Extended Fragment
      Header must appear as the first option in a Destination Options
      Header that appears immediately following the Hop-by-Hop Options
      (if present) and immediately before the Routing Header (if present);
      see Section 4.1 of <xref target="RFC8200"/> for extension header
      order. The IPv6 Destination Options Header with Extended Fragment
      Header option is formatted as shown in <xref target="ipv6-ext-id"/>:</t>

      <t><figure anchor="ipv6-ext-id" title="IPv6 Extended Fragment Header">
        <artwork><![CDATA[   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Next Header (1)|  Hdr Ext Len  |  Option Type  |  Opt Data Len |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Next Header (2)|   Index   |P|S|      Fragment Offset    |R|D|M|
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +-+-+-+-              Identification (64 bits)           -+-+-+-+
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   Next Header (1)       for unfragmented packets, encodes protocol
                         number of header following the Destination
                         Options header. For fragmented packets,
                         encodes protocol number of the Routing Header
                         if present; otherwise, encodes "No Next Hdr".


   Hdr Ext Len           8-bit value 1 (i.e., 2 units of 8 octets).
                         Encodes a larger value if the Destination
                         Options Header includes more options.

   Option Type           8-bit value '001[TBD1]'.

   Opt Data Len          8-bit value 12.

   Next Header (2)       a temporary copy of Next Header (1) cached
                         when the packet is subject to fragmentation.

   Index/P/S             a control octet that identifies the components
                         of an IP Parcel [I-D.templin-intarea-parcels].

   Fragment Offset       the same as the fragmentation offset field
                         of the standard IPv6 Fragment Header.

   R/D/M                 fragmentation control flags: "(R)eserved",
                         "(D)on't Fragment" and "(M)ore Fragments".

   Identification        an 8-octet (64 bit) unsigned integer
                         Identification, in network byte order.]]></artwork></figure></t>

      <t>The Extended Fragment Header option is therefore identified by
      Option Type TBD1 (see: IANA Considerations) and the Identification
      field is 8 octets (64 bits) in length. The option may appear either
      in an unfragmented IPv6 packet or in one for which IPv6
      fragmentation is applied (with the header appearing in each fragment).</t>

      <t>The source applies fragmentation using the Extended Fragment
      Header destination option in the same fashion as for the standard
      IPv6 Fragment Header, except that the destination option itself
      is included in the Per-Fragment Headers - see: Section 4.5 of
      <xref target="RFC8200"/> and the standard IPv6 Fragment Header
      is not included. The source further sets the R/D/M fragmentation
      control flags the same as for IPv4 fragmentation as discussed in
      <xref target="ipv6-frag"/>.</t>

      <t>For each fragment produced during fragmentation, the source
      also caches the Next Header (1) value in the Next Header (2)
      field, then when no Routing Header is present resets the Next
      Header (1) field to "No Next Header". When a Routing Header
      is present, the source instead resets the Routing Header
      Next Header field to "No Next Header".</t>

      <t>The destination reassembles the same as specified in Section
      4.5 of <xref target="RFC8200"/>. Following reassembly, if the
      Routing Header is present the destination resets the Routing
      Header Next Header field to the value cached in the Extended
      Fragment Header. If no Routing Header is present, the destination
      instead resets the Destination Options Next Header field.</t>

      <t>Intermediate systems that forward packets fragmented in
      this way will therefore interpret the data that follows the
      per-fragment headers as undefined data (by virtue of the "No
      Next Header" setting) unless they are configured to more
      deeply inspect the data content.</t>
    </section>

    <section anchor="ipv6-frag" title="IPv6 Network Fragmentation">
      <t>When an IPv6 network intermediate system forwards a packet that
      includes a Destination Options Header in the extension header order
      where the Extended Fragment Header is permitted to occur, the
      intermediate system can optionally examine the Destination Options
      Header to determine if the Extended Fragment Header is present.</t>

      <t>Nodes interpret the IPv6 Extended Fragment Header R/D/M
      fragmentation control flags the same as for IPv4 fragmentation;
      specifically:</t>

      <t><list style="symbols">
        <t>the source sets the "(R)eserved" flag to 0 on transmission and
        the destination ignores the flag on reception.</t>

        <t>the source sets the "(D)on't Fragment" flag to 0 if network
        fragmentation is permitted; otherwise to 1.</t>

        <t>the source (or a fragmenting intermediate system) sets the
        "(M)ore Fragments" flag to 0 for the final fragment or 1 for
        non-final fragments.</t>
      </list></t>

      <t>When an intermediate system forwards a packet with D=0 that
      is too large to traverse the next hop toward the destination, it
      can apply (further) fragmentation using the procedures discussed
      above, except that it only rewrites the Next Header fields if
      both Fragment Offset and M are 0. For this reason, the Extended
      Fragment Header option contents may change in the path; hence
      the option "chg" flag is 1.</t>

      <t>This specification therefore updates <xref target="RFC8200"/>
      by permitting network fragmentation for IPv6 under the above
      conditions.</t>
    </section>

    <section anchor="qual" title="Destination Qualification">
      <t>Destinations that do not recognize the Extended Fragment Header
      ignore the option and process the packet further according to the
      remaining extension header chain. For packets fragmented according
      to the Extended Fragment Header, the destination will simply discard
      the fragment since the Next Header field in the final per-fragment
      extension header will encode "No Next Header".</t>

      <t>The source can therefore test whether a destination recognizes
      the Extended Fragment Header by occasionally sending a fragmented
      "probe" packet using the option. If the source receives an acknowledgement,
      it has assurance that the destination has successfully applied
      reassembly. The source should occasionally re-probe each destination
      in case routing redirects a flow to a different anycast destination.</t>
    </section>

    <section anchor="icmp" title="Packet Too Big (PTB) Extensions">
      <t>When an intermediate system attempts to forward an IP packet that
      exceeds the next hop link MTU but for which fragmentation is forbidden,
      it returns a "Packet Too Big (PTB)" message to the source <xref
      target="RFC4443"/><xref target="RFC8201"/> and discards the packet.
      This always results in wasted transmissions by the source and all
      intermediate systems on the path toward the one with the restricting
      link. Conversely, when network fragmentation is permitted intermediate
      systems may perform (further) fragmentation if necessary allowing the
      packet to reach the destination without loss due to a size restriction.
      This results in an internetwork that is more adaptive to dynamic MTU
      fluctuations and less subject to wasted transmissions.</t>

      <t>While the fragmentation and reassembly processes eliminate
      wasted transmissions and support significant performance gains
      by accommodating upper layer protocol segment sizes that exceed
      the path MTU, the processes sometimes represent pain points that
      should be communicated to the source. The source should then take
      measures to reduce the size of the packets/fragments that it sends.</t>

      <t>The IPv6 PTB format includes a Code field set to the value 0
      for ordinary PTB messages. The value 0 signifies a "classic" PTB
      and always denotes that the subject packet was unconditionally
      dropped due to a size restriction.</t>

      <t>For end systems and intermediate systems that recognize the
      Extended Fragment Header according to this specification, the
      following additional PTB unused/Code values are defined:</t>

      <t><list style="hanging">
          <t hangText="1 (suggested)"> Sent by an intermediate system
          (subject to rate limiting) when it performs (further)
          fragmentation on a packet with an Extended Fragment Header.
          The intermediate system sends the PTB message while still
          fragmenting and forwarding the packet. The MTU field of the
          PTB message includes the maximum fragment size that can pass
          through the restricting link as an indication for the source
          to reduce its (source) fragment sizes. This size will often
          be considerably smaller than the current receive packet size
          advertised by the destination.</t>

          <t hangText="2 (suggested)"> The same as for Code 1, except that
          the intermediate system drops the packet instead of fragmenting
          and forwarding. This message type represents a hard error
          indicating loss. In one possible strategy, the intermediate
          system could begin sending Code 1 PTBs then revert to sending
          Code 2 PTBs if the source fails to reduce its fragment sizes.</t>

          <t hangText="3 (suggested)"> Sent by the destination (subject to
          rate limiting) when it performs reassembly on a packet with an
          Extended Fragment Header during periods of reassembly congestion.
          The destination sends the PTB message while still reassembling and
          accepting the packet. The MTU field of the PTB message includes
          the largest desired receive packet size (less than or equal to
          the EMTU_R) under current reassembly buffer congestion constraints
          as an indication for the source to begin sending smaller packets
          if necessary. This size will often be considerably larger than
          the path MTU and must be no smaller than the IPv6 minimum EMTU_R.</t>

          <t hangText="4 (suggested)"> The same as for Code 3, except that
          the destination drops the packet instead of reassembling and
          accepting. This message type represents a hard error indicating
          loss. In one possible strategy, the destination could begin
          sending Code 3 PTBs then revert to dropping packets while
          sending Code 4 PTBs if the source fails to reduce its packet
          sizes.</t>
      </list></t>

      <t>Note: sources that receive PTB messages with Code 1/2 from an
      intermediate system should immediately engage source fragmentation
      for future packets using a maximum fragment size no larger than the
      MTU advertised in the PTB messages. This not only eases the burden
      on intermediate systems but also ensures better performance by
      avoiding small fragment sizes that may result from intermediate
      system fragmentation.</t>
    </section>

    <section anchor="require" title="Requirements">
      <t>All nodes that process an IPv6 Destination Options Header with
      Extended Fragment Header option observe the extension header limits
      specified in <xref target="I-D.ietf-6man-eh-limits"/>; the Extended
      Fragment Header further MUST appear as the first option in the
      first Destination Options Header.</t>

      <t>Intermediate systems MUST forward without dropping IPv6
      packets that include a Destination Options header with an
      Extended Fragment Header unless they detect a security policy
      threat through deeper inspection of the protocol data that
      follows.</t>

      <t>Sources MUST include at most one IPv6 Standard or Extended
      Fragment Header in each IPv6 packet/fragment. Intermediate
      systems and destinations SHOULD silently drop packets/fragments
      with multiples. If the source includes an Extended Fragment
      Header, it must appear as the first option of a single
      Destination Options Header following the Hop-by-Hop Options
      Header (if present) and before the Routing Header (if present).</t>

      <t>Destinations that accept flows using Extended Fragment Headers:</t>
      <t><list style="symbols">
      <t>MUST configure an EMTU_R of 65535 octets or larger,</t>
      <t>SHOULD advertise the largest possible receive packet size
      (i.e., as large as EMTU_R) in PTB messages, and</t>
      <t>MAY advertise a reduced receive packet size in PTB
      messages during periods of congestion.</t>
      </list></t>

      <t>While a source has assurance that the destination(s) will
      recognize and correctly process the Extended Fragment Header, it
      can continue to send fragmented or fragmentable packets as large
      as the current receive packet size at rates within the MSL/MDL
      wraparound threshold for the extended IP ID length; otherwise,
      the source honors the MSL/MDL threshold for the non-extended
      Identification field length <xref target="RFC6864"/>.</t>

      <t>Note: IP fragmentation can only be applied for conventional
      packets as large as 65535 octets. IP parcels and Advanced Jumbos
      (AJs) provide a means for efficiently packaging and shipping
      multiple large segments or truly large singleton segments in
      packets that may exceed this size <xref target=
      "I-D.templin-intarea-parcels"/>.</t>
    </section>

    <section anchor="frag" title="A Note on Fragmentation Considered Harmful">
      <t>During the earliest days of internetworking, researchers asserted that
      fragmentation should be deemed "harmful" based on empirical observations
      in the ARPANET, DARPA Internet and other internetworks of the day <xref
      target="KENT87"/>. These assertions somehow inspired an engineering
      discipline known as "Path MTU Discovery" within a new community that
      evolved to become the Internet Engineering Task Force (IETF). In more
      recent times, the IETF amplified these assertions in "IP Fragmentation
      Considered Fragile" <xref target="RFC8900"/>.</t>

      <t>Rather than encourage timely course corrections, however, the
      IETF somehow forgot that IP fragmentation and reassembly still serve
      as essential internetworking functions. This has resulted in a modern
      Internet where path MTU discovery (including its recent derivatives)
      provides a poor service for conventional packet sizes especially in
      dynamic networks with path MTU diversity. This document introduces a
      more robust solution based on a properly functioning IP fragmentation
      and reassembly service as intended in the original architecture.</t>

      <t>Although the IP fragmentation and reassembly services provide an
      appropriate solution for conventional packet sizes as large as 65535
      octets, the services cannot be applied for larger packets or for IP
      parcels and AJs of any size. Instead, appropriate path MTU probing
      methods provide the only possible solutions to accommodate these
      constructs. This means that a combined solution with fragmentation
      and reassembly applied for conventional packet sizes and path MTU
      probing applied for others provides the necessary combination for
      Internetworking futures. This document therefore updates <xref
      target="RFC8900"/>.</t>
    </section>

    <section anchor="implement" title="Implementation Status">
      <t>In progress.</t>
    </section>

    <section anchor="iana" title="IANA Considerations">
      <t>The IANA is requested to assign a new IPv6 Destination Option type
      "TBD1" in the 'ipv6-parameters' registry (registration procedures IESG
      Approval, IETF Review or Standards Action). The option sets "act" to
      '00', "chg" to '1', "rest" to TBD1, "Description" to "IPv6 Extended
      Fragment Header" and "Reference" to this document [RFCXXXX].</t>

      <t>The IANA is further instructed to assign new Code values in
      the "ICMPv6 Code Fields: Type 2 - Packet Too Big" table of the
      'icmpv6-parameters' registry (registration procedure is Standards
      Action or IESG Approval). The registry should appear as follows:
      <figure anchor="omni-pmtu-code"
            title="ICMPv6 Code Fields: Type 2 - Packet Too Big Values">
            <artwork><![CDATA[   Code                  Name                         Reference
   ---                   ----                         ---------
   0                     PTB Hard Error               [RFC4443]
   1 (suggested)         Fragmentation Needed (soft)  [RFCXXXX]
   2 (suggested)         Fragmentation Needed (hard)  [RFCXXXX]
   3 (suggested)         Reassembly Needed (soft)     [RFCXXXX]
   4 (suggested)         Reassembly Needed (hard)     [RFCXXXX]
]]></artwork></figure></t>
    </section>

    <section anchor="secure" title="Security Considerations">
      <t>All aspects of IP security apply equally to this document, which
      does not introduce any new vulnerabilities. Moreover, when employed
      correctly the mechanisms in this document robustly address known
      IP reassembly integrity concerns <xref target="RFC4963"/> and
      also provide an advanced degree of packet Identification
      uniqueness assurance.</t>

      <t>All normative security guidance on IPv6 fragmentation (e.g.,
      processing of tiny first fragments, overlapping fragments, etc.)
      applies also to the fragments generated under the Extended
      Fragment Header.</t>
    </section>

    <section anchor="ack" title="Acknowledgements">
      <t>This work was inspired by continued DTN performance studies.
      Amanda Baber, Tom Herbert, Bob Hinden and Eric Vyncke offered useful
      insights that helped improve the document.</t>

      <t>Honoring life, liberty and the pursuit of happiness.</t>
    </section>
  </middle>

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

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

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

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

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

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

      <?rfc include="reference.RFC.8201"?>
    </references>

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

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

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

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

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

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

      <?rfc include="reference.I-D.templin-dtn-ltpfrag"?>

      <?rfc include="reference.I-D.templin-intarea-parcels"?>

      <?rfc include="reference.I-D.templin-intarea-omni"?>

      <?rfc include="reference.I-D.ietf-6man-hbh-processing"?>

      <?rfc include="reference.I-D.ietf-6man-eh-limits"?>

      <reference anchor="KENT87">
        <front>
          <title>"Fragmentation Considered Harmful", SIGCOMM '87: Proceedings
              of the ACM workshop on Frontiers in computer communications
              technology, DOI 10.1145/55482.55524, http://www.hpl.hp.com/techreports/Compaq-DEC/WRL-87-3.pdf.</title>

          <author fullname="Christopher Kent" initials="C." surname="Kent">
            <organization/>
          </author>

          <author fullname="Jeffrey Mogul" initials="J." surname="Mogul">
            <organization/>
          </author>

          <date month="August" year="1987"/>
        </front>
      </reference>
    </references>

    <section anchor="omni" title="L2 Encapsulation with OMNI">
      <t>For paths that reject packets that include certain IPv6 extension
      headers or options, an encapsulation service is necessary to avoid
      middlebox filtering. The source can elect to engage encapsulation
      if the first alternative IP ID extension method fails or advance
      immediately to engaging encapsulation if it has reason to believe
      there is better opportunity for success. The encapsulation employs
      UDP, IP and/or Ethernet headers recognized by intermediate/end
      systems within a limited domain <xref target="RFC8799"/>.</t>

      <t>The OMNI specification <xref target="I-D.templin-intarea-omni"/>
      defines an encapsulation format in which UDP/IP headers that use
      UDP port 8060 serve as a "Layer 2 (L2)" encapsulation for OMNI
      IPv6-encapsulated IP packets. The UDP header is then followed by
      a chain of IPv6 extension headers including a Destination Options
      header with Extended Fragment Header option which together form
      an extended IP ID. The extension header chain is then followed by
      an OMNI IPv6 encapsulation header in full/compressed form followed
      by any OMNI IPv6 extensions followed by the original IP packet as
      shown in <xref target="omni-frag"/>:</t>
      <t><figure anchor="omni-frag" title="OMNI L2 Fragmentation and Reassembly">
        <artwork><![CDATA[   +---------------------------+
   |   L2 IP/Ethernet Header   |
   +---------------------------+
   | L2 UDP Header (port 8060) |
   +---------------------------+
   ~ L2 IPv6 Extension Headers ~
   +---------------------------+
   |  OMNI IPv6 Encapsulation  |
   +---------------------------+
   ~   OMNI IPv6 Extensions    ~
   +---------------------------+
   |                           |
   ~                           ~
   ~    Original IP Packet     ~
   ~                           ~
   |                           |
   +---------------------------+]]></artwork></figure></t>

      <t>The OMNI interface encapsulates each original IP packet in an IPv6
      encapsulation header as an OMNI Adaptation Layer (OAL) encapsulation.
      The interface next encapsulates this "OAL packet" in UDP/IP headers
      as "L2" encapsulations.</t>

      <t>When the packet requires L2 fragmentation and/or any other extension
      header processing, the OMNI interface instead performs the following
      operations:</t>

      <t><list style="symbols">
        <t>If the L2 header is IPv4 or Ethernet, convert it to an IPv6 header
        while converting the IPv4/EUI source and destination addresses to
        IPv4-compatible IPv6 addresses per <xref target="I-D.templin-intarea-omni"/>.</t>
          
        <t>Encapsulate the OAL packet in this L2 IPv6 header with any necessary
        IPv6 extension headers per <xref target="I-D.templin-intarea-omni"/>, then
        perform normal extension header processing including fragmentation
        according to the IPv6 Extended Fragment Header specification in this
        document.</t>

        <t>For each fragment, insert a UDP header between the L2 IPv6 header
        and L2 IPv6 extension headers, then adjust the Next Header field of each
        successive extension header per <xref target="I-D.templin-intarea-omni"/>.</t>

        <t>If the original L2 header was IPv4 or Ethernet, re-convert the
        IPv6 header back to IPv4/Ethernet.</t>

        <t>If the L2 header was IP, change {Protocol, Next Header} to '17'
        (UDP), set the remaining UDP/IP header fields to the correct values for
        each fragment, then transmit each fragment to the L2 destination.</t>
      </list></t>

       <t>When the L2 destination receives these (concealed) fragments, it
       first notices the OMNI-encoded L2 IPv6 extension headers immediately
       following the L2 OMNI UDP header. The destination then removes the
       L2 UDP header and (for IPv4) also converts the L2 IPv4 header to
       IPv6. The destination then applies any necessary OMNI L2 IPv6
       extension header processing, including reassembly. Following
       reassembly, the destination discards the L2 headers to arrive
       at the original OAL packet/fragment for further processing by
       the adaptation layer.</t>

       <t>For L2 encapsulations that do not include a UDP header (e.g.,
       IP-only), these fragments will include the L2 IPv6 extension headers
       immediately after the L2 IP header. The L2 IP header must then set
       its IP {Protocol, Next Header} to the protocol number reserved for
       OMNI <xref target="I-D.templin-intarea-omni"/>.</t>

       <t>For L2 encapsulations that do not include UDP/IP headers (e.g.,
       Ethernet-only), these fragments will include the L2 IPv6 extension
       headers immediately after the true L2 header. The L2 header must
       then set its L2 type to the EtherType reserved for OMNI <xref
       target="I-D.templin-intarea-omni"/>.</t>

       <t>Note: on the wire, these encapsulated IPv6 fragments will
       include an extended IP ID but will appear as ordinary packets
       to network middleboxes that inspect headers. This allows network
       middleboxes to make consistent forwarding decisions for each fragment
       of the same original OAL packet and without first attempting virtual
       fragment reassembly since each fragment appears as a whole packet.</t>

       <t>Note: the above procedures can also be applied to ordinary TCP/UDP
       datagrams. In that case, the L2 IPv6 extension headers are immediately
       followed by a TCP/UDP header instead of an OMNI IPv6 encapsulation
       header.</t>
    </section>

    <section anchor="multi" title="Multicast and Anycast">
      <t>Although unicast flows are assumed throughout this document,
      similar considerations apply for flows in which the destination
      is a multicast group or an anycast address.</t>

      <t>In order to send fragmented/fragmentable packets with IPv6
      Extended Fragment Headers to a multicast group, the source must have
      prior assurance that all group members will correctly recognize and
      process them. This assurance is normally through use of a UDP port
      number, IP protocol number and/or Ethernet type encapsulation for
      which extended IP ID processing is mandatory (see: <xref target="omni"/>).</t>

      <t>When a source sends fragmented/fragmentable packets with IPv6
      Extended Fragment Headers to a multicast group, the packets/fragments
      may be replicated in the network such that a single transmission may
      reach N destinations over as many as N different paths. Intermediate
      systems in each such path may return a Code 1/2 PTB message if
      (further) fragmentation is needed, and each such destination may
      return a Code 3/4 PTB message if it experiences reassembly congestion.</t>

      <t>While the source receives these PTB messages, it should reduce
      the fragment/packet sizes that it sends to the multicast group even if
      only one or a few paths or destinations are currently experiencing
      congestion. This means that transmissions to a multicast group will
      converge to the performance characteristics of the lowest common
      denominator group member destinations and/or paths.</t>

      <t>When a source sends fragmented/fragmentable packets with IPv6
      Extended Fragment Headers to an anycast address, routing may direct
      initial fragments of the same packet to a first destination that
      configures the address while directing the remaining fragments to
      other destinations that configure the address. These wayward
      fragments will simply result in incomplete reassemblies at each
      such anycast destination which will soon purge the fragments from
      the reassembly buffer. The source will eventually retransmit, and
      all resulting fragments should eventually reach a single
      reassembly target.</t>
    </section>

    <section title="Change Log">
      <t>&lt;&lt; RFC Editor - remove prior to publication &gt;&gt;</t>

      <t>Differences from earlier versions:<list style="symbols">
          <t>First draft publication.</t>
        </list></t>
    </section>
  </back>
</rfc>
