RFC 3409

Lower Layer Guidelines for Robust RTP/UDP/IP Header Compression

πŸ“… published December 2002, from ietf

RFC 3409: Lower Layer Guidelines for Robust RTP/UDP/IP Header Compression πŸŽ€

Okay bestie, the title block first πŸ’… This one is from the Network Working Group, written by K. Svanbro at Ericsson. It's Informational, so it's giving info, not a standard 🫢 It's dated December 2002 πŸ¦‹ The title block doesn't have any Obsoletes or Updates lines, so there's nothing it replaces or changes 🌸


Status of this Memo ✨

This memo provides information for the Internet community. It does not specify an Internet standard of any kind. Distribution of this memo is unlimited.

Copyright (C) The Internet Society (2002). All Rights Reserved.

Abstract πŸ’œ

Okay so this doc is all about lower layer guidelines for robust header compression (ROHC) 🧚 It covers the stuff ROHC needs from the layers underneath it, so people can actually put these algorithms into their systems. The whole point is to help folks slot robust header compression into systems like the ones from 3GPP, 3GPP2, ETSI, and so on πŸ”₯ It only covers the lower layer side for compressing RTP/UDP/IP and UDP/IP headers, as specified in [RFC3095]. Both general guidelines and guidelines for cellular systems get discussed here ✨

Table of Contents πŸ“

1.  Introduction.................................................. 2
2.  General guidelines............................................ 2
      2.1.  Error detection....................................... 2
      2.2.  Inferred header field information..................... 3
      2.3.  Handling of header size variation..................... 3
      2.4.  Negotiation of header compression parameters.......... 5
      2.5.  Demultiplexing of flows onto logical channels......... 5
      2.6.  Packet type identification............................ 5
      2.7.  Packet duplication.................................... 6
      2.8.  Packet reordering..................................... 6
      2.9.  Feedback packets...................................... 6
3.  Cellular system specific guidelines........................... 7
      3.1.  Handover procedures................................... 7
      3.2.  Unequal error detection (UED)......................... 8
      3.3.  Unequal error protection (UEP)........................ 9

4.  IANA Considerations........................................... 9
5.  Security Considerations....................................... 9
6.  References.................................................... 9
7.  Author's Address..............................................10
8.  Full Copyright Statement......................................11

1. Introduction 🌸

Okay this is the part where we set the scene 🎬 Almost all header compression algorithms [RFC1144, RFC2507, RFC2508] rely on some functionality from the underlying link layer. Headers, compressed or not, are expected to be delivered without any residual bit errors. IP length fields get inferred from link layer length fields. Packet type identification may be separated from the header compression scheme and done at the underlying link layer. [RFC2509], for example, explains how to put IP header compression [RFC2507] into PPP [RFC1661] πŸ’–

Like, it's so important to know about these assumptions about what the lower layers have to do when you're adding a header compression scheme to your system πŸ‘€ The stuff a specific scheme needs from lower layers might also be needed if you're prepping the integration before you know the exact details of the final scheme 🫢

This document describes lower layer guidelines for robust RTP/UDP/IP header compression [RFC3095] as specified by the ROHC working group. From here on, [RFC3095] is referred to as ROHC πŸ’… These guidelines should make it easier to fit robust header compression algorithms into cellular systems like the ones standardized by 3GPP, 3GPP2, ETSI, and so on, and also into specific link layer protocols like PPP. The document should also let you prep for this integration without needing detailed knowledge of the final header compression scheme. Relevant standardization groups that standardize link layers should, with help from this document, include the required functionality in "their" link layers to support robust header compression 🌈

So, this document clarifies the requirements ROHC puts on lower layers, while the requirements on ROHC itself can be found in [RFC3096] ✨

2. General guidelines ✨

2.1. Error detection πŸ”

Okay so all current header compression schemes [RFC1144, RFC2507, RFC2508] rely on lower layers to detect errors in (compressed) headers. This is usually done with link layer checksums covering at least the compressed header. However, any error detecting mechanism may fail to catch some bit errors, which are usually called residual bit errors 😭

As with non-compressed IP packets, lower layers must provide similar error detection, at least for ROHC headers. ROHC has been designed so that it doesn't increase the residual bit error rate (for reasonable residual error rates) compared to when no header compression is used. Headers passed up to the header decompressor should, however, have a residual bit error probability close to zero πŸ’œ

A ROHC decompressor might make use of packets with erroneous headers, even if they must be discarded. It is therefore recommended that such invalid packets get passed up to the decompressor instead of being discarded by lower layers, but the packet must then be accompanied by an error indication 🫢

2.2. Inferred header field information 🧚

Some fields of the RTP/UDP/IP headers may be classified as inferred, meaning their values are to be inferred from other values or from an underlying link layer. A ROHC decompressor requires that at least the following information can be inferred from any underlying link layer:

  • Packet Length (IPv4) / Payload Length (IPv6): The received packet (with compressed header) length.
  • Length (UDP): This field is redundant with the Packet Length (IPv4) or the Payload Length (IPv6) field.

Basically, all of these fields relate to the length of the packet the compressed header is included in 🌸 So the decompressor can infer them if one packet length value is signaled from the link layer to the decompressor on a per packet basis. This packet length value should be the length of the received packet, including the (compressed) header πŸ’…

2.3. Handling of header size variations πŸ¦‹

It's really desirable for lots of cellular link layer technologies to keep bit rate variations, and therefore packet size variations, as small as possible. But there will always be some variation in compressed header sizes, since there's a trade-off between header size variations and compression efficiency, plus things happen in the header flow and on the channel 😩 Variations in header sizes cause variations in packet sizes, depending on payload size variations too. This section only covers header size variations caused by ROHC, not packet size variations from payload size changes πŸ™ˆ

The link layer must somehow support header sizes that vary from 40 bytes (full RTP/UDP/IPv4 header) or 60 bytes (full RTP/UDP/IPv6) all the way down to 1 byte for the minimal compressed header. The small compressed headers probably dominate the header flow, and the largest headers are sent rarely, e.g., only a few times during the initialization phase of the header compression scheme ✨

Header size variations, and so packet size variations, depend on loads of factors. Unpredictable changes in the RTP, UDP, or IP headers may make compressed headers momentarily get bigger, and header sizes may depend on the packet loss rate at lower layers. Header size distributions also depend on the mode ROHC is operating in. But for, e.g., a voice application carried by RTP/UDP/IPv4, with a constant speech frame size and silence suppression, the following basic header size changes can be considered typical πŸŽ€

Right at the start of the speech session, the ROHC scheme gets initialized by sending full headers called IR/DYN. These are the biggest headers, and their sizes basically depend on the IP version. For IPv4 the size is approximately 40 bytes, and for IPv6 approximately 60 bytes. The IR/DYN headers are typically used during one round trip time, possibly interleaved with compressed headers. After that, usually only compressed headers get sent. Compressed headers may vary in size from 1 byte up to several bytes. The smallest compressed headers are used when there are no unpredictable changes in header fields, typically during a talk spurt. At the beginning of a talk spurt, compressed header sizes may increase by one or a few bytes momentarily. Apart from increases due to new talk spurts, compressed headers may increase in size momentarily due to unpredictable changes in header fields πŸ’–

ROHC gives you some ways to limit the number of header sizes produced. In some cases a larger header than needed may be used to limit how many header sizes get used. Padding octets may also be used to fill up to a desired size 🧚 Chapter 6.3 (Implementation parameters) in [RFC3095] provides optional implementation parameters that make it possible to mandate how a ROHC implementation should operate, for instance to mandate how many header sizes may be used 🌈

2.4. Negotiation of header compression parameters πŸ“

ROHC has some parameters that need to be configured in an initial setup phase. You may have to determine which header compression profiles are allowed, and also what kind of context identification (CID) mechanism to use πŸ‘€

So the lower layers supporting ROHC should include mechanisms for negotiating header compression parameters, like CID usage and header compression profile support. In certain environments it might also be desirable to have mechanisms for re-negotiating these parameters πŸ’…

The negotiation must also make sure that the compressor and decompressor use exactly the same profile. That means the set of profiles available after negotiation must not include two profile identifiers with the same 8-bit LSB value πŸ”₯

For unidirectional links, this configuration might have to be performed out-of-band or a priori. Similar methods could of course also be used for bi-directional links if direct negotiation isn't possible 🫢

2.5. Demultiplexing of flows onto logical channels πŸ¦‹

In some cellular technologies, flows get demultiplexed onto radio bearers suited to each particular flow, i.e., onto logically separated channels. For instance, real-time flows like voice and video may be carried on logically separated bearers πŸŽ€ It is recommended that this kind of demultiplexing is done in the lower layers supporting robust header compression. Doing so reduces the need for context identification in the header compression scheme. If there's a one-to-one mapping between flow and logical channel, there's no need at all for context identification at the header compression level πŸ‘‘

2.6. Packet type identification ✨

okay so header compression schemes like [RFC2507, RFC2508] used to lean on the link layer to tell different kinds of headers apart, using packet type identifiers 🫢 ROHC doesn't really need that, bestie, because every compressed ROHC header already carries a ROHC packet type identifier πŸ’… The link layer only has to provide one if ROHC packets get mixed with other packets, like ones compressed by other header compression schemes. And in that case, or if ROHC runs over a link layer that already provides packet type identification, one (1) packet type identifier must be reserved for ROHC packets. So ROHC only needs one packet type to mix with RFC 2507 flows, or to work on links where packet type identifiers are already there πŸ¦‹

2.7. Packet duplication 🌸

exact duplicates of the same packet waste transmission resources and kind of clash with compression, ngl πŸ™ˆ but duplication still happens for all sorts of reasons, and it can happen in different places along the path a packet takes.

ROHC can handle packet duplication before the compressor, but you should still avoid it for the best compression efficiency. For ROHC to work correctly, lower layers are not allowed to duplicate packets on the ROHC compressor-decompressor path πŸ”₯

2.8. Packet reordering 🧚

lower layers between the compressor and the decompressor are assumed not to reorder packets. so the decompressor has to receive packets in the same order the compressor sends them. ROHC does handle reordering before the compression point though, which is giving flexibility πŸ’œ There's no assumption that the compressor only receives packets in sequence.

2.9. Feedback packets πŸ“

ROHC can operate in three modes: Unidirectional mode (U-mode), bidirectional optimistic mode (O-mode) and bidirectional reliable mode (R-mode). A short description of these modes is in chapter 4.4 of [RFC3095] if you want the tea β˜•

in U-mode, the decompressor doesn't need to send any feedback to the compressor. O-mode and R-mode, though, do need feedback messages going from the decompressor to the compressor. Those feedback messages are small ROHC internal packets with no application payload πŸŽ€ ROHC can piggy-back feedback packets onto regular packets that have ROHC compressed headers and payload, but only if there's ROHC-type compression in both the forward and reverse directions. Piggy-backing might not be desired or possible in some cases, tho ✨

to support O-mode or R-mode, lower layers must transport feedback packets from the decompressor to the compressor. If piggy-backing isn't used, lower layers must be able to handle feedback as small stand-alone packets. And for optimal compression efficiency, feedback packets from the decompressor should reach the compressor as soon as possible πŸ’–

3. Cellular system specific guidelines ✨

okay this part is so important 😭 a big group of link layer technologies that will need robust header compression are future cellular systems, which might have a huge number of users in some years. The need for header compression is big in these systems if they want spectrum efficiency. So it matters a lot that future cellular systems can efficiently incorporate the robust header compression scheme πŸ‘‘

3.1. Handover procedures πŸ¦‹

one cellular-specific property that can affect header compression is mobility, and therefore handover (that is, a change of serving base station or radio network controller) 🌈

the main handover characteristics that matter for robust header compression are the length of the longest packet loss event due to handover (meaning the number of consecutive packet losses), and relocation of header compression context when necessary πŸ’…

depending on where the header compressor/decompressor sits in the radio access network, and on the type of handover, handover may or may not cause disruptions or packet loss events in the (compressed) header flow that the scheme cares about. For instance, if soft handover is used and the header compressor/decompressor resides above the combining point for soft handover, there will be no extra packet losses visible to the decompressor due to handover. In hard handovers, where handover introduces packet loss events, the length of the longest consecutive packet loss is the most relevant thing, so it should be minimized πŸ™ˆ

to keep ROHC running efficiently, it should be ensured that handover events don't cause significant long events of consecutive packet loss. "Significant" here relates to the kind of loss the carried real-time application can tolerate ✨

if hard handovers are performed, which may cause significant long events of consecutive packet loss, the radio access network should notify the compressor when such a handover has started and completed. The compressor could then be implemented to take proper actions and prevent the consequences of those long loss events πŸŽ€

cellular systems that support robust header compression may have internal mechanisms for transferring the header compression context between nodes where contexts may reside, at or before handover. If no such mechanism for transferring context between nodes is available, the contexts can be resynchronized by the header compression scheme itself through a context refresh. The header compressor will then do a new header compression initialization, for example by sending full headers. This will, however, increase the average header size, depending on how often a context transfer is needed 🫢 So, to reinitialize the context in those cases, the lower layers must indicate to the header compressor when a handover has occurred, so it knows when to refresh the context. Chapter 6.3 (Implementation parameters) in [RFC3095] provides optional implementation parameters that make it possible to trigger, for example, a complete context refresh 🧚

3.2. Unequal error detection (UED) πŸ’œ

Section 3.1 states that ROHC requires error detection from lower layers for at least the compressed header. However, some cellular technologies can differentiate the amount of error detection for different parts of a packet. For instance, it could be possible to have stronger error detection for the header part of a packet, if the application payload part is less sensitive to errors, for example some cellular types of speech codecs πŸ“

ROHC does not require UED from lower layers. ROHC only requires an error detection mechanism that detects errors in at least the header part of the packet. So there's no requirement on lower layers to provide separate error detection for the header and payload parts of a packet. However, overall performance may go up if UED is used ⭐

for example, if equal error detection is used in the form of one link layer checksum covering the entire packet, both header and payload, any bit error will cause the packet to be discarded at the ROHC decompressor. With this error detection mechanism it's not possible to tell errors in the header apart from errors in the payload, so the ROHC decompressor has to assume the header is damaged, even if the bit error hit the payload πŸ’€ If the header is assumed to be damaged, correct decompression can't be ensured, so that packet gets discarded. But if the application tolerates some errors in the payload, it would have been better to deliver that packet to the application and let the application judge whether the payload was usable. So with an unequal error detection scheme, where errors in the header and payload parts of a packet can be separated, more packets may be delivered to applications in some cases for the same lower layer error rates. The final benefit depends, of course, on the cost of UED for the radio interface and related protocols 🌸

3.3. Unequal error protection (UEP) 🌈

some cellular technologies can give different error probabilities to different parts of a packet, which is called unequal error protection (UEP). For instance, the lower layers may provide stronger error protection for the header part of a packet compared to the payload part πŸ‘‘

ROHC does not require UEP. UEP may be beneficial in some cases to reduce the error rate in ROHC headers, but only if it's possible to distinguish between errors in the header and payload parts of a packet, that is, only if unequal error detection (UED) is used. The benefit of UEP depends, of course, on the cost of UEP for the radio interface and related protocols πŸ¦‹

4. IANA Considerations πŸ’…

a protocol that follows these guidelines, for example [RFC3095], will require IANA to assign various numbers. This document by itself, however, does not require IANA involvement πŸŽ€

5. Security Considerations 😭πŸ”₯

okay, big security moment here πŸ™ˆ a protocol that follows these guidelines, for example [RFC3095], must be able to compress packets containing IPSEC headers according to [RFC3096]. There may be other security aspects to consider in such protocols. This document by itself, however, does not add security risks πŸ’œ

6. References πŸ“š

[RFC1144]   Jacobson, V., "Compressing TCP/IP Headers for Low-Speed
            Serial Links", RFC 1144, February 1990.

[RFC1661]   Simpson, W., Ed., "The Point-To-Point Protocol (PPP)",
            STD 51, RFC 1661, July 1994.

[RFC2507]   Degermark, M., Nordgren, B. and S. Pink, "IP Header
            Compression", RFC 2507, February 1999.

[RFC2508]   Casner, S. and V. Jacobson, "Compressing IP/UDP/RTP
            Headers for Low-Speed Serial Links", RFC 2508, February
            1999.

[RFC2509]   Engan, M., Casner, S. and C. Bormann, "IP Header
            Compression over PPP", RFC 2509, February 1999.

[RFC3095]   Borman, 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)", RFC 3095, July 2001.

[RFC3096]   Degermark, M., "Requirements for robust IP/UDP/RTP header
            compression", RFC 3096, July 2001.

7. Author's Address 🫢

Krister Svanbro
Box 920
Ericsson AB
SE-971 28 Lulea, Sweden

Phone: +46 920 20 20 77
Fax:   +46 920 20 20 99
EMail: krister.svanbro@ericsson.com

Copyright (C) The Internet Society (2002). All Rights Reserved. πŸ’–

okay bestie, the legal bit is next and it matters, so here's the vibe πŸ’…. You can copy this document and hand it out to people, and you can make derivative works that comment on it, explain it, or help people implement it, and you can publish and distribute those too. Whole thing or parts, no restrictions of any kind πŸ¦‹. The one catch is that the copyright notice and this paragraph have to stay on every copy and every derivative work 🫢.

But you CANNOT edit this document itself, no cap πŸ™…. That means you can't delete the copyright notice or the references to the Internet Society or other Internet organizations. The exceptions are if you need it for developing Internet standards, in which case you follow the copyright procedures in the Internet Standards process, or if you need to translate it into a language other than English 🌈.

The permissions above are perpetual, so they're forever πŸ’œ. The Internet Society and its successors or assigns won't take them back ⭐.

Now the disclaimer, which is in all caps because it's serious πŸ’€. This document and everything in it is provided "AS IS" ✨. THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE πŸŽ€.


Acknowledgement 🌸

Funding for the RFC Editor function is currently provided by the Internet Society 🧚. So the people who keep these RFCs tidy are funded by the same org that's on the copyright line, which is iconic, honestly πŸ‘‘.

πŸ“¦ where this page comes from