<?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-intarea-ipid-ext-20" ipr="trust200902" updates="6864, 8200, 8900">
  <front>
    <title abbrev="IP Identification Extension">Identification Extension for the Internet Protocol</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="11" month="October" 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 both an IPv4 header option
      and an IPv6 Extended Fragment Header for Identification Extension;
      it further provides a messaging service 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"/>. This document defines
      a new option for IPv4 that extends the Identification field to 32-bits
      (i.e., the same as for IPv6 packets that include a standard Fragment
      Header <xref target="RFC8200"/>) to support reassembly integrity at
      higher data rates.</t>

      <t>When an IPv4 packet includes this "Identification Extension" option,
      the value encoded in the IPv4 header Identification field represents
      the 2 least-significant octets while the option encodes the 2
      most-significant octets of an extended 4-octet Identification. Nodes
      that recognize the option employ it for packet identification purposes
      in general and to fortify the IPv4 reassembly procedure in particular.</t>

      <t>This specification also supports an "advanced" mode that extends
      the Identification field further for both IPv4 and IPv6. This format may
      be useful for networks that operate at extreme data rates, or for other
      cases when packet Identification uniqueness assurance is critical. The
      specification finally supports a messaging service for adaptive
      realtime response to congestion. Together, these extensions enable
      robust fragmentation and reassembly services as well as packet
      Identification uniqueness for the Internet.</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)" and "Maximum Segment Lifetime (MSL)" are used
      exactly the same as for standard Internetworking terminology
      <xref target="RFC1122"/>.</t>

      <t>The term "Packet Too Big (PTB)" refers to either an IPv6 "Packet Too
      Big" <xref target="RFC8201"/><xref target="RFC4443"/> or an IPv4
      "Destination Unreachable - Fragmentation Needed" <xref target="RFC1191"/>
      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
      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
      can 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 2-octet (16-bit) IPv4 and 4-octet (32-bit) IPv6 Identification
      fields may be too short to support reassembly integrity at sufficiently
      high data rates. 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 a
      multiplicative performance increase 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 seems reasonable to conclude
      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. These
      and other cases also apply even if the source frequently resets
      its starting IP ID sequence numbers to maintain an unpredictable
      profile <xref target="RFC7739"/>.</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 IP ID to better support these services.</t>
    </section>

    <section anchor="idext" title="IPv4 ID Extension">
      <t>IP ID extension for IPv4 is achieved by introducing a new IPv4
      option. This new IPv4 ID Extension (IDEXT) Option begins with an
      option-type octet with "copied flag" set to '1', "option class"
      set to '00' and "option number" set to TBD. The option-type octet
      is followed immediately by an option-length octet set to the
      constant value '4'.</t>

      <t>The option-length octet is then followed by a 2-octet "ID Extension"
      field that (when combined with the 2 least-significant octets found in the
      IPv4 packet header Identification field) includes the 2 most-significant
      octets of an extended 4-octet (32-bit) IP ID for the packet. The option
      format is shown in <xref target="ext-id"/>:</t>
 
      <t><figure anchor="ext-id" title="IPv4 ID Extension (IDEXT) Option">
        <artwork><![CDATA[   +--------+--------+--------+--------+
   |100[TBD]|00000100|  ID Extension   |
   +--------+--------+--------+--------+
    Type=TBD Length=4]]></artwork>
      </figure></t>

      <t>When a source wishes to supply a 4-octet extended IP ID for an IPv4
      packet, it includes an IDEXT option in the IPv4 packet header options area,
      i.e., following the same rules as for including any IPv4 option. The source
      next writes the 2 least-significant octets in the IPv4 header Identification
      field and writes the 2 most-significant octets in the "ID Extension" field.</t>

      <t>The source then applies source fragmentation if necessary while including
      the extended IP ID value. During fragmentation, the source copies the ID Extension
      option into each resulting fragment and sets or clears the "Don't Fragment (DF)"
      flag as desired.</t>

      <t>The source then forwards each IPv4 packet/fragment to the next hop,
      where each successive intermediate system will direct them toward the
      destination. If an intermediate system on the path needs to apply network
      fragmentation, it copies the IDEXT option into each resulting fragment
      to provide the destination with the correct reassembly context.</t> 
    </section>

    <section anchor="adv-ext" title="IPv4 ID Advanced Extension">
      <t>When a source produces a sustained burst of IPv4 packets for a
      flow at extreme data rates, (e.g., ~1Tbps) or when the source plans
      to reset the IP ID starting sequence to a new pseudo-random value
      frequently, it can optionally extend the IP ID even further by
      supplying an 8-octet (64-bit), 12-octet (96-bit) or 16-octet (128-bit)
      value instead of a 2/4-octet value.</t>

      <t>To apply these longer extensions, the source includes an IDEXT option
      with option-type set to TBD the same as above, but with option-length
      ("optlen") set to '8', '12' or '16' instead of '4' as shown in <xref
      target="adv-id"/>:</t>
 
      <t><figure anchor="adv-id" title="IDEXT Option with Advanced Extension">
        <artwork><![CDATA[   +--------+--------+--------+-~~~-+--------+
   |100[TBD]| optlen |     ID Extension      |
   +--------+--------+--------+-~~~-+--------+
    Type=TBD Length=8/12/16]]></artwork></figure></t>

      <t>The option-data then includes a 6, 10 or 14-octet ID Extension, with the
      most significant IP ID octets appearing in the extension in network byte order
      and with the 2 least significant octets appearing in the IPv4 Identification
      field. For a 6-octet extension, the 8-octet IP ID can then fit properly within
      the longest word length for modern 64-bit architectures.</t>
    </section>

    <section anchor="ipv4-index" title="IPv4 ID (Parcel) Index Extension">
      <t><xref target="I-D.templin-intarea-parcels"/> specifies
      procedures for fragmenting and reassembling the constituent
      packets derived from IP parcels that have been opened somewhere
      along the path. Since each packet derived from the same parcel
      shares the same Identification value, an ancillary (Parcel)
      Index field is also necessary to differentiate the packets.</t>

      <t><xref target="I-D.templin-intarea-parcels"/> re-purposes the IPv6
      Fragment Header 8-bit Reserved field to encode a (Parcel) Index, but
      the IPv4 header does not provide sufficient space. With reference to
      <xref target="idext"/> and <xref target="adv-ext"/>, this document
      therefore specifies the following IDEXT option format with (Parcel)
      Index extension:</t>

      <t><figure anchor="parcel-id" title="IDEXT Option with (Parcel) Index Extension">
        <artwork><![CDATA[   +--------+--------+--------+-~~~-+--------+--------+
   |100[TBD]| optlen |     ID Extension      | Index  |
   +--------+--------+--------+-~~~-+--------+--------+
    Type=TBD Length=5/9/13/17]]></artwork></figure></t>

      <t>When the IPv4 TBD option-length is '5', '9', '13', or '17', the
      option-data instead includes 2, 6, 10 or 14 Identification extension
      octets followed by the (Parcel) Index extension octet.</t>

      <t>The (Parcel) Index extension octet field names and descriptions
      appear in <xref target="I-D.templin-intarea-parcels"/>.</t>
    </section>

    <section anchor="ipv4-use" title="IPv4 ID Applications">
      <t><xref target="RFC6864"/> limits the use of the IPv4 ID field to
      only supporting the fragmentation and reassembly processes. When
      an IPv4 packet includes a TBD option, however, the source asserts
      that the IPv4 ID includes a well-managed extended-length value
      that can satisfy uniqueness properties useful for other purposes.</t>

      <t>This specification therefore updates <xref target="RFC6864"/>
      by permitting use of the extended IPv4 ID for purposes other than
      fragmentation and reassembly support.</t>
    </section>

    <section anchor="IPv6-ext" title="IPv6 ID Extension">
      <t>Techniques that improve IPv4 often also apply in a corresponding
      fashion for IPv6 (and vice-versa). The same is also true for IPv6 ID
      Extensions.</t>

      <t>For a simple 4-octet Identification value in IPv6, the source
      can simply include a standard 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 advanced 4-octet Identification as well as for 8-octet or
      12-octet Identification values, this document defines a new IPv6
      Extended Fragment Header. The IPv6 Extended Fragment Header is
      identified by the Next Header type value 'TBD2' (see: IANA
      Considerations) and the format is shown in <xref target=
      "ipv6-ext-id"/>:</t>

      <t><figure anchor="ipv6-ext-id" title="IPv6 Extended Fragment Header">
        <artwork><![CDATA[   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Next Header  |   Reserved    |      Fragment Offset    |Res|M|
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +-+-+-+-                                                 -+-+-+-+
   |                   Identification (12 octets)                  |
   +-+-+-+-                                                 -+-+-+-+
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]>
   </artwork></figure></t>

      <t>In the above format, the control values in the first four
      octets are interpreted exactly the same as for the standard
      IPv6 Fragment Header, while the Identification field is 12
      octets in length and encodes a 96-bit value in network byte
      order. (When only a 32/64-bit Identification is needed, the
      source sets the most significant 64/32 Identification
      bits to '0'.)</t>

      <t>For both the Standard and Extended IPv6 Fragment Header, this
      document further specifies a new coding for the 3 least significant
      ("flag") bits of the 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. When bit 30 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>
    </section>

    <section anchor="ipv6-frag" title="IPv6 Network Fragmentation">
      <t>When an IPv6 network intermediate system forwards a packet
      that includes an IPv6 (Extended) Fragment Header, it applies (further)
      fragmentation if the next hop link MTU is insufficient and if the "Permit
      Fragmentation (PF)" flag is set to '1' (see: <xref target="IPv6-ext"/>).</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 (Extended) Fragment Header, but never to
      insert a fragment header themselves.</t>

      <t>This specification therefore updates <xref target="RFC8200"/>
      by permitting network fragmentation for IPv6 under the above
      conditions.</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=
      "RFC1191"/><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 IPv4 PTB format includes an "unused" field while the IPv6
      PTB format includes a "Code" field, with both fields 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"> Sent by an intermediate system (subject to rate limiting)
          when it performs fragmentation on a packet with an extended
          IP ID (or a UDP port, IP protocol or Ethernet type that honors
          IP ID extensions such as OMNI <xref target=
          "I-D.templin-intarea-omni"/>). 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"> 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"> Sent by the destination (subject to rate limiting)
          when it performs reassembly on a packet with an extended IP ID
          (or a UDP port, IP protocol or Ethernet type that honors IP ID
          extensions such as OMNI) either during periods of reassembly
          congestion or to provide a keepalive pulse if it has no prior
          coordination with the source. 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 IP protocol version
          minimum EMTU_R.</t>

          <t hangText="4"> 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 sending Code 4 PTBs if
          the source fails to reduce its packet sizes.</t>

          <t hangText="5"> Parcel Report - Sent by an intermediate system or
          destination in response to an IP parcel that triggered the event
          (see: <xref target="I-D.templin-intarea-parcels"/>).</t>

          <t hangText="6"> Jumbo Report - Sent by an intermediate system or
          destination in response to an IP advanced jumbo that triggered
          the event (see: <xref target="I-D.templin-intarea-parcels"/>).</t>
      </list></t>

      <t>When the source receives an authentic Code 1 or 2 PTB,
      it performs source fragmentation on future packets for this flow
      using the fragment size found in the MTU field which may be smaller
      than the first hop link MTU. This reduces the burden on intermediate
      systems in the path which will experience a reduced dependence on
      network fragmentation.</t>

      <t>When the source receives a Code 3 or 4 PTB, it reduces
      the size of future packets for this flow if necessary based on the
      EMTU_R size found in the MTU field which may be larger than the
      path MTU. This reduces the burden on the destination which
      will experience a reduced dependence on reassembly.</t>

      <t>When a source that has no prior coordination with the
      destination (such as a UDP port, IP protocol or Ethernet type that honors
      IP ID extensions such as OMNI) ceases to receive Code 3 or 4 PTB messages,
      it must assume that the destination no longer recognizes IP ID extensions
      and must then impose rate limiting based on the wraparound threshold for
      a non-extended Identification within the MSL <xref target="RFC6864"/>.
      These rate limitations can be relaxed when the source can include an
      integrity check which the destination can verify.</t>

      <t>When an intermediate system or destination returns a Code 1-6 PTB,
      it prepares an ICMPv6 PTB message <xref target="RFC4443"/> and with
      MTU set as discussed above. The node then writes its own IP address
      as the PTB source and writes the source address of the packet that
      invoked the report as the PTB destination (for IPv4, the node writes
      the PTB address as an IPv4-Compatible IPv6 address <xref target="RFC4291"/>).</t>

      <t>The node next copies as much of the leading portion of the invoking
      packet as possible (beginning with the IP header) into the "packet
      in error" field without causing the entire PTB (beginning with the
      IPv6 header) to exceed 512 octets in length. The node then sets the
      ICMPv6 Checksum field to 0 instead of calculating and setting a
      true checksum since the UDP checksum (see below) already provides
      an integrity check.</t>

      <t>Since IPv6 packets cannot transit IPv4 paths, and since middleboxes
      often filter ICMPv6 messages as they transit IPv6 paths, the node next
      wraps the ICMPv6 PTB message in UDP/IP headers of the correct IP version
      with the IP source and destination addresses copied from the PTB and
      with UDP port numbers set to the OMNI UDP port number <xref target=
      "I-D.templin-intarea-omni"/>. The node then calculates and sets the
      UDP Checksum (and for IPv4 clears the DF bit). The node finally sends
      the prepared PTB to the source.</t>

      <t>Note: Original sources that send packets with extended IP IDs must
      be capable of accepting and processing these OMNI protocol UDP messages.
      A source that sends packets with extended IP IDs must therefore implement
      enough of the OMNI interface to be able to recognize and process these
      messages.</t>
    </section>

    <section anchor="omni" title="OMNI L2 Encapsulation, Fragmentation and Reassembly">
      <t>For paths that reject unrecognized IPv4 options or IPv6 extension headers,
      an alternate coding is necessary to avoid middlebox filtering. The source can
      elect to engage this alternate coding if the primary IP ID extension method
      fails or advance immediately to the alternate coding if it has reason to
      believe there is better opportunity for success. The alternate coding is
      based on the IPv6 (Extended) Fragment Header encapsulated in UDP/IP/Ethernet
      headers.</t>

      <t>The OMNI specification <xref target="I-D.templin-intarea-omni"/> provides
      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 an (Extended) Fragment Header with a 4 octet or longer
      IP ID. The extension header chain is then followed by an OMNI IPv6
      encapsulation header in full/compressed form 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) |
   +---------------------------+
   ~   IPv6 Extension Headers  ~
   +---------------------------+
   |  OMNI IPv6 Encapsulation  |
   +---------------------------+
   |                           |
   ~                           ~
   ~    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 an
        IPv6 (Extended) Fragment Header with the correct fragmentation parameters.</t>

        <t>For each fragment, insert a UDP header between the L2 IPv6 header
        and 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 (disguised) fragments, it
       first notices the OMNI-encoded 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 IPv6 extension
       header processing, including reassembly. Following reassembly, the
       destination discards the L2 headers to arrive at the original
       OAL packet for delivery to the adaptation layer.</t>

       <t>For L2 encapsulations that do not include a UDP header (e.g.,
       IP-only), these fragments will include the 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 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="require" title="Requirements">
      <t>IPv4 intermediate systems MUST forward without dropping packets
      with IPv4 option-type TBD while copying the option during network
      fragmentation, and IPv6 intermediate systems MUST forward without
      dropping packets with IPv6 Next Header type TBD2.</t>

      <t>Sources MUST include at most one IPv6 (Extended) Fragment
      Header in each packet. Intermediate systems and destinations
      SHOULD silently drop packets with multiple fragment headers.</t>

      <t>Destinations that recognize IPv4 option-type TBD MUST accommodate
      packets that include all extended IP ID formats based on any
      4/8/12/16-octet value included by the source.</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. Implementations
      maintain the IP ID as a 16-octet (128-bit) integer with any most
      significant octets not included in an extension set to 0.</t>

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

      <t>Destinations that accept flows using a UDP port number,
      IP protocol number and/or Ethernet type value that recognizes
      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>Sources that produce flows using a UDP port number,
      IP protocol number and/or Ethernet type value known to recognize
      extended IP IDs (and for IPv4 when network fragmentation is disabled),
      can send fragmented packets with extended IP IDs at high data rates
      and the destination can silently reassemble unless/until it needs
      to assert an EMTU_R indication due to reassembly congestion. For
      other flows, the destination MUST return a continuous stream of
      EMTU_R indications subject to rate limiting (see: <xref target=
      "icmp"/>) while it continues to reassemble packets from the source.
      (Note that this latter option applies only for unicast destinations;
      see: <xref target="multi"/> for multicast/anycast considerations.)</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 Maximum Segment Lifetime (MSL) wraparound threshold
      for the extended IP ID length; otherwise, the source honors the
      MSL threshold for the non-extended Identification field length <xref
      target="RFC6864"/>. When the source includes sufficiently strong
      integrity checks that the destination(s) can use to detect reassembly
      errors, however, it can continue to send at rates that exceed the
      MSL wraparound threshold.</t>

      <t>Extended IP ID formats supported by this specification include
      only the mandatory-to-implement (advanced) extended formats found
      in this document which are differentiated by the option-length
      value for IPv4 or the extension header type for IPv6. Future
      documents may specify additional extended IP ID formats.</t>

      <t>Note: IP fragmentation can only be applied for conventional
      packets as large as 65535 octets. IP parcels and advanced jumbos
      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 jumbo packets that exceed
      this size. Instead, modern path MTU discovery methods provide the only
      possible solution to accommodate jumbos. 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 IPv4 Option named "IDEXT" in
      the "IP Option Numbers" table in the 'ip-parameters' registry (registration
      procedures not defined). The option sets "Copy" to '1', "Class" to '00'
      and "Number" to TBD.</t>

      <t>The IANA is further requested to assign a new Protocol Number TBD2 in the
      in the "Assigned Internet Protocol Numbers" table in the 'protocol-numbers'
      registry (registration procedures IESG Approval or Standards Action). The
      registry sets Decimal to "TBD2", Keyword to "IPv6-XFrag", Protocol to
      "Extended Fragment Header for IPv6" and IPv6 Extension Header to "Y".</t>

      <t>The IANA is instructed to assign new Code values in the
      "ICMPv6 Code Fields: Type 2 - Packet Too Big" table in 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         Fragmentation Needed (soft)  [RFCXXXX]
   2         Fragmentation Needed (hard)  [RFCXXXX]
   3         Reassembly Needed (soft)     [RFCXXXX]
   4         Reassembly Needed (hard)     [RFCXXXX]
   5         Parcel Report                [RFCXXXX]
   6         Jumbo Report                 [RFCXXXX]
]]></artwork>
        </figure>(Note: this registry also defines the same above values for
        the "unused" field of ICMPv4 "Destination Unreachable - Fragmentation
        Needed" messages <xref target="RFC1191"/>.)</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 a known
      IPv4 reassembly integrity concern <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. Bob
      Hinden and Tom Herbert 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.1191"?>

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

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

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

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

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

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

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

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

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

      <?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"?>

      <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="multi" title="Multicast and Anycast">
      <t>Although unicast flows are assumed throughout this document, the
      same 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
      (or IP fragmentation checksums) 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 for which extended
      IP ID processing is mandatory.</t>

      <t>When a source sends fragmented/fragmentable packets with extended
      IP IDs (or IP fragmentation checksums) 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 (or IP fragmentation checksums) 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 (or IP fragmentation checksum) 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>
