IPv6 Jumbograms
How IPv6 packets carry more than 65,535 bytes of data, and what TCP and UDP change to send them.
Borman, D., Deering, S., and R. Hinden, "IPv6 Jumbograms", RFC 2675, DOI 10.17487/RFC2675, August 1999, <https://www.rfc-editor.org/info/rfc2675>.
@misc{rfc2675,
series = {Request for Comments},
number = 2675,
howpublished = {RFC 2675},
publisher = {RFC Editor},
doi = {10.17487/RFC2675},
url = {https://www.rfc-editor.org/info/rfc2675},
author = {D. Borman and S. Deering and R. Hinden},
title = {{IPv6 Jumbograms}},
pagetotal = 9,
year = 1999,
month = aug,
} RFC text
Contents
Network Working Group D. Borman
Request for Comments: 2675 Berkeley Software Design
Obsoletes: 2147 S. Deering
Category: Standards Track Cisco
R. Hinden
Nokia
August 1999
IPv6 Jumbograms
Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
Copyright Notice
Copyright (C) The Internet Society (1999). All Rights Reserved.
Abstract
A "jumbogram" is an IPv6 packet containing a payload longer than
65,535 octets. This document describes the IPv6 Jumbo Payload
option, which provides the means of specifying such large payload
lengths. It also describes the changes needed to TCP and UDP to make
use of jumbograms.
Jumbograms are relevant only to IPv6 nodes that may be attached to
links with a link MTU greater than 65,575 octets, and need not be
implemented or understood by IPv6 nodes that do not support
attachment to links with such large MTUs.
1. Introduction
jumbo (jum'bO),
n., pl. -bos, adj.
-n.
1. a person, animal, or thing very large of its kind.
-adj.
2. very large: the jumbo box of cereal.
[1800-10; orig. uncert.; popularized as the name of a large
elephant purchased and exhibited by P.T. Barnum in 1882]
-- www.infoplease.com
The IPv6 header [IPv6] has a 16-bit Payload Length field and,
therefore, supports payloads up to 65,535 octets long. This document
specifies an IPv6 hop-by-hop option, called the Jumbo Payload option,
that carries a 32-bit length field in order to allow transmission of
IPv6 packets with payloads between 65,536 and 4,294,967,295 octets in
length. Packets with such long payloads are referred to as
"jumbograms".
The Jumbo Payload option is relevant only for IPv6 nodes that may be
attached to links with a link MTU greater than 65,575 octets (that
is, 65,535 + 40, where 40 octets is the size of the IPv6 header).
The Jumbo Payload option need not be implemented or understood by
IPv6 nodes that do not support attachment to links with MTU greater
than 65,575.
On links with configurable MTUs, the MTU must not be configured to a
value greater than 65,575 octets if there are nodes attached to that
link that do not support the Jumbo Payload option and it can not be
guaranteed that the Jumbo Payload option will not be sent to those
nodes.
The UDP header [UDP] has a 16-bit Length field which prevents it from
making use of jumbograms, and though the TCP header [TCP] does not
have a Length field, both the TCP MSS option and the TCP Urgent field
are constrained to 16 bits. This document specifies some simple
enhancements to TCP and UDP to enable them to make use of jumbograms.
An implementation of TCP or UDP on an IPv6 node that supports the
Jumbo Payload option must include the enhancements specified here.
Note: The 16 bit checksum used by UDP and TCP becomes less accurate
as the length of the data being checksummed is increased.
Application designers may want to take this into consideration.
1.1 Document History
This document merges and updates material that was previously
published in two separate documents:
- The specification of the Jumbo Payload option previously appeared
as part of the IPv6 specification in RFC 1883. RFC 1883 has been
superseded by RFC 2460, which no longer includes specification of
the Jumbo Payload option.
- The specification of TCP and UDP enhancements to support
jumbograms previously appeared as RFC 2147. RFC 2147 is obsoleted
by this document.
2. Format of the Jumbo Payload Option
The Jumbo Payload option is carried in an IPv6 Hop-by-Hop Options
header, immediately following the IPv6 header. This option has an
alignment requirement of 4n + 2. (See [IPv6, Section 4.2] for
discussion of option alignment.) The option has the following
format:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Option Type | Opt Data Len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Jumbo Payload Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Option Type 8-bit value C2 (hexadecimal).
Opt Data Len 8-bit value 4.
Jumbo Payload Length 32-bit unsigned integer. Length of the IPv6
packet in octets, excluding the IPv6 header
but including the Hop-by-Hop Options header
and any other extension headers present.
Must be greater than 65,535.
3. Usage of the Jumbo Payload Option
The Payload Length field in the IPv6 header must be set to zero in
every packet that carries the Jumbo Payload option.
If a node that understands the Jumbo Payload option receives a packet
whose IPv6 header carries a Payload Length of zero and a Next Header
value of zero (meaning that a Hop-by-Hop Options header follows), and
whose link-layer framing indicates the presence of octets beyond the
IPv6 header, the node must proceed to process the Hop-by-Hop Options
header in order to determine the actual length of the payload from
the Jumbo Payload option.
The Jumbo Payload option must not be used in a packet that carries a
Fragment header.
Higher-layer protocols that use the IPv6 Payload Length field to
compute the value of the Upper-Layer Packet Length field in the
checksum pseudo-header described in [IPv6, Section 8.1] must instead
use the Jumbo Payload Length field for that computation, for packets
that carry the Jumbo Payload option.
Nodes that understand the Jumbo Payload option are required to detect
a number of possible format errors, and if the erroneous packet was
not destined to a multicast address, report the error by sending an
ICMP Parameter Problem message [ICMPv6] to the packet's source. The
following list of errors specifies the values to be used in the Code
and Pointer fields of the Parameter Problem message:
error: IPv6 Payload Length = 0 and
IPv6 Next Header = Hop-by-Hop Options and
Jumbo Payload option not present
Code: 0
Pointer: high-order octet of the IPv6 Payload Length
error: IPv6 Payload Length != 0 and
Jumbo Payload option present
Code: 0
Pointer: Option Type field of the Jumbo Payload option
error: Jumbo Payload option present and
Jumbo Payload Length < 65,536
Code: 0
Pointer: high-order octet of the Jumbo Payload Length
error: Jumbo Payload option present and
Fragment header present
Code: 0
Pointer: high-order octet of the Fragment header.
A node that does not understand the Jumbo Payload option is expected
to respond to erroneously-received jumbograms as follows, according
to the IPv6 specification:
error: IPv6 Payload Length = 0 and
IPv6 Next Header = Hop-by-Hop Options
Code: 0
Pointer: high-order octet of the IPv6 Payload Length
error: IPv6 Payload Length != 0 and
Jumbo Payload option present
Code: 2
Pointer: Option Type field of the Jumbo Payload option
4. UDP Jumbograms
The 16-bit Length field of the UDP header limits the total length of
a UDP packet (that is, a UDP header plus data) to no greater than
65,535 octets. This document specifies the following modification of
UDP to relax that limit: UDP packets longer than 65,535 octets may be
sent by setting the UDP Length field to zero, and letting the
receiver derive the actual UDP packet length from the IPv6 payload
length. (Note that, prior to this modification, zero was not a legal
value for the UDP Length field, because the UDP packet length
includes the UDP header and therefore has a minimum value of 8.)
The specific requirements for sending a UDP jumbogram are as follows:
When sending a UDP packet, if and only if the length of the UDP
header plus UDP data is greater than 65,535, set the Length field
in the UDP header to zero.
The IPv6 packet carrying such a large UDP packet will necessarily
include a Jumbo Payload option in a Hop-by-Hop Options header; set
the Jumbo Payload Length field of that option to be the actual
length of the UDP header plus data, plus the length of all IPv6
extension headers present between the IPv6 header and the UDP
header.
For generating the UDP checksum, use the actual length of the UDP
header plus data, NOT zero, in the checksum pseudo-header [IPv6,
Section 8.1].
The specific requirements for receiving a UDP jumbogram are as
follows:
When receiving a UDP packet, if and only if the Length field in
the UDP header is zero, calculate the actual length of the UDP
header plus data from the IPv6 Jumbo Payload Length field minus
the length of all extension headers present between the IPv6
header and the UDP header.
In the unexpected case that the UDP Length field is zero but no
Jumbo Payload option is present (i.e., the IPv6 packet is not a
jumbogram), use the Payload Length field in the IPv6 header, in
place of the Jumbo Payload Length field, in the above calculation.
For verifying the received UDP checksum, use the calculated length
of the UDP header plus data, NOT zero, in the checksum pseudo-
header.
5. TCP Jumbograms
Because there is no length field in the TCP header, there is nothing
limiting the length of an individual TCP packet. However, the MSS
value that is negotiated at the beginning of the connection limits
the largest TCP packet that can be sent, and the Urgent Pointer
cannot reference data beyond 65,535 bytes.
5.1 TCP MSS
When determining what MSS value to send, if the MTU of the directly
attached interface minus 60 [IPv6, Section 8.3] is greater than or
equal to 65,535, then set the MSS value to 65,535.
When an MSS value of 65,535 is received, it is to be treated as
infinity. The actual MSS is determined by subtracting 60 from the
value learned by performing Path MTU Discovery [MTU-DISC] over the
path to the TCP peer.
5.2 TCP Urgent Pointer
The Urgent Pointer problem could be fixed by adding a TCP Urgent
Pointer Option. However, since it is unlikely that applications
using jumbograms will also use Urgent Pointers, a less intrusive
change similar to the MSS change will suffice.
When a TCP packet is to be sent with an Urgent Pointer (i.e., the URG
bit set), first calculate the offset from the Sequence Number to the
Urgent Pointer. If the offset is less than 65,535, fill in the
Urgent field and continue with the normal TCP processing. If the
offset is greater than 65,535, and the offset is greater than or
equal to the length of the TCP data, fill in the Urgent Pointer with
65,535 and continue with the normal TCP processing. Otherwise, the
TCP packet must be split into two pieces. The first piece contains
data up to, but not including the data pointed to by the Urgent
Pointer, and the Urgent field is set to 65,535 to indicate that the
Urgent Pointer is beyond the end of this packet. The second piece
can then be sent with the Urgent field set normally.
Note: The first piece does not have to include all of the data up to
the Urgent Pointer. It can be shorter, just as long as it ends
within 65,534 bytes of the Urgent Pointer, so that the offset to the
Urgent Pointer in the second piece will be less than 65,535 bytes.
For TCP input processing, when a TCP packet is received with the URG
bit set and an Urgent field of 65,535, the Urgent Pointer is
calculated using an offset equal to the length of the TCP data,
rather than the offset in the Urgent field.
It should also be noted that though the TCP window is only 16-bits,
larger windows can be used through use of the TCP Window Scale option
[TCP-EXT].
6. Security Considerations
The Jumbo Payload option and TCP/UDP jumbograms do not introduce any
known new security concerns.
7. Authors' Addresses
David A. Borman
Berkeley Software Design, Inc.
4719 Weston Hills Drive
Eagan, MN 55123
USA
Phone: +1 612 405 8194
EMail: dab@bsdi.com
Stephen E. Deering
Cisco Systems, Inc.
170 West Tasman Drive
San Jose, CA 95134-1706
USA
Phone: +1 408 527 8213
EMail: deering@cisco.com
Robert M. Hinden
Nokia
313 Fairchild Drive
Mountain View, CA 94043
USA
Phone: +1 650 625 2004
EMail: hinden@iprg.nokia.com
8. References
[ICMPv6] Conta, A. and S. Deering, "ICMP for the Internet Protocol
Version 6 (IPv6)", RFC 2463, December 1998.
[IPv6] Deering, S. and R. Hinden, "Internet Protocol Version 6
(IPv6) Specification", RFC 2460, December 1998.
[MTU-DISC] McCann, J., Deering, S. and J. Mogul, "Path MTU Discovery
for IP Version 6", RFC 1981, August 1986.
[TCP] Postel, J., "Transmission Control Protocol", STD 7, RFC
793, September 1981.
[TCP-EXT] Jacobson, V., Braden, R. and D. Borman, "TCP Extensions
for High Performance", RFC 1323, May 1992.
[UDP] Postel, J., "User Datagram Protocol", STD 6, RFC 768,
August 1980.
9. Full Copyright Statement
Copyright (C) The Internet Society (1999). All Rights Reserved.
This document and translations of it may be copied and furnished to
others, and derivative works that comment on or otherwise explain it
or assist in its implementation may be prepared, copied, published
and distributed, in whole or in part, without restriction of any
kind, provided that the above copyright notice and this paragraph are
included on all such copies and derivative works. However, this
document itself may not be modified in any way, such as by removing
the copyright notice or references to the Internet Society or other
Internet organizations, except as needed for the purpose of
developing Internet standards in which case the procedures for
copyrights defined in the Internet Standards process must be
followed, or as required to translate it into languages other than
English.
The limited permissions granted above are perpetual and will not be
revoked by the Internet Society or its successors or assigns.
This document and the information contained herein is provided on an
"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
Acknowledgement
Funding for the RFC Editor function is currently provided by the
Internet Society.
ISO Plain Language
On this page
§1Why Jumbograms Exist
The IPv6 header (RFC 2460) has a 16-bit Payload Length field and therefore supports payloads up to 65,535 octets long. This document specifies an IPv6 hop-by-hop option, the Jumbo Payload option, that carries a 32-bit length field, allowing transmission of IPv6 packets with payloads between 65,536 and 4,294,967,295 octets. Packets with such long payloads are called jumbograms.
The option is relevant only for IPv6 nodes that may be attached to links with a link MTU greater than 65,575 octets, which is 65,535 plus the 40 octets of the IPv6 header. It need not be implemented or understood by IPv6 nodes that do not support attachment to links with such large MTUs. On links with configurable MTUs, the MTU must not be configured above 65,575 octets if there are nodes attached to that link that do not support the option and it cannot be guaranteed that the option will not be sent to them.
The UDP header (RFC 768) has a 16-bit Length field which prevents it from making use of jumbograms. The TCP header (RFC 793) has no Length field, but both the TCP MSS option and the TCP Urgent field are constrained to 16 bits. This document specifies simple enhancements to TCP and UDP to enable them to make use of jumbograms, and an implementation of TCP or UDP on an IPv6 node that supports the Jumbo Payload option must include those enhancements.
The RFC also notes that the 16-bit checksum used by UDP and TCP becomes less accurate as the length of the data being checksummed increases, and that application designers may want to take this into consideration.
An IPv6 packet carries a 16-bit field for the size of its data, so a normal packet holds at most 65,535 bytes. This RFC adds an option that carries a 32-bit size instead, so a packet can hold up to 4,294,967,295 bytes of data. It only matters on links whose maximum packet size is above 65,575 bytes.
§1.1Where the Document Came From
Section 1.1 of the RFC records that the document merges and updates material that was previously published in two separate documents.
The specification of the Jumbo Payload option previously appeared as part of the IPv6 specification in RFC 1883. RFC 1883 has been superseded by RFC 2460, which no longer includes the specification of the Jumbo Payload option.
The specification of the TCP and UDP enhancements to support jumbograms previously appeared as RFC 2147, and RFC 2147 is obsoleted by this document.
The document joins two earlier pieces of work. The option itself used to be part of the IPv6 specification, and the changes to TCP and UDP used to be a separate RFC. This document is the single place that defines both, and it replaces that separate RFC.
§2The Jumbo Payload Option Format
The Jumbo Payload option is carried in an IPv6 Hop-by-Hop Options header, immediately following the IPv6 header. It has an alignment requirement of 4n + 2.
The option has three fields. The Option Type is an 8-bit value of C2 in hexadecimal. The Opt Data Len is an 8-bit value of 4. The Jumbo Payload Length is a 32-bit unsigned integer giving the length of the IPv6 packet in octets, excluding the IPv6 header but including the Hop-by-Hop Options header and any other extension headers present. It must be greater than 65,535.
The option sits in a header that follows the IPv6 header, and it has three fields: a type byte, a length byte and a 32-bit number giving the true size of the packet. The size counts everything after the IPv6 header, including the extension headers.
| Field | Name | Size | Value | Description |
|---|---|---|---|---|
OPTION-TYPE | Option Type | 1 byte | C2 | Fixed value C2 in hexadecimal. |
OPT-DATA-LEN | Opt Data Len | 1 byte | 4 | Length of the option data. |
JUMBO-LENGTH | Jumbo Payload Length | 4 bytes | Packet length excluding the IPv6 header; it must be greater than 65,535. |
§3Using the Option and Reporting Errors
The Payload Length field in the IPv6 header must be set to zero in every packet that carries the Jumbo Payload option. If a node that understands the option receives a packet whose IPv6 header carries a Payload Length of zero and a Next Header value of zero, meaning that a Hop-by-Hop Options header follows, and whose link-layer framing indicates the presence of octets beyond the IPv6 header, the node must process the Hop-by-Hop Options header to determine the actual length of the payload from the Jumbo Payload option.
The Jumbo Payload option must not be used in a packet that carries a Fragment header. Higher-layer protocols that use the IPv6 Payload Length field to compute the Upper-Layer Packet Length field in the checksum pseudo-header must instead use the Jumbo Payload Length field, for packets that carry the option.
Nodes that understand the option are required to detect a number of possible format errors. Unless the erroneous packet was destined to a multicast address, they report the error by sending an ICMP Parameter Problem message (RFC 2463) to the packet's source. The RFC lists four errors, all with Code 0:
- IPv6 Payload Length is 0, IPv6 Next Header is Hop-by-Hop Options and the Jumbo Payload option is not present. The Pointer is the high-order octet of the IPv6 Payload Length.
- IPv6 Payload Length is not 0 and the Jumbo Payload option is present. The Pointer is the Option Type field of the option.
- The option is present and the Jumbo Payload Length is below 65,536. The Pointer is the high-order octet of the Jumbo Payload Length.
- The option is present and a Fragment header is present. The Pointer is the high-order octet of the Fragment header.
A node that does not understand the option is expected to respond to erroneously received jumbograms according to the IPv6 specification. For a Payload Length of 0 with a Hop-by-Hop Next Header, it uses Code 0 and points at the high-order octet of the Payload Length. For a Payload Length that is not 0 with the option present, it uses Code 2 and points at the Option Type field.
The normal size field in the IPv6 header is set to zero in every packet that uses the option, so a receiver knows to look at the option instead. If the two disagree, or if the option is missing when the size is zero, the receiver sends back an ICMP error naming the field at fault.
- 1Option missing — Payload Length is 0 and Next Header is Hop-by-Hop. Pointer: high-order octet of the Payload Length.
- 2Option with a length — Payload Length is not 0 and the option is present. Pointer: the Option Type field.
- 3Length too small — The Jumbo Payload Length is below 65,536. Pointer: high-order octet of that field.
- 4Fragment header present — The option and a Fragment header appear together. Pointer: high-order octet of the Fragment header.
§4UDP Jumbograms
The 16-bit Length field in the UDP header limits the total length of a UDP packet, header plus data, to no greater than 65,535 octets. This document relaxes that limit: UDP packets longer than 65,535 octets may be sent with the UDP Length field set to zero, and the receiver derives the actual length from the IPv6 payload length. Before this change, zero was not a legal value for the UDP Length field, because the UDP packet length includes the header and therefore has a minimum value of 8.
The requirements for sending are as follows. When sending a UDP packet, if and only if the length of the UDP header plus data is greater than 65,535, the sender sets the Length field to zero. The IPv6 packet carrying such a UDP packet necessarily includes a Jumbo Payload option, and the Jumbo Payload Length field is set to the actual length of the UDP header plus data, plus the length of all IPv6 extension headers present between the IPv6 header and the UDP header. For generating the UDP checksum, the actual length of the UDP header plus data is used, not zero, in the checksum pseudo-header.
The requirements for receiving are as follows. When receiving a UDP packet, if and only if the Length field is zero, the receiver calculates the actual length of the UDP header plus data from the IPv6 Jumbo Payload Length field minus the length of all extension headers present between the IPv6 header and the UDP header. In the unexpected case that the Length field is zero but no Jumbo Payload option is present, the receiver uses the Payload Length field of the IPv6 header in place of the Jumbo Payload Length field in that calculation. For verifying the received checksum, the calculated length is used, not zero.
UDP has a 16-bit length field of its own, so this RFC says a UDP packet longer than 65,535 bytes writes zero there instead. The receiver then works out the real length from the option and subtracts the extension headers in front of it. The checksum still uses the real length, not zero.
§5TCP Jumbograms
There is no length field in the TCP header, so nothing limits the length of an individual TCP packet. Two values are still constrained to 16 bits. The MSS value negotiated at the beginning of the connection limits the largest TCP packet that can be sent, and the Urgent Pointer cannot reference data beyond 65,535 bytes.
For the MSS, when determining what value to send, if the MTU of the directly attached interface minus 60 is greater than or equal to 65,535, the sender sets the MSS value to 65,535. When an MSS value of 65,535 is received, it is treated as infinity: the actual MSS is determined by subtracting 60 from the value learned by performing Path MTU Discovery (RFC 1981) over the path to the TCP peer.
For the Urgent Pointer, the RFC notes that the problem could be fixed by adding a TCP Urgent Pointer Option, but since it is unlikely that applications using jumbograms will also use Urgent Pointers, a less intrusive change similar to the MSS change suffices. When a TCP packet is to be sent with an Urgent Pointer, the sender first calculates the offset from the Sequence Number to the Urgent Pointer. If the offset is less than 65,535, the Urgent field is filled in and normal processing continues. If the offset is greater than 65,535 and is greater than or equal to the length of the TCP data, the Urgent field is set to 65,535 and normal processing continues. Otherwise the packet must be split into two pieces: the first contains data up to, but not including, the data pointed to by the Urgent Pointer, and its Urgent field is set to 65,535 to indicate that the pointer is beyond the end of this packet; the second piece is then sent with the Urgent field set normally. The first piece does not have to include all of the data up to the Urgent Pointer, and can be shorter as long as it ends within 65,534 bytes of it, so that the offset in the second piece is less than 65,535 bytes.
On input, when a TCP packet is received with the URG bit set and an Urgent field of 65,535, the Urgent Pointer is calculated using an offset equal to the length of the TCP data, rather than the offset in the Urgent field. The RFC also notes that although the TCP window is only 16 bits, larger windows can be used through the TCP Window Scale option (RFC 1323).
TCP has no length field, but two of its values are limited to 16 bits. For the maximum segment size, the value 65,535 now means as large as the path allows. For the urgent pointer, the value 65,535 means the pointer lies at the end of the data, and the packet is split in two when the pointer is further away than that.
| Value | Normal TCP | TCP on a jumbogram path |
|---|---|---|
| MSS | The size that fits the path | 65,535 is sent, and 65,535 received is treated as infinity |
| Urgent Pointer THIS RFC | The offset from the sequence number | 65,535 means the pointer is at the end of the data; further away means the packet is split in two |
§6Security Considerations
The RFC states that the Jumbo Payload option and the TCP and UDP jumbograms do not introduce any known new security concerns. It says nothing further on the subject.
The RFC says the option and the TCP and UDP changes introduce no known new security concerns.