<?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-parcels-92"
     ipr="trust200902" updates="">
  <front>
    <title abbrev="IP Parcels">IPv4 Parcels and Advanced Jumbos (AJs)</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="13" month="December" year="2023"/>

    <keyword>I-D</keyword>

    <keyword>Internet-Draft</keyword>

    <abstract>
      <t>IPv6 Parcels and Advanced Jumbos (AJs) present new data packaging
      constructs and a new link model for Internetworking. As is often the
      case, technologies developed in the IPv6 space can also be applied in
      IPv4 and vice-versa. This document presents the adaptations necessary
      to support Parcels and AJs in IPv4.</t>
    </abstract>
  </front>

  <middle>
    <section anchor="intro" title="Introduction">
      <t>IPv6 Parcels and Advanced Jumbos (AJs) <xref target=
      "I-D.templin-6man-parcels"/> present new data packaging
      constructs and a new link model for Internetworking. As is often the
      case, technologies developed in the IPv6 space <xref target="RFC8200"/>
      can also be applied in IPv4 <xref target="RFC0791"/> and vice-versa.
      This document presents the differences that need to be addressed to
      adapt IPv6 Parcels and AJs to IPv4.</t>

      <t>All aspects of IPv6 Parcels and AJs, including the use of IPv6
      extension headers and control messaging, apply also to IPv4. Only
      differences in the IP header format and some control option
      encapsulations need to be accounted for as discussed below. This
      document therefore specifies IPv4 parcels and AJs.</t>
    </section>

    <section anchor="reqs" title="Requirements">
      <t>IPv4 parcels and AJs observe all requirements established for
      IPv6 <xref target="I-D.templin-6man-parcels"/> including the use
      of IPv6 Hop-by-Hop and Destination Options headers. This means
      that nodes that recognize IPv4 parcels/AJs MUST recognize and
      correctly process IP protocol 0 (Hop-by-Hop) and IP protocol
      60 (Destination) option headers the same as for IPv6 when they
      occur in an extension header chain following the IPv4 header
      but before the upper layer payload.</t>

      <t>When an IPv4 router or destination end system processes a
      parcel or AJ for which the IPv4 Protocol field encodes an
      unrecognized value (such as 0 for Hop-by-Hop or 60 for
      Destination Options), it drops the parcel/AJ and returns
      an ICMPv4 "Destination Unreachable - Protocol Unreachable"
      message <xref target="RFC0792"/>. The source SHOULD regard
      any such messages as an advisory indication that parcels/AJs
      may not be supported along this path.</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="parcels" title="IPv4 Parcels and Advanced Jumbos (AJs)">
      <t>All aspects of <xref target="I-D.templin-6man-parcels"/> are
      imported as normative specifications for IPv4 parcels and AJs,
      with the exception of the following differences:</t>

    <section anchor="hdr-len" title="IPv4 Total Length">
      <t>The IPv6 header includes a "Payload Length" field defined
      as the: "Length of the IPv6 payload, i.e., the rest of the packet
      following this IPv6 header, in octets". The IPv4 header instead
      includes a "Total Length" field defined as: "the length of the
      datagram, measured in octets, including internet header and
      data".</t>

      <t>These differences have no bearing for parcels/AJs, for which
      both the IPv6 Payload Length and IPv4 Total Length values carry
      identical codes. The same as for IPv6, IPv4 parcels encode the
      length "L" of the first segment in Total Length, while IPv4 AJs
      encode a jumbo type value in Total Length.</t>
    </section>

    <section anchor="ttl-hl" title="IPv4 Time To Live (TTL)">
      <t>The IPv4 "Time To Live (TTL)" and IPv6 "Hop Limit" values
      are treated in exactly the same way in both protocol versions.
      In particular, the source sets the TTL/Hop Limit to an initial
      value and each router in the path to the destination decrements
      the TTL/Hop Limit by 1 when it forwards the parcel/AJ.</t>
    </section>

    <section anchor="ppl-jpl" title="IPv4 Parcel/Jumbo Payload Length">
      <t>The same as for IPv6, the Parcel Payload Length field in the
      Parcel Payload Option and the Jumbo Payload Length field in the
      Jumbo Payload Option of IPv4 parcels/AJs encode the length of
      the IPv6 extension headers plus the length of the {TCP,UDP}
      header plus the combined length of all concatenated segments
      with their per-segment headers/trailers.</t>

      <t>Therefore, the length of the IPv4 header itself is not
      included in the Parcel/Jumbo Payload Length field the same as
      for IPv6. The IPv4 header length for IPv4 parcels and AJs is
      instead calculated from the IPv4 header Internet Header Length
      (IHL) field the same as for ordinary IPv4 packets.</t>
    </section>

    <section anchor="v4addr" title="IPv4-Compatible IPv6 Addresses">
      <t>Whenever an IPv4 address needs to be coded in an IPv6 address
      field, the address is coded as an IPv4-compatible IPv6 address as
      specified in <xref target="RFC4291"/>.</t>
    </section>

    <section anchor="packetize" title="IPv4 Parcel Packetization/Restoration">
      <t>When IPv6 parcels become subject to packetization, the node
      performing packetization inserts an IPv6 Extended Fragment Header
      in each packet produced to allow the final destination to restore
      the original parcel. Since some IPv4 paths may not be able to
      forward a packet that includes an IPv6 Destination Options header
      with an Extended Fragment Header option, and since IPv4 destinations
      that do not recognize the option may be inclined to drop the packet,
      the Identification field and Parcel Index/P/S codes must be encoded
      in a different way for IPv4.</t>

      <t>For each IPv4 packet created during packetization, the node
      instead includes a single 8-octet Identification Extension
      "pseudo-option" at the end of the IPv4 header, where the first
      octet encodes option Type value '0' ("End of Option List")
      <xref target="RFC0791"/>, the next octet encodes the Index/P/S
      octet the same as for IPv6 (see: <xref target=
      "I-D.templin-6man-parcels"/>) and the final 6 octets encode
      the 6 most significant octets of the parcel Identification.
      The node then writes the 2 least significant octets of the
      parcel Identification into the IPv4 header Identification
      field and sets the Don't Fragment (DF) flag to 1.</t>

      <t>The IPv4 destination then performs restoration by gathering up
      IPv4 packets that arrive with the same upper layer 5-tuple and with
      a pseudo-option coded as above where the Identification components
      in the IPv4 header and final 6 octets of the pseudo-option both
      match the other packets. The pseudo-option Index field determines
      the ordinal position of each packet segment to be concatenated
      into the restoration buffer, i.e., the same as for IPv6. (Note:
      if the IPv4 destination does not recognize the pseudo-option
      encoding, it simply processes the packet as a singleton IPv4
      packet. This would result in correct behavior, but would fail
      to take advantage of Generic Receive Offload (GRO) benefits.)</t>
    </section>

    <section anchor="mtu-frag" title="Parcel/Jumbo Replys and MTU Reports">
      <t>When an IPv4 router or destination receives an intact
      Parcel/Jumbo probe, it can return an immediate Parcel/Jumbo Reply
      if necessary in an ICMPv6 Packet Too Big (PTB) message prepared
      the same as for IPv6 but wrapped in UDP/IPv4 encapsulation headers.
      The Reply will then traverse the IPv4 network on the reverse path
      to the source.</t>

      <t>When an IPv4 destination receives an intact Parcel/Jumbo probe,
      it should instead return an MTU Report "pseudo-option" in any IPv4
      packet to be returned to the source. For each such IPv4 packet, the
      node includes a single 12-octet option at the end of the IPv4 header
      where the first two octets encode the option Type value '0' ("End
      of Option List") <xref target="RFC0791"/>, the next 4 octets encode
      the MTU value to report to the source (i.e., the same as for IPv6)
      and the final 6 octets encode the 6 most significant octets of the
      probe Identification. The destination then writes the 2 least
      significant octets of the probe Identification into the IPv4
      header Identification field then sets the Don't Fragment (DF)
      flag to 1.</t>

      <t>When the IPv4 source receives a packet that includes an MTU
      Report pseudo-option prepared as above, it first matches the
      IPv4 header Identification field with the least-significant
      16 bits of the probe Identification. If the bits match, the
      source proceeds to match the most-significant 48 bits of the
      probe Identification with the value found in the final 6 octets
      of the pseudo-option. If these bits also match, the source then
      marks the destination as "Parcels/Jumbos supported" and records
      the MTU value found in the pseudo-option as the path MTU.</t>
    </section>

    <section anchor="integrity" title="Integrity">
      <t>To support the IPv4 parcel/AJ header checksum calculation,
      the network layer uses modified versions of the {TCP,UDP}/IPv4
      pseudo-header found in <xref target="RFC9293"/>. Note that while
      the contents of the two IP protocol version-specific pseudo-headers
      beyond the address fields are the same, the order in which the
      contents are arranged differs and must be honored according to
      the specific IP protocol version.</t>

      <t>The IPv6 pseudo-header is found in <xref target=
      "I-D.templin-6man-parcels"/>, while the IPv4 pseudo-header is
      shown in <xref target="pseudo"/>. The similarities between the two
      pseudo-headers allows for maximum reuse of widely deployed code while
      ensuring interoperability.</t>

      <t><figure anchor="pseudo"
              title="{TCP,UDP}/IPv4 Parcel/AJ Pseudo-Header Format">
        <artwork><![CDATA[   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      IPv4 Source Address                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    IPv4 Destination Address                   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      zero     |  Next Header  |        Segment Length         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Index   |P|S|            Parcel Payload Length              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure></t>

      <t>Note: The same as for IPv6, the Index/P/S and Parcel Payload
      Length fields in the IPv4 parcel pseudo-header are replaced by
      the single 4-octet Jumbo Payload Length field in the IPv4 AJ
      pseudo-header.</t>
    </section>
    </section>

    <section anchor="implement" title="Implementation Status">
      <t>An early prototype of UDP/IPv4 parcels (draft version -15) has
      been implemented relative to the linux-5.10.67 kernel and ION-DTN
      ion-open-source-4.1.0 source distributions. Patch distribution
      found at: "https://github.com/fltemplin/ip-parcels.git".</t>
    </section>

    <section anchor="iana" title="IANA Considerations">
      <t>This document does not include any IANA instructions.</t>
    </section>

    <section anchor="secure" title="Security Considerations">
      <t>Security Considerations are the same as for IPv6 as found in
      <xref target="I-D.templin-6man-parcels"/>.</t>
    </section>

    <section anchor="ack" title="Acknowledgements">
      <t>This work was inspired by ongoing AERO/OMNI/DTN investigations. The
      concepts were further motivated through discussions with colleagues.</t>

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

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

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

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

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

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

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

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

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

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

    <references title="Informative References">
    </references>

    <section anchor="changes" title="Change Log">
      <t>&lt;&lt; RFC Editor - remove prior to publication &gt;&gt;</t>

      <t>Changes from earlier versions:<list style="symbols">
          <t>Submit for review.</t>
        </list></t>
    </section>
  </back>
</rfc>
