<?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="exp" docName="draft-templin-6man-ipid-ext2-08" ipr="trust200902" updates="">
  <front>
    <title abbrev="IPv6 Extended Fragment Header (EFH)">IPv6 Extended Fragment Header (EFH)</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>

    <author fullname="Tom Herbert" initials="T." surname="Herbert">
      <organization>SiPanda</organization>

      <address>
        <postal>
          <street></street>

          <city>Santa Clara</city>

          <region>CA</region>

          <code></code>

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

        <email>tom@sipanda.io</email>
      </address>
    </author>

    <date day="17" month="April" year="2025"/>

    <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 Extended Fragment
      Header (EFH) that includes a 64-bit Identification with efficient
      fragmentation and reassembly procedures.</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 <xref target="RFC8200"/>, but even its
      standard length of 32 bits may be too small for some applications
      such as those that regard the Identification value as a sequence
      number. This specification therefore defines a means to extend
      the IPv6 Identification length to 64 bits through the introduction
      of a new IPv6 Extended Fragment Header (EFH).</t>

      <t>The IPv6 EFH employs a fragmentation/reassembly algorithm
      based on an ordinal fragment index in combination with the
      non-final fragment payload size instead of a 13-bit integer
      encoding an 8-octet offset. In this arrangement, both
      fragmentation and reassembly are greatly simplified allowing
      for efficient implementations. These improvements are based
      on an ample minimum fragment payload size made possible by
      the 1280 octet IPv6 minimum MTU.</t>

      <t>The IPv6 EFH 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 placement of the
      IPv6 EFH in a Destination Options header may also make the option less
      prone to network filtering.) This specification further defines a
      messaging service for adaptive realtime response to loss and congestion
      related to fragmentation/reassembly. Together, these extensions support
      robust fragmentation and reassembly services as well as packet
      Identification uniqueness for IPv6.</t>

      <t>The IPv6 EFH 64-bit Identification is in principle analogous
      to the Extended Sequence Number (ESN) supported by IPsec AH <xref
      target="RFC4302"/> and ESP <xref target= "RFC4303"/>. When
      transmitting the full 64-bit Identification may be wasteful,
      nodes can apply header compression techniques to transmit
      only the least significant bits while retaining the full
      64-bit value in cache memory.</t>
    </section>

    <section anchor="term" title="Terminology">
      <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
      "Maximum Reassembly Unit (MRU)" is equivalent to EMTU_R, and the
      term "maximum datagram lifetime (MDL)" (defined in <xref target=
      "RFC0791"/><xref target="RFC6864"/>) is equivalent to MSL.</t>

      <t>The term "Packet Too Big (PTB)" refers to an ICMPv6 "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 that a node desires to label as a flow per <xref
      target="RFC6437"/>.</t>

      <t>The term "Extended Fragment Header (EFH)" refers to a new IPv6
      Destination Option as specified in this document. The EFH is included
      in a Destination Options header as the final Per-Fragment header, while
      the remainder of the packet that follows the Per-Fragment headers is
      known as the "fragment payload".</t>

      <t>The term "Fragmentation Report (FR)" refers to an alternate
      option type encoding of the EFH option. Destinations may include
      the FR in return packets to sources of EFH fragments.</t>

      <t>The Automatic Extended Route Optimization (AERO) <xref target=
      "I-D.templin-6man-aero3"/> and Overlay Multilink Network Interface
      (OMNI) <xref target="I-D.templin-6man-omni3"/> services employ the
      IPv6 EFH for secure adaptation layer encapsulation and fragmentation.
      New packet types known as IP Parcels and Advanced Jumbos (AJs) are
      specified in <xref target="I-D.templin-6man-parcels2"/>.</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>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, lower layer IP fragmentation is
      a natural consequence. However, the 4-octet (32-bit) Identification
      field of the Fragment Header 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 IPv6 Identification by extending its length.</t>

      <t>Performance increases for upper layer protocols that use larger
      segment sizes was historically observed for NFS over UDP, and can
      still be readily observed today for TCP and the Delay Tolerant
      Network (DTN) Licklider Transmission Protocol (LTP) as reported
      in <xref target="I-D.templin-dtn-ltpfrag"/>. The test setup
      included a pair of modern high-performance servers with 100Gbps
      Ethernet cards connected via a point-to-point link and running
      a modern public domain linux release. TCP performance using the
      public domain 'iperf3' tool was proven to increase when larger
      segment sizes are used even if they exceed the path MTU and
      invoke a service known as Generic Segment/Receive Offload
      (GSO/GRO). LTP performance with segment sizes that exceed the
      path MTU was similarly proven using the HDTN and ION-DTN LTP
      implementations which engage IP fragmentation and reassembly.</t> 

      <t>In addition to accommodating higher data rates in the presence
      of fragmentation and reassembly, extending the IPv6 Identification
      can enable other important services. For example, an extended
      Identification can enable a duplicate packet detection service
      where the network remembers recent Identification values for a
      flow to aid detection of potential duplicates. When an encapsulation
      source includes an IPv6 EFH, the extended Identification can also
      serve as a sequence number that allows each encapsulation
      destination to exclude any packets with values outside of the
      current sequence number window for a flow as potential spurious
      transmissions.</t>

      <t>A robust IP fragmentation and reassembly service can provide
      a useful tool for performance maximization in the Internet when
      an extended Identification is available. This document therefore
      presents a means to extend the IPv6 Identification in a more
      efficient fragmentation and reassembly specification to better
      support these services through the introduction of an IPv6
      Extended Fragment Header (EFH).</t>
    </section>

    <section anchor="IPv6-ext" title="IPv6 Extended Fragment Header (EFH)">
      <t>For a conventional 4-octet IPv6 Identification, 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 extended Identification, advanced fragmentation
      and reassembly procedures and/or for paths that drop
      packets including the standard IPv6 Fragment Header, this 
      specification permits the source to instead include an IPv6
      EFH. The source includes the IPv6 EFH in a Destination Options
      Header positioned as the final IPv6 Per-Fragment Header. The
      remainder of the packet beginning with the Extension and Upper
      Layer Headers for the first fragment or protocol data for
      non-first fragments is known as the fragment payload.</t>

      <t>The Destination Options header that includes the EFH option
      therefore appears in each fragment in the same position where
      the standard Fragment Header would normally appear while the
      Fragment Header itself is omitted - see Sections 4.1 and 4.5 of
      <xref target="RFC8200"/>.</t>

      <t>The IPv6 EFH Destination Option is formatted as shown in
      <xref target="ipv6-ext-id"/>:</t>

      <t><figure anchor="ipv6-ext-id" title="IPv6 EFH Destination Option">
        <artwork><![CDATA[                                   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                                   |  Option Type  |  Opt Data Len |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   NH-Actual   |    Reserved   |P|M|   Index   |R|N| Sub-Index |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +-+-+-+-              Identification (64 bits)           -+-+-+-+
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

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

   Opt Data Len          8-bit value 12.

   NH-Actual             the actual value of the original Destination
                         Options Next Header prior to fragmentation.

   Reserved              an 8-bit Reserved field.  Initialized to zero
                         on transmission; ignored on reception.

   P/M/Index             a 6-bit "Index" field that identifies the
                         ordinal index for each fragment payload,
                         preceded by a 1-bit "(P)robe" flag and a
                         1-bit "(M)ore Fragments" flag.

   R/N/Sub-Index         a 6-bit "Sub-Index" field that identifies the
                         ordinal index for each sub-fragment of the
                         same original fragment, preceded by a 1-bit
                         "(R)eserved" flag (set to 0) and a 1-bit
                         "(N)ext Sub-Fragment" flag.

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

      <t>The IPv6 EFH Destination Option is therefore identified
      as an Option Type with the low-order 5 bits set to TBD1
      (see: IANA Considerations) and with the third-highest-order
      bit (i.e., "chg") set to 1. The highest-order 2 bits (i.e.,
      "act") are set to '01' or '1X' so that destinations that do
      not recognize the option will drop the packet or fragment
      either silently or while also returning an ICMPv6 Parameter
      Problem message. The Identification field is 8 octets (64
      bits) in length and a Destination Options header that
      includes the option may appear either in an unfragmented
      IPv6 packet or in one for which IPv6 fragmentation is
      applied.</t>
    </section>

    <section anchor="src-frag" title="IPv6 Source Fragmentation">
      <t>All aspects of IPv6 fragmentation using the EFH are
      conducted exactly as for standard IPv6 fragmentation
      per Section 4.5 of <xref target="RFC8200"/> except as
      specified below.</t>

      <t>When the source performs fragmentation using the IPv6 EFH,
      it SHOULD produce the smallest number of fragments possible
      within current path MTU constraints and MUST produce no more
      than 64 fragments per packet. The fragment payload of each
      non-final fragment following the Destination Options header
      MUST NOT be smaller than 1024 octets, allowing for up to 256
      octets of Per-Fragment headers plus any lower-layer IP
      encapsulations within the 1280 octet IPv6 minimum path MTU.
      Each non-final fragment payload MUST be equal in length,
      while the final fragment payload MAY be smaller and MUST
      NOT be larger.</t>

      <t>For each of the F fragments produced during fragmentation,
      the source writes an ordinal index number beginning with 0
      in the "Index" field for the first fragment and increasing
      by 1 for each successive non-first fragment while setting
      the "M" flag accordingly. Specifically, the source sets
      (Index, M) to (0, 1) for the first fragment, (1, 1)
      for the second, (2, 1) for the third, etc., up to and
      including ((F-1), 0) for the final fragment. The source
      also sets (Sub-Index, N) to (0, 0) in all fragments.</t>

      <t>For each fragment produced during fragmentation, the source
      inserts a Destination Options header including the IPv6 EFH
      option as the final Per-Fragment header. The source then caches
      the Destination Options header Next Header value in the NH-Actual
      field and (for each non-first fragment) resets the Next Header
      field to "No Next Header". Intermediate systems that forward
      non-first fragments prepared in this way will therefore ignore
      the fragment payload that follows (by virtue of the "No Next
      Header" setting) unless they are configured to more deeply
      inspect the data content.</t>

      <t>After performing source fragmentation but before
      releasing the fragments, the source may become aware that
      the path and/or path MTU has changed. If so, the source can
      perform further fragmentation for each original fragment by
      producing "S" minimum-length sub-fragments under the same
      procedures above, with non-final sub-fragment payloads equal
      in length and no smaller than 1024 octets. The source MUST
      write the same (NH-Actual, Index, M) values into each
      sub-fragment while setting (Sub-Index, N) to (0, 1), (1, 1),
      (2, 1), etc. in each successive non-final sub-fragment and
      setting ((S-1), 0) in the final sub-fragment. The source
      also sets P to 0 in each sub-fragment and MUST NOT perform
      further fragmentation on sub-fragments that already include
      non-zero (Sub-Index, N) values.</t>
    </section>

    <section anchor="int-frag" title="IPv6 Intermediate System Fragmentation">
      <t>When an intermediate system detects a path change and/or
      a path MTU reduction while forwarding an original fragment
      it MAY perform further fragmentation using the (Sub-Index,
      N) fields if it can easily locate the IPv6 EFH supplied by
      the source; otherwise, it drops the fragment and returns a
      PTB message.</t>

      <t>Intermediate system procedures for performing further
      fragmentation are identical to those specified for the source
      (see: <xref target="src-frag"/>). The intermediate system
      acts as a passive agent of the source and therefore MUST
      NOT insert an EFH itself.</t>
    </section>

    <section anchor="dst-reass" title="IPv6 Destination Reassembly">
      <t>All aspects of IPv6 reassembly using the EFH are conducted
      exactly as for standard IPv6 reassembly per Section 4.5 of
      <xref target="RFC8200"/> except as specified below.</t>
 
      <t>When the destination receives original EFH fragments with
      the same (Source, Destination, Identification)-tuple, it
      reassembles by concatenating the payloads of consecutive
      fragments in ascending ordinal Index numbers, i.e., ordinal
      0, followed by 1, followed by 2, etc. until all fragments
      are concatenated. In the process, the destination discards
      any non-final fragments with fragment payloads less than
      1024 octets in length or with fragment payload lengths
      that differ from the others.</t>

      <t>When the destination receives EFH sub-fragments that
      set (Sub-Index, N) to a value other than (0, 0), it first
      reassembles the original fragment by concatenating the
      payloads of each sub-fragment the same as described
      above. When the original fragment has been reconstructed,
      the destination submits it for fragment-level reassembly
      as described above. The destination should also return
      an indication to inform the source that the path may
      have changed (see: <xref target="fragrep"/>).</t>
    </section>

    <section anchor="qual" title="Destination Qualification and Path MTU">
      <t>Destinations that do not recognize the IPv6 EFH option drop
      the packet. If the Option Type "act" code is '1X', the destination 
      also returns a Code 2 ICMPv6 Parameter Problem message <xref
      target="RFC4443"/>. (ICMPv6 messages may be lost on the return
      path and/or manufactured by an adversary, however, and therefore
      provide only an advisory indication.)</t>

      <t>The source can then test whether destinations recognize the
      IPv6 EFH option by occasionally sending "probe" packets that
      include the option. The source has assurance that a destination
      recognizes the option if it receives acknowledgments; otherwise,
      it may receive Code 2 ICMPv6 Parameter Problem messages as hints
      that a destination does not recognize the option. The source
      should re-probe destinations occasionally in case routing
      redirects a flow to a different anycast destination or in
      case a multicast group membership changes (see: <xref
      target="multi"/>).</t>
    </section>

    <section anchor="icmp" title="Packet Size Issues">
      <t>When the source node sends fragment payloads larger
      than the minimum size of 1024 octets using the IPv6 EFH
      option, it should occasionally probe the path MTU per
      <xref target="RFC8899"/> by setting the P flag to 1 in
      probe first fragments, i.e., those with Index set to 0.</t>

      <t>When the destination receives a probe fragment, it returns
      an ICMPv6 Packet Too Big (PTB) message <xref target="RFC4443"/>
      <xref target="RFC8201"/> with Code set to "Probe Reply"
      (see: IANA Considerations) and MTU set to the probe fragment
      payload size.</t>

      <t>The source can then perform source fragmentation using the
      IPv6 EFH option with a maximum fragment payload size advanced
      to the size in the Probe Reply MTU field.</t>

      <t>If the destination experiences reassembly congestion, it
      can begin returning ICMPv6 PTB messages to the source with
      Code set to "PTB Soft Error (loss)" or "PTB Soft Error
      (no loss)" (see: IANA Considerations) and with MTU set to
      a reduced MRU size. When the source receives the PTB messages,
      it temporarily reduces the size of its future transmissions
      to this destination.</t>

      <t>If the source is an encapsulation ingress, it also returns
      a translated PTB message with a corresponding soft error Code
      to the original source per <xref target="RFC2473"/>. For IPv4
      original sources, the translation uses a new ICMP message Type
      TBD2 and with a corresponding soft error Code (see: IANA
      Considerations).</t> 

      <t>If an intermediate system detects a path change and can easily
      locate the IPv6 EFH included by the source, it can perform
      sub-fragmentation to produce sub-fragments that will not incur
      further MTU restrictions (see: <xref target="int-frag"/>).</t>
    </section>

    <section anchor="fragrep" title="Fragmentation Reports and Retransmissions">
      <t>End systems that recognize the IPv6 EFH also recognize an
      IPv6 Fragmentation Report (FR) Option that uses option type
      TBD1 the same as for the EFH itself except with the act code
      set to '00' and formatted as shown below:</t>

        <t><figure anchor="new-tcp" title="IPv6 Fragmentation Report Option">
        <artwork><![CDATA[                                   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                                   |  Option Type  |  Opt Data Len |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          Flow Label (20 bits)         |C|    MRU (11 bits)    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +-+-+-+-            Identification (64 bits)             -+-+-+-+
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   ~                                                               ~
   +~+~+~+~          Bitmap (64 bits when present)          ~+~+~+~+
   |                                                               |
   +~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+
]]></artwork></figure></t>

      <t>The destination end system includes the IPv6 FR option in
      a return packet to the source to report reassembly congestion
      conditions and/or fragment loss. Any return packet (i.e., one
      with the IPv6 Source and Destination Addresses from the packet
      that triggered the FR reversed) can be used to carry the
      option, especially if it includes identifying parameters
      and/or authentication signatures.</t>

      <t>The destination sets Flow Label to the 20-bit Flow Label
      corresponding to this reassembly. The destination then sets
      the C flag to 1 if the path has changed as determined by the
      arrival of sub-fragments and sets MRU to the most significant
      11 bits of the recommended 16-bit maximum reassembly size under
      current congestion conditions. When the 11 transmitted MRU bits
      are all-1's, the 5 untransmitted bits are also interpreted as
      all-1's; otherwise, they are interpreted as all-0's.</t>

      <t>If all fragments of the packet (or the unfragmented packet
      itself) have arrived the destination sets Opt Data Len to 12
      and omits the Bitmap field. If some fragments are missing, the
      destination instead sets Opt Data Len to 20 and includes a 64-bit
      Bitmap field with Bitmap(i) (for i=0 to 63) set to 1 for each
      ordinal fragment index it has received for this reassembly and
      set to 0 for all others.</t>

      <t>When the source receives authentic IP packets with the
      IPv6 FR option, it should reduce the size of its continued
      packet transmissions for the flow if necessary according to
      the MRU. If the C flag is set, the source should reduce its
      fragment payload size to 1024 but may also begin probing for
      larger sizes.</t>

      <t>If the option further includes a Bitmap, the source can
      retransmit any missing ordinal fragments if it still has
      them in its cache provided the delay would not interfere
      with upper layer protocol retransmissions. When the source
      receives IPv6 FRs that advertise a larger MRU (or when it
      ceases to receive IPv6 FRs), it can begin to increase its
      packet sizes for the flow. This ensures that the packet size
      is adaptive for a given flow.</t>

      <t>Note: the IPv6 FR option may appear in the same Destination
      Options header that includes an IPv6 EFH option. Their compact
      sizes permit both options to appear without exceeding recommended
      limits (see: <xref target="I-D.ietf-6man-eh-limits"/>).</t>
    </section>

    <section anchor="multi" title="Multicast and Anycast">
      <t>In addition to unicast flows, similar considerations apply
      for flows in which the Destination Address is multicast or
      anycast. Unless the source and all candidate destinations
      are members of a limited domain network <xref target="RFC8799"/>
      for which all nodes recognize the IPv6 EFH, some destinations
      may recognize the option while others drop packets containing
      the option and may return a Code 2 ICMPv6 Parameter Problem
      message <xref target="RFC4443"/>.</t>

      <t>When a source sends packets/fragments with IPv6 EFH options
      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. Some destinations
      may then return IPv6 packets with IPv6 FR options if they
      experience congestion and/or loss, while other destinations
      may return Code 2 ICMPv6 Parameter Problem messages if they
      do not recognize the IPv6 EFH option.</t>

      <t>While the source receives authentic PTB messages or authentic
      IP packets with IPv6 FR options, it should reduce the sizes of
      the packets/fragments 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. While the
      source receives ICMPv6 Parameter Problem messages and/or otherwise
      detects that some multicast group members do not recognize the
      IPv6 Extended Fragment Header option, it must determine whether
      the benefits for group members that recognize the option outweigh
      the drawbacks of service denial for those that do not.</t>

      <t>When a source sends packets/fragments with IPv6 Extended Fragment
      Headers option to an anycast address, routing may direct initial
      fragments of the same packet to a first destination while directing
      the remaining fragments to other destinations that configure the
      same 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 anchor="require" title="Requirements">
      <t>All normative aspects of standard IPv6 fragmentation and reassembly
      as specified in <xref target="RFC8200"/> apply also to the IPv6 EFH
      except where this document specifies differences.</t>

      <t>Destinations that accept flows using IPv6 EFH options MUST
      configure an EMTU_R of 65535 octets or larger.</t>

      <t>Sources MUST NOT include more than one IPv6 Standard or Extended
      Fragment Header in each IPv6 packet/fragment, and destinations
      MUST silently drop packets/fragments with multiples. If the
      source includes an IPv6 EFH, it MUST appear in a Destination
      Options header that appears as the final Per-Fragment header
      before the fragment payload.</t>

      <t>Sources that include an IPv6 EFH option MUST perform
      fragmentation such that at most 64 fragments are produced
      and all non-final fragments include equal-length fragment
      payloads no smaller than 1024 octets. The final fragment
      MAY be smaller and MUST NOT be larger.</t>

      <t>Sources that include the IPv6 EFH option in packet
      transmissions MUST also recognize the IPv6 FR option
      in return packets as specified in <xref target="fragrep"/>.</t>
    </section>

    <section anchor="relate" title="Relation to GSO/GRO">
      <t>EFH fragmentation and reassembly operate on IPv6 packets
      that include a single upper layer protocol (ULP) segment with
      its corresponding ULP header, e.g., TCP <xref target="RFC9293"/>,
      QUIC/UDP <xref target="RFC9000"/>, IPv6 <xref target="RFC2473"/>,
      etc. This means that even for very large ULP segments only a
      single ULP header appears in the resulting fragment sequence
      even if the segment size exceeds the path MTU.</t>

      <t>A widely-used service known as Generic Segment Offload (GSO)
      with its counterpart Generic Receive Offload (GRO) performs a
      similar fragmentation and reassembly service using the same
      algorithm specified for the EFH but with segment sizes no
      larger than the path MTU. GSO/GRO produce fragment sequences
      (standalone packets, actually) that include a separate copy
      of the ULP header in each packet instead of a single copy
      for the entire sequence. With a nominal ULP header size of
      20 octets for TCP, this means that a 64-packet sequence
      would be required to carry 1260 redundant octets for each
      GSO/GRO transaction - a significant increase in overhead.</t>

      <t>ULP use of EFH fragmentation and reassembly in comparison
      with GSO/GRO therefore requires an adaptive consideration of
      the packet loss profile for a given flow. Assuming a nominal
      path MTU (e.g., 1280 octets, 1500 octets, etc.) and with
      negligible packet loss, EFH with larger ULP segment sizes
      provides efficiency advantages in comparison with GSO/GRO
      with smaller segment sizes. When packet loss increases,
      however, ULPs that use EFH should adaptively reduce their
      segment sizes to compensate. When loss levels become severe,
      ULPs that use both EFH and GSO/GRO may need to reduce their
      transmission rates until loss profiles improve. These
      adaptations for both approaches are necessary to balance
      the loss unit in relation to the retransmission unit.</t>

      <t>Under larger path MTUs (e.g., 4500 octets, 9000 octets,
      or larger still), the two services converge to offer similar
      performance profiles at segment sizes no larger than the path
      MTU, while EFH can advance to still larger segment sizes for
      improved efficiency. EFH can also transport IP parcels and
      AJs (following IPv6 encapsulation) even if the underlying
      path does not support them natively.</t>
    </section>

    <section anchor="frag" title="A Note on Fragmentation Considered Harmful">
      <t>During the earliest days of internetworking, researchers attributed
      the warning label "harmful" to IP fragmentation based on empirical
      observations in the ARPANET, DARPA Internet and other internetworks
      of the day <xref target="KENT87"/>. This inspired an engineering
      discipline known as "Path MTU Discovery" within an emerging community
      of interest known as the Internet Engineering Task Force (IETF).</t>

      <t>In more recent times, the IETF published "IP Fragmentation Considered
      Fragile" <xref target="RFC8900"/> to characterize the current state of
      fragmentation in the modern Internet. The IPv6 Extended Fragment Header
      now introduces a more robust solution based on an improved IPv6
      fragmentation and reassembly service that addresses these historical
      concerns.</t>

      <t>These early directions failed to consider that proper mitigations
      for fragment loss can ensure a dynamic system that adaptively tunes
      packet sizes according to current networking conditions on a per-flow
      basis. Such a system can offer performance maximization benefits through
      adaptive packet size management in a manner that parallels TCP congestion
      control.</t>
    </section>

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

    <section anchor="iana" title="IANA Considerations">
      <section anchor="iana1" title="IPv6 Parameters">
      <t>The IANA is requested to assign a new IPv6 Destination
      Option type in the "Destination Options and Hop-by-Hop Options"
      table of the https://www.iana.org/assignments/ipv6-parameters/
      registry group (registration procedures IESG Approval, IETF
      Review or Standards Action). The option type should appear
      in 4 consecutive table entries.</t>

      <t>The first entry sets "act" to '00', "chg" to '0', "rest"
      to TBD1, "Description" to "IPv6 Fragmentation Report" and
      "Reference" to this document [RFCXXXX].</t>

      <t>The next three entries set "act" to {'01', '10', '11'},
      "chg" to '1', "rest" to TBD1, "Description" to "IPv6 Extended
      Fragment Header" and "Reference" to this document [RFCXXXX].</t>

      <t>Each table entry finally sets "Hex Value" to the 2-digit
      hexadecimal value corresponding to the 8-bit concatenation
      of act/chg/rest.</t>
      </section>

      <section anchor="iana2" title="ICMPv6 Parameters">
        <t>The IANA is instructed to assign new Code values in the
        "ICMPv6 Code Fields: Type 2 - Packet Too Big" registry in
        the https://www.iana.org/assignments/icmpv6-parameters
        registry group (registration procedure is Standards Action or
        IESG Approval). The registry entries should appear as follows:
        <figure anchor="omni-pmtu6-code"
            title="ICMPv6 Code Fields: Type 2 - Packet Too Big Values">
            <artwork><![CDATA[   Code            Name                         Reference
   ---             ----                         ---------
   0               PTB Hard Error               [RFC4443]
   1 (suggested)   PTB Soft Error (loss)        [RFCXXXX]
   2 (suggested)   PTB Soft Error (no loss)     [RFCXXXX]
   3 (suggested)   MTU Probe Reply              [RFCXXXX]
]]></artwork></figure></t>
      </section>

      <section anchor="iana3.5" title="ICMP Parameters">
        <t>The IANA is instructed to assign a new Type number TBD2
        in the "ICMP Type Numbers" registry in the
        https://www.iana.org/assignments/icmp-parameters registry
        group (registration procedures IESG Approval or Standards
        Action). The entry should set "Type" to TBD2, "Name" to
        "Packet Too Big (PTB)" and "Reference" to [RFCXXXX] (i.e.,
        this document).</t>

        <t>The IANA is further instructed to create a new table titled:
        "Type TBD2 - Packet Too Big (PTB)" in the "Code Fields" registry,
        with registration procedures IESG Approval or Standards Action.
        The table should have the following initial format:
        <figure anchor="pmtu-code" title="Type TBD2 - Packet Too Big (PTB)">
            <artwork><![CDATA[   Code            Name                         Reference
   ---             ----                         ---------
   0               Reserved                     [RFCXXXX]
   1 (suggested)   PTB Soft Error (loss)        [RFCXXXX]
   2 (suggested)   PTB Soft Error (no loss)     [RFCXXXX]
]]></artwork></figure></t>
      </section>
    </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 security aspects of <xref target="RFC7739"/>, including the
      algorithms for selecting fragment identification values, apply also
      to the IPv6 EFH. In particular, the source should reset its starting
      Identification value frequently (e.g., per the algorithms found in
      <xref target="RFC7739"/>) to maintain an unpredictable profile.</t>

      <t>All normative security guidance on IPv6 fragmentation found in
      <xref target="RFC8200"/> (e.g., processing of tiny first fragments,
      overlapping fragments, etc.) applies also to the fragments generated
      under the IPv6 EFH.</t>

      <t>IPsec AH <xref target="RFC4302"/> and ESP <xref target="RFC4303"/>
      define an Extended Sequence Number (ESN) that is analogous to the
      64-bit Identification specified for the IPv6 EFH option. Nodes that
      employ the IPv6 EFH can use the Identification value as a sequence
      number to improve security in the same fashion as for IPsec AH/ESP
      ESNs.</t>
    </section>

    <section anchor="ack" title="Acknowledgements">
      <t>This work was inspired by continued DTN performance studies.
      Amanda Baber, Bob Hinden, Christian Huitema, Mark Smith 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.2473"?>

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

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

      <?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.RFC.8899"?>

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

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

      <?rfc include="reference.I-D.templin-6man-omni3"?>

      <?rfc include="reference.I-D.templin-6man-aero3"?>

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

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

      <?rfc include="reference.I-D.templin-6man-parcels2"?>

      <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 title="Change Log">
      <t>&lt;&lt; RFC Editor - remove prior to publication &gt;&gt;</t>

      <t>Differences from draft version -07 to -08:<list style="symbols">
          <t>Added section on "Relation to GSO/GRO".</t>

          <t>Removed requirement citing a non-normative reference.</t>
        </list></t>

      <t>Differences from draft version -06 to -07:<list style="symbols">
          <t>Introduced ICMP PTB Soft Errors.</t>
        </list></t>

      <t>Differences from draft version -05 to -06:<list style="symbols">
          <t>Introduced ICMPv6 PTB "Probe Reply" message to support fragment
          based RFC8899 path probing.</t>

          <t>Numerous supporting revisions to Fragmentation Report message.</t>

          <t>Removed stale references.</t>
        </list></t>

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