The Lightweight User Datagram Protocol (UDP-Lite)
updated by
- rfc-6335 — Internet Assigned Numbers Authority (IANA) Procedures for the Management of the Service Name and Transport Protocol Port Number Registry
Extracted elements (21)
A separate IP protocol identifier was chosen for UDP-Lite rather than sharing UDP's identifier to avoid silent packet loss: if protocol identifiers were shared, a UDP-Lite packet with partial checksum sent to a UDP receiver would be silently discarded due to checksum mismatch, with neither application notified.
UDP-Lite replaces UDP's Length field with Checksum Coverage because the packet length can be derived from the IP layer (as with TCP), freeing the field to encode the partial checksum boundary without increasing header size.
UDP-Lite was designed because existing transport protocols prevented error-tolerant applications (e.g., voice/video codecs) from benefiting from link-layer partial error delivery. IPv4 UDP allowed checksum disabling but IPv6 mandated full coverage; UDP-Lite provides a middle ground covering at least the header.
UDP-Lite has been assigned IP protocol number 136 (UDPLite), separate from UDP (17). A UDP-Lite-unaware destination will return an ICMP 'Protocol Unreachable' or ICMPv6 'Payload Type Unknown' error, providing a simple detection mechanism for unaware systems.
Applications using UDP-Lite MUST NOT make assumptions about the correctness of received data beyond the position indicated by the Checksum Coverage field and should introduce their own validity checks for the uncovered portion.
It is RECOMMENDED that the default behavior of UDP-Lite mimic UDP by setting Checksum Coverage to match the full packet length. Applications wanting partial coverage must explicitly request it via a system call on both sender and receiver sides.
Link layers that do not support partial error detection suitable for UDP-Lite MUST detect errors in the entire UDP-Lite packet and MUST discard damaged packets, treating the whole packet as a UDP packet.
Lower layers MUST use a strong error detection mechanism to detect errors in the sensitive part of a UDP-Lite packet (from the first IP header octet through the last octet identified by Checksum Coverage) and MUST discard damaged packets.
Since the transmitted checksum MUST NOT be all zeroes, an application wishing no payload protection should use a Checksum Coverage value of 8, which covers only the 8-byte UDP-Lite header.
The Checksum field MUST include a pseudo-header based on the IP header, irrespective of the Checksum Coverage value. Prior to computation, the checksum field MUST be set to zero. If the computed checksum is 0, it is transmitted as all ones.
The sender IP module MUST NOT pad the IP payload with extra octets, because the length of the UDP-Lite payload delivered to the receiver depends on the IP payload length.
The UDP-Lite header MUST always be covered by the checksum. The Checksum Coverage field MUST be either 0 or at least 8; packets with a value of 1 to 7 MUST be discarded by the receiver.
UDP-Lite packets with a Checksum Coverage greater than the IP length MUST be discarded by the receiver.
For Jumbograms, the 16-bit Checksum Coverage field can represent coverage up to 65535 octets. The checksum can cover either the entire payload (value zero) or at most the initial 65535 octets of the UDP-Lite packet.
The Checksum Coverage field is a 16-bit value specifying the number of octets from the beginning of the UDP-Lite header that are covered by the checksum. A value of zero indicates the entire packet is covered; values 1–7 are invalid and MUST cause the packet to be discarded.
The UDP-Lite pseudo header differs from UDP's: the Length field is taken from the IP module (total IP payload length including UDP-Lite header) rather than from the UDP-Lite header itself, consistent with TCP's pseudo header computation.
IANA assigned IP protocol number 136 to UDP-Lite, with the name 'UDPLite' (hyphen omitted to ensure compatibility across platforms where '-' may not be valid in a protocol entity name).
Encryption transforms that cause error propagation (block ciphers) will spread damage across a decrypted packet, making it unusable. Stream ciphers that do not propagate errors allow an attacker to make predictable plaintext changes without decrypting the ciphertext, posing a confidentiality and integrity risk.
IPsec integrity checks (ESP or AH) are applied to the entire IP packet payload; any bit corruption in the protected area causes the receiver to discard the UDP-Lite packet, negating UDP-Lite's partial-delivery benefit. When IPsec ESP encryption is used, links cannot identify UDP-Lite traffic and MUST apply standard full-packet integrity checks.
When UDP-Lite partial checksum is enabled, the insensitive portion of a packet may change in transit, causing most authentication mechanisms to fail since they verify the entire packet has not changed. Authentication will always fail for UDP-Lite packets where the insensitive part has been damaged unless authentication operates only on the sensitive part.
The UDP-Lite header replaces UDP's Length field with a Checksum Coverage field. The header contains four 16-bit fields: Source Port, Destination Port, Checksum Coverage, and Checksum, followed by the payload.