<?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-26" ipr="trust200902" updates="6864, 8900">
  <front>
    <title abbrev="IP Identification Extension">IPv6 Extended Fragment Header for IPv4</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="1" month="December" year="2023"/>

    <keyword>I-D</keyword>

    <keyword>Internet-Draft</keyword>

    <abstract>
      <t>The Internet Protocol, version 4 (IPv4) header includes a 16-bit
      Identification field in all packets, but this length is too small to
      ensure reassembly integrity even at moderate data rates in modern
      networks. Even for Internet Protocol, version 6 (IPv6), the 32-bit
      Identification field included when a Fragment Header is present may
      be smaller than desired for some applications. This specification
      addresses these limitations by adapting the IPv6 Extended Fragment
      Header for IPv4.</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 specification adapts the
      IPv6 Extended Fragment Header <xref target="I-D.templin-6man-ipid-ext"/>
      for Identification extension and to support an alternate fragmentation
      and reassembly service for IPv4.</t>

      <t>When an IPv4 packet includes the IPv6 Extended Fragment Header,
      the Identification value and fragmentation parameters encoded in the
      IPv4 header are unused and set to 0 except for the "Don't Fragment
      (DF)" flag which is set to 1. The IPv6 Extended Fragment Header
      enables a "deep packet fragmentation" capability that supports
      Identification, fragmentation and reassembly from deep within the
      packet instead of at the IPv4 header level. This service may be
      useful for networks that engage fragmentation and reassembly at
      extreme data rates, or for cases when advanced IPv4 packet
      Identification uniqueness assurance is critical.</t>
    </section>

    <section anchor="relate" title="Relation to IPv6">
      <t>As is often the case, extensions intended for IPv6 can be applied
      in similar fashion as for IPv4 (and vice-versa). The terminology used
      and the motivation for extending the Identification field for IPv4 is
      the same as for IPv6 Identification extension as specified in <xref
      target="I-D.templin-6man-ipid-ext"/>. All normative aspects of the
      IPv6 specification that can be applied for IPv4 apply also to this
      document.</t>
    </section>

    <section anchor="idext" title="IPv6 Extended Fragment Header for IPv4">
      <t>IPv4 end systems and intermediate systems do not by default
      recognize the IP protocol numbers for IPv6 extension headers, as
      these are typically used to support IPv6 operations only. However,
      implementations of this specification are required to recognize
      IP protocol number '60' and its associated header and option
      formats as defined for the IPv6 Destination Options header
      <xref target="RFC8200"/>.</t>

      <t>Implementations of this specification MUST recognize the IPv6
      Extended Fragment Header destination option as specified in <xref
      target="I-D.templin-6man-ipid-ext"/> when it appears as the first
      option of the first IPv6 Destination Options Header. The Destination
      Options Header with Extended Fragment Header option are formatted
      as shown in <xref target="ipv6-ext-id"/>:</t>

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

   Next Header (1)       encodes the protocol number of the upper
                         layer protocol header that follows the
                         Destination Options Header for unfragmented
                         packets; otherwise, encodes "No Next Hdr".

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

   Option Type           8-bit value, the same as specified in
                         [I-D.templin-6man-ipid-ext].

   Opt Data Len          8-bit value 12.

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

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

   Fragment Offset,      the same fragmentation control fields that
   Res, M                appear in the standard IPv6 Fragment Header.

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

      <t>IPv4 sources insert an IPv6 Destination Option with an Extended
      Fragment Header immediately after the end of the IPv4 header and
      before the upper layer protocol header, e.g., TCP, UDP, etc. The
      source then increments the IPv4 Total Length by 16 octets, sets
      the IPv4 Protocol field to '60' and sets the IPv6 Destination
      Options Header Next Header (1) field to the upper layer
      protocol number.</t>

      <t>The IPv4 source then applies fragmentation if necessary the
      same as for the IPv6 fragmentation procedures specified in <xref
      target="I-D.templin-6man-ipid-ext"/>. This will produce a sequence
      of fragments each containing a copy of the IPv4 header followed
      by the Destination Options Header with IPv6 Extended Fragment
      Header option (with Fragment Offset, M and Identification set
      appropriately) followed by a fragment of the upper layer
      protocol payload.</t>

      <t>The IPv4 source then sends the fragments to the IPv4 destination
      which accepts and processes them only if it recognizes IP Protocol
      '60' as above. The destination then reassembles per the procedures
      specified in <xref target="I-D.templin-6man-ipid-ext"/>.</t>

      <t>IPv4 intermediate systems that recognize the IPv6 Destination
      Options Header in IPv4 packets may perform (further) fragmentation
      based on the Extended Fragment Header as above even if the IPv4
      Don't Fragment (DF) flag is set to '1'. IPv4 intermediate systems
      and destinations return PTB messages as necessary under the same
      conditions specified for the IPv6 Extended Fragment Header in
      <xref target="I-D.templin-6man-ipid-ext"/>.</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 an IPv6 Extended Fragment Header, however,
      the source asserts that the Identification 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 Identification for purposes
      other than fragmentation and reassembly support.</t>
    </section>

    <section anchor="comply" title="Destination Qualification">
      <t>IPv4 destinations that do not recognize the IPv6 Destination
      Options Header with Extended Fragment Header option appearing
      immediately after the IPv4 header unconditionally drop the
      packet and SHOULD return an "ICMPv4 Destination Unreachable -
      Protocol Unreachable" message per <xref target="RFC0792"/>.</t>

      <t>The source can therefore test whether a destination recognizes
      the IPv6 Destination Options Header and Extended Fragment Header
      option by occasionally sending a "probe" packet that includes them.
      If the source receives an acknowledgement, it has assurance that
      the destination implements the protocol; the source can instead
      consider receipt of an ICMPv4 Destination Unreachable - Protocol
      Unreachable as a hint that the destination does not implement
      the protocol. The source should occasionally re-probe each
      destination in case routing redirects a flow to a different
      anycast destination.</t>
    </section>

    <section anchor="icmp" title="Packet Too Big (PTB) Extensions">
      <t>When an intermediate system attempts to forward an IP packet that
      exceeds the next hop link MTU but for which fragmentation is forbidden,
      it returns an ICMPv6 "Packet Too Big (PTB)" message with Code 0 <xref
      target="RFC8201"/> or an ICMPv4 "Destination Unreachable - Fragmentation
      Needed" message <xref target="RFC1191"/> to the source and discards the
      packet. This always results in wasted transmissions for which the
      source is required to reduce the size of the packets it is sending
      and retransmit.</t>

      <t><xref target="I-D.templin-6man-ipid-ext"/> suggests that source
      and/or network fragmentation should instead be used to ensure that
      packets are delivered to the destination even if they exceed the
      path MTU. The document therefore defines new ICMPv6 PTB Code values
      to monitor and control the fragmentation and reassembly processes.</t>

      <t>Rather than define corresponding codes for ICMPv4, however, this
      document requires sources that send packets with IPv4 Identification
      Extension options to accept and take appropriate actions based on
      ICMPv6 PTB messages with one of the fragmentation/reassembly Code
      values defined in <xref target="I-D.templin-6man-ipid-ext"/>.</t>

      <t>IPv4 intermediate systems and destinations that send the ICMPv6
      PTB messages must therefore employ OMNI UDP/IPv4 encapsulation of
      ICMPv6 messages with IPv4-compatible IPv6 addresses so the messages
      can traverse IPv4 networks <xref target="I-D.templin-intarea-omni"/>.
      IPv4 sources must therefore monitor the OMNI UDP port for
      UDP/IPv4-encapsulated ICMPv6 messages.</t>
    </section>

    <section anchor="require" title="Requirements">
      <t>Intermediate systems MUST forward without dropping IPv4
      packets that include a Destination Options Header with an Extended
      Fragment Header option unless they detect a security policy threat
      through deeper inspection of the protocol data that follows.</t>

      <t>Sources MUST include at most one Extended Fragment Header in
      each IPv4 packet/fragment. Intermediate systems and destinations
      SHOULD silently drop packets/fragments with multiples. If the
      source includes an IPv6 Destination Options Header with Extended
      Fragment Header option, it must appear immediately after the
      IPv4 header.</t>

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

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

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

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

    <section anchor="iana" title="IANA Considerations">
      <t>This document has no requirements for IANA.</t>
    </section>

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

      <t>All other security aspects of the IPv6 Extended Fragment Header
      per <xref target="I-D.templin-6man-ipid-ext"/> apply also to its
      use in IPv4.</t>
    </section>

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

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

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

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

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

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

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

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

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

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

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

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

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

      <?rfc include="reference.I-D.templin-6man-ipid-ext"?>
    </references>

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