Network Working Group C. Bormann Request for Comments: 3241 TZI/Uni Bremen Updates: 1332 April 2002 Category: Standards Track Robust Header Compression (ROHC) over PPP 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 (2002). All Rights Reserved.
AbstractThis document describes an option for negotiating the use of robust header compression (ROHC) on IP datagrams transmitted over the Point-to-Point Protocol (PPP). It defines extensions to the PPP Control Protocols for IPv4 and IPv6. RFC3095] may be used for compression of both IPv4 and IPv6 datagrams or packets encapsulated with multiple IP headers. The initial version of ROHC focuses on compression of the packet headers in RTP streams, while supporting compression of other UDP flows; however, it also defines a framework into which further header compression mechanisms can be plugged as new profiles. Planned additions to the set of profiles supported by ROHC will be capable of compressing TCP transport protocol headers as well. In order to establish compression of IP datagrams sent over a PPP link each end of the link must agree on a set of configuration parameters for the compression. The process of negotiating link parameters for network layer protocols is handled in PPP by a family of network control protocols (NCPs). Since there are separate NCPs for IPv4 and IPv6, this document defines configuration options to be used in both NCPs to negotiate parameters for the compression scheme.
ROHC does not require that the link layer be able to indicate the types of datagrams carried in the link layer frames. However, there are two basic types of ROHC headers defined in the ROHC framework: small-CID headers (zero or one bytes are used to identify the compression context) and large-CID headers (one or two bytes are used for this purpose). To keep the PPP packets self-describing, in this document two new types for the PPP Data Link Layer Protocol Field are defined, one for small-CID ROHC packets and one for large-CID ROHC packets. (This also avoids a problem that would occur if PPP were to negotiate which of the formats to use in each of IPCP and IPV6CP and the two negotiation processes were to arrive at different results.) A PPP ROHC sender may send packets in either small-CID or large-CID format at any time, i.e., the LARGE_CIDS parameter from [RFC3095] is not used. Any PPP ROHC receiver MUST be able to process both small- CID and large-CID ROHC packets, therefore no negotiation of this function is required. ROHC assumes that the link layer delivers packets in sequence. PPP normally does not reorder packets. When using reordering mechanisms such as multiclass multilink PPP [RFC2686], care must be taken so that packets that share the same compression context are not reordered. (Note that in certain cases, reordering may be acceptable to ROHC, such as within a sequence of packets that all do not change the decompression context.) The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119. RFC1332]. The new value and the associated option format are described in section 2.1. The option format is structured to allow future extensions to the ROHC scheme. It may be worth repeating [RFC1332], section 4: "The IP-Compression- Protocol Configuration Option is used to indicate the ability to receive compressed packets. Each end of the link must separately request this option if bi-directional compression is desired." I.e., the option describes the capabilities of the decompressor (receiving side) of the peer that sends the Configure-Request.
NOTE: The specification of link and network layer parameter negotiation for PPP [RFC1661], [RFC1331], [RFC1332] does not prohibit multiple instances of one configuration option but states that the specification of a configuration option must explicitly allow multiple instances. From the current specification of the IPCP IP-Compression-Protocol configuration option [RFC1332] one can infer that it can only be used to select a single compression protocol at any time. This was appropriate at a time when only one header compression scheme existed. With the advent of IP header compression [RFC2507, RFC2509], this did not really change, as RFC 2507 essentially superseded RFC 1144. However, with ROHC, it may now very well be desirable to use RFC 2507 TCP compression in conjunction with RFC 3095 RTP/UDP compression. The present document now updates RFC 1332 by explicitly allowing the sending of multiple instances of the IP-Compression-Protocol configuration option, each with a different value for IP- Compression-Protocol. Each type of compression protocol may independently establish its own parameters. This change is believed to not cause significant harm in existing PPP implementations, as they would most likely Configure-Nak or Configure-Reject the duplicate option, or simply happen to accept the one option they understand. To aid interoperability, the peer implementing the present specification SHOULD react to a Configure- Nak or Configure-Reject by reducing the number of options offered to one. RFC1332] and the IPv6 NCP, IPV6CP [RFC2472] may be used to negotiate IP Header Compression parameters for their respective protocols. The format of the configuration option is the same for both IPCP and IPV6CP. Description This NCP configuration option is used to negotiate parameters for Robust Header Compression. The option format is summarized below. The fields are transmitted from left to right.
Figure 1: Robust Header Compression (ROHC) Option 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type | Length | IP-Compression-Protocol | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | MAX_CID | MRRU | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | MAX_HEADER | suboptions... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Type 2 Length >= 10 The length may be increased if the presence of additional parameters is indicated by additional suboptions. IP-Compression-Protocol 0003 (hex) MAX_CID The MAX_CID field is two octets and indicates the maximum value of a context identifier. Suggested value: 15 MAX_CID must be at least 0 and at most 16383 (The value 0 implies having one context). MRRU The MRRU field is two octets and indicates the maximum reconstructed reception unit (see [RFC3095], section 5.1.1). Suggested value: 0 MAX_HEADER The largest header size in octets that may be compressed. Suggested value: 168 octets
The value of MAX_HEADER should be large enough so that at least the outer network layer header can be compressed. To increase compression efficiency MAX_HEADER should be set to a value large enough to cover common combinations of network and transport layer headers. NOTE: The four ROHC profiles defined in RFC 3095 do not provide for a MAX_HEADER parameter. The parameter MAX_HEADER defined by this document is therefore without consequence in these profiles. Other profiles (e.g., ones based on RFC 2507) can make use of the parameter by explicitly referencing it. suboptions The suboptions field consists of zero or more suboptions. Each suboption consists of a type field, a length field and zero or more parameter octets, as defined by the suboption type. The value of the length field indicates the length of the suboption in its entirety, including the lengths of the type and length fields. Figure 2: Suboption 0 1 2 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type | Length | Parameters... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Figure 3: PROFILES suboption 0 1 2 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type | Length | Profiles... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Type 1
Length 2n+2 Value n octet-pairs in ascending order, each octet-pair specifying a ROHC profile supported.
In particular, this means that taking down either of the NCPs while the other is still open means that the contexts of the channel stay active. To avoid race conditions, the same is true if both NCPs are taken down and then one or more is reopened. Taking down LCP destroys the channel, however; reopening LCP and then one or more of IPCP and IPV6CP restarts ROHC with all contexts in no-context state. RFC3095] defines a single header format for all different types of compressed headers, with a variant for small CIDs and a variant for large CIDs. Two PPP Data Link Layer Protocol Field values are specified below. ROHC small-CIDs The frame contains a ROHC packet with small CIDs as defined in [RFC3095]. Value: 0003 (hex) ROHC large-CIDs The frame contains a ROHC packet with large CIDs as defined in [RFC3095]. Value: 0005 (hex) Note that this implies that all CIDs within one ROHC packet MUST be of the same size as indicated by the Data Link Layer Protocol field, either small or large. In particular, embedded feedback MUST have a CID of the same size as indicated by the Protocol field value. For piggybacking feedback, a compressor must be able to control the feedback CID size used by the associated decompressor, ensure that all CIDs are of the same size, and indicate this size with the appropriate Protocol Field value. To make CID interpretation unambiguous when ROHC segmentation is used, all packets that contribute to a segment MUST be sent with the same Data Link Layer Protocol Field value, either 0003 or 0005, which then also applies to the CID size in the reconstructed unit. A unit reconstructed out of packets with Protocol field values that differ MUST be discarded.
RFC3095] section 5.1.2). Note, however, that according to the ROHC specification, profile 0x0000 must not be rejected [RFC3095], so it MUST be implemented by all receivers. section 126.96.36.199.3 of [RFC3095] need to be set based on the error characteristics of the underlying links. As PPP links are usually run with a strong error detection scheme [RFC1662], k_1 = n_1 = k_2 = n_2 = 1 is usually a good set of values. (Note that in any case k values need to be set low enough relative to n values to allow for the limited ability of the CRC to detect errors, i.e., the CRC will succeed for about 1/8 of the packets even in case of context damage, so k/n should be significantly less than 7/8.) RFC1661]. The security considerations of ROHC [RFC3095] apply. The use of header compression can, in rare cases, cause the misdelivery of packets. If necessary, confidentiality of packet contents should be assured by encryption.
Encryption applied at the IP layer (e.g., using IPSEC mechanisms) precludes header compression of the encrypted headers, though compression of the outer IP header and authentication/security headers is still possible as described in [RFC3095]. For RTP packets, full header compression is possible if the RTP payload is encrypted by itself without encrypting the UDP or RTP headers, as described in [RFC1889]. This method is appropriate when the UDP and RTP header information need not be kept confidential. RFC2434], the IANA policy for assigning new values for the suboption identifier shall be Specification Required: values and their meanings must be documented in an RFC or in some other permanent and readily available reference, in sufficient detail that interoperability between independent implementations is possible. The range 0 to 127 is reserved for IETF standard-track specifications; the range 128 to 254 is available for other specifications that meet this requirement (such as Informational RFCs). The value 255 is reserved for future extensibility of the present specification. The following suboption identifiers are already allocated: Suboption Document Usage identifier 1 RFC3241 Profiles The RFC 3006 compressibility hint [RFC3006] for ROHC is 0x0003pppp, where 0xpppp is the profile assumed. (Note that the PPP protocol identifier values 0003 and 0005 were taken from a previously reserved space that exhibits inefficient transparency in the presence of asynchronous control character escaping, as it is considered rather unlikely that ROHC will be used over links with highly populated ACCMs.) RFC2509]. The author would like to thank Pete McCann and James Carlson for clarifying the multiple option instance issue, Craig Fox for helping with some PPP arcana, and Lars-Erik Jonsson for supplying some final clarifications.
[RFC1332] McGregor, G., "The PPP Internet Protocol Control Protocol (IPCP)", RFC 1332, May 1992. [RFC1661] Simpson, W., Ed., "The Point-To-Point Protocol (PPP)", STD 51, RFC 1661, July 1994. [RFC2472] Haskin, E. and E. Allan, "IP Version 6 over PPP", RFC 2472, December 1998. [RFC3006] Davie, B., Casner, S., Iturralde, C., Oran, D. and J. Wroclawski, "Integrated Services in the Presence of Compressible Flows", RFC 3006, November 2000. [RFC3095] Bormann, C., Burmeister, C., Degermark, M., Fukushima, H., Hannu, H., Jonsson, L-E., Hakenberg, R., Koren, T., Le, K., Liu, Z., Martensson, A., Miyazaki, A., Svanbro, K., Wiebke, T., Yoshimura, T. and H. Zheng, "RObust Header Compression (ROHC): Framework and four profiles: RTP, UDP, ESP, and uncompressed", RFC 3095, July 2001. [RFC1144] Jacobson, V., "Compressing TCP/IP Headers for Low-Speed Serial Links", RFC 1144, February 1990. [RFC1889] Schulzrinne, H., Casner, S., Frederick, R. and V. Jacobson, "RTP: A Transport Protocol for real-time applications", RFC 1889, January 1996. [RFC2434] Alvestrand, H. and T. Narten, "Guidelines for Writing an IANA Considerations Section in RFCs", BCP 26, RFC 2434, October 1998. [RFC2507] Degermark, M., Nordgren, B. and S. Pink, "IP Header Compression", RFC 2507, February 1999. [RFC2509] Engan, M., Casner, S. and C. Bormann, "IP Header Compression over PPP", RFC 2509, February 1999. [RFC2686] Bormann, C., "The Multi-Class Extension to Multi-Link PPP", RFC 2686, September 1999.
Acknowledgement Funding for the RFC Editor function is currently provided by the Internet Society.