<?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-01" ipr="trust200902" updates="8200, 8883, 8900">
  <front>
    <title abbrev="IPv6 Identification Extension">IPv6 Identification Extension</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="29" month="November" 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 Hop-by-Hop option
      for Identification Extension; 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 document therefore defines a means to extend
      the IPv6 Identification length through the introduction of a new
      IPv6 Hop-by-Hop option.</t>

      <t>IPv6 Identification Extension 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 unfounded 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 the rates
      may be comparable when IPv6 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.</t>
    </section>

    <section anchor="IPv6-ext" title="IPv6 Identification Extension">
      <t>For a standard 4-octet IPv6 Identification value, 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, this specification permits the
      source to also include a new IPv6 ID Extension Hop-by-Hop option
      <xref target="I-D.ietf-6man-hbh-processing"/> formatted as shown
      in <xref target="ipv6-ext-id"/>:</t>

      <t><figure anchor="ipv6-ext-id" title="IPv6 ID Extension HBH Option">
        <artwork><![CDATA[
                                   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                                   |  Option Type  |  Opt Data Len |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   ~                       IPv6 ID Extension                       ~
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   Option Type           8-bit value '00X[TBD1]'.

   Opt Data Len          8-bit value 0, 4, 8 or 12.

   IPv6 ID Extension     a 0/4/8/12-octet unsigned integer IPv6 ID
                         extension, in network byte order.]]></artwork></figure></t>

      <t>The option is therefore identified by Option Type TBD1 (see: IANA
      Considerations) and the extended Identification is 4, 8, 12 or 16
      octets in length with the portion encoded in the HBH option IPv6 ID
      Extension field as the most significant "Opt Data Len" octets and
      the portion encoded in the IPv6 Fragment Header Identification field
      as the least significant 4 octets.</t>

      <t>For IPv6 packets that include both an IPv6 ID Extension HBH option
      and a standard IPv6 Fragment Header, this document further defines a
      new coding for the 3 least significant ("flag") bits of the Fragment
      Header control field as shown in <xref target="frag-permit"/>:</t>

      <t><figure anchor="frag-permit" title="Fragmentation Flag Bits">
        <artwork><![CDATA[     2   3   3
     9   0   1
   +---+---+---+
   | R | P | M |
   | F | F | F |
   +---+---+---+]]>
   </artwork></figure></t>

      <t>In this new coding, Bit 31 remains as the "More Fragments (MF)" flag,
      while bit 30 is re-defined as the "Permit Fragmentation (PF)" flag and
      bit 29 remains as a "Reserved Fragmentation (RF)" flag. For IPv6 packets
      that include the IPv6 ID Extension HBH option, when bit 30 of the Fragment
      Header control field is set to 0, network intermediate systems are not
      permitted to fragment the packet; otherwise, network fragmentation is
      permitted. Bit 29 is set to 0 on transmission and ignored on reception.</t>

      <t>Note: packets that include an IPv6 ID Extension HBH option with
      Opt Data Len set to 0 will still influence the fragmentation flags
      as above even though the IP ID "extension" is 0 octets in length.</t>
    </section>

    <section anchor="ipv6-frag" title="IPv6 Network Fragmentation">
      <t>When an IPv6 network intermediate system forwards a packet that
      includes both an IPv6 ID Extension HBH option and standard Fragment
      Header, it performs (further) fragmentation if the next hop link MTU
      is insufficient and if the "Permit Fragmentation (PF)" flag is set
      to '1' (see: <xref target="frag-permit"/>).</t>

      <t>The "Permit Fragmentation (PF)" flag for IPv6 therefore provides
      a "network fragmentation permitted" indication in the opposite sense
      of the IPv4 "Don't Fragment (DF)" flag. When PF is set to 1, IPv6
      intermediate systems are permitted to apply fragmentation on packets
      that already include an IPv6 ID Extension HBH option and an IPv6
      Fragment Header, but never to insert these headers themselves.</t>

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

    <section anchor="comply" title="Destination Qualification">
      <t>The source must have assurance that each destination will
      recognize and accept the IPv6 ID Extension HBH option before
      it can assume the extended IP ID uniqueness properties. This
      can be through operational assurances or protocol message
      feedback.</t>

      <t>An operational assurance example is through application of a
      common encapsulation format shared by all nodes within a limited
      domain network <xref target="RFC8799"/> for which recognition of
      the IPv6 ID Extension HBH option is mandatory (e.g., see: <xref
      target="omni"/>). The scope of the extended IP ID uniqueness
      then applies only within the boundaries of the limited domain.</t>

      <t>For open Internetworks and/or other networks with no operational
      assurances, the source must instead receive continuous feedback
      proving that the destination recognizes and applies the IPv6 ID
      Extension HBH option as long as the source sends packets/fragments
      with extended IP IDs at high data rates. (Note that continuous
      feedback rather than a one-time test is necessary in case the
      destination is anycast and routing redirects traffic to a new
      anycast destination that does not recognize the option.)</t>

      <t>As an IPv6 HBH option, the highest-order 2 bits of the Option
      Type TBD1 for the IPv6 ID Extension HBH option MUST always encode
      '00' (skip over this option and continue processing the header)
      while the third-highest-order bit is normally set to '0' (Option
      Data does not change en route). To receive continuous feedback
      from the destination, the source can periodically set the
      third-highest-order bit to '1' in a packet/fragment to be
      used as a probe. If the source receives an ICMPv6 Parameter
      Problem message with Code TBD2 (see: IANA Considerations), it
      has assurance that the destination (still) correctly recognizes
      the option.</t>

      <t>Destinations that receive IPv6 packets/fragments with an
      IPv6 ID Extension HBH option simply ignore the option if they
      do not recognize it. Destinations that recognize the option
      instead examine the third-highest-order bit. If the bit is
      set to '1', the destination returns an ICMPv6 Parameter Problem
      message with Code TBD2 to the source. The destination then
      drops the packet/fragment if it includes an Authentication
      Header; otherwise it accepts the packet/fragment for further
      processing.</t>

      <t>Note: When the source sends a packet/fragment with both an
      Authentication Header and an IPv6 ID Extension HBH option with
      the third-highest-order bit set to '1', it prepares the packet
      as a NULL packet (e.g., one with final IPv6 Next Header field
      set to 'No Next Header', one with {TCP,UDP} port set to 'Discard',
      etc.). The destination will then unconditionally discard the
      packet (after returning an ICMPv6 Parameter Problem message if
      necessary) whether or not it recognizes the HBH option.</t>

      <t>Note: intermediate systems forward without dropping any IPv6
      packets/fragments that contain an IPv6 ID Extension HBH option
      whether or not they recognize the option. Each packet/fragment
      that arrives at the destination will therefore always include
      the HBH option intended by the original source.</t>

      <t>Note: destinations that recognize and accept the IPv6 ID
      Extension HBH option are required to configure an EMTU_R of
      65535 octets (see: <xref target="require"/>). Therefore, sources
      that receive ICMPv6 Parameter Problem messages with code TBD2
      can also regard them as confirmation of the destination's
      EMTU_R.</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 the network
      will 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 adaptive to dynamic MTU fluctuations
      and not 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 IP ID
      extensions 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 fragmentation on
          a packet with an extended IP ID. 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
          EMTU_R 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
          that indicates 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 IP ID 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 possible EMTU_R value 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 that
          indicates 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>
    </section>

    <section anchor="require" title="Requirements">
      <t>IPv6 intermediate systems MUST forward without dropping
      packets that include an IPv6 ID Extension HBH option.</t>

      <t>Sources MUST include at most one IPv6 ID Extension HBH
      option plus at most one standard IPv6 Fragment Header in
      each packet. Intermediate systems and destinations SHOULD
      silently drop packets with multiples.</t>

      <t>Sources MUST transmit and destinations MUST process the octets
      of the extended IP ID in network byte order with the base IP ID
      field containing the least significant octets and the ID Extension
      field containing the most significant octets.</t>

      <t>Sources MUST include a constant IPv6 ID Extension HBH Option
      Data Length value of 0/4/8/12 octets for all packets sent to the
      same destination. Destinations MUST process all IPv6 ID Extension
      HBH options with Option Data Length values of 0/4/8/12 octets
      while silently dropping any packets with other values.</t>

      <t>Destinations MUST be capable of reassembling packets as large
      as the minimum Effective MTU to Receive (EMTU_R) specified for
      IPv6 (<xref target="RFC8200"/>, section 5).</t>

      <t>Destinations that accept flows using extended IP IDs:</t>
      <t><list style="symbols">
      <t>MUST configure a minimum EMTU_R of 65535 octets,</t>
      <t>SHOULD advertise the largest possible EMTU_R in PTB messages and</t>
      <t>MAY advertise a reduced EMTU_R during periods of congestion.</t>
      </list></t>

      <t>While a source has assurance that the destination(s) will
      recognize and correctly process extended IP IDs, it can continue
      to send fragmented or fragmentable packets as large as the EMTU_R 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 IP parcels and AJs that
      exceed this size. Instead, modern path MTU discovery methods provide
      the only possible solution to accommodate these larger sizes. This
      means that a combined solution with fragmentation and reassembly
      applied for conventional packets and path MTU discovery applied for
      jumbos 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 Hop-by-Hop 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 '0' and "rest" to TBD1 in a first line, and sets "act"
      to '00', "chg" to '1' and "rest" to TBD1 in the next line of the
      registry table. Both lines set "Description" to "IPv6 ID Extension"
      and "Reference" to this document [RFCXXXX].</t>

      <t>The IANA is further requested to assign a new Code value "TBD2"
      in the "ICMPv6 Code Fields: Type 4 - Parameter Problem" table of
      the 'icmpv6-parameters' registry (registration procedures Standards
      Action or IESG Approval). The registration sets "Code" to TBD2 and
      "Name" to "Immutable option data may change" with "Reference" set
      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>
    </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"?>

      <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 Fragment Header and
      a HBH header with an IPv6 ID Extension 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 per
        <xref target="RFC8200"/>. Each resulting IPv6 fragment will include both
        an IPv6 Fragment Header and HBH header with an IPv6 ID Extension option
        with the correct fragmentation parameters.</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 IP ID extensions
      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 extended
      IP IDs 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 extended
      IP IDs 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>

      <t>Note: the source must not send fragmented/fragmentable packets
      that include an extended IP ID to a multicast group or anycast
      address for which it does not have prior assurance that all
      potential recipients will recognize them. Otherwise, some
      recipients may correctly apply the IP ID extensions while others
      silently ignore them and may become subject to reassembly corruption.</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>
