<?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-ext2-03" 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="22" month="May" year="2024"/>

    <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-ext2"/>
      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,
      a "deep packet fragmentation" capability is enabled that supports
      Identification, fragmentation and reassembly services from deep
      within the packet independently of any IPv4 header level services.
      This 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-ext2"/>. 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 0 and the IPv6 Minimum Path MTU Option formats
      as defined for the IPv6 Hop-by-Hop Options header per <xref target=
      "RFC8200"/><xref target="RFC9268"/> as well as IP protocol number
      60 and its associated header and option formats as defined for
      the IPv6 Destination Options header per <xref target="RFC8200"/>.</t>

      <t>Implementations of this specification also recognize the IPv6
      Extended Fragment Header Option as specified in <xref
      target="I-D.templin-6man-ipid-ext2"/> when it appears in an IPv6
      Destination Options Header following the IPv4 header. Requirements
      for encapsulation of extension headers in IPv4 packets are introduced
      and discussed in <xref target="I-D.herbert-ipv4-eh"/>.</t>

      <t>IPv4 sources insert an IPv6 Destination Option with an Extended
      Fragment Header in an IPv6 extension header chain that begins immediately
      after the end of the IPv4 header and ends immediately before the upper
      layer protocol header, e.g., TCP, UDP, etc. The source then increments
      the IPv4 Total Length by the length of the extension headers, and sets
      the IPv4 Protocol field to the protocol number of the first extension
      header. The source then sets the IPv6 Destination Options Header Next
      Header field to the protocol number of the next extension header or
      the upper layer protocol number if there are no further extensions.</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-ext2"/>. This will produce a sequence
      of fragments each containing a copy of the IPv4 header followed
      by any Per-Fragment headers up to and including the Destination
      Options Header with IPv6 Extended Fragment Header Option (with
      Index, 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 the IP Protocol
      value of the first extension header. The destination then reassembles
      per the procedures specified in <xref target="I-D.templin-6man-ipid-ext2"/>.</t>

      <t>IPv4 intermediate systems that recognize the IPv6 Destination
      Options Header in IPv4 packets forward packets or fragments that
      include the option if they are no larger than the next hop link
      MTU; otherwise, they drop the packet/fragment and return a PTB
      message. Destinations that recognize the option perform reassembly
      and/or return PTB messages as necessary under the same conditions
      specified for the IPv6 Extended Fragment Header in <xref target=
      "I-D.templin-6man-ipid-ext2"/>.</t>
    </section>

    <section anchor="comply" title="Destination Qualification and Path MTU">
      <t>IPv4 intermediate systems and destinations that do not
      recognize the IPv6 Destination Options Header with Extended
      Fragment Header Option appearing 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 the path up to and
      including the destination accepts the IPv6 Destination Options
      Header and Extended Fragment Header Option by occasionally sending
      "probe" packets that include them. If the source receives an
      acknowledgement, it has assurance that the destination recognizes
      the protocol and that intermediate systems at least forward the
      protocol messages without dropping; the source can instead consider
      receipt of an ICMPv4 Destination Unreachable - Protocol Unreachable
      as a hint that some node in the path rejects the protocol. The
      source should occasionally re-probe each destination in case
      routing redirects a flow to a different anycast destination.</t>

      <t>The source can also include IPv6 Minimum Path MTU Discovery
      Hop-by-Hop Options in packets/fragments sent to unicast, multicast
      or anycast destinations per <xref target="RFC9268"/>. The source
      inserts the Hop-by-Hop Options Header between the IPv4 header and
      the Destination Options header, then increments the IPv4 Total
      Length by 8 octets, sets the IPv4 Protocol field to 0 (i.e., the
      protocol number for the Hop-by-Hop Options header) and sets the
      Hop-by-Hop Options Header Next Header field to 60. If the source
      receives acknowledgements that include a {TCP,UDP} MTU/Fragmentation
      Report Option, the source should regard the reported MTU as the
      largest potential fragment size for this destination under current
      path MTU conditions noting that the actual size may be smaller
      still for some paths.</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="RFC4443"/> <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. (Note: IPv4 intermediate
      systems that recognize the IPv6 Destination Option header with Extended
      Fragment Header Option return ICMPv6 PTB messages instead of ICMPv4
      messages.</t>

      <t>IPv4 intermediate systems and destinations that send Code 0
      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-6man-omni3"/>.
      IPv4 sources that include the IPv6 Extended Fragment Header Option
      must therefore monitor the OMNI UDP port for UDP/IPv4-encapsulated
      ICMPv6 messages.</t>
    </section>

    <section anchor="require" title="Requirements">
      <t>All nodes that process an IPv4 packet with an IPv6 Destination
      Options Header with Extended Fragment Header Option observe the
      requirements found in <xref target="I-D.templin-6man-ipid-ext2"/>
      in addition to the requirements found in this section.</t>

      <t>All nodes that process an IPv6 Destination Options Header with
      Extended Fragment Header Option observe the extension header limits
      specified in <xref target="I-D.ietf-6man-eh-limits"/>.</t>

      <t>Intermediate systems that recognize IPv6 extension headers 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.</t>

      <t>Destinations that accept flows using Extended Fragment Headers
      MUST configure an EMTU_R of 65535 octets or larger.</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 or singleton segments ranging in size from very small
      to very large, but they are not eligible for fragmentation at
      any size <xref target="I-D.templin-intarea-parcels2"/>.</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-ext2"/> 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.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.8900"?>

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

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

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

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

      <?rfc include="reference.I-D.herbert-ipv4-eh"?>

      <?rfc include="reference.I-D.ietf-6man-eh-limits"?>
    </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>
