<?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-14" 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="19" month="September" 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 intended uses. This specification
      addresses these limitations by defining both an IPv4 header option
      and an IPv6 Extended Fragment Header for Identification Extension.</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. Hosts
      and routers 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.
      Together, these extensions ensure robust reassembly integrity as
      well as packet Identification uniqueness for the Internet.</t>
    </section>

    <section anchor="term" title="Terminology">
      <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>

      <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.</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>
    </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 original design of the Internet 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 less 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 similar when IPv6 header compression is applied.</t>

      <t>In addition to enabling 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 as potential spurious transmissions. These and other
      cases also hold true even if the source frequently resets its
      starting IP ID sequence numbers to maintain an unpredictable
      profile.</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-type 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 an IPv4 source node (i.e., an original source or an IPv4
      encapsulation ingress) wishes to supply a 4-octet extended IP ID for the
      packet, it includes an IDEXT option in the IPv4 packet header options area,
      i.e., based on 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 packet/fragment to the next hop, where each
      successive IPv4 forwarding hop will direct them toward the final destination.
      If an IPv4 router on the path needs to apply network fragmentation, it copies
      the IDEXT option into each resulting fragment to provide the final destination
      with the correct reassembly context.</t> 
    </section>

    <section anchor="adv-ext" title="Advanced IPv4 ID Extension">
      <t>When an IPv4 source produces a sustained burst of IPv4 packets that
      use the same source address, destination address and protocol at extreme
      data rates (e.g., in excess of 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 or 16]]></artwork></figure></t>

      <t>The option will then include a 6, 10 or 14-octet ID Extension, with the
      most significant IP ID octets appearing in network byte order in the option-data
      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="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 original 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
      original 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="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
      to support fragmentation and reassembly.</t>
    </section>

    <section anchor="ipv4-index" title="IPv4 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>The IPv6 Fragment Header includes an 8-bit Reserved field
      that can be re-purposed to encode an 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 IPv4 ID Parcel Index extension octet:</t> 

      <t><figure anchor="indexed-id" title="IPv4 ID Parcel Index Extension Octet">
        <artwork><![CDATA[   +-+-+-+-+-+-+-+-+
   |   Index   |P|S|
   +-+-+-+-+-+-+-+-+]]></artwork>
      </figure></t>

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

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

    <section anchor="ipv6-frag" title="IPv6 Network Fragmentation">
      <t>When an IPv6 network intermediate system forwards a packet
      that includes an (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 (Extended) Fragment Header, but never to
      insert an (Extended) 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 a node forwards an IP packet that exceeds the next hop link
      MTU but for which fragmentation is forbidden, it drops the packet
      and returns a "Packet Too Big (PTB)" message to the original source
      <xref target="RFC1191"/><xref target="RFC4443"/><xref target="RFC8201"/>.
      This always results in wasted transmissions by the source and
      all intermediate systems on the path toward the node with the
      restricting link. Conversely, when a packet includes an extended
      IP ID the network will perform (further) fragmentation if necessary
      allowing the packet to reach the final 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 retransmissions and can also support significant performance
      gains through transmissions of upper layer protocol segment sizes
      that exceed the path MTU, the processes sometimes represent pain
      points that should be communicated to the original source. The
      original source should then take measures to reduce the size of
      the packets or 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. For IPv4
      packets that include an IDEXT option and IPv6 packets that
      include an extended Fragment Header, other PTB unused/Code
      values are defined as follows:</t>

      <t><list style="empty">
          <t>1 - Sent by an intermediate system (subject to rate limiting)
          when it performs fragmentation on an IP packet with an extended
          IP ID (or a UDP port, IP protocol or Ethernet type known to accept
          these messages such as OMNI). The 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 begin applying source fragmentation. This size will often
          be considerably smaller than the current EMTU_R advertised by
          the final destination.</t>

          <t>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>3 - Sent by the final 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 known to accept
          these messages such as OMNI). 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.
          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>4 - The same as for Code 3, except that the final destination
          drops the packet instead of reassembling and accepting. This
          message type represents a hard error that indicates loss. In
          one possible strategy, the final 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>5 - Parcel Report - Sent by an intermediate system or final
          destination in response to an IP parcel that triggered the event
          (see: <xref target="I-D.templin-intarea-parcels"/>).</t>

          <t>6 - Jumbo Report - Sent by an intermediate system or final
          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 an original source receives an authentic Code 1 or 2 PTB,
      it begins to perform source fragmentation 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 see a reduced dependence on network fragmentation.</t>

      <t>When an original source receives a Code 3 or 4 PTB, it reduces
      the size of the packets it sends 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 final destination which will see a
      reduced dependence on reassembly.</t>

      <t>When an original source that has no prior agreement with the final
      destination 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 original 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="require" title="Requirements">
      <t>IPv4 routers MUST forward without dropping any packets with
      IPv4 option-type TBD while copying the option during network
      fragmentation, and IPv6 routers MUST forward without dropping
      any packets with IPv6 Next Header type TBD2.</t>

      <t>IPv6 sources MUST include at most one Standard or Extended Fragment
      Header in a single packet. IPv6 intermediate systems and destination
      MUST silently drop any packets that include multiple Fragment Headers
      whether Standard or Extended.</t>

      <t>Destinations that recognize IPv4 option-type TBD MUST accommodate
      packets that include all (advanced) 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). Destinations that recognize
      extended IP IDs MUST configure a minimum EMTU_R of 65535 octets
      and SHOULD advertise the largest possible EMTU_R in PTB messages,
      but they MAY dynamically advertise a reduced EMTU_R during periods
      of congestion (see: <xref target="icmp"/>).</t> 

      <t>When a (source, destination) pair uses a UDP port number, IP
      protocol number and/or Ethernet type value for which extended IP ID
      implementation is mandatory (and for IPv4 when network fragmentation
      is disabled), the source can send fragmented packets 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 (source, destination) pairs, 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) recognize
      and correctly process extended IP IDs, it can continue to send
      fragmented or fragmentable packets no larger than the EMTU_R at
      rates within the Maximum Segment Lifetime (MSL) wraparound threshold
      for the extended IP ID length; otherwise, the source must assume 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 cannot be applied for packets larger
      than 65535 octets. IP parcels and advanced jumbos provide a means
      for efficiently packaging and shipping multiple large segments or
      truly large singleton segments in IP 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 observations somehow inspired a discipline known
      as "Path MTU Discovery" within a new community known as 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 implementation improvements, however, the
      IETF somehow forgot that IP fragmentation and reassembly are essential
      internetworking functions. This has resulted in a modern Internet where
      path MTU discovery (including its recent derivatives) provides a poor
      service especially for 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. 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.7126"?>

      <?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>Unicast destinations are assumed throughout this document, however
      the same considerations apply when 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.
      Each such path may return a Code 1/2 PTB message if it needs to perform
      (further) fragmentation, 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 must
      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 node that
      configures the address while directing the remaining fragments to
      other nodes 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>
