<?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-parcels2-17"
     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="21" month="May" year="2025"/>

    <keyword>I-D</keyword>

    <keyword>Internet-Draft</keyword>

    <abstract>
      <t>IPv6 Parcels and Advanced Jumbos (AJs) present new data packaging
      constructs for both existing Internetworking pathways and a new link
      model for the future. 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-parcels2"/> present new data packaging
      constructs for existing Internetworking pathways and a new
      link model for the future. 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 must be
      addressed to adapt IPv6 Parcels and AJs to IPv4.</t>

      <t>All aspects of IPv6 Parcels and AJs, including the use of IP
      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. The same as for IPv6,
      IPv4 parcels represent a network encapsulation for the
      multi-segment buffers managed by Generic Segment Offload (GSO)
      and Generic Receive Offload (GRO); these buffers are now known
      as "parcel buffers" or simply "parcels" which become "IP parcels"
      following encapsulation in {TCP,UDP}/IP headers. This document
      specifies the adaptations necessary to support 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-parcels2"/> including the use
      of IPv6 Hop-by-Hop (HBH) and Destination Options headers. This
      means that nodes that recognize IPv4 parcels/AJs MUST recognize
      and correctly process IP protocol 0 (HBH Option) and IP protocol
      60 (Destination Option) extension 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 probe for which the IPv4 Protocol field encodes an
      unrecognized value (such as 0 for HBH or 60 for Destination
      Options), it drops the probe and returns an ICMPv4 "Destination
      Unreachable - Protocol Unreachable" message <xref target=
      "RFC0792"/>. The source should regard any such messages as
      an advisory indication that encapsulation may be needed
      in future probes.</t>

      <t>The use of IPv6 extension headers for IPv4 is specified in
      <xref target="I-D.herbert-ipv4-eh"/>. The same as for IPv6,
      IPv4 Parcels and AJs are closely related to the AERO <xref
      target="I-D.templin-6man-aero3"/> and OMNI <xref target=
      "I-D.templin-6man-omni3"/> specifications.</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-parcels2"/> 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>
    </section>

    <section anchor="ttl-hl" title="IPv4 Time To Live (TTL)">
      <t>The IPv4 "Time To Live (TTL)" and IPv6 "Hop Limit" values
      serve similar purposes but may differ in operational practice.
      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 when it forwards a parcel/AJ/probe. While
      IPv6 requires routers to decrement the Hop Limit by exactly
      1 <xref target="RFC8200"/>, IPv4 routers are permitted by
      <xref target="RFC1812"/> to decrement TTL by values other
      than 1. This difference is of no consequence to IP parcels
      and AJs since they are primarily end-to-end services.</t>
    </section>

    <section anchor="ppl-jpl" title="IPv4 Parcel/Jumbo Payload Length">
      <t>The Parcel Payload Length field in the Parcel Payload HBH
      Option of IPv4 parcels/AJs encodes the length of the IPv4
      header plus the length of the IPv6 extension headers plus
      the length of the {TCP,UDP} header (plus options and option
      length field when present) plus the Parcel Integrity Block
      (PIB) length plus the Forward Error Correction (FEC) block
      length plus the combined lengths of all concatenated segments
      in the Parcel Buffer (PB).</t>

      <t>Therefore, the length of the IPv4 header is included for
      IPv4 whereas the header length is not included for IPv6.</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 a node performs packetization on a {TCP,UDP}/IPv4 parcel,
      it inserts a {TCP,UDP} Parcel Parameters Option the same as for
      IPv6 <xref target="I-D.templin-6man-parcels2"/>. Packetization
      of IPv4 parcels is equivalent to Generic Segment Offload (GSO).</t>

      <t>The IPv4 destination then performs restoration by gathering
      up IPv4 packets that arrive for the same Source, Destination
      and Flow Label and with Parcel Parameters including the same
      Identification. The Parcel Parameters Identification and
      Index then determine 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 {TCP,UDP} Parcel Parameters Option, it simply
      processes the packet as a singleton IPv4 packet. This would
      result in correct behavior, but with restoration disabled.
      Restoration of IPv4 parcels is equivalent to Generic
      Receive Offload (GRO).)</t>
    </section>

    <section anchor="mtu-frag" title="Parcel Probing">
      <t>When an IPv4 destination receives an intact IPv4
      packet with a parcel probe indication, it processes
      the probe and returns a Parcel Probe Reply the same
      as specified for IPv6 <xref target=
      "I-D.templin-6man-parcels2"/>.</t>

      <t>When the IPv4 source receives a packet that includes
      a Parcel Probe Reply Destination Option it matches the
      Identification value with its recently-transmitted probes.
      If there is a match, the source accepts the MTU value
      found in the Destination Option.</t>
    </section>

    <section anchor="adv-jumbos" title="Advanced Jumbos (AJs)">
       <t>All aspects of IPv4 Advanced Jumbos (AJ) are processed
       the same as for IPv6 AJs.</t>
    </section>

    <section anchor="jij-encaps" title="Jumbo-in-Jumbo Encapsulation">
       <t>Original IPv4 parcels/AJs can follow the encapsulation forwarding
       paths across successive OMNI links in the path using "jumbo-in-jumbo"
       encapsulation the same as for IPv6. The OMNI link ingress encapsulates
       each IPv4 parcel/AJ in an OMNI IPv6 header plus any outer L2
       encapsulations which may include an IPv4 header with a Parcel
       Payload HBH Option. All aspects of this "jumbo-in-jumbo"
       encapsulation are the same as for IPv6.</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"/>.</t>

      <t>The IPv6 pseudo-header is found in <xref target=
      "I-D.templin-6man-parcels2"/>, while the IPv4 pseudo-header is
      shown in <xref target="pseudo"/>. The similarities between the
      two pseudo-headers allows for maximal 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                   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |               Parcel Payload Length (4 Octets)                |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |       Segment Length          |F|I|  Digest   |P|U|   Nsegs   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     zero                       |  Next Header |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure></t>

      <t>For IPv4 parcels and AJs, the 4-octets of the Parcel Payload
      Length encode either the 4-octet value found in the Parcel
      Payload HBH Option or the 2-octet value found in the IPv4
      header when the HBH option is absent.</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>There are no IANA requirements for IPv4 Parcels
      and Advanced Jumbos.</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-parcels2"/>.</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.1812" ?>

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

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

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

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

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

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

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

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

    <section anchor="changes" title="Change Log">
      <t>&lt;&lt; RFC Editor - remove prior to publication &gt;&gt;</t>
        <t>Changes from version -17 to -17:<list style="symbols">
          <t>Updated for consistency with IPv6 Parcels/AJs.</t>
        </list></t>

        <t>Changes from version -15 to -16:<list style="symbols">
          <t>Changed suggested Code values for PTB messages in IANA considerations.</t>
        </list></t>

        <t>Changes from version -14 to -15:<list style="symbols">
          <t>Updated to match changes made in the IPv6 version.</t>
        </list></t>

        <t>Changes from version -13 to -14:<list style="symbols">
          <t>Updated to match changes made in the IPv6 version.</t>
        </list></t>

       <t>Changes from version -12 to -13:<list style="symbols">
          <t>Abbreviated Hop-by-Hop as "HBH".</t>
        </list></t>

       <t>Changes from version -11 to -12:<list style="symbols">
          <t>Tightened specification of Parcel/Jumbo Payload Length.</t>
        </list></t>

       <t>Changes from version -10 to -11:<list style="symbols">
          <t>Update version and references.</t>
        </list></t>

       <t>Changes from version -09 to -10:<list style="symbols">
          <t>Allow UDP options to appear in larger parcels and AJs based
          on a "UDP Option Length" trailer.</t>
        </list></t>

      <t>Changes from version -08 to -09:<list style="symbols">
          <t>Terminology.</t>
        </list></t>

      <t>Changes from version -07 to -08:<list style="symbols">
          <t>Add terminology and general cleanup.</t>
        </list></t>

      <t>Changes from version -06 to -07:<list style="symbols">
          <t>Removed defunct text on parcel probe responses.</t>
        </list></t>

      <t>Changes from version -05 to -06:<list style="symbols">
          <t>Moved all per-segment integrity checks into Parcel Integrity
          Block header. This allows hop-by-hop integrity checking of the
          end-to-end integrity check values.</t>
        </list></t>

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