IP Header Compression over PPP
obsoleted by
- rfc-3544 — IP Header Compression over PPP
Extracted elements (25)
Context identifier spaces are not shared between TCP and non-TCP/UDP/RTP to avoid the need for additional mechanisms that would ensure no error occurs when switching a context identifier between TCP and non-TCP use.
Only one compression protocol may be active at a time per the IPCP IP-Compression-Protocol option, as the current RFC 1332 specification does not explicitly permit multiple instances of that option.
PPP does not reorder packets, so the IPHC mechanisms that allow reordering links are disabled by default. This simplifies deployment on PPP links while the mechanisms remain available for use with multiclass multilink PPP.
The NCP configuration option describes the capabilities of the decompressor (receiving side) of the peer that sends the Config-Req, in keeping with current PPP practice, even though the RFC 1332 text is ambiguous on this point.
Both IPCP (for IPv4) and IPV6CP (for IPv6) use the same NCP configuration option format to negotiate IPHC parameters. The negotiated values apply to packets whose outer header is IPv4 or IPv6, respectively.
IPv4 and IPv6 compression contexts share the same context identifier space. When parameter values negotiated via IPCP and IPV6CP differ, the compression engine allocates context identifiers from a common pool and the decompressor must examine context state to determine which parameters to apply.
The two COMPRESSED_NON_TCP formats (8-bit and 16-bit CID) may share the same link-level identifier (0x0065) because they can be distinguished by their contents; the two COMPRESSED_RTP and COMPRESSED_UDP formats require separate protocol values for 8-bit versus 16-bit CIDs.
After successful negotiation, use of FULL_HEADER, COMPRESSED_TCP, COMPRESSED_TCP_NODELTA, and COMPRESSED_NON_TCP is enabled regardless of the presence of an RTP-Compression suboption; COMPRESSED_RTP, COMPRESSED_UDP, and CONTEXT_STATE require the suboption.
MAX_HEADER SHOULD be large enough so that at least the outer network layer header can be compressed; to increase efficiency it SHOULD cover common combinations of network and transport layer headers.
NON_TCP_SPACE MUST be at least 0 and at most 65535. A value of 0 implies having one non-TCP compression context.
TCP_SPACE MUST be at least 0 and at most 255. A value of 0 implies having one TCP compression context.
When using reordering mechanisms such as multiclass multilink PPP, care must be taken so that packets sharing the same compression context are not reordered, since IPHC delta encoding requires in-order delivery.
CONTEXT_STATE (PPP protocol value 0x2065) is a link-level message sent from the decompressor to the compressor, as specified in CRTP Section 3.3.5, used for signaling context state errors.
F_MAX_PERIOD is a 2-octet field specifying the maximum number of consecutive COMPRESSED_NON_TCP headers that may be sent between FULL_HEADER headers. Suggested value is 256; value 0 implies no limit.
F_MAX_TIME is a 2-octet field specifying the maximum time interval in seconds between FULL_HEADER transmissions. Suggested value is 5 seconds; value 0 implies no time limit.
MAX_HEADER is a 2-octet field specifying the largest header size in octets that may be compressed. Suggested value is 168 octets; it should be large enough to cover common combinations of network and transport layer headers.
Nine PPP Data Link Layer Protocol Field values are defined for demultiplexing compressed datagrams: FULL_HEADER (0x0061), COMPRESSED_TCP (0x0063), COMPRESSED_TCP_NODELTA (0x2063), COMPRESSED_NON_TCP (0x0065), COMPRESSED_RTP_8 (0x0069), COMPRESSED_RTP_16 (0x2069), COMPRESSED_UDP_8 (0x0067), COMPRESSED_UDP_16 (0x2067), and CONTEXT_STATE (0x2065).
NON_TCP_SPACE is a 2-octet field indicating the maximum context identifier value for non-TCP compression contexts, used in COMPRESSED_NON_TCP, COMPRESSED_UDP, and COMPRESSED_RTP packets. Suggested value is 15; valid range is 0 to 65535.
TCP_SPACE is a 2-octet field indicating the maximum context identifier value for TCP compression contexts. Suggested value is 15; valid range is 0 to 255, where 0 implies a single context.
A new value 0x0061 is assigned to the IPCP IP-Compression-Protocol configuration option to identify IPHC as the negotiated compression protocol for both IPCP and IPV6CP.
Nine new PPP Data Link Layer Protocol Field values are defined: 0x0061 (FULL_HEADER), 0x0063 (COMPRESSED_TCP), 0x2063 (COMPRESSED_TCP_NODELTA), 0x0065 (COMPRESSED_NON_TCP), 0x0069 (COMPRESSED_RTP_8), 0x2069 (COMPRESSED_RTP_16), 0x0067 (COMPRESSED_UDP_8), 0x2067 (COMPRESSED_UDP_16), 0x2065 (CONTEXT_STATE).
Header compression can, in rare cases, cause misdelivery of packets. When packet confidentiality is required, encryption should be applied to assure it, independent of header compression.
IP-layer encryption (e.g., IPsec) precludes header compression of the encrypted headers, but compression of the outer IP header and authentication/security headers remains possible. For RTP, full header compression is possible if only the RTP payload is encrypted without encrypting UDP or RTP headers.
The NCP configuration option for IP Header Compression carries: Type (1 octet, value 2), Length (>= 14 octets), IP-Compression-Protocol (2 octets, value 0x0061), TCP_SPACE (2 octets), NON_TCP_SPACE (2 octets), F_MAX_PERIOD (2 octets), F_MAX_TIME (2 octets), MAX_HEADER (2 octets), and optional suboptions. Fields are transmitted left to right.
The RTP-Compression suboption is two octets: Type (1 octet, value 1) and Length (1 octet, value 2). Its presence in the NCP option enables use of COMPRESSED_RTP, COMPRESSED_UDP, and CONTEXT_STATE protocol identifiers.