TCP and UDP over IPv6 Jumbograms
obsoleted by
- rfc-2675 — IPv6 Jumbograms
Extracted elements (16)
A new TCP Urgent Pointer Option was considered to fix the 16-bit Urgent Pointer limitation, but was rejected as too intrusive because applications using jumbograms are unlikely to also use Urgent Pointers. The simpler sentinel-value approach (65535 = beyond segment end) was chosen instead.
The UDP length field size cannot be changed, so a zero value was chosen to signal that the field should be ignored and the pseudo-header length used instead. This works because the minimum valid UDP length is 8 (the header alone), making zero otherwise invalid.
Although the TCP window is only 16 bits, larger windows can be used over jumbogram paths through use of the TCP Window Scale option (RFC 1323); this document does not change the Window Scale mechanism.
For TCP input processing, when a TCP packet is received with the URG bit set and an Urgent field of 65535, the Urgent Pointer is calculated using an offset equal to the length of the TCP data rather than the value in the Urgent field.
If a UDP packet is received with a length field of zero, the length of the UDP packet is computed from the length field in the Jumbo Payload option minus the length of all extension headers present between the IPv6 header and the UDP header.
If the Urgent Pointer offset exceeds 65535 but is less than the TCP data length, the TCP packet MUST be split: the first piece ends before the urgent data with Urgent field set to 65535, and the second piece carries the urgent data with the Urgent field set normally.
The length used in the pseudo-header for computing the UDP checksum is always the true length of the UDP header plus data, NOT zero, even when the UDP length field is set to zero for a jumbogram.
When an MSS value of 65535 is received, it is to be treated as infinity, and MTU discovery starting with the MTU of the outgoing interface is used to determine the actual MSS.
When determining what MSS value to send, if the MTU of the directly attached interface is greater than 65535, the MSS value MUST be set to 65535.
When sending a TCP packet with an Urgent Pointer and the offset from the Sequence Number to the Urgent Pointer is greater than 65535 and also greater than or equal to the TCP data length, the Urgent field MUST be filled with 65535 and normal TCP processing continues.
When sending a UDP packet, if and only if the length of the UDP header plus data is greater than 65,535, the length field in the UDP header MUST be set to zero to indicate that the Jumbo Payload pseudo-header length should be used instead.
An IPv6 packet carrying a UDP payload longer than 65535 bytes necessarily carries a Jumbo Payload option in a Hop-by-Hop Options header. The Jumbo Payload length field contains the length of the IP packet excluding the IPv6 header, and the IPv6 header length field is set to zero.
There are no known security issues involved in the changes defined by this document for TCP and UDP operation over IPv6 jumbograms.
The TCP MSS option is a 16-bit field; the sentinel value 65535 is repurposed to mean 'infinity' (no MSS limit imposed by the sender) when operating over IPv6 jumbogram-capable paths with MTU > 65535.
The TCP Urgent Pointer is a 16-bit field in the TCP header; the value 65535 is used as a sentinel to indicate that the actual urgent data offset is beyond the end of the current segment, requiring the receiver to use the TCP data length as the effective offset.
The UDP length field is a 16-bit field that normally encodes the length of the UDP header plus data; for IPv6 jumbograms (payload > 65535 bytes), it is set to zero as a sentinel to indicate that the true length is carried in the IPv6 Jumbo Payload hop-by-hop option.