RObust Header Compression (ROHC): Profiles for User Datagram Protocol (UDP) Lite
updated by
- rfc-4815 — RObust Header Compression (ROHC): Corrections and Clarifications to RFC 3095
Extracted elements (25)
Separate ROHC profiles must be defined for UDP-Lite because it uses a different IP protocol identifier than UDP and its Checksum Coverage field does not share the semantics of the UDP Length field, making the field classification and compression strategies different.
The simplest approach — treating Checksum Coverage as always-irregular and sending it uncompressed — was rejected because it would make UDP-Lite always less efficient than UDP when the coverage equals packet length (semantically equivalent behavior). The CCE packet type was introduced to allow compression of the coverage field when its change pattern is stable.
The ROHC UDP-Lite static context may be initialized by reusing an existing context from a stream compressed using ROHC RTP/UDP-Lite (profile 0x0007), similarly to how ROHC UDP can reuse ROHC RTP contexts.
The UDP-Lite checksum cannot be disabled for IPv4 (unlike UDP), and it must always be sent as-is in every compressed packet for both IPv4 and IPv6. The context parameter context(UDP Checksum) from ROHC UDP is not applicable to ROHC UDP-Lite.
CCE(ON) and CCE(OFF) MUST NOT be used to extend R-0 and R-1* headers, because those headers do not contain a CRC and therefore cannot reliably update context values.
During context initialization, context(CFI) MUST be set to nonzero if the Checksum Coverage field equals the UDP-Lite packet length in an IR or IR-DYN packet; otherwise it MUST be set to zero.
During context initialization, context(CFP) MUST be set to nonzero if the Checksum Coverage field differs from the UDP-Lite packet length in any IR or IR-DYN packet; otherwise it MUST be set to zero.
Upon receiving the Mode parameter set to 0 (Cancel Mode Transition), the decompressor MUST stay in its current mode of operation and SHOULD refrain from sending further mode transition requests for the declined mode.
CCE() is mode-agnostic and does not update CFP or CFI context values beyond the inner packet type's own updating properties. It is useful for rare deviations of checksum coverage from the compressed pattern, avoiding context reinitialization.
CCE(OFF) updates CFP to zero, updates CFI based on whether the Checksum Coverage equals packet length (with packet-length match taking precedence over context match), and updates context(UDP-Lite Checksum Coverage). It is used when the checksum coverage seldom deviates from the compressed pattern.
Compressor logic: if hdr(Checksum Coverage) differs from both context(Checksum Coverage) and packet length when CFP=0, or differs from packet length when CFP=0 and CFI is nonzero, the field cannot be compressed and must be sent via a CCE packet or the context must be reinitialized with an IR packet.
Decompressor logic: for packet types other than IR, IR-DYN, and CCE when CFP=0, the Checksum Coverage is reconstructed from context(Checksum Coverage) if CFI=0, or inferred from the UDP-Lite packet length derived from the IP module if CFI is nonzero.
RFC 4019 defines two ROHC profiles: RTP/UDP-Lite/IP compression (profile 0x0007) and UDP-Lite/IP compression (profile 0x0008). These profiles build on RFC 3095 ROHC UDP and RTP profiles with minimal modifications to handle UDP-Lite's distinct semantics.
The Checksum Coverage Extension (CCE) packet type handles changes in checksum coverage compression state. Three variants exist: CCE() (mode-agnostic, no context update beyond inner packet), CCE(ON) (sets CFP nonzero, turns on presence of Checksum Coverage field), and CCE(OFF) (sets CFP to zero, turns off coverage field and updates CFI and stored coverage).
The CONTEXT_MEMORY feedback option (Opt Type=9, Opt Len=0, 1 octet total) informs the compressor that the decompressor lacks sufficient memory for the current compressed context structure. The compressor SHOULD respond by reducing memory requirements or stopping compression.
The Coverage Field Inferred (CFI) context parameter, used when CFP=0, determines how the Checksum Coverage is reconstructed: if CFI is nonzero, the value is inferred from the packet length (like the UDP Length field); if zero, the stored context value is used.
The Coverage Field Present (CFP) context parameter controls whether the UDP-Lite Checksum Coverage field appears in compressed packets. If CFP is nonzero, the field is sent uncompressed in every compressed packet; if zero, the field is compressed away based on the Coverage Field Inferred (CFI) flag.
The profiles support a Cancel Mode Transition mechanism: mode=0 in UOR-2, IR, and IR-DYN packets signals that the compressor declines the decompressor's requested mode transition. Upon receiving mode=0, the decompressor MUST stay in its current mode.
IANA has reserved ROHC profile identifiers 0x0007 (ROHC RTP/UDP-Lite) and 0x0008 (ROHC UDP-Lite) for the profiles defined in RFC 4019. Profile numbers 0xnn07 and 0xnn08 are also reserved for future variants of these profiles.
The security considerations of RFC 3095 apply integrally to ROHC UDP-Lite profiles without modification. No additional security concerns are introduced by the UDP-Lite-specific extensions defined in this document.
The CCE packet type octet has the format: bits 0–5 are '1 1 1 1 1 0', bit 6 is F, bit 7 is K. F,K=00 is reserved (IR-DYN collision), F,K=01 is CCE(), F,K=10 is CCE(ON), F,K=11 is CCE(OFF). The inner base header follows with its own type identifier.
The dynamic part of IR and IR-DYN packets for UDP-Lite adds a 2-octet Checksum Coverage field before the 2-octet Checksum field (octets 5–8), compared to the ROHC UDP dynamic part. The CRC-DYNAMIC covers both the Checksum Coverage and Checksum fields; CRC-STATIC covers the static fields (octets 1–4).
The general compressed ROHC UDP-Lite packet format includes: optional dynamic chains for additional IP headers, a 2-octet UDP-Lite Checksum Coverage field (present if CFP=1 or packet type is CCE), and a 2-octet UDP-Lite Checksum. The Checksum Coverage field is CRC-DYNAMIC when computing the CRC.
The Static IP Identifier (SID) flag is added to the dynamic part of the IPv4 header chain (in the flags octet alongside DF, RND, NBO). When SID=1 and RND=0, the IP-ID is constant and compressed away; when SID=0 and RND=0, Offset IP-ID encoding is used; when RND=1, IP-ID is sent uncompressed.
The UDP-Lite header replaces the UDP Length field with a 16-bit Checksum Coverage field, followed by a 16-bit Checksum. Source Port and Destination Port are each 16 bits, identical to UDP. UDP-Lite and UDP do not share the same IP protocol identifier.