Network Working Group F. L. Templin, Ed.
Internet-Draft Boeing Research & Technology
Updates: 2675, 9268 (if approved) 12 December 2023
Intended status: Standards Track
Expires: 14 June 2024
IPv6 Parcels and Advanced Jumbos (AJs)
draft-templin-6man-parcels-00
Abstract
IPv6 packets contain a single unit of transport layer protocol data
which becomes the retransmission unit in case of loss. Transport
layer protocols including the Transmission Control Protocol (TCP) and
reliable transport protocol users of the User Datagram Protocol (UDP)
prepare data units known as segments which the network layer packages
into individual IPv6 packets each containing only a single segment.
This specification presents new packet constructs known as IPv6
Parcels and Advanced Jumbos (AJs) with different properties. Parcels
permit a single packet to include multiple segments as a "packet-of-
packets", while AJs offer significant operational advantages over
basic jumbograms for transporting singleton segments of all sizes
ranging from very small to very large. Parcels and AJs provide
essential building blocks for improved performance, efficiency and
integrity while encouraging larger Maximum Transmission Units (MTUs)
in the Internet.
Status of This Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on 14 June 2024.
Templin Expires 14 June 2024 [Page 1]
Internet-Draft IPv6 Parcels and AJs December 2023
Copyright Notice
Copyright (c) 2023 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents (https://trustee.ietf.org/
license-info) in effect on the date of publication of this document.
Please review these documents carefully, as they describe your rights
and restrictions with respect to this document. Code Components
extracted from this document must include Revised BSD License text as
described in Section 4.e of the Trust Legal Provisions and are
provided without warranty as described in the Revised BSD License.
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4
3. Requirements . . . . . . . . . . . . . . . . . . . . . . . . 8
4. Background and Motivation . . . . . . . . . . . . . . . . . . 9
5. A New Internetworking Link Service Model . . . . . . . . . . 10
6. IPv6 Parcel Formation . . . . . . . . . . . . . . . . . . . . 13
6.1. TCP Parcels . . . . . . . . . . . . . . . . . . . . . . . 15
6.2. UDP Parcels . . . . . . . . . . . . . . . . . . . . . . . 16
6.3. Calculating J and K . . . . . . . . . . . . . . . . . . . 17
7. Transmission of IPv6 Parcels . . . . . . . . . . . . . . . . 18
7.1. Packetization over Non-Parcel Links . . . . . . . . . . . 20
7.2. Parcellation over Parcel-capable Links . . . . . . . . . 22
7.3. OMNI Interface Parcellation and Reunification . . . . . . 23
7.4. Final Destination Restoration/Reunification . . . . . . . 25
7.5. Parcel/Jumbo Path Probing . . . . . . . . . . . . . . . . 26
7.6. Parcel/Jumbo Reports . . . . . . . . . . . . . . . . . . 30
8. Advanced Jumbos (AJ) . . . . . . . . . . . . . . . . . . . . 31
9. Minimal IPv6 Parcels/Advanced Jumbos . . . . . . . . . . . . 35
10. OMNI IPv6 Parcels/Advanced Jumbos . . . . . . . . . . . . . . 36
11. Integrity . . . . . . . . . . . . . . . . . . . . . . . . . . 38
12. Implementation Status . . . . . . . . . . . . . . . . . . . . 41
13. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 42
14. Security Considerations . . . . . . . . . . . . . . . . . . . 44
15. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 45
16. References . . . . . . . . . . . . . . . . . . . . . . . . . 46
16.1. Normative References . . . . . . . . . . . . . . . . . . 46
16.2. Informative References . . . . . . . . . . . . . . . . . 47
Appendix A. TCP Extensions for High Performance . . . . . . . . 50
Appendix B. Extreme L Value Implications . . . . . . . . . . . . 51
Appendix C. Additional Parcel/Jumbo Probe Considerations . . . . 52
Appendix D. Advanced Jumbo Cyclic Redundancy Check (CRC128J) . . 53
Appendix E. Change Log . . . . . . . . . . . . . . . . . . . . . 53
Templin Expires 14 June 2024 [Page 2]
Internet-Draft IPv6 Parcels and AJs December 2023
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 53
1. Introduction
IPv6 packets [RFC8200] contain a single unit of transport layer
protocol data which becomes the retransmission unit in case of loss.
Transport layer protocols such as the Transmission Control Protocol
(TCP) [RFC9293] and reliable transport protocol users of the User
Datagram Protocol (UDP) [RFC0768] (including QUIC [RFC9000], LTP
[RFC5326] and others) prepare data units known as segments which the
network layer packages into individual IPv6 packets each containing
only a single segment. This document presents a new construct known
as an "IPv6 Parcel" which permits a single packet to include multiple
segments. The parcel is essentially a "packet-of-packets" with the
full {TCP,UDP}/IPv6 headers appearing only once but with possibly
multiple segments included.
Transport layer protocol entities form parcels by preparing a data
buffer (or buffer chain) containing at most 64 consecutive transport
layer protocol segments that can be broken out into individual
packets or smaller sub-parcels as necessary. All segments except the
final one must be equal in length and no larger than 65535 octets,
while the final segment must be no larger than the others. The
transport layer protocol entity then presents the buffer(s), number
of segments and non-final segment size to the network layer. The
network layer next appends per-segment headers and trailers, merges
the segments into the parcel body, appends a single {TCP,UDP} header
and finally appends a single IPv6 header plus extensions that
identify this as a parcel and not an ordinary packet.
The network layer then forwards each parcel over consecutive parcel-
capable links in a path until they arrive at a node with a next hop
link that does not support parcels, a parcel-capable link with a size
restriction, or an ingress Overlay Multilink Network (OMNI) Interface
[I-D.templin-intarea-omni] connection to an OMNI link that spans
intermediate Internetworks. In the first case, the original source
or next hop router applies packetization to break the parcel into
individual IPv6 packets. In the second case, the node applies
network layer parcellation to form smaller sub-parcels. In the final
case, the OMNI interface applies adaptation layer parcellation to
form still smaller sub-parcels, then applies adaptation layer IPv6
encapsulation and fragmentation if necessary. The node then forwards
the resulting packets/parcels/fragments to the next hop.
Following IPv6 reassembly if necessary, an egress OMNI interface
applies adaptation layer reunification if necessary to merge multiple
sub-parcels into a minimum number of larger (sub-)parcels then
delivers them to the network layer which either processes them
Templin Expires 14 June 2024 [Page 3]
Internet-Draft IPv6 Parcels and AJs December 2023
locally or forwards them via the next hop link toward the final
destination. The final destination can then apply network layer
(parcel-based) reunification or (packet-based) restoration if
necessary to deliver a minimum number of larger (sub-)parcels to the
transport layer. Reordering, loss or corruption of individual
segments within the network is therefore possible, but most
importantly the parcels delivered to the final destination's
transport layer should be the largest practical size for best
performance, and loss or receipt of individual segments (rather than
parcel size) determines the retransmission unit.
This document further introduces an Advanced Jumbo (AJ) service that
provides essential extensions beyond the basic IPv6 jumbogram service
defined in [RFC2675]. AJs provide end systems and intermediate
systems with a more robust service when transmission of singleton
segments of all sizes ranging from very small to very large is
necessary.
The following sections discuss rationale for creating and shipping
parcels and AJs as well as actual protocol constructs and procedures
involved. Parcels and AJs provide essential building blocks for
improved performance, efficiency and integrity while encouraging
larger Maximum Transmission Units (MTUs). A new Internetworking link
service model for parcels and AJs further supports delay/disruption
tolerance especially suited for air/land/sea/space mobility
applications. These services should inspire future innovation in
applications, transport protocols, operating systems, network
equipment and data links in ways that promise to transform the
Internet architecture.
2. Terminology
The Oxford Languages dictionary defines a "parcel" as "a thing or
collection of things wrapped in paper in order to be carried or sent
by mail". Indeed, there are many examples of parcel delivery
services worldwide that provide an essential transit backbone for
efficient business and consumer transactions.
In this same spirit, an "IPv6 parcel" is simply a collection of at
most 64 transport layer protocol segments wrapped in an efficient
package for transmission and delivery as a "packet-of-packets", with
each segment including its own end-to-end integrity checks. Each
segment may be up to 65535 octets in length, and all non-final
segments must be equal in length while the final segment may be
smaller. IPv6 parcels are distinguished from ordinary packets and
various jumbogram types through the constructs specified in this
document.
Templin Expires 14 June 2024 [Page 4]
Internet-Draft IPv6 Parcels and AJs December 2023
Where the document refers to "IPv6 header length", it means only the
length of the base IPv6 header (i.e., 40 octets), while the length of
any extension headers is referred to separately as the "IPv6
extension header length". The term "IPv6 header plus extensions"
refers generically to an IPv6 header plus all included extension
headers.
The term "Advanced Jumbo (AJ)" refers to a new type of IPv6 jumbogram
modeled from the basic IPv6 jumbogram construct defined in [RFC2675].
AJs include a 32-bit Jumbo Payload Length field and a single
transport layer protocol segment the same as for basic IPv6
jumbograms, but are differentiated from parcels and other jumbogram
types by including an "Advanced Jumbo Type" value in the IPv6 Payload
Length field plus end-to-end segment integrity checks the same as for
parcels. Unlike basic IPv6 jumbograms which are always 64KB or
larger, AJs can range in size from as small as the headers plus a
minimal or even null payload to as large as 2**32 octets minus
headers.
Where the document refers to "{TCP,UDP} header length", it means the
length of either the TCP header plus options (20 or more octets) or
the UDP header (8 octets). It is important to note that only a
single IPv6 header and a single full {TCP,UDP} header appears in each
parcel regardless of the number of segments included. This
distinction often provides a significant overhead savings advantage
made possible only by parcels.
Where the document refers to checksum calculations, it means the
standard Internet checksum unless otherwise specified. The same as
for TCP [RFC9293] and UDP [RFC0768], the standard Internet checksum
is defined as (sic) "the 16-bit one's complement of the one's
complement sum of all (pseudo-)headers plus data, padded with zero
octets at the end (if necessary) to make a multiple of two octets".
A notional Internet checksum algorithm can be found in [RFC1071],
while practical implementations require detailed attention to network
byte ordering to ensure interoperability between diverse
architectures.
The term Cyclic Redundancy Check (CRC) is used consistently with its
application in widely deployed Internetworking services. Parcels use
the CRC32C [RFC3385] or CRC64E [ECMA-182] standards according to non-
final segment length "L" (see: Section 11). AJs include either a CRC
or message digest calculated according to the MD5 [RFC1321], SHA1
[RFC3174] or US Secure Hash [RFC6234] algorithms. In all cases, the
CRC or message digest is appended as a per-segment trailer arranged
for transmission in network byte order per standard Internetworking
conventions.
Templin Expires 14 June 2024 [Page 5]
Internet-Draft IPv6 Parcels and AJs December 2023
The terms "application layer (L5 and higher)", "transport layer
(L4)", "network layer (L3)", "(data) link layer (L2)" and "physical
layer (L1)" are used consistently with common Internetworking
terminology, with the understanding that reliable delivery protocol
users of UDP are considered as transport layer elements. The OMNI
specification further defines an "adaptation layer" logically
positioned below the network layer but above the link layer (which
may include physical links and Internet- or higher-layer tunnels).
The adaptation layer is not associated with a layer number itself and
is simply known as "the layer below L3 but above L2". A network
interface is a node's attachment to a link (via L2), and an OMNI
interface is therefore a node's attachment to an OMNI link (via the
adaptation layer).
The term "parcel/AJ-capable link/path" refers to paths that transit
interfaces to adaptation layer and/or link layer media (either
physical or virtual) capable of transiting {TCP,UDP}/IPv6 packets
that employ the parcel/AJ constructs specified in this document. The
source and each router in the path has a "next hop link" that
forwards parcels/AJs toward the final destination, while each router
and the final destination has a "previous hop link" that accepts en
route parcels/AJs. Each next hop link must be capable of forwarding
parcels/AJs (after first applying parcellation if necessary) with
segment lengths no larger than can transit the link. Currently only
the OMNI link satisfies these properties, while other link types that
support parcels/AJs should soon follow.
The term "5-tuple" refers to a transport layer protocol entity
identifier that includes the network layer (source address,
destination address, source port, destination port, protocol number).
The term "4-tuple" refers to a network layer parcel entity identifier
that includes the adaptation layer (source address, destination
address, Parcel ID, Identification).
The Internetworking term "Maximum Transmission Unit (MTU)" is widely
understood to mean the largest packet size that can transit a single
link ("link MTU") or an entire path ("path MTU") without requiring
network layer fragmentation. If the MTU value returned during parcel
path qualification is larger than 65535 (plus the length of the
parcel headers), it determines the maximum-sized parcel/AJ that can
transit the link/path without requiring a router to perform
packetization/parcellation. If the MTU is no larger than 65535, the
value instead determines the "Maximum Segment Size (MSS)" for the
leading portion of the path up to a router that cannot forward the
parcel further. (Note that this size may still be larger than the
MSS that can transit the remainder of the path to the final
destination, which can only be determined through explicit MSS
probing.)
Templin Expires 14 June 2024 [Page 6]
Internet-Draft IPv6 Parcels and AJs December 2023
The terms "packetization" and "restoration" refer to a network layer
process in which the original source or a router on the path breaks a
parcel out into individual IPv6 packets that can transit the
remainder of the path without loss due to a size restriction. The
final destination then restores the combined packet contents into a
parcel before delivery to the transport layer. In current practice,
packetization/restoration can be considered as functional equivalents
to the well-known Generic Segmentation/Receive Offload (GSO/GRO)
services.
The terms "parcellation" and "reunification" refer to either network
layer or adaptation layer processes in which the original source or a
router on the path breaks a parcel into smaller sub-parcels that can
transit the path without loss due to a size restriction. These sub-
parcels are then reunified into larger (sub-)parcels before delivery
to the transport layer. As a network layer process, the sub-parcels
resulting from parcellation may only be reunified at the final
destination. As an adaptation layer process, the resulting sub-
parcels may first be reunified at an adaptation layer egress node
then possibly further reunified by the network layer of the final
destination.
The terms "fragmentation" and "reassembly" follow exactly from their
definitions in the IPv6 [RFC8200] standard. In particular, OMNI
interfaces support IPv6 encapsulation and fragmentation as an
adaptation layer process that can transit packet/parcel/AJs sizes
that exceed the underlying Internetwork path MTU. OMNI interface
fragmentation/reassembly occurs at a lower layer of the protocol
stack than restoration and/or reunification and therefore provides a
complimentary service. Note that IPv6 parcels and AJs are not
eligible for direct fragmentation and reassembly at the network layer
but become eligible for adaptation layer fragmentation and reassembly
following OMNI IPv6 encapsulation.
"Automatic Extended Route Optimization (AERO)"
[I-D.templin-intarea-aero] and the "Overlay Multilink Network
Interface (OMNI)" [I-D.templin-intarea-omni] provide an adaptation
layer framework for transmission of parcels/AJs over one or more
concatenated Internetworks. AERO/OMNI will provide an operational
environment for parcels/AJs beginning from the earliest deployment
phases and extending indefinitely to accommodate continuous future
growth. As more and more parcel/AJ-capable links are enabled (e.g.,
in data centers, wireless edge networks, space-domain optical links,
etc.) AERO/OMNI will continue to provide an essential service for
Internetworking performance maximization.
Templin Expires 14 June 2024 [Page 7]
Internet-Draft IPv6 Parcels and AJs December 2023
The parcel sizing variables "J", "K", "L" and "M" are cited
extensively throughout this document. "J" denotes the number of non-
final segments included in the parcel, "K" is the length of the final
segment, "L" is the length of each non-final segment and "M" is
termed the "Parcel Payload Length".
3. Requirements
IPv6 parcels and AJs are derived from the basic jumbogram
specification found in [RFC2675], but the specifications in this
document take precedence whenever they differ from the basic
requirements. Most notably, IPv6 parcels and AJs use one of either
the IPv6 Minimum Path MTU [RFC9268] or basic IPv6 jumbogram [RFC2675]
Hop-by-Hop option. (The former is used during path probing and
initial parcel/AJ transmissions while the latter is used for more
efficient transmissions following path qualification.)
IPv6 parcels/AJs are further permitted to encode values other than 0
in the IPv6 Payload length field and they are not limited to packet
sizes that exceed 65535 octets. (Instead, parcels can be as small as
the packet headers plus a singleton segment with its integrity checks
while AJs can be as small as the headers plus a NULL payload.)
The same as for standard jumbograms, IPv6 parcels and AJs are not
eligible for direct network layer IPv6 fragmentation and reassembly
although they may become eligible for adaptation layer fragmentation
and reassembly following OMNI IPv6 encapsulation. IPv6 parcels and
AJs therefore SHOULD NOT include IPv6 (Extended) Fragment Headers,
and implementation MUST silently ignore any IPv6 (Extended) Fragment
Headers in IPv6 parcels and AJs.
For further Hop-by-Hop option considerations, see:
[I-D.ietf-6man-hbh-processing]. For IPv6 extension header limits,
see: [I-D.ietf-6man-eh-limits].
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 [RFC2119][RFC8174] when, and only when, they appear in all
capitals, as shown here.
Templin Expires 14 June 2024 [Page 8]
Internet-Draft IPv6 Parcels and AJs December 2023
4. Background and Motivation
Studies have shown that applications can improve their performance by
sending and receiving larger packets due to reduced numbers of system
calls and interrupts as well as larger atomic data copies between
kernel and user space. Larger packets also result in reduced numbers
of network device interrupts and better network utilization (e.g.,
due to header overhead reduction) in comparison with smaller packets.
A first study [QUIC] involved performance enhancement of the QUIC
protocol [RFC9000] using the linux Generic Segment/Receive Offload
(GSO/GRO) facility. GSO/GRO provides a robust service that has shown
significant performance increases based on a multi-segment transfer
capability between the operating system kernel and QUIC applications.
GSO/GRO performs (virtual) fragmentation and reassembly at the
transport layer with the transport protocol segment size limited by
the path MTU (typically 1500 octets or smaller in today's Internet).
A second study [I-D.templin-dtn-ltpfrag] showed that GSO/GRO also
improves performance for the Licklider Transmission Protocol (LTP)
[RFC5326] used for the Delay Tolerant Networking (DTN) Bundle
Protocol [RFC9171] for segments larger than the actual path MTU
through the use of OMNI interface encapsulation and fragmentation.
Historically, the NFS protocol also saw significant performance
increases using larger (single-segment) UDP datagrams even when IPv6
fragmentation is invoked, and LTP still follows this profile today.
Moreover, LTP shows this (single-segment) performance increase
profile extending to the largest possible segment size which suggests
that additional performance gains are possible using (multi-segment)
parcels or AJs that approach or even exceed 65535 octets in total
length.
TCP also benefits from larger packet sizes and efforts have
investigated TCP performance using jumbograms internally with changes
to the linux GSO/GRO facilities [BIG-TCP]. The approach proposed to
use the Jumbo Payload option internally and to allow GSO/GRO to use
buffer sizes that exceed 65535 octets, but with the understanding
that links that support jumbograms natively are not yet widely
deployed and/or enabled. Hence, parcels/AJs provide a packaging that
can be considered in the near term under current deployment
limitations.
Templin Expires 14 June 2024 [Page 9]
Internet-Draft IPv6 Parcels and AJs December 2023
A limiting consideration for sending large packets is that they are
often lost at links with MTU restrictions, and the resulting Packet
Too Big (PTB) messages [RFC4443][RFC8201] may be lost somewhere in
the return path to the original source. This path MTU "black hole"
condition can degrade performance unless robust path probing
techniques are used, however the best case performance always occurs
when loss of packets due to size restrictions is minimized.
These considerations therefore motivate a design where transport
protocols can employ segment sizes as large as 65535 octets (minus
headers) while parcels that carry multiple segments may themselves be
significantly larger. (Transport layer protocols can also use AJs to
transit even larger singleton segments.) Parcels allow the receiving
transport layer protocol entity to process multiple segments in
parallel instead of one at a time per existing practices. Parcels
therefore support improvements in performance, integrity and
efficiency for the original source, final destination and networked
path as a whole. This is true even if the network and lower layers
need to apply packetization/restoration, parcellation/reunification
and/or fragmentation/reassembly.
An analogy: when a consumer orders 50 small items from a major online
retailer, the retailer does not ship the order in 50 separate small
boxes. Instead, the retailer packs as many of the small items as
possible into one or a few larger boxes (i.e., parcels) then places
the parcels on a semi-truck or airplane. The parcels may then pass
through one or more regional distribution centers where they may be
repackaged into different parcel configurations and forwarded further
until they are finally delivered to the consumer. But most often,
the consumer will only find one or a few parcels at their doorstep
and not 50 separate small boxes. This flexible parcel delivery
service greatly reduces shipping and handling cost for all including
the retailer, regional distribution centers and finally the consumer.
5. A New Internetworking Link Service Model
The classical Internetworking link service model requires each link
in the path to apply a link-layer frame integrity check often termed
a "Frame Check Sequence (FCS)". The link near-end calculates and
appends an FCS trailer to each packet pending transmission, and the
link far-end verifies the FCS upon packet reception. If verification
fails, the link far-end unconditionally discards the packet. This
process is repeated for each link in the path so that only packets
that pass all link-layer checks are delivered to the final
destination.
Templin Expires 14 June 2024 [Page 10]
Internet-Draft IPv6 Parcels and AJs December 2023
While this link service model has contributed to the unparalleled
success of terrestrial Internetworks (including the global public
Internet), new uses in which significant delays or disruptions can
occur are not as well supported. For example, a path that contains
multiple links with higher bit error rates may be unable to pass an
acceptable percentage of packets since loss due to link errors can
occur at any hop. Moreover, packets that incur errors at an
intermediate link but somehow pass the link integrity check will be
forwarded by all remaining links in the path leaving only the final
destination's Internet checksum as a last resort integrity check.
Advanced error detection and correction services not typically
associated with packets are therefore necessary; especially with the
advent of space-domain and wireless Internetworking, long delays and
significant disruptions are often intolerant of retransmissions.
Parcels and AJs include an end-to-end Cyclic Redundancy Check (CRC)
or message digest with each segment that is calculated and inserted
by the original source and verified by the final destination. For
each IPv6 parcel or AJ admitted into a parcel/AJ-capable link, the
link near-end applies its standard link-layer FCS upon transmission
which the link far-end then verifies upon reception. Instead of
unconditionally discarding frames with link errors, however, the link
far-end delivers all parcel/AJ frames to upper layers. If a link
error was detected at any hop, the link far-end sets a "CRC error"
flag in the parcel/AJ header (see: Section 11).
Each link along the path simply discards any ordinary packets that
have incurred link errors according to current practice. For IPv6
parcels and AJs received with link errors, however, each intermediate
hop SHOULD and the final destination MUST first verify the parcel/AJ
header Checksum to protect against mis-delivery. Each intermediate
hop then unconditionally forwards the parcel/AJ to the next hop even
though it may include link errors.
IPv6 Parcel/AJ segments may therefore acquire cumulative link errors
along the path, but the parcel/AJ error bit plus per segment end-to-
end CRCs and/or Internet checksums support final destination
integrity checking. The final destination in turn delivers each
segment to the local transport layer along with an error flag that is
set if an end-to-end CRC or Internet checksum error was detected
(otherwise the flag is cleared). The error flag is then taken under
advisement by the transport layer, which should employ transport or
higher-layer integrity checks to guide corrective actions.
The ubiquitous 1500 octet link MTU had its origins in the very
earliest deployments of 10Mbps Ethernet technologies beginning in the
early 1980's, however modern wired-line link data rates of 1Gbps are
now typical for end user devices such as laptop computers while much
Templin Expires 14 June 2024 [Page 11]
Internet-Draft IPv6 Parcels and AJs December 2023
higher rates of 10Gbps, 100Gbps or even more commonly occur for data
center servers. At these data rates, the serialization delays range
from 1200usec at 10Mbps to only .12usec at 100Gbps [ETHERMTU]. This
suggests that the legacy 1500 MTU may be too small by multiple orders
of magnitude for many well-connected data centers, wide-area wired-
line networked paths or even for deep space communications over
optical links. For these cases, larger parcels and AJs present a
performance maximization vehicle that supports larger transport layer
segment sizes.
While data centers, Internetworking backbones and deep space networks
are often connected through robust fixed link services, the Internet
edge is rapidly evolving from to a much more mobile environment where
4G/5G (and beyond) cellular services and WiFi radios connect a
growing majority of end user systems. Although some wireless edge
networks and mobile ad-hoc networks support considerable data rates,
more typical rates with wireless signal disruption and link errors
suggest that limiting channel contention by configuring more
conservative MTU levels is often prudent. Even in such environments,
a mixed link model with error-tolerant data sent in parcels/AJs and
error-intolerant data sent in packets may present a more balanced
profile.
IPv6 parcels and AJs therefore provide a revolutionary advancement
for delay/disruption tolerance in air/land/sea/space mobile
Internetworking applications. As the Internet continues to evolve
from its more stable fixed terrestrial network origins to one where
more and more nodes operate in the mobile edge, this new link service
model relocates error detection and correction responsibilities from
intermediate systems to the end systems that are uniquely capable of
take corrective actions.
Note: IPv6 parcels and AJs may already be compatible with widely-
deployed link types such as 1/10/100-Gbps Ethernet. Each Ethernet
frame is identified by a preamble followed by a Start Frame Delimiter
(SFD) followed by the frame data itself followed by the FCS and
finally an Inter Packet Gap (IPG). Since no length field is
included, however, the frame can theoretically extend as long as
necessary for transmission of IPv6 parcels and AJs that are much
larger than the typical 1500 octet Ethernet MTU as long as the time
duration on the link media is properly bounded. Widely-deployed
links may therefore already include all of the necessary features to
natively support large parcels and AJs with no additional extensions,
while operating systems may need to be modified to post larger
receive buffers.
Templin Expires 14 June 2024 [Page 12]
Internet-Draft IPv6 Parcels and AJs December 2023
6. IPv6 Parcel Formation
A transport protocol entity identified by its 5-tuple forms a parcel
body by preparing a data buffer (or buffer chain) containing at most
64 transport layer protocol segments, with each TCP segment preceded
by a 4-octet Sequence Number header. Each segment plus Sequence
Number (for TCP) is further preceded by a 2-octet Internet Checksum
header and followed by a 4- or 8-octet CRC trailer. All non-final
segments MUST be equal in length while the final segment MUST NOT be
larger and MAY be smaller. The number of non-final segments is
represented as J; the total number of segments is therefore (J + 1).
The non-final segment size L is set to a 16-bit value that MUST be no
smaller than 256 octets and SHOULD be no larger than 65535 octets
minus the length of the {TCP,UDP} header (plus options), minus the
length of the IPv6 header (plus extensions), minus 2 octets for the
Checksum header minus 4 octets for the Sequence Number (for TCP)
minus 4/8 octets for the CRC trailer (see: Appendix B). The final
segment length K MUST NOT be larger than L but MAY be smaller. The
transport layer protocol entity then presents the buffer(s) and size
L to the network layer, noting that the combined buffer length(s) may
exceed 65535 octets when there are sufficient segments of a large
enough size.
If the next hop link is not parcel capable, the network layer
performs packetization to package each segment as an individual IPv6
packet as discussed in Section 7.1. If the next hop link is parcel
capable, the network layer instead completes the parcel by appending
a single full {TCP,UDP} header (plus options) and a single full IPv6
header (plus extensions). The network layer finally includes a
specially-formatted Parcel Payload option as an extension to the IPv6
header of each parcel prior to transmission over a network interface.
The Parcel Payload option format for IPv6 appears as shown in
Figure 1:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Option Type | Opt Data Len | Code | Check |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Index |P|S| Parcel Payload Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+-+-+-+- Identification -+-+-+-+
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 1: IPv6 Parcel Payload Option
Templin Expires 14 June 2024 [Page 13]
Internet-Draft IPv6 Parcels and AJs December 2023
The network layer includes the Parcel Payload option as an IPv6 Hop-
by-Hop option with Option Type set to '0x30' and Opt Data Len set to
14. The length also distinguishes this type from its use as the IPv6
Minimum Path MTU Hop-by-Hop Option [RFC9268]. The network layer then
sets the IPv6 header Payload Length field to L and sets Parcel
Payload Length to a 3-octet value M that encodes 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 Checksum
and sequence number (for TCP) headers and CRC trailers.
The network layer next sets Index to an ordinal segment "Parcel
Index" value between 0 and 63, sets the "(P)arcel" flag to 1 and sets
the "More (S)egments" flag to 1 for non-final sub-parcels or 0 for
the final (sub-)parcel. (Note that non-zero Index values identify
the initial segment index in non-first sub-parcels of a larger
original parcel while the value 0 denotes the first (sub-)parcel.)
The network layer finally includes an 8-octet Identification, then
sets Code to 255 and sets Check to the same value that will appear in
the IPv6 header Hop Limit field on transmission. These values
provide hop-by-hop assurance that previous hops correctly implement
the parcel protocol without applying legacy IPv6 option processing
per [RFC9268].
Following this transport and network layer processing, {TCP,UDP}/IPv6
parcels therefore have the structures shown in Figure 2:
Templin Expires 14 June 2024 [Page 14]
Internet-Draft IPv6 Parcels and AJs December 2023
TCP/IPv6 Parcel Structure UDP/IPv6 Parcel Structure
+------------------------------+ +------------------------------+
| | | |
~ IPv6 Hdr plus extensions ~ ~ IPv6 Hdr plus extensions ~
| | | |
+------------------------------+ +------------------------------+
| | | |
~ TCP header (plus options) ~ ~ UDP header ~
| | | |
+------------------------------+ +------------------------------+
| Checksum 0 followed by | | Checksum 0 followed by |
~ Sequence Number 0 followed ~ ~ Segment 0 (L octets) ~
~ by Segment 0 (L octets) ~ ~ followed by ~
| followed by CRC 0 | | CRC 0 |
+------------------------------+ +------------------------------+
| Checksum 1 followed by | | Checksum 1 followed by |
~ Sequence Number 1 followed ~ ~ Segment 1 (L octets) ~
~ by Segment 1 (L octets) ~ ~ followed by ~
| followed by CRC 1 | | CRC 1 |
+------------------------------+ +------------------------------+
~ ... ~ ~ ... ~
~ More Segments ~ ~ More Segments ~
~ ... ~ ~ ... ~
+------------------------------+ +------------------------------+
| Checksum J followed by | | Checksum J followed by |
~ Sequence Number J followed ~ ~ Segment J (K octets) ~
~ by Segment J (K octets) ~ ~ followed by ~
| followed by CRC J | | CRC J |
+------------------------------+ +------------------------------+
Figure 2: {TCP,UDP}/IPv6 Parcel Structure
6.1. TCP Parcels
A TCP Parcel is a arcel that includes an IPv6 header plus extensions
with a Parcel Payload option formed as shown in Section 6 with Parcel
Payload Length encoding a value no larger than 16,777,215 (2**24 - 1)
octets. The IPv6 header plus extensions is then followed by a TCP
header plus options (20 or more octets) followed by (J + 1)
consecutive segments that each include a 2-octet Internet Checksum
plus 4-octet per-segment Sequence Number header and 4/8-octet CRC
trailer. The TCP header Sequence Number is set to 0, each non-final
segment is L octets in length and the final segment is K octets in
length. The value L is encoded in the IPv6 header Payload Length
field while the overall length of the parcel is determined by the
Parcel Payload Length M.
Templin Expires 14 June 2024 [Page 15]
Internet-Draft IPv6 Parcels and AJs December 2023
The source prepares TCP Parcels in an alternative adaptation of TCP
jumbograms [RFC2675]. The source calculates a checksum of the TCP
header plus IPv6 pseudo-header only (see: Section 11). The source
then writes the exact calculated value in the TCP header Checksum
field (i.e., without converting calculated 0 values to '0xffff').
The source next calculates the Internet checksum for each segment
independently beginning with the Sequence Number header and extending
over the length of the segment, then writes the value into the
2-octet Checksum header. The source then calculates the CRC
beginning with the Checksum header and extending over both the
Sequence Number header and the length of the segment, then writes the
value into the 4/8-octet CRC trailer.
Note: The parcel TCP header Source Port, Destination Port and (per-
segment) Sequence Number fields apply to each parcel segment, while
the TCP control bits and all other fields apply only to the first
segment (i.e., "segment(0)"). Therefore, only parcel segment(0) may
be associated with control bit settings while all other segment(i)'s
must be simple data segments.
See Appendix A for additional TCP considerations. See Section 11 for
additional integrity considerations.
6.2. UDP Parcels
A UDP Parcel is an IPv6 Parcel that includes an IPv6 header plus
extensions with a Parcel Payload option formed as shown in Section 6
with Parcel Payload Length encoding a value no larger than 16,777,215
(2**24 - 1) octets. The IPv6 header plus extensions is then followed
by an 8-octet UDP header followed by (J + 1) transport layer segments
with their Checksum headers and CRCs trailers. Each segment must
begin with a transport-specific start delimiter (e.g., a segment
identifier, a sequence number, etc.) included by the transport layer
user of UDP. The length of the first segment L is encoded in the
IPv6 Payload Length field while the overall length of the parcel is
determined by the Parcel Payload Length M as above.
Templin Expires 14 June 2024 [Page 16]
Internet-Draft IPv6 Parcels and AJs December 2023
The source prepares UDP Parcels in an alternative adaptation of UDP
jumbograms [RFC2675]. The source first sets the UDP header length
field to 0, then calculates the checksum of the UDP header plus IPv6
pseudo-header (see: Section 11) and writes the exact calculated value
into the UDP header Checksum field (i.e., without converting
calculated 0 values to '0xffff'). If UDP checksums are enabled, the
source also calculates a separate checksum for each segment while
writing the values into the corresponding per-segment Checksum header
with calculated 0 values converted to '0xffff' (if UDP checksums are
disabled, the source instead writes the value 0). The source then
calculates the CRC over each segment beginning with the segment
Checksum field and writes the value into the 4/8-octet CRC trailer.
See: Section 11 for additional integrity considerations.
6.3. Calculating J and K
The parcel source unambiguously encodes the values L and M in the
corresponding header fields as specified above. The values J and K
are not encoded in header fields and must therefore be calculated by
intermediate and final destination nodes as follows:
/* L is non-final segment length (256 or greater);
M is parcel payload length;
H is length of {TCP,UDP} header plus IPv6 extensions;
T is parcel payload length minus headers;
C is combined length of per-segment headers/trailers;
integer arithmetic assumed.*/
if ((L < 256) || ((T = (M - H)) <= 0))
drop parcel;
if ((J = (T / (L + C))) > 64)
drop parcel;
if ((K = (T % (L + C))) == 0) {
J--; K = L;
} else {
if ((J > 63) || ((K -= C) <= 0))
drop parcel;
}
Figure 3: Calculating J and K
Templin Expires 14 June 2024 [Page 17]
Internet-Draft IPv6 Parcels and AJs December 2023
Note: from the above calculations, a minimal parcel is one that sets
L to at least 256 and includes at least one segment no larger than L
along with its per-segment header(s) and trailer. In addition, all
parcels set L to at most 65535 and contain at most 64 segments along
with their corresponding headers/trailers.
7. Transmission of IPv6 Parcels
When the network layer of the source assembles a {TCP,UDP}/IPv6
parcel it fully populates all IPv6 header fields including the source
address, destination address and Parcel Payload option as above. The
source also sets IPv6 Payload Length to L (between 256 and 65535) to
distinguish the parcel from other jumbogram types (see: Section 8).
The network layer of the source also maintains a randomly-
initialized 8-octet (64-bit) Identification value for each
destination. For each packet, parcel or AJ transmission, the source
sets the Identification to the current cached value for this
destination and increments the cached value by 1 (modulo 2**64) for
each successive transmission. (The source can then reset the cached
value to a new random number when necessary, e.g., to maintain an
unpredictable profile.) For each parcel transmission, the source
includes the Identification value in the IPv6 Parcel Payload Option.
The network layer of the source finally presents the parcel to an
interface for transmission to the next hop. For ordinary interface
attachments to parcel-capable links, the source simply admits each
parcel into the interface the same as for any IPv6 packet where it
may be forwarded by one or more routers over additional consecutive
parcel-capable links possibly even traversing the entire forward path
to the final destination. Note that any node in the path that does
not recognize the parcel construct may either drop it and return an
ICMP Parameter Problem message or (erroneously) attempt to forward it
as an ordinary packet.
Most importantly, each parcel-capable link in the path forwards the
parcel even if link errors were detected since all parcels/AJs
include end-to-end CRC and Checksum integrity checks. This ensures
that the vast majority of coherent data is delivered to the final
destination instead of being discarded along with a minor amount of
corrupted data at an intermediate hop. When the link far end
receives a parcel/AJ that includes link errors, it sets a "CRC error"
flag in the parcel/AJ header before forwarding to the next hop (see:
Section 11).
When the next hop link does not support parcels at all, or when the
next hop link is parcel-capable but configures an MTU that is too
small to pass the entire parcel, the source breaks the parcel up into
Templin Expires 14 June 2024 [Page 18]
Internet-Draft IPv6 Parcels and AJs December 2023
individual IPv6 packets (in the first case) or into smaller sub-
parcels (in the second case). In the first case, the source can
apply packetization using Generic Segment Offload (GSO), and the
final destination can apply restoration using Generic Receive Offload
(GRO) to deliver the largest possible parcel buffer(s) to the
transport layer. In the second case, the source can apply
parcellation to break the parcel into sub-parcels with each
containing the same Identification value and with the S flag set
appropriately. The final destination can then apply reunification to
deliver the largest possible parcel buffer(s) to the transport layer.
In all other ways, the source processes of breaking a parcel up into
individual IPv6 packets or smaller sub-parcels entail the same
considerations as for a router on the path that invokes these
processes as discussed in the following subsections.
Parcel probes that test the forward path's ability to pass parcels
set a Path MTU (PMTU field) to a non-zero value as discussed in
Section 7.5. Each router in the path then rewrites PMTU in a similar
fashion as for [RFC9268]. Specifically, each router compares the
parcel PMTU value with the next hop link MTU in the parcel path and
MUST (re)set PMTU to the minimum value. The fact that the parcel
transited a previous hop link provides sufficient evidence of forward
progress (since parcel path MTU determination is unidirectional in
the forward path only), but nodes can also include the previous hop
link MTU in their minimum PMTU calculations in case the link may have
an ingress size restriction (such as a receive buffer limitation).
Each parcel also includes one or more transport layer segments
corresponding to the 5-tuple for the flow, which may include
{TCP,UDP} segment size probes used for packetization layer path MTU
discovery [RFC4821][RFC8899]. (See: Section 7.5 for further details
on parcel path probing.)
Templin Expires 14 June 2024 [Page 19]
Internet-Draft IPv6 Parcels and AJs December 2023
When a router receives a parcel it first compares Code with 255 and
Check with the IPv6 header Hop Limit; if either value differs, the
router drops the parcel and returns a negative Jumbo Report (see:
Section 7.6) subject to rate limiting. (Note that the parcel may
also have been truncated in length by a previous-hop router that does
not recognize the construct.) For all other intact parcels, the
router next compares the value L with the next hop link MTU. If the
next hop link is parcel capable but configures an MTU too small to
admit a parcel with a single segment of length L the router returns a
positive Jumbo Report (subject to rate limiting) with MTU set to the
next hop link MTU. If the next hop link is not parcel capable and
configures an MTU too small to pass an individual IPv6 packet with a
single segment of length L the router instead returns a positive
Parcel Report (subject to rate limiting) with MTU set to the next hop
link MTU. If the next hop link is parcel capable the router MUST
reset Check to the same value that would appear in the IPv6 header
Hop Limit field upon transmission to the next hop.
If the router recognizes parcels but the next hop link in the path
does not, or if the entire parcel would exceed the next hop link MTU,
the router instead opens the parcel. The router then forwards each
enclosed segment in individual IPv6 packets or in a set of smaller
sub-parcels that each contain a subset of the original parcel's
segments. If the next hop link is via an OMNI interface, the router
instead follows OMNI Adaptation Layer procedures. These
considerations are discussed in detail in the following sections.
7.1. Packetization over Non-Parcel Links
For transmission of individual packets over links that do not support
parcels, or for transmission of (sub-)parcels larger than the next-
hop link MTU, the source or router (i.e., the node) engages GSO to
perform packetization. The node first determines whether an
individual packet with segment of length L can fit within the next
hop link/path MTU. If an individual packet would be too large (and
if source fragmentation is not an option), the node drops the parcel
and returns a positive Parcel Report message (subject to rate
limiting) with MTU set to the next hop link/path MTU and with the
leading portion of the parcel beginning with the IPv6 header as the
"packet in error". If an individual packet can be accommodated, the
node removes the Parcel Payload option and caches the per-segment
Checksum header values (and for TCP also caches the Sequence
Numbers). The node then removes the Parcel Payload option, verifies
the CRCs of each segment(i) (for i = 0 thru j) and discards any
segment(i)'s with incorrect CRCs. The node then copies the
{TCP,UDP}/IPv6 headers followed by segment (i) (i.e., while
discarding the per-segment Checksum, Sequence Number and CRC fields)
into as many as 'j' individual packets ("packet(i)"). Each such
Templin Expires 14 June 2024 [Page 20]
Internet-Draft IPv6 Parcels and AJs December 2023
packet(i) will be subject to the independent CRC verifications of
each remaining link in the path.
For each packet(i), the node then clears the TCP control bits in all
but packet(0), and includes only those TCP options that are permitted
to appear in data segments in all but packet(0) which may also
include control segment options (see: Appendix A for further
discussion). The node then sets IPv6 Payload Length for each
packet(i) based on the length of segment(i) according to [RFC8200].
For each packet(i), the node includes an IPv6 Destination Options
Header with an IPv6 Extended Fragment Header option per
[I-D.templin-6man-ipid-ext]. The Option Type sets the "act" code to
'00' so that destinations that do not recognize the option will still
process each packet(i) as a standalone singleton. In the Extended
Fragment Header, the node then sets the Identification field to the
value found in the parcel header. The node next sets the 6-bit Index
field to 'i' and interprets the 2-bit Res field as a "(P)arcel" flag
followed by a "More (S)egments" flag, i.e., the same as these fields
appear in the Parcel Payload Option in Figure 1. The node then sets
P to 1 and finally sets S to 1 for each non-final segment or 0 for
the final segment. This document therefore updates
[I-D.templin-6man-ipid-ext] by defining the above format for the IPv6
Extended Fragment Header Index/Res field for packets that set
Fragment Offset to 0.
For each TCP/IPv6 packet, the node next sets Payload Length then
calculates/sets the checksum for the packet according to [RFC9293].
For each UDP/IPv6 packet, the node instead sets the Payload Length
and UDP length fields then calculates/sets the checksum according to
[RFC0768]. The node reuses the cached checksum value for each
segment in the checksum calculation process. The node first
calculates the Internet checksum over the new packet {TCP,UDP}/IPv6
headers then adds the cached segment checksum value. For TCP, the
node finally writes the cached Sequence Number value for each segment
into the TCP Sequence Number field which initially encoded the value
0 (note that this permits the node to use the cached segment checksum
without having to recalculate). For UDP, if a per-segment Checksum
was 0 the node instead writes the value 0 in the Checksum field of
the corresponding UDP/IPv6 packet.
For each IPv6 packet, the node then sets both the Fragment Offset
field and (M)ore fragments flag to 0 and forwards each packet to the
next hop.
Note: Packets resulting from packetization may be too large to
transit the remaining path to the final destination, such that a
router may drop the packet(s) and possibly also return an ordinary
Templin Expires 14 June 2024 [Page 21]
Internet-Draft IPv6 Parcels and AJs December 2023
ICMP PTB message. Since these messages cannot be authenticated or
may be lost on the return path, the original source should take care
in setting a segment size larger than the known path MTU unless as
part of an active probing service.
7.2. Parcellation over Parcel-capable Links
For transmission of smaller sub-parcels over parcel-capable links,
the source or intermediate system (i.e., the node) first determines
whether a single segment of length L can fit within the next hop link
MTU if packaged as a (singleton) sub-parcel. If a singleton sub-
parcel would be too large, the node returns a positive Jumbo Report
message (subject to rate limiting) with MTU set to the next hop link
MTU and containing the leading portion of the parcel beginning with
the IPv6 header, then performs packetization as discussed in
Section 7.1. Otherwise, the node employs network layer parcellation
to break the original parcel into smaller groups of segments that can
traverse the path as whole (sub-)parcels. The node first determines
the number of segments of length L that can fit into each sub-parcel
under the size constraints. For example, if the node determines that
each sub-parcel can contain 3 segments of length L, it creates sub-
parcels with the first containing Segments 0-2, the second containing
3-5, the third containing 6-8, etc., and with the final containing
any remaining Segments (where each segment includes its Checksum
header and CRC trailer from the original (sub-)parcel).
If the original parcel's Parcel Payload option has S set to 0, the
node then sets S to 1 in all resulting sub-parcels except the last
(i.e., the one containing the final segment of length K, which may be
shorter than L) for which it sets S to 0. If the original parcel has
S set to 1, the node instead sets S to 1 in all resulting sub-parcels
including the last. The node next sets the Index field to the value
'i' which is the ordinal number of the first segment included in each
sub-parcel. (In the above example, the first sub-parcel sets Index
to 0, the second sets Index to 3, the third sets Index to 6, etc.).
If another router further down the path toward the final destination
forwards the sub-parcel(s) over a link that configures a smaller MTU,
the router may break it into even smaller sub-parcels each with Index
set to the ordinal number of the first segment included.
The node next appends identical {TCP,UDP}/IPv6 headers (including the
Parcel Payload option plus any other extensions) to each sub-parcel
while resetting Index, S, {Total, Payload} Length (L) and Parcel
Payload Length (M) in each as above. For TCP, the node then clears
the TCP control bits in all but the first sub-parcel and includes
only those TCP options that are permitted to appear in data segments
in all but the first sub-parcel (which may also include control
segment options). For both TCP and UDP, the node then resets the
Templin Expires 14 June 2024 [Page 22]
Internet-Draft IPv6 Parcels and AJs December 2023
{TCP,UDP} Checksum according to ordinary parcel formation procedures
(see above). The node finally sets PMTU to the next hop link MTU
then forwards each (sub-)parcel to the parcel-capable next hop.
7.3. OMNI Interface Parcellation and Reunification
For transmission of original parcels or sub-parcels over OMNI
interfaces, the node admits all parcels into the interface
unconditionally since the OMNI interface MTU is unrestricted. The
OMNI Adaptation Layer (OAL) of this First Hop Segment (FHS) OAL
source node then forwards the parcel to the next OAL hop which may be
either an intermediate node or a Last Hop Segment (LHS) OAL
destination. OMNI interface parcellation and reunification
procedures are specified in detail in the remainder of this section,
while parcel encapsulation and fragmentation procedures are specified
in [I-D.templin-intarea-omni].
When the OAL source forwards a parcel (whether generated by a local
application or forwarded over a network path that transited one or
more parcel-capable links), it first assigns a monotonically-
incrementing (modulo 64) adaptation layer Parcel ID (note that this
value differs from the (Parcel) Index encoded in the Parcel Payload
option). If the parcel is larger than the OAL maximum segment size
of 65535 octets, the OAL source next employs parcellation to break
the parcel into sub-parcels the same as for the above network layer
procedures. This includes re-setting the Index, P, S, {Total,
Payload} Length (L) and Parcel Payload Length (M) fields in each sub-
parcel the same as specified in Section 7.2.
The OAL source next assigns a different monotonically-incrementing
adaptation layer Identification value for each sub-parcel of the same
Parcel ID then performs adaptation layer encapsulation while writing
the Parcel ID into the OAL IPv6 Extended Fragment Header. The OAL
source then performs OAL fragmentation if necessary and finally
forwards each fragment to the next OAL hop toward the OAL
destination. (During encapsulation, the OAL source examines the
Parcel Payload option S flag to determine the setting for the
adaptation layer fragment header S flag according to the same rules
specified in Section 7.2.)
When the sub-parcels arrive at the OAL destination, it retains them
along with their Parcel IDs and Identifications for a short time to
support reunification with peer sub-parcels of the same original
(sub-)parcel identified by the 4-tuple information corresponding to
the OAL source. This reunification entails the concatenation of
Checksums/Segments included in sub-parcels with the same Parcel ID
and with Identification values within modulo-64 of one another to
create a larger sub-parcel possibly even as large as the entire
Templin Expires 14 June 2024 [Page 23]
Internet-Draft IPv6 Parcels and AJs December 2023
original parcel. The OAL destination concatenates the segments (plus
their checksums and CRCs) for each sub-parcel in ascending
Identification value order, while ensuring that any sub-parcel with
TCP control bits set appears as the first concatenated element in a
reunified larger parcel and any sub-parcel with S flag set to 0
appears as the final concatenation. The OAL destination then sets S
to 0 in the reunified (sub-)parcel if and only if one of its
constituent elements also had S set to 0; otherwise, it sets S to 1.
The OAL destination then appends a common {TCP,UDP}/IPv6 header plus
extensions to each reunified sub-parcel while resetting Index, S,
Payload Length (=L) and Parcel Payload Length (=M) in the
corresponding header fields of each. For TCP, if any sub-parcel has
TCP control bits set the OAL destination regards it as sub-parcel(0)
and uses its TCP header as the header of the reunified (sub-)parcel
with the TCP options including the union of the TCP options of all
reunified sub-parcels. The OAL destination then resets the
{TCP,UDP}/IPv6 header checksum. If the OAL destination is also the
final destination, it then delivers the sub-parcels to the network
layer which processes them according to the 5-tuple information
supplied by the original source. If the OAL destination is not the
final destination, it instead forwards each sub-parcel toward the
final destination the same as for an ordinary IPv6 packet.
Note: Adaptation layer parcellation over OMNI links occurs only at
the OAL source while adaptation layer reunification occurs only at
the OAL destination (intermediate OAL nodes do not engage in the
parcellation/reunification processes). The OAL destination should
retain sub-parcels in the reunification buffer only for a short time
(e.g., 1 second) or until all sub-parcels of the original parcel have
arrived. The OAL destination then delivers full and/or incomplete
reunifications to the network layer (in cases where loss and/or
delayed arrival interfere with full reunification).
Note: OMNI interface parcellation and reunification is an OAL process
based on the adaptation layer 4-tuple and not the network layer
5-tuple. This is true even if the OAL has visibility into network
layer information since some sub-parcels of the same original parcel
may be forwarded over different network paths.
Note: Some implementations may encounter difficulty in applying
adaptation layer reunification for sub-parcels that have already
incurred lower layer fragmentation and reassembly (e.g., due to
network kernel buffer structure limitations). In that case, the
adaptation layer can either linearize each sub-parcel before applying
reunification or deliver incomplete reunifications or even individual
sub-parcels to upper layers.
Templin Expires 14 June 2024 [Page 24]
Internet-Draft IPv6 Parcels and AJs December 2023
7.4. Final Destination Restoration/Reunification
When the original source or a router on the path opens a parcel and
forwards its contents as individual IPv6 packets, these packets will
arrive at the final destination which can hold them in a restoration
buffer for a short time before restoring the original parcel using
GRO. The 5-tuple information plus the Identification and Index/P/S
values included by the source during packetization (see above)
provide sufficient context for GRO restoration which practical
implementations have proven as a robust service at high data rates.
When the original source or a router on the path opens a parcel and
forwards its contents as smaller sub-parcels, these sub-parcels will
arrive at the final destination which can hold them in a
reunification buffer for a short time or until all sub-parcels have
arrived. The 5-tuple information plus the Index/P/S and
Identification values provide sufficient context for reunification.
In both the restoration and reunification cases, the final
destination concatenates segments according to ascending Index and/or
Identification numbers to preserve segment ordering even if a small
degree of reordering and/or loss may have occurred in the networked
path. When the final destination performs restoration/reunification
on TCP segments, it must include the one with any TCP flag bits set
as the first concatenation and with the TCP options including the
union of the TCP options of all concatenated packets or sub-parcels.
For both TCP and UDP, any packet or sub-parcel containing the final
segment must appear as a final concatenation.
The final destination can then present the concatenated parcel
contents to the transport layer with segments arranged in (nearly)
the same order in which they were originally transmitted. Strict
ordering is not mandatory since each segment will include a transport
layer protocol specific start delimiter with positional coordinates.
However, the Index field and/or Identification includes an ordinal
value that preserves ordering since each sub-parcel or individual
IPv6 packet contains an integral number of whole transport layer
protocol segments.
Note: Restoration and/or reunification buffer management is based on
a hold timer during which singleton packets or sub-parcels are
retained until all members of the same original parcel have arrived.
Implementations should maintain a short hold timer (e.g., 1 second)
and advance any restorations/reunifications to upper layers when the
hold timer expires even if incomplete.
Templin Expires 14 June 2024 [Page 25]
Internet-Draft IPv6 Parcels and AJs December 2023
Note: Since loss and/or reordering may occur in the network, the
final destination may receive a packet or sub-parcel with S set to 0
before all other elements of the same original parcel have arrived.
This condition does not represent an error, but in some cases may
cause the network layer to deliver sub-parcels that are smaller than
the original parcel to the transport layer. The transport layer
simply accepts any segments received from all such deliveries and
will request retransmission of any segments that were lost and/or
damaged.
Note: Restoration and/or reunification buffer congestion may indicate
that the network layer cannot sustain the service(s) at current
arrival rates. The network layer should then begin to deliver
incomplete restorations/reunifications or even individual segments to
the receive queue (e.g., a socket buffer) instead of waiting for all
segments to arrive. The network layer can manage restoration/
reunification buffers, e.g., by maintaining buffer occupancy high/low
watermarks.
Note: Some implementations may encounter difficulty in applying
network layer restoration/reunification for packets/sub-parcels that
have already incurred adaptation layer reassembly/reunification. In
that case, the network layer can either linearize each packet/sub-
parcel before applying restoration/reunification or deliver
incomplete restorations/reunifications or even individual packets/
sub-parcels to upper layers.
7.5. Parcel/Jumbo Path Probing
All parcels also serve as implicit probes and may cause either a
router in the path or the final destination to return an ordinary
ICMPv6 error [RFC4443] and/or Packet Too Big (PTB) message [RFC8201]
concerning the parcel. A router in the path or the final destination
may also return a Parcel/Jumbo Report (subject to rate limiting per
[RFC4443]) as discussed in Section 7.6.
To determine whether parcels can transit at least an initial portion
of the forward path toward the final destination, the original source
can also send parcels with a Parcel Payload option PMTU field
included and set to the next hop link MTU as an explicit Parcel
Probe. The Parcel Probe option format is shown in Figure 4, where
"Opt Data Len" is set to 18:
Templin Expires 14 June 2024 [Page 26]
Internet-Draft IPv6 Parcels and AJs December 2023
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Option Type | Opt Data Len | Code | Check |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Index |P|S| Parcel Payload Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+-+-+-+-+- Identification -+-+-+-+
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Path MTU (PMTU) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 4: IPv6 Parcel Probe Option
The parcel probe will cause the final destination or a router on the
path to return a Parcel/Jumbo Report.
A Parcel Probe can be included either in an ordinary data parcel or a
{TCP,UDP}/IPv6 parcel with destination port set to 9 (discard)
[RFC0863]. The probe must still contain a valid {TCP,UDP} parcel
header Checksum that any intermediate hops as well as the final
destination can use to detect mis-delivery, while the final
destination will process any parcel data in probes with correct
Checksums/CRCs.
If the original source receives a positive Parcel/Jumbo Report, it
marks the path as "parcels supported" and ignores any ordinary ICMP
and/or PTB messages concerning the probe. If the original source
instead receives a negative Jumbo Report or no report/reply, it marks
the path as "parcels not supported" and may regard any ordinary ICMP
and/or PTB messages concerning the probe (or its contents) as
indications of a possible path limitation.
The original source can therefore send Parcel Probes in the same
parcels used to carry real data. The probes will transit parcel-
capable links joined by routers on the forward path possibly
extending all the way to the destination. If the original source
receives a positive Parcel/Jumbo Report it can continue using parcels
after adjusting its segment size if necessary.
The original source sends Parcel Probes unidirectionally in the
forward path toward the final destination to elicit a report, since
it will often be the case that parcels/AJs are supported only in the
forward path and not in the return path. Parcel Probes may be
dropped in the forward path by any node that does not recognize
parcels, but Parcel/Jumbo Reports must be packaged to reduce the risk
of return path filtering. For this reason, the Parcel Payload
options included in Parcel Probes are always packaged as IPv6 Hop-by-
Templin Expires 14 June 2024 [Page 27]
Internet-Draft IPv6 Parcels and AJs December 2023
Hop options while Parcel/Jumbo Reports are returned as UDP/IPv6
encapsulated ICMPv6 PTB messages with a Parcel/Jumbo Report Code
value (see: IANA Considerations).
Original sources send ordinary parcels or discard parcels as explicit
Parcel Probes by setting the Parcel Payload PMTU to the (non-zero)
next hop link MTU. The source then sets Index/P/S, Parcel Payload
Length, and {Total, Payload} Length, then calculates the header
Checksum and per-segment Checksums/CRCs the same as for an ordinary
parcel. The source finally sends the Parcel Probe via the outbound
IPv6 interface.
Original sources can send Parcel Probes that include a large segment
size, but these may be dropped by a router on the path even if the
next hop link is parcel-capable. The original source may then
receive a Jumbo Report that contains only the MTU of the leading
portion of the path up to the router with the restrictive link. The
original source can instead send Parcel Probes with smaller segments
that would be likely to transit the entire forward path to the final
destination if all links are parcel-capable. For parcel-capable
paths, this may allow the original source to discover both the path
MTU and the MSS in a single message exchange instead of multiple.
According to [RFC9268], IPv6 middleboxes (i.e., routers, security
gateways, firewalls, etc.) that do not observe this specification
will either ignore the option altogether or notice that the option
length differs from its base definition and presumably ignore the
option or drop the packet. IPv6 middleboxes that observe this
specification instead MUST process the option as an implicit or
explicit Parcel Probe.
When a router that observes this specification receives a Parcel
Probe it first compares Code with 255 and Check with the IPv6 header
Hop Limit; if either value differs, the router drops the probe and
returns a negative Jumbo Report subject to rate limiting. (Note that
the Parcel Probe may also have been truncated in length by a
previous-hop router that does not recognize the construct.) For all
other intact Parcel Probes, if the next hop link is non-parcel-
capable the router compares PMTU with the next hop link MTU and
returns a positive Parcel Report subject to rate limiting with MTU
set to the minimum value. The router then applies packetization to
convert the probe into individual IPv6 packet(s) and forwards each
packet to the next hop; otherwise, it drops the probe.
If the next hop link both supports parcels and configures an MTU that
is large enough to pass the probe, the router instead compares the
probe PMTU with the next hop link MTU. The router next MUST (re)set
PMTU to the minimum value then forward the probe to the next hop (and
Templin Expires 14 June 2024 [Page 28]
Internet-Draft IPv6 Parcels and AJs December 2023
also reset Check to the same value that will appear in the IPv6
header Hop Limit upon transmission to the next hop). If the next hop
link supports parcels but configures an MTU that is too small to pass
the probe, the router then applies parcellation to break the probe
into multiple smaller sub-parcels that can transit the link. In the
process, the router sets PMTU to the minimum link MTU value in the
first sub-parcel and omits the PMTU field in all non-first sub-
parcels (and also resets Check in all sub-parcels). If the next hop
link supports parcels but configures an MTU that is too small to pass
a singleton sub-parcel of the probe, the router instead drops the
probe and returns a positive Jumbo Report subject to rate limiting
with MTU set to the next hop link MTU.
The final destination may therefore receive individual IPv6 packets
and/or (sub-)parcels including intact Parcel Probes. If the final
destination receives individual packets, it performs any necessary
integrity checks, applies restoration if possible then delivers the
(restored) parcel contents to the transport layer. If the final
destination receives a (sub-)parcel with an intact Parcel Probe, it
first compares Code with 255 and Check with the IPv6 header Hop
Limit; if either value differs, the final destination drops the probe
and returns a negative Jumbo Report. (Note that the Parcel Probe may
also have been truncated in length by a previous-hop router that does
not recognize the construct.) For all other intact Parcel Probes, if
the {TCP,UDP} port number is not 9 (discard) it applies reunification
and delivers the (reunified) parcel contents to the transport layer.
The final destination then returns a positive Jumbo Report to the
original source.
After sending Parcel Probes (or ordinary parcels) the original source
may therefore receive UDP/IPv6 encapsulated Parcel/Jumbo Reports and/
or transport layer protocol probe replies. If the source receives a
Parcel/Jumbo Report, it verifies the UDP Checksum then verifies that
the ICMPv6 Checksum is 0. If both Checksum values are correct, the
node then matches the enclosed PTB message with an original probe/
parcel by examining the ICMPv6 "packet in error" containing the
leading portion of the invoking packet. If the "packet in error"
does not match one of its previous packets, the source discards the
Parcel/Jumbo Report; otherwise, it continues to process.
If the source receives a negative Parcel/Jumbo Report (i.e., one with
MTU set to 0), it marks the path as "parcels not supported".
Otherwise, the source marks the path as "parcels supported" and also
records the MTU value as the parcel path MTU (i.e., the portion of
the path up to and including the node that returned the Parcel/Jumbo
Report). If the MTU value is 65535 (plus headers) or larger, the MTU
determines the largest whole parcel that can transit the path without
packetization/parcellation while using any segment size up to and
Templin Expires 14 June 2024 [Page 29]
Internet-Draft IPv6 Parcels and AJs December 2023
including the maximum. For Reports that include a smaller MTU, the
value represents both the largest whole parcel size and a maximum
segment size limitation. In that case, the maximum parcel size that
can transit the initial portion of the path may be larger than the
maximum segment size that can continue to transit the remaining path
to the final destination.
Note: when a source sends a parcel probe into a new path that has not
been probed previously, it should include enough padding payload so
that the overall packet length is consistent with the value found in
the IPv6 Payload Length field. This allows legacy routers on the
path that do not recognize parcels to see a length that is consistent
with the value found in the IPv6 header.
Note: the path MTU discovered through a Parcel Probe exchange can
conceivably exceed the maximum-sized parcel, since link MTUs are
represented as 32-bit values whereas the maximum-sized parcel is
limited to 24 bits. For this reason, Parcel Probes can serve the
dual purpose of also determining the maximum AJ size that can
traverse the path.
For further discussion on parcel/AJ probing alternatives, see:
Appendix C.
7.6. Parcel/Jumbo Reports
When a router or final destination returns a Parcel/Jumbo Report, it
prepares an ICMPv6 PTB message [RFC4443] with Code set to either
Parcel Report or Jumbo Report (see: IANA considerations) and with MTU
set to either the minimum MTU value for a positive report or to 0 for
a negative report. The node then writes its own IPv6 address as the
Parcel/Jumbo Report source and writes the source address of the
packet that invoked the report as the Parcel/Jumbo Report
destination. The node next copies as much of the leading portion of
the invoking parcel/AJ as possible (beginning with the IPv6 header)
into the "packet in error" field without causing the entire Parcel/
Jumbo Report (beginning with the IPv6 header) to exceed 512 octets in
length. The node then sets the Checksum field to 0 instead of
calculating and setting a true checksum since the UDP checksum (see
below) already provides an integrity check.
Since middleboxes often filter ICMPv6 messages, the node next wraps
the Parcel/Jumbo Report in UDP/IPv6 headers with the IPv6 source and
destination addresses copied from the Parcel/Jumbo Report and with
UDP port numbers set to the OMNI UDP port number
[I-D.templin-intarea-omni]. The node next calculates and sets the
UDP Checksum, then finally sends the prepared Parcel/Jumbo Report to
the original source of the probe.
Templin Expires 14 June 2024 [Page 30]
Internet-Draft IPv6 Parcels and AJs December 2023
Note: This implies that original sources that send parcels/AJs must
be capable of accepting and processing these OMNI protocol UDP
messages. A source that sends parcels/AJs must therefore implement
enough of the OMNI interface to be able to recognize and process
these messages.
8. Advanced Jumbos (AJ)
This specification introduces an IPv6 Advanced Jumbo (AJ) service as
an alternative to parcels and basic jumbograms that also includes a
path probing function based on the mechanisms specified in
Section 7.5. The function employs an Advanced Jumbo Option with the
same option Type and Length values as for the Parcel Payload option,
except that for AJs that do not require an Identification the Length
is reduced by 8 octets and the Identification is omitted (for Jumbo
probes, both the Identification and PMTU field must be included).
The Parcel Index and Parcel Payload Length fields are also replaced
by a 32-bit Jumbo Payload Length field as shown in Figure 5:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Option Type | Opt Data Len | Code | Check |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Jumbo Payload Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ ~
+~+~+~+~+~ Identification ~+~+~+~+~+
~ ~
+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+
~ Path MTU (PMTU) (Probes Only) ~
+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+
Figure 5: Advanced Jumbo/Probe Option
{TCP/UDP}/IPv6 AJs/probes are formed the same as for parcels as shown
in Figure 2 except that they include only a single segment ("Segment
0") preceded by a 2-octet Internet Checksum header and followed by an
N-octet message digest trailer. Unlike parcels, TCP AJs do not
include a separate Sequence Number header for the (single) segment
since the sequence number is coded in the TCP header the same as for
an ordinary packet.
Templin Expires 14 June 2024 [Page 31]
Internet-Draft IPv6 Parcels and AJs December 2023
AJ implementations honor the message digest algorithms specified for
MD5 [RFC1321], SHA1 [RFC3174] and the advanced US Secure Hash
Algorithms [RFC6234] as selected by an Advanced Jumbo Type value (see
below). AJs can instead employ a CRC32C/CRC64E integrity check by
selecting a Type value that selects a CRC code instead of a message
digest. (An Advanced Jumbo Type value is also reserved by IANA as a
non-functional placeholder for a nominal CRC128J algorithm, which may
be specified in future documents - see: Appendix D.)
The source includes a CRC or message digest according to an algorithm
appropriate for the segment length while considering the error
characteristics of the path. The destination verifies the digest
according to the selected algorithm and uses local knowledge to
determine whether the integrity check strength is sufficient to relax
upper layer checking. Source implementations must therefore select a
sufficiently strong integrity check to provide the destination with
adequate protection.
AJ implementations MUST support the following integrity checking
algorithms:
Type Algorithm CRC/Digest Length
---- --------- -----------------
1 CRC32C 4 octets
2 CRC64E 8 octets
3 MD5 16 octets
4 SHA1 20 octets
5 SHA-224 28 octets
6 SHA-256 32 octets
7 SHA-384 48 octets
8 SHA-512 64 octets
Figure 6: Mandatory Advanced Jumbo Algorithms
The source prepares an AJ/probe by first setting the IPv6 Payload
Length field to an Advanced Jumbo Type value taken from the above
table to distinguish this from a basic jumbogram or parcel. The
source can begin by sending a Jumbo Probe to pre-qualify the path for
AJs if necessary.
To prepare a Jumbo Probe that will trigger a Jumbo Report, the source
can set {Protocol, Next Header} to {TCP,UDP}, set the {TCP,UDP} port
to 9 (discard) and either include no octets beyond the {TCP,UDP}
header or a single discard segment of the desired probe size
immediately following the header. (The source can instead set the
{TCP,UDP} port to the port number for a current data flow in order to
receive IPv6 Jumbo Reply MTU options in return packets as discussed
in Section 7.5.) The source then sets Jumbo Payload Length to the
Templin Expires 14 June 2024 [Page 32]
Internet-Draft IPv6 Parcels and AJs December 2023
length of the {TCP,UDP} header plus the length of the segment
Checksum header and message digest trailer plus the discard segment
plus the length of the IPv6 extension headers.
The source next sets the Identification the same as for a Parcel
Probe, sets the Jumbo Probe PMTU to the next hop link MTU, then sets
Code to 255 and Check to the next hop TTL/Hop Limit. The source then
calculates the {TCP,UDP} Checksum based on the same pseudo header as
for an ordinary parcel (see: Figure 9) but with the Parcel Index and
Payload Length fields replaced with a 32-bit Jumbo Payload Length
field and with the Segment Length replaced with one of the supported
Advanced Jumbo Type values. The source then calculates the checksum
of the segment payload, writes the value into the segment Checksum
header, then calculates the CRC or message digest over the length of
the (single) segment beginning with the Checksum field and writes the
value into the trailer. The source then sends the Jumbo Probe via
the next hop link toward the final destination.
At each forwarding hop, the router examines Code and Check then drops
the Jumbo Probe and returns a negative Jumbo Report if either value
is incorrect. (Note that the Jumbo Probe may also have been
truncated in length by a previous-hop router that does not recognize
the construct.) For all other intact probes, if the next hop link is
jumbo-capable the router compares PMTU to the next hop link MTU,
resets PMTU to the minimum value, sets Check to the next hop TTL/Hop
Limit then forwards the probe to the next hop. If the next hop link
is not jumbo-capable, the router instead drops the probe and returns
a negative Jumbo Report.
If the Jumbo Probe encounters an OMNI link, the OAL source can either
drop the probe and return a negative Jumbo Report or set PMTU to the
minimum of itself and 65535 octets then forward the probe further
toward the OAL destination using adaptation layer encapsulation/
fragmentation. If the OAL source already knows a larger-sized OAL
path MTU for this OAL destination, it can encapsulate and forward the
Jumbo Probe with PMTU set to the minimum of itself and the known
value (minus the adaptation layer header size), and without adding
any padding octets.
If the Jumbo Probe PMTU is larger than 65535 and the OAL path MTU is
unknown, the OAL source can instead encapsulate the Jumbo Probe in an
adaptation layer IPv6 header with an Advanced Jumbo option and with
padding octets added beyond the end of the encapsulated Jumbo Probe
to form an adaptation layer jumbogram as large as the minimum of PMTU
and (2**24 - 1) octets (minus the adaptation layer header size) as a
form of "jumbo-in-jumbo" encapsulation.
Templin Expires 14 June 2024 [Page 33]
Internet-Draft IPv6 Parcels and AJs December 2023
The OAL source then writes this size into the Jumbo Probe PMTU field
and forwards the newly-created adaptation layer jumbogram toward the
OAL destination. If the jumbogram somehow transits the path, the OAL
destination then removes the adaptation layer encapsulation, discards
the padding, then forwards the Jumbo Probe onward toward the final
destination (with each hop reducing PMTU if necessary).
When a router on the path forwards a Jumbo Probe, it drops and
returns a Jumbo Report if the next hop MTU is insufficient;
otherwise, it forwards to the next hop toward the final destination.
When the final destination receives the Jumbo Probe, it returns a
Jumbo Report with the PMTU set to the maximum-sized jumbo that can
transit the path.
After successfully probing the path, the original source can begin
sending AJs by setting the IPv6 Payload Length field to one of the
supported Advanced Jumbo Type values, omitting the PMTU field and
calculating the (TCP,UDP}/IPv6 header checksum and per-segment
Checksum header and CRC or message digest trailer the same as
described for probes above. When the network layer of the final
destination receives an AJ, it first verifies the integrity checks
then delivers the data (along with a CRC/Checksum error flag) to the
transport layer without returning a Jumbo Report. The source can
continue to send AJs into the path with the possibility that the path
may change. In that case, a router in the network may return an ICMP
error, an ICMPv6 PTB, or a Jumbo Report if the path MTU decreases.
Note: when a source sends a jumbo probe into a new path that has not
been probed previously, it should include enough padding payload so
that the overall packet length is consistent with the value found in
the IPv6 Payload Length field. This allows legacy routers on the
path that do not recognize jumbos to see a length that is consistent
with the value found in the IPv6 header.
Note: If an OAL source can in some way determine that a very large
packet is likely to transit the OAL path, it can encapsulate a Jumbo
Probe to form an adaptation layer jumbogram even larger than (2**24 -
1) octets with the understanding that the time required to transit
the path plus the receive buffer size determine acceptable sizes.
Note: The Jumbo Report message types returned in response to both
Parcel and Jumbo Probes are one and the same, and signify that both
parcels and AJs at least as large as the reported MTU can transit the
path. However, only a Parcel Probe (i.e., and not a Jumbo Probe) may
elicit a Parcel Report. This may indicate a preference to use Parcel
Probes instead of Jumbo Probes for general-purpose path probing.
Templin Expires 14 June 2024 [Page 34]
Internet-Draft IPv6 Parcels and AJs December 2023
Note: unlike basic jumbograms, AJs may encode a Jumbo Payload Length
value smaller than 65536. This means that AJs can range in size from
as small as the headers plus a minimal or even null payload to as
large as 2**32 octets minus headers. This allows smaller AJs to
operate within the traditional realms of ordinary packets or
singleton parcels, according to the new link service model.
Note: When the source has assurance that the path will pass AJs
smaller than the measured path MTU, it can suspend explicit
transmission of the Identification values for these smaller AJs to
reduce overhead. However, each packet/parcel/AJ transmission still
increments the source's internal Identification counter whether or
not the current Identification value explicitly transmitted.
9. Minimal IPv6 Parcels/Advanced Jumbos
The basic IPv6 parcel/AJ constructs specified in the previous
sections use the IPv6 Minimum Path MTU Hop-by-Hop option [RFC9268]
initially to allow each hop to participate in path qualification.
Once a path has been qualified to accept the basic constructs,
however, the source can begin sending minimal IPv6 parcels/AJs that
instead use the IPv6 Jumbo Payload Hop-by-Hop Option [RFC2675] to
benefit from a per parcel/AJ overhead savings as shown in Figure 7:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Option Type | Opt Data Len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Option Data (first four octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ ~
+~+~+~+~+~ Identification ~+~+~+~+~+
~ ~
+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+~+
Figure 7: IPv6 Minimal Parcel/Jumbo Option Format
In this format, the network layer includes the IPv6 minimal Parcel/
Jumbo Option as an IPv6 Hop-by-Hop option with Option Type set to
'0xC2' and Opt Data Len set to 4 or 12 depending on whether an
identification is included (see: Section 8). For parcels, the first
four octets of the Option Data are formatted exactly as shown in
Figure 1 while for AJs the first four octets are exactly as shown in
Figure 5. The network layer prepares all other aspects of IPv6
minimal parcels/AJs exactly the same as for the basic specifications
found in previous sections except the option type/length are
different and the Code/Check fields are omitted.
Templin Expires 14 June 2024 [Page 35]
Internet-Draft IPv6 Parcels and AJs December 2023
This implies that implementations that honor the basic IPv6 parcel/AJ
formats and processing specified in the previous sections MUST also
honor the IPv6 Minimal Parcel/Jumbo Option format specified above as
an equivalent construct. Therefore, the Parcel/Jumbo probe results
received for the basic formats also serve as probe results for the
minimal format.
Since the minimal format does not include Code and Check fields,
intermediate and end systems must monitor the lengths of minimal
parcels/AJs they receive in case the path changes and a previous hop
begins truncating them. In that case, the node MUST drop the parcel/
AJ and return a negative Jumbo Report to the source which must then
re-initiate parcel/jumbo path probing.
10. OMNI IPv6 Parcels/Advanced Jumbos
Network intermediate systems often drop packets that contain
unrecognized IPv6 extension headers unconditionally. This presents
an obstacle to deploying new Internet extensions. Rather than wait
for network systems to catch up, the source could instead employ an
alternative more likely to provide service by concealing IPv6
extension headers within the body of a protocol data unit such as
UDP.
End systems and intermediate systems that recognize the OMNI protocol
[I-D.templin-intarea-omni] can use the parcel, AJ and minimal parcel/
jumbo formats specified in this document as native protocol extension
headers coded within the body of the OMNI protocol data unit.
The section titled "OMNI L2 Extension Header Encapsulation" in
[I-D.templin-intarea-omni] depicts protocol layering for
encapsulation of IPv6 Extension Headers in IPv6 packets as shown in
Figure 8:
Templin Expires 14 June 2024 [Page 36]
Internet-Draft IPv6 Parcels and AJs December 2023
+---------------------------+
| L2 IPv6/Ethernet Header |
+---------------------------+
| L2 UDP Header (port 8060) |
+---------------------------+
~ L2 IPv6 Extension Headers ~
+---------------------------+
| OAL IPv6 Encapsulation |
+---------------------------+
~ OAL IPv6 Extensions ~
+---------------------------+
| |
~ ~
~ Original IPv6 Packet ~
~ ~
| |
+---------------------------+
Figure 8: OMNI IPv6 Parcels/Advanced Jumbos
In this encapsulation format, the IPv6 parcel, AJ and minimal parcel/
jumbo extension headers specified in previous sections as well as the
IPv6 Extended Fragment Header appear as IPv6 Extension Headers
following the OMNI protocol UDP, IPv6 or Ethernet header. The OMNI
protocol requires each node to honor and implement the parcel/AJ
constructs specified in this document with reference to
[I-D.templin-intarea-omni]. This includes the setting of the IPv6
Payload Length fields as well as the settings of the parcel/AJ
options themselves.
Intermediate systems that do not recognize the OMNI protocol are
likely to drop any OMNI packets that include parcel/AJ options, but
they may instead forward the packet without updating the Code/Check
values and/or while truncating the overall packet length.
Intermediate systems and end systems that recognize OMNI therefore
perform the checks specified in this document to determine whether
previous path hops correctly process parcels/AJs.
Since parcel/AJ options are coded within the OMNI protocol data unit
itself instead of as an IPv6 header extension, network intermediate
systems must also reset the OMNI protocol checksum if necessary when
they alter the contents of an option (such as when resetting Path MTU
or Check). For this reason, sources MAY disable the OMNI protocol
checksum in path probes and SHOULD advance to using minimal parcels/
AJs soon after probing the path to minimize intermediate system
checksum interactions.
Templin Expires 14 June 2024 [Page 37]
Internet-Draft IPv6 Parcels and AJs December 2023
See: [I-D.templin-intarea-omni] for the full specification of OMNI L2
Extension Header encapsulation and processing. All parcel/AJ
implementations that recognize the OMNI protocol are required to
implement those portions of the OMNI specification.
Note: OMNI-encapsulated parcels/AJs appear as ordinary IP packets to
lower layers where they are subject to the legacy link model in which
errored frames are dropped and not forwarded to the next hop. The
new link model is therefore engaged only for "native"
(unencapsulated) parcels/AJs.
11. Integrity
IPv6 parcel/AJ integrity assurance responsibility is shared between
lower layers of the protocol stack and the transport layer where more
discrete compensations for lost or corrupted data recovery can be
applied. In particular, intermediate system lower layers forward
parcels/AJs with correct headers to the final destination transport
layer even if cumulative link errors were incurred at intermediate
hops. The destination is then responsible for its own integrity
assurance.
The {TCP,UDP}/IPv6 header plus each segment of a (multi-segment)
parcel or AJ includes its own integrity checks. This means that
parcels/AJs offer stronger and more discrete integrity checks for the
same amount of transport layer protocol data compared to an ordinary
IPv6 packet or jumbogram. The {TCP,UDP} Checksum header integrity
check SHOULD be verified at each hop for which a link error is
encountered to ensure that parcels/AJs with errored addressing
information are detected. The per-segment Checksums and CRCs are set
by the source and verified by the destination. Note that each
segment includes both checks since there will be many instances when
errors missed by the CRC are detected by the Checksum [STONE].
IPv6 parcels can range in length from as small as only the
{TCP,UDP}/IPv6 headers plus a single segment to as large as the
headers plus (64 * 65535) octets, while AJs include only a single
segment that can be as small as the headers plus a small or even null
segment to as large as 2**32 octets (minus headers). Due to
parcellation/packetization in the path, the segment contents of a
received parcel may arrive in an incomplete and/or rearranged order
with respect to their original packaging.
IPv6 parcels and AJs include a separate 2-octet Internet Checksum
header for each segment. The original source calculates the checksum
for each segment beginning with the first octet of the per-segment
Sequence Number (for TCP) then continuing with the first segment
octet (noting that per-segment Checksum values of 0 indicate that the
Templin Expires 14 June 2024 [Page 38]
Internet-Draft IPv6 Parcels and AJs December 2023
segment checksum is disabled). The source extends the checksum
calculation over the entire length of the segment but does not extend
the calculation into the trailing CRC field.
IPv6 parcels employ two different CRC types according to the non-
final segment length "L". For values of L smaller than 9216 octets
(9KB), the original source uses the CRC32C specification [RFC3385]
and encodes the CRC in a 4 octet trailer. For larger L values, the
source uses the CRC64E specification [ECMA-182] and encodes the CRC
in an 8 octet trailer. For AJs, the source instead includes either a
4/8 octet CRC or an N-octet message digest trailer calculated per
[RFC1321], [RFC3174] or [RFC6234] where N is determined according to
the hash algorithm assigned to the Advanced Jumbo Type (see: IANA
Considerations).
When link errors are detected, the network layer of the link far end
SHOULD verify the parcel/AJ {TCP,UDP}/IPv6 header Checksum at its
layer, since an errored header could result in mis-delivery. If the
network layer of the link far end detects an incorrect {TCP,UDP}/IP
header Checksum it should discard the entire parcel/AJ unless the
header(s) can somehow first be repaired. If the {TCP,UDP}/IPv6
header Checksum was correct, but the link far end detected CRC
errors, the network layer sets a "CRC error" flag in the parcel/AJ
option.
The CRC error flag entails clearing/setting the IPv6 Hop-by-Hop
Option Type third-highest-order bit as "0 - Option does not change en
route or "1 - Option Data may change en route" or [RFC8200].
Therefore, nodes must recognize the Option Type '0x10' as "IPv6
Parcel/AJ with errors' and Option Type '0xE2' as "Minimal IPv6
Parcel/AJ with errors" (see: IANA Considerations).
To support the parcel/AJ header checksum calculation, the network
layer uses a modified version of the {TCP,UDP}/IPv6 pseudo-header
found in Section 8.1 of [RFC8200] as shown in Figure 9. This allows
for maximum reuse of widely deployed code while ensuring
interoperability.
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ IPv6 Source Address ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ IPv6 Destination Address ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Index |P|S| Parcel Payload Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Segment Length | zero | Next Header |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Templin Expires 14 June 2024 [Page 39]
Internet-Draft IPv6 Parcels and AJs December 2023
Figure 9: {TCP,UDP}/IPv6 Parcel/AJ Pseudo-Header Formats
where the following fields appear:
* Source Address is the 16-octet IPv6 source address of the prepared
parcel/AJ.
* Destination Address is the 16-octet IPv6 destination address of
the prepared parcel/AJ.
* For parcels, Index/P/S is the combined 1-octet field and Parcel
Payload Length is the 3-octet field that appear in the Parcel
Payload Option fields of the same name. For AJs, these two fields
are replaced by a single 4-octet Jumbo Payload Length field.
* Segment Length is the value that appears in the IPv6 Payload
Length field of the prepared parcel/AJ.
* zero encodes the constant value 0.
* Next Header is the IP protocol number corresponding to the
transport layer protocol, i.e., TCP or UDP.
When the transport layer protocol entity of the source delivers a
parcel body to the network layer, it presents the values L and J
along with the (J + 1) segments in canonical order as a list of data
buffers and with each TCP segment preceded by a 4-octet Sequence
Number field. (For AJs, the transport layer instead delivers the
singleton AJ segment along with the Jumbo Payload Length.) When the
network layer of the source accepts the parcel/AJ body from the
transport layer protocol entity, it calculates the Internet checksum
for each segment and writes the value in the per-segment Checksum
header (or writes the value 0 when UDP checksums are disabled). The
network layer then calculates the CRC/message digest for each segment
beginning with the Checksum field, inserts the result as a segment
trailer in network byte order, then concatenates all segments and
appends the necessary {TCP,UDP}/IPv6 headers and extensions to form a
parcel. The network layer then calculates the {TCP,UDP}/IPv6 header
checksum over the length of only the {TCP,UDP} headers plus IPv6
pseudo header then forwards the parcel to the next hop without
further processing.
When the network layer of the destination accepts an AJ or reunifies
a parcel from one or more sub-parcels received from the source it
first verifies the {TCP,UDP}/IPv6 header checksum then verifies first
the CRC/digest and next the Checksum (except when UDP checksums are
disabled) for each segment and marks any with incorrect integrity
check values as errors. When the network layer restores a parcel
Templin Expires 14 June 2024 [Page 40]
Internet-Draft IPv6 Parcels and AJs December 2023
from one or more individual {TCP,UDP}/IPv6 packets received from the
source, it instead marks the CRCs of each segment as correct since
the individual packets were subject to CRC checks at each hop along
the path. The network layer then verifies the Internet checksum of
each individual packet (except when UDP checksums are disabled),
restores the parcel, and delivers each parcel/AJ segment along with a
CRC/Checksum error flag to the transport layer.
When the transport layer of the destination processes parcel or AJ
segments, it can accept any with correct CRCs and Checksums while
optionally applying additional higher-layer integrity checks. The
transport layer can instead process any segments with incorrect CRC/
Checksum by either discarding the entire segment or applying higher-
layer integrity checks on the component elements of the segment to
accept as many non-errored elements as possible. The transport layer
can then either reconstruct from local information or request
retransmission for any segment elements that may have been damaged in
transit as necessary.
Note: when the destination network layer receives a parcel with an
IPv6 Option Type with third-highest-order bit set to indicate that a
link CRC error was detected, it still engages its per-segment CRC and
Checksum tests to accept as many error-free segments as possible.
When the destination receives an AJ with a CRC error setting, it need
not engage its (single segment) integrity checks since the segment is
already known to include link errors.
Note: when the destination network layer detects a per-segment CRC
error, it immediately posts the segment plus an error code for
delivery to the transport instead of continuing to verify the segment
Checksum. Performing a second integrity check on a segment already
determined to contain errors by a first check would serve no useful
purpose.
Note: the source and destination network layers can often engage
hardware functions to greatly improve CRC/Checksum calculation
performance.
12. Implementation Status
Common widely-deployed implementations include services such as TCP
Segmentation Offload (TSO) and Generic Segmentation/Receive Offload
(GSO/GRO). These services support a robust service that has been
shown to improve performance in many instances.
Templin Expires 14 June 2024 [Page 41]
Internet-Draft IPv6 Parcels and AJs December 2023
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".
Performance analysis with a single-threaded receiver has shown that
including increasing numbers of segments in a single parcel produces
measurable performance gains over fewer numbers of segments due to
more efficient packaging and reduced system calls/interrupts. For
example, sending parcels with 30 2000-octet segments shows a 48%
performance increase in comparison with ordinary packets with a
single 2000-octet segment.
Since performance is strongly bounded by single-segment receiver
processing time (with larger segments producing dramatic performance
increases), it is expected that parcels with increasing numbers of
segments will provide a performance multiplier on multi-threaded
receivers in parallel processing environments.
13. IANA Considerations
The IANA is instructed to add a reference to this document
([RFCXXXX]) in the "Minimum Path MTU Hop-by-Hop Option" entry in the
"Destination Options and Hop-by-Hop Options" table of the
'ipv6-parameters' registry.
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 entries should appear as follows:
Code Name Reference
--- ---- ---------
1 (suggested) Parcel Report [RFCXXXX]
2 (suggested) Jumbo Report [RFCXXXX]
Figure 10: ICMPv6 Code Fields: Type 2 - Packet Too Big Values
The IANA is requested to assign two new entries in the
'ipv6-parameters' registry "Destination Options and Hop-by-Hop
Options" table (registration procedures IESG Approval, IETF Review or
Standards Action). The first entry sets "Hex Value" to '0xE2',
"acct" to '11', "chg" to '1', "rest" to '00010' and Description to
"Minimal Parcel/AJ With Errors". The second entry sets "Hex Value"
to '0x10', "acct" to '00', "chg" to '1', "rest" to '10000' and
Description to "Parcel/AJ With Errors". Both entries set "Reference"
to this document [RFCXXXX].
Templin Expires 14 June 2024 [Page 42]
Internet-Draft IPv6 Parcels and AJs December 2023
The IANA is instructed to create and maintain a new registry titled
"IPv6 Parcel and Advanced Jumbo Formats and Types".
For IPv6 parcels and Advanced Jumbos, the value in the 'Opt Data Len'
field of the IPv6 Minimum Path MTU Hop-by-Hop Option [RFC9268] serves
as an "Option Format" code that distinguishes the various IPv6 option
formats specified in this document. Initial values are given below:
Value Option Format Reference
----- ------------- ---------
4 IPv6 Minimum Path MTU [RFC9268]
6 Advanced Jumbo (no ID) [RFCXXXX]
14 Parcel/Advanced Jumbo [RFCXXXX]
18 Parcel/Advanced Jumbo Probe [RFCXXXX]
0-3 Unassigned [RFCXXXX]
5 Unassigned [RFCXXXX]
7-13 Unassigned [RFCXXXX]
15-17 Unassigned [RFCXXXX]
19-253 Unassigned [RFCXXXX]
254 Reserved for Experimentation [RFCXXXX]
255 Reserved by IANA [RFCXXXX]
Figure 11: IPv6 Parcel/Jumbo Option Formats
For minimal IPv6 parcels and Advanced Jumbos, the value in the 'Opt
Data Len' field of the IPv6 Jumbo Payload Hop-by-Hop Option [RFC2675]
serves as an "Option Format" code that distinguishes the minimal
formats specified in this document. Initial values are given below:
Value Option Format Reference
----- ------------- ---------
4 Minimal Jumbo/AJ (no ID) [RFC2675]
12 Minimal Parcel/AJ (with ID) [RFCXXXX]
0-3 Unassigned [RFCXXXX]
5-11 Unassigned [RFCXXXX]
13-253 Unassigned [RFCXXXX]
254 Reserved for Experimentation [RFCXXXX]
255 Reserved by IANA [RFCXXXX]
Figure 12: IPv6 Minimal Parcel/Jumbo Option Formats
For all IPv6 Parcels/Advanced Jumbos and their corresponding probes,
the IPv6 Payload Length field encodes an "Advanced Jumbo Type" value
instead of an ordinary total/payload length. Initial values are
given below:
Templin Expires 14 June 2024 [Page 43]
Internet-Draft IPv6 Parcels and AJs December 2023
Value Jumbo Type Reference
----- ---------- ---------
0 Basic Jumbogram (IPv6 only) [RFC2675]
1 Advanced Jumbo / CRC32C [RFCXXXX]
2 Advanced Jumbo / CRC64E [RFCXXXX]
3 Advanced Jumbo / MD5 [RFCXXXX]
4 Advanced Jumbo / SHA1 [RFCXXXX]
5 Advanced Jumbo / SHA-224 [RFCXXXX]
6 Advanced Jumbo / SHA-256 [RFCXXXX]
7 Advanced Jumbo / SHA-384 [RFCXXXX]
8 Advanced Jumbo / SHA-512 [RFCXXXX]
9 Advanced Jumbo / CRC128J [RFCXXXX]
10-253 Unassigned [RFCXXXX]
254 Reserved for Experimentation [RFCXXXX]
255 Reserved by IANA [RFCXXXX]
256-9216 IPv6 Parcel / CRC32C [RFCXXXX]
9217-65535 IPv6 Parcel / CRC64E [RFCXXXX]
Figure 13: IPv6 Advanced Jumbo Types
14. Security Considerations
In the control plane, original sources match the Identification (and/
or other identifying information) received in Parcel/Jumbo Reports
with their corresponding parcels/AJs. If the identifying information
matches, the report is likely authentic. When stronger
authentication is needed, nodes that send Parcel and/or Jumbo Reports
can apply the message authentication services specified for AERO/
OMNI.
In the data plane, multi-layer security solutions may be needed to
ensure confidentiality, integrity and availability. Since parcels
and AJs are defined only for TCP and UDP, IPsec-AH/ESP [RFC4301]
cannot be applied in transport mode although they can certainly be
used in tunnel mode at lower layers such as for transmission of
parcels/AJs over OMNI link secured spanning trees, VPNs, etc. Since
the network layer does not manipulate transport layer segments,
parcels/AJs do not interfere with transport or higher-layer security
services such as (D)TLS/SSL [RFC8446] which may provide greater
flexibility in some environments.
Templin Expires 14 June 2024 [Page 44]
Internet-Draft IPv6 Parcels and AJs December 2023
IPv4 fragment reassembly is known to be dangerous at high data rates
where undetected reassembly buffer corruptions can result from
fragment misassociations [RFC4963]. IPv6 is less subject to these
concerns when the 32-bit Identification field is managed responsibly
but this may be less true if the starting sequence number is changed
frequently. However, IPv6 can robustly sustain high data rate
restoration/reunification and uniqueness verification using the
64-bit Identifications included in Parcels/AJs.
IPv6 parcels and AJs are processed according to a new link service
model for the Internet in which intermediate systems may forward
parcels/AJs that incurred link errors and end systems are responsible
for detecting any link errors incurred along the path. The
destination end system in particular is uniquely positioned to verify
and/or correct the integrity of any transport layer segments
received. For this reason, transport layer protocols that use
parcels/AJs should include higher layer error detection and/or
forward error correction codes in addition to the per-segment link
error integrity checks.
The message digests included with AJs provide integrity checks only
and must not be considered as authentication codes in the absence of
additional security services. Further security considerations
related to IPv6 parcels and Advanced Jumbos are found in the AERO/
OMNI specifications.
15. Acknowledgements
This work was inspired by ongoing AERO/OMNI/DTN investigations. The
concepts were further motivated through discussions with colleagues.
A considerable body of work over recent years has produced useful
segmentation offload facilities available in widely-deployed
implementations.
With the advent of networked storage, big data, streaming media and
other high data rate uses the early days of Internetworking have
evolved to accommodate the need for improved performance. The need
fostered a concerted effort in the industry to pursue performance
optimizations at all layers that continues in the modern era. All
who supported and continue to support advances in Internetworking
performance are acknowledged.
This work has been presented at working group sessions of the
Internet Engineering Task Force (IETF). The following individuals
are acknowledged for their contributions: Roland Bless, Scott
Burleigh, Madhuri Madhava Badgandi, Joel Halpern, Tom Herbert, Andy
Malis, Herbie Robinson, Bhargava Raman Sai Prakash.
Templin Expires 14 June 2024 [Page 45]
Internet-Draft IPv6 Parcels and AJs December 2023
Honoring life, liberty and the pursuit of happiness.
16. References
16.1. Normative References
[I-D.templin-6man-ipid-ext]
Templin, F. L., "IPv6 Extended Fragment Header", Work in
Progress, Internet-Draft, draft-templin-6man-ipid-ext-09,
11 December 2023,
.
[RFC0768] Postel, J., "User Datagram Protocol", STD 6, RFC 768,
DOI 10.17487/RFC0768, August 1980,
.
[RFC0791] Postel, J., "Internet Protocol", STD 5, RFC 791,
DOI 10.17487/RFC0791, September 1981,
.
[RFC0792] Postel, J., "Internet Control Message Protocol", STD 5,
RFC 792, DOI 10.17487/RFC0792, September 1981,
.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
.
[RFC2675] Borman, D., Deering, S., and R. Hinden, "IPv6 Jumbograms",
RFC 2675, DOI 10.17487/RFC2675, August 1999,
.
[RFC4291] Hinden, R. and S. Deering, "IP Version 6 Addressing
Architecture", RFC 4291, DOI 10.17487/RFC4291, February
2006, .
[RFC4443] Conta, A., Deering, S., and M. Gupta, Ed., "Internet
Control Message Protocol (ICMPv6) for the Internet
Protocol Version 6 (IPv6) Specification", STD 89,
RFC 4443, DOI 10.17487/RFC4443, March 2006,
.
[RFC7323] Borman, D., Braden, B., Jacobson, V., and R.
Scheffenegger, Ed., "TCP Extensions for High Performance",
RFC 7323, DOI 10.17487/RFC7323, September 2014,
.
Templin Expires 14 June 2024 [Page 46]
Internet-Draft IPv6 Parcels and AJs December 2023
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
May 2017, .
[RFC8200] Deering, S. and R. Hinden, "Internet Protocol, Version 6
(IPv6) Specification", STD 86, RFC 8200,
DOI 10.17487/RFC8200, July 2017,
.
[RFC9293] Eddy, W., Ed., "Transmission Control Protocol (TCP)",
STD 7, RFC 9293, DOI 10.17487/RFC9293, August 2022,
.
16.2. Informative References
[BIG-TCP] Dumazet, E., "BIG TCP, Netdev 0x15 Conference (virtual),
https://netdevconf.info/0x15/session.html?BIG-TCP", 31
August 2021.
[ECMA-182] ECMA, E., "European Computer Manufacturers Association
(ECMA) Standard ECMA-182, https://ecma-international.org/
wp-content/uploads/ECMA-
182_1st_edition_december_1992.pdf", December 1992.
[ETHERMTU] Murray, D., Koziniec, T., Lee, K., and M. Dixon, "Large
MTUs and Internet Performance, 2012 IEEE 13th
International Conference on High Performance Switching and
Routing, https://ieeexplore.ieee.org/document/6260832", 24
June 2012.
[I-D.ietf-6man-eh-limits]
Herbert, T., "Limits on Sending and Processing IPv6
Extension Headers", Work in Progress, Internet-Draft,
draft-ietf-6man-eh-limits-11, 30 November 2023,
.
[I-D.ietf-6man-hbh-processing]
Hinden, R. M. and G. Fairhurst, "IPv6 Hop-by-Hop Options
Processing Procedures", Work in Progress, Internet-Draft,
draft-ietf-6man-hbh-processing-12, 21 November 2023,
.
Templin Expires 14 June 2024 [Page 47]
Internet-Draft IPv6 Parcels and AJs December 2023
[I-D.templin-dtn-ltpfrag]
Templin, F., "LTP Fragmentation", Work in Progress,
Internet-Draft, draft-templin-dtn-ltpfrag-16, 23 October
2023, .
[I-D.templin-intarea-aero]
Templin, F., "Automatic Extended Route Optimization
(AERO)", Work in Progress, Internet-Draft, draft-templin-
intarea-aero-51, 21 November 2023,
.
[I-D.templin-intarea-omni]
Templin, F., "Transmission of IP Packets over Overlay
Multilink Network (OMNI) Interfaces", Work in Progress,
Internet-Draft, draft-templin-intarea-omni-51, 21 November
2023, .
[QUIC] Ghedini, A., "Accelerating UDP packet transmission for
QUIC, https://blog.cloudflare.com/accelerating-udp-packet-
transmission-for-quic/", 8 January 2020.
[RFC0863] Postel, J., "Discard Protocol", STD 21, RFC 863,
DOI 10.17487/RFC0863, May 1983,
.
[RFC1071] Braden, R., Borman, D., and C. Partridge, "Computing the
Internet checksum", RFC 1071, DOI 10.17487/RFC1071,
September 1988, .
[RFC1191] Mogul, J. and S. Deering, "Path MTU discovery", RFC 1191,
DOI 10.17487/RFC1191, November 1990,
.
[RFC1321] Rivest, R., "The MD5 Message-Digest Algorithm", RFC 1321,
DOI 10.17487/RFC1321, April 1992,
.
[RFC3174] Eastlake 3rd, D. and P. Jones, "US Secure Hash Algorithm 1
(SHA1)", RFC 3174, DOI 10.17487/RFC3174, September 2001,
.
Templin Expires 14 June 2024 [Page 48]
Internet-Draft IPv6 Parcels and AJs December 2023
[RFC3385] Sheinwald, D., Satran, J., Thaler, P., and V. Cavanna,
"Internet Protocol Small Computer System Interface (iSCSI)
Cyclic Redundancy Check (CRC)/Checksum Considerations",
RFC 3385, DOI 10.17487/RFC3385, September 2002,
.
[RFC4301] Kent, S. and K. Seo, "Security Architecture for the
Internet Protocol", RFC 4301, DOI 10.17487/RFC4301,
December 2005, .
[RFC4821] Mathis, M. and J. Heffner, "Packetization Layer Path MTU
Discovery", RFC 4821, DOI 10.17487/RFC4821, March 2007,
.
[RFC4963] Heffner, J., Mathis, M., and B. Chandler, "IPv4 Reassembly
Errors at High Data Rates", RFC 4963,
DOI 10.17487/RFC4963, July 2007,
.
[RFC5326] Ramadas, M., Burleigh, S., and S. Farrell, "Licklider
Transmission Protocol - Specification", RFC 5326,
DOI 10.17487/RFC5326, September 2008,
.
[RFC6234] Eastlake 3rd, D. and T. Hansen, "US Secure Hash Algorithms
(SHA and SHA-based HMAC and HKDF)", RFC 6234,
DOI 10.17487/RFC6234, May 2011,
.
[RFC7126] Gont, F., Atkinson, R., and C. Pignataro, "Recommendations
on Filtering of IPv4 Packets Containing IPv4 Options",
BCP 186, RFC 7126, DOI 10.17487/RFC7126, February 2014,
.
[RFC8201] McCann, J., Deering, S., Mogul, J., and R. Hinden, Ed.,
"Path MTU Discovery for IP version 6", STD 87, RFC 8201,
DOI 10.17487/RFC8201, July 2017,
.
[RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol
Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018,
.
[RFC8899] Fairhurst, G., Jones, T., Tüxen, M., Rüngeler, I., and T.
Völker, "Packetization Layer Path MTU Discovery for
Datagram Transports", RFC 8899, DOI 10.17487/RFC8899,
September 2020, .
Templin Expires 14 June 2024 [Page 49]
Internet-Draft IPv6 Parcels and AJs December 2023
[RFC9000] Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based
Multiplexed and Secure Transport", RFC 9000,
DOI 10.17487/RFC9000, May 2021,
.
[RFC9171] Burleigh, S., Fall, K., and E. Birrane, III, "Bundle
Protocol Version 7", RFC 9171, DOI 10.17487/RFC9171,
January 2022, .
[RFC9268] Hinden, R. and G. Fairhurst, "IPv6 Minimum Path MTU Hop-
by-Hop Option", RFC 9268, DOI 10.17487/RFC9268, August
2022, .
[STONE] Stone, J. and C. Partridge, "When the CRC and TCP Checksum
Disagree, ACM SIGCOMM Computer Communication Review,
Volume 30, Issue 4, October 2000, pp. 309-319,
https://doi.org/10.1145/347057.347561", October 2000.
Appendix A. TCP Extensions for High Performance
TCP Extensions for High Performance are specified in [RFC7323], which
updates earlier work that began in the late 1980's and early 1990's.
These efforts determined that the TCP 16-bit Window was too small to
sustain transmissions at high data rates, and a TCP Window Scale
option allowing window sizes up to 2^30 was specified. The work also
defined a Timestamp option used for round-trip time measurements and
as a Protection Against Wrapped Sequences (PAWS) at high data rates.
TCP users of IPv6 parcels are strongly encouraged to adopt these
mechanisms.
Since TCP/IPv6 parcels only include control bits for the first
segment ("segment(0)"), nodes must regard all other segments of the
same parcel as data segments. When a node breaks a TCP/IPv6 parcel
out into individual packets or sub-parcels, only the first packet or
sub-parcel contains the original segment(0) and therefore only its
TCP header retains the control bit settings from the original parcel
TCP header. If the original TCP header included TCP options such as
Maximum Segment Size (MSS), Window Scale (WS) and/or Timestamp, the
node copies those same options into the options section of the new
TCP header.
For all other packets/sub-parcels, the note sets all TCP header
control bits to 0 as data segment(s). Then, if the original parcel
contained a Timestamp option, the node copies the Timestamp option
into the options section of the new TCP header. Appendix A of
[RFC7323] provides implementation guidelines for the Timestamp option
layout.
Templin Expires 14 June 2024 [Page 50]
Internet-Draft IPv6 Parcels and AJs December 2023
Appendix A of [RFC7323] also discusses Interactions with the TCP
Urgent Pointer as follows: "if the Urgent Pointer points beyond the
end of the TCP data in the current segment, then the user will remain
in urgent mode until the next TCP segment arrives. That segment will
update the Urgent Pointer to a new offset, and the user will never
have left urgent mode". In the case of IPv6 parcels, however, it
will often be the case that the next TCP segment is included in the
same (sub-)parcel as the segment that contained the urgent pointer
such that the urgent pointer can be updated immediately.
Finally, if a parcel/AJ contains more than 65535 octets of data
(i.e., spread across multiple segments), then the Urgent Pointer can
be regarded in the same manner as for jumbograms as described in
Section 5.2 of [RFC2675].
Appendix B. Extreme L Value Implications
For each parcel, the transport layer can specify any L value between
256 and 65535 octets. Transport protocols that send isolated control
and/or data segments smaller than 256 octets should package them as
ordinary packets, AJs, singleton parcels or as the final segment of a
larger parcel. It is also important to note that segments smaller
than 256 octets are likely to include control information for which
timely delivery rather than bulk packaging is desired. Transport
protocol streams therefore often include a mix of (larger) parcels
and (smaller) ordinary packets, AJs or singleton parcels.
The transport layer should also specify an L value no larger than can
accommodate the maximum-sized transport and network layer headers
that the source will include without causing a single segment plus
headers to exceed 65535 octets. For example, if the source will
include a 28 octet TCP header plus a 40 octet IPv6 header with 24
extension header octets (plus 6/10 octets for the per-segment
Checksum/CRC) the transport should specify an L value no larger than
(65535 - 28 - 40 - 24 - 10) = 65433 octets.
The transport can specify still larger "extreme" L values up to 65535
octets, but the resulting parcels might be lost along some paths with
unpredictable results. For example, a parcel with an extreme L value
set as large as 65535 might be able to transit paths that can pass
jumbograms natively but might not be able to transit a path that
includes non-jumbo links. The transport layer should therefore
carefully consider the benefits of constructing parcels with extreme
L values larger than the recommended maximum due to high risk of loss
compared with only minor potential performance benefits.
Templin Expires 14 June 2024 [Page 51]
Internet-Draft IPv6 Parcels and AJs December 2023
Parcels that include extreme L values larger than the recommended
maximum and with a maximum number of included segments could also
cause a parcel to exceed 16,777,215 (2**24 - 1) octets in total
length. Since the Parcel Payload Length field is limited to 24 bits,
however, the largest possible parcel is also limited by this size.
See also the above risk/benefit analysis for parcels that include
extreme L values larger than the recommended maximum.
Appendix C. Additional Parcel/Jumbo Probe Considerations
After sending a Parcel/Jumbo Probe, the source may receive a Parcel/
Jumbo Report from either a router on the path or from the final
destination itself. If a router or final destination receives a
Parcel/Jumbo Probe but does not recognize the parcel/AJ constructs,
it will likely drop the probe without further processing and may
return an ICMP error. The original source will then consider the
probe as lost, but may attempt to probe again later, e.g., in case
the path may have changed.
When the source examines the "packet in error" portion of a Parcel/
Jumbo Report, it can easily match the Report against its recent
transmissions if the Identification value is available. For each
"packet in error" that does not include an Identification, the source
can attempt to match based on any other identifying information;
otherwise, it should discard the message.
If the source receives multiple Parcel/Jumbo Reports for a single
parcel/jumbo sent into a given path, it should prefer any information
reported by the final destination over information reported by a
router. For example, if a router returns a negative report while the
destination returns a positive report the latter should be considered
as more-authoritative. For this reason, the source should provide a
configuration knob allowing it to accept or ignore reports that
originate from routers, e.g., according to the network trust model.
When a destination returns a Parcel/Jumbo Report, it can optionally
attach the report to an ordinary data packet, parcel or AJ that it
returns to the original source. For example, the OMNI specification
includes a "super-packet" service that allows multiple independent
IPv6 packets to be encapsulated as attachments to a single adaptation
layer packet. This is distinct from an IP parcel in that each packet
member of the super-packet includes its own IPv6 (and possibly other
upper layer) header.
Templin Expires 14 June 2024 [Page 52]
Internet-Draft IPv6 Parcels and AJs December 2023
Appendix D. Advanced Jumbo Cyclic Redundancy Check (CRC128J)
This section postulates a 128-bit Cyclic Redundancy Check (CRC)
algorithm for AJs termed "CRC128J". An Advanced Jumbo Type value is
reserved for CRC128J, but at the time of this writing no algorithm
exists. Future specifications may update this document and provide
an algorithm for handling Advanced Jumbos with Type CRC128J.
Appendix E. Change Log
<< RFC Editor - remove prior to publication >>
Changes from earlier versions:
* Submit for review.
Author's Address
Fred L. Templin (editor)
Boeing Research & Technology
P.O. Box 3707
Seattle, WA 98124
United States of America
Email: fltemplin@acm.org
Templin Expires 14 June 2024 [Page 53]