summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc3095.txt
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
committerThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
commit4bfd864f10b68b71482b35c818559068ef8d5797 (patch)
treee3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc3095.txt
parentea76e11061bda059ae9f9ad130a9895cc85607db (diff)
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc3095.txt')
-rw-r--r--doc/rfc/rfc3095.txt9411
1 files changed, 9411 insertions, 0 deletions
diff --git a/doc/rfc/rfc3095.txt b/doc/rfc/rfc3095.txt
new file mode 100644
index 0000000..b89088e
--- /dev/null
+++ b/doc/rfc/rfc3095.txt
@@ -0,0 +1,9411 @@
+
+
+
+
+
+
+Network Working Group C. Bormann, Editor, TZI/Uni Bremen
+Request for Comments: 3095 C. Burmeister, Matsushita
+Category: Standards Track M. Degermark, Univ. of Arizona
+ H. Fukushima, Matsushita
+ H. Hannu, Ericsson
+ L-E. Jonsson, Ericsson
+ R. Hakenberg, Matsushita
+ T. Koren, Cisco
+ K. Le, Nokia
+ Z. Liu, Nokia
+ A. Martensson, Ericsson
+ A. Miyazaki, Matsushita
+ K. Svanbro, Ericsson
+ T. Wiebke, Matsushita
+ T. Yoshimura, NTT DoCoMo
+ H. Zheng, Nokia
+ July 2001
+
+
+ RObust Header Compression (ROHC):
+ Framework and four profiles: RTP, UDP, ESP, and uncompressed
+
+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 (2001). All Rights Reserved.
+
+Abstract
+
+ This document specifies a highly robust and efficient header
+ compression scheme for RTP/UDP/IP (Real-Time Transport Protocol, User
+ Datagram Protocol, Internet Protocol), UDP/IP, and ESP/IP
+ (Encapsulating Security Payload) headers.
+
+ Existing header compression schemes do not work well when used over
+ links with significant error rates and long round-trip times. For
+ many bandwidth limited links where header compression is essential,
+ such characteristics are common.
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 1]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ This is done in a framework designed to be extensible. For example,
+ a scheme for compressing TCP/IP headers will be simple to add, and is
+ in development. Headers specific to Mobile IPv4 are not subject to
+ special treatment, but are expected to be compressed sufficiently
+ well by the provided methods for compression of sequences of
+ extension headers and tunneling headers. For the most part, the same
+ will apply to work in progress on Mobile IPv6, but future work might
+ be required to handle some extension headers, when a standards track
+ Mobile IPv6 has been completed.
+
+Table of Contents
+
+ 1. Introduction....................................................6
+ 2. Terminology.....................................................8
+ 2.1. Acronyms.....................................................13
+ 3. Background.....................................................14
+ 3.1. Header compression fundamentals..............................14
+ 3.2. Existing header compression schemes..........................14
+ 3.3. Requirements on a new header compression scheme..............16
+ 3.4. Classification of header fields..............................17
+ 4. Header compression framework...................................18
+ 4.1. Operating assumptions........................................18
+ 4.2. Dynamicity...................................................19
+ 4.3. Compression and decompression states.........................21
+ 4.3.1. Compressor states..........................................21
+ 4.3.1.1. Initialization and Refresh (IR) State....................22
+ 4.3.1.2. First Order (FO) State...................................22
+ 4.3.1.3. Second Order (SO) State..................................22
+ 4.3.2. Decompressor states........................................23
+ 4.4. Modes of operation...........................................23
+ 4.4.1. Unidirectional mode -- U-mode..............................24
+ 4.4.2. Bidirectional Optimistic mode -- O-mode....................25
+ 4.4.3. Bidirectional Reliable mode -- R-mode......................25
+ 4.5. Encoding methods.............................................25
+ 4.5.1. Least Significant Bits (LSB) encoding .....................25
+ 4.5.2. Window-based LSB encoding (W-LSB encoding).................28
+ 4.5.3. Scaled RTP Timestamp encoding .............................28
+ 4.5.4. Timer-based compression of RTP Timestamp...................31
+ 4.5.5. Offset IP-ID encoding......................................34
+ 4.5.6. Self-describing variable-length values ....................35
+ 4.5.7. Encoded values across several fields in compressed headers 36
+ 4.6. Errors caused by residual errors.............................36
+ 4.7. Impairment considerations....................................37
+ 5. The protocol...................................................39
+ 5.1. Data structures..............................................39
+ 5.1.1. Per-channel parameters.....................................39
+ 5.1.2. Per-context parameters, profiles...........................40
+ 5.1.3. Contexts and context identifiers ..........................41
+
+
+
+Bormann, et al. Standards Track [Page 2]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ 5.2. ROHC packets and packet types................................41
+ 5.2.1. ROHC feedback .............................................43
+ 5.2.2. ROHC feedback format ......................................45
+ 5.2.3. ROHC IR packet type .......................................47
+ 5.2.4. ROHC IR-DYN packet type ...................................48
+ 5.2.5. ROHC segmentation..........................................49
+ 5.2.5.1. Segmentation usage considerations........................49
+ 5.2.5.2. Segmentation protocol....................................50
+ 5.2.6. ROHC initial decompressor processing.......................51
+ 5.2.7. ROHC RTP packet formats from compressor to decompressor....53
+ 5.2.8. Parameters needed for mode transition in ROHC RTP..........54
+ 5.3. Operation in Unidirectional mode.............................55
+ 5.3.1. Compressor states and logic (U-mode).......................55
+ 5.3.1.1. State transition logic (U-mode)..........................55
+ 5.3.1.1.1. Optimistic approach, upwards transition................55
+ 5.3.1.1.2. Timeouts, downward transition..........................56
+ 5.3.1.1.3. Need for updates, downward transition..................56
+ 5.3.1.2. Compression logic and packets used (U-mode)..............56
+ 5.3.1.3. Feedback in Unidirectional mode..........................56
+ 5.3.2. Decompressor states and logic (U-mode).....................56
+ 5.3.2.1. State transition logic (U-mode)..........................57
+ 5.3.2.2. Decompression logic (U-mode).............................57
+ 5.3.2.2.1. Decide whether decompression is allowed................57
+ 5.3.2.2.2. Reconstruct and verify the header......................57
+ 5.3.2.2.3. Actions upon CRC failure...............................58
+ 5.3.2.2.4. Correction of SN LSB wraparound........................60
+ 5.3.2.2.5. Repair of incorrect SN updates.........................61
+ 5.3.2.3. Feedback in Unidirectional mode..........................62
+ 5.4. Operation in Bidirectional Optimistic mode...................62
+ 5.4.1. Compressor states and logic (O-mode).......................62
+ 5.4.1.1. State transition logic...................................63
+ 5.4.1.1.1. Negative acknowledgments (NACKs), downward transition..63
+ 5.4.1.1.2. Optional acknowledgments, upwards transition...........63
+ 5.4.1.2. Compression logic and packets used.......................63
+ 5.4.2. Decompressor states and logic (O-mode).....................64
+ 5.4.2.1. Decompression logic, timer-based timestamp decompression.64
+ 5.4.2.2. Feedback logic (O-mode)..................................64
+ 5.5. Operation in Bidirectional Reliable mode.....................65
+ 5.5.1. Compressor states and logic (R-mode).......................65
+ 5.5.1.1. State transition logic (R-mode)..........................65
+ 5.5.1.1.1. Upwards transition.....................................65
+ 5.5.1.1.2. Downward transition....................................66
+ 5.5.1.2. Compression logic and packets used (R-mode)..............66
+ 5.5.2. Decompressor states and logic (R-mode).....................68
+ 5.5.2.1. Decompression logic (R-mode).............................68
+ 5.5.2.2. Feedback logic (R-mode)..................................68
+ 5.6. Mode transitions.............................................69
+ 5.6.1. Compression and decompression during mode transitions......70
+
+
+
+Bormann, et al. Standards Track [Page 3]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ 5.6.2. Transition from Unidirectional to Optimistic mode..........71
+ 5.6.3. From Optimistic to Reliable mode...........................72
+ 5.6.4. From Unidirectional to Reliable mode.......................72
+ 5.6.5. From Reliable to Optimistic mode...........................72
+ 5.6.6. Transition to Unidirectional mode..........................73
+ 5.7. Packet formats...............................................74
+ 5.7.1. Packet type 0: UO-0, R-0, R-0-CRC .........................78
+ 5.7.2. Packet type 1 (R-mode): R-1, R-1-TS, R-1-ID ...............79
+ 5.7.3. Packet type 1 (U/O-mode): UO-1, UO-1-ID, UO-1-TS ..........80
+ 5.7.4. Packet type 2: UOR-2 ......................................82
+ 5.7.5. Extension formats..........................................83
+ 5.7.5.1. RND flags and packet types...............................88
+ 5.7.5.2. Flags/Fields in context..................................89
+ 5.7.6. Feedback packets and formats...............................90
+ 5.7.6.1. Feedback formats for ROHC RTP............................90
+ 5.7.6.2. ROHC RTP Feedback options................................91
+ 5.7.6.3. The CRC option...........................................92
+ 5.7.6.4. The REJECT option........................................92
+ 5.7.6.5. The SN-NOT-VALID option..................................92
+ 5.7.6.6. The SN option............................................93
+ 5.7.6.7. The CLOCK option.........................................93
+ 5.7.6.8. The JITTER option........................................93
+ 5.7.6.9. The LOSS option..........................................94
+ 5.7.6.10. Unknown option types....................................94
+ 5.7.6.11. RTP feedback example....................................94
+ 5.7.7. RTP IR and IR-DYN packets..................................96
+ 5.7.7.1. Basic structure of the IR packet.........................96
+ 5.7.7.2. Basic structure of the IR-DYN packet.....................98
+ 5.7.7.3. Initialization of IPv6 Header [IPv6].....................99
+ 5.7.7.4. Initialization of IPv4 Header [IPv4, section 3.1].......100
+ 5.7.7.5. Initialization of UDP Header [RFC-768]..................101
+ 5.7.7.6. Initialization of RTP Header [RTP]......................102
+ 5.7.7.7. Initialization of ESP Header [ESP, section 2]...........103
+ 5.7.7.8. Initialization of Other Headers.........................104
+ 5.8. List compression............................................104
+ 5.8.1. Table-based item compression..............................105
+ 5.8.1.1. Translation table in R-mode.............................105
+ 5.8.1.2. Translation table in U/O-modes..........................106
+ 5.8.2. Reference list determination..............................106
+ 5.8.2.1. Reference list in R-mode and U/O-mode...................107
+ 5.8.3. Encoding schemes for the compressed list..................109
+ 5.8.4. Special handling of IP extension headers..................112
+ 5.8.4.1. Next Header field.......................................112
+ 5.8.4.2. Authentication Header (AH)..............................114
+ 5.8.4.3. Encapsulating Security Payload Header (ESP).............115
+ 5.8.4.4. GRE Header [RFC 2784, RFC 2890].........................117
+ 5.8.5. Format of compressed lists in Extension 3.................119
+ 5.8.5.1. Format of IP Extension Header(s) field..................119
+
+
+
+Bormann, et al. Standards Track [Page 4]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ 5.8.5.2. Format of Compressed CSRC List..........................120
+ 5.8.6. Compressed list formats...................................120
+ 5.8.6.1. Encoding Type 0 (generic scheme)........................120
+ 5.8.6.2. Encoding Type 1 (insertion only scheme).................122
+ 5.8.6.3. Encoding Type 2 (removal only scheme)...................123
+ 5.8.6.4. Encoding Type 3 (remove then insert scheme).............124
+ 5.8.7. CRC coverage for extension headers........................124
+ 5.9. Header compression CRCs, coverage and polynomials...........125
+ 5.9.1. IR and IR-DYN packet CRCs.................................125
+ 5.9.2. CRCs in compressed headers................................125
+ 5.10. ROHC UNCOMPRESSED -- no compression (Profile 0x0000).......126
+ 5.10.1. IR packet................................................126
+ 5.10.2. Normal packet............................................127
+ 5.10.3. States and modes.........................................128
+ 5.10.4. Feedback.................................................129
+ 5.11. ROHC UDP -- non-RTP UDP/IP compression (Profile 0x0002)....129
+ 5.11.1. Initialization...........................................130
+ 5.11.2. States and modes.........................................130
+ 5.11.3. Packet types.............................................131
+ 5.11.4. Extensions...............................................132
+ 5.11.5. IP-ID....................................................133
+ 5.11.6. Feedback.................................................133
+ 5.12. ROHC ESP -- ESP/IP compression (Profile 0x0003)............133
+ 5.12.1. Initialization...........................................133
+ 5.12.2. Packet types.............................................134
+ 6. Implementation issues.........................................134
+ 6.1. Reverse decompression.......................................134
+ 6.2. RTCP........................................................135
+ 6.3. Implementation parameters and signals.......................136
+ 6.3.1. ROHC implementation parameters at compressor..............137
+ 6.3.2. ROHC implementation parameters at decompressor............138
+ 6.4. Handling of resource limitations at the decompressor........139
+ 6.5. Implementation structures...................................139
+ 6.5.1. Compressor context........................................139
+ 6.5.2. Decompressor context......................................141
+ 6.5.3. List compression: Sliding windows in R-mode and U/O-mode..142
+ 7. Security Considerations.......................................143
+ 8. IANA Considerations...........................................144
+ 9. Acknowledgments...............................................145
+ 10. Intellectual Property Right Claim Considerations.............145
+ 11. References...................................................146
+ 11.1. Normative References.......................................146
+ 11.2. Informative References.....................................147
+ 12. Authors' Addresses...........................................148
+ Appendix A. Detailed classification of header fields.............152
+ A.1. General classification......................................153
+ A.1.1. IPv6 header fields........................................153
+ A.1.2. IPv4 header fields........................................155
+
+
+
+Bormann, et al. Standards Track [Page 5]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ A.1.3. UDP header fields.........................................157
+ A.1.4. RTP header fields.........................................157
+ A.1.5. Summary for IP/UDP/RTP....................................159
+ A.2. Analysis of change patterns of header fields................159
+ A.2.1. IPv4 Identification.......................................162
+ A.2.2. IP Traffic-Class / Type-Of-Service........................163
+ A.2.3. IP Hop-Limit / Time-To-Live...............................163
+ A.2.4. UDP Checksum..............................................163
+ A.2.5. RTP CSRC Counter..........................................164
+ A.2.6. RTP Marker................................................164
+ A.2.7. RTP Payload Type..........................................164
+ A.2.8. RTP Sequence Number.......................................164
+ A.2.9. RTP Timestamp.............................................164
+ A.2.10. RTP Contributing Sources (CSRC)..........................165
+ A.3. Header compression strategies...............................165
+ A.3.1. Do not send at all........................................165
+ A.3.2. Transmit only initially...................................165
+ A.3.3. Transmit initially, but be prepared to update.............166
+ A.3.4. Be prepared to update or send as-is frequently............166
+ A.3.5. Guarantee continuous robustness...........................166
+ A.3.6. Transmit as-is in all packets.............................167
+ A.3.7. Establish and be prepared to update delta.................167
+ Full Copyright Statement..........................................168
+
+1. Introduction
+
+ During the last five years, two communication technologies in
+ particular have become commonly used by the general public: cellular
+ telephony and the Internet. Cellular telephony has provided its
+ users with the revolutionary possibility of always being reachable
+ with reasonable service quality no matter where they are. The main
+ service provided by the dedicated terminals has been speech. The
+ Internet, on the other hand, has from the beginning been designed for
+ multiple services and its flexibility for all kinds of usage has been
+ one of its strengths. Internet terminals have usually been general-
+ purpose and have been attached over fixed connections. The
+ experienced quality of some services (such as Internet telephony) has
+ sometimes been low.
+
+ Today, IP telephony is gaining momentum thanks to improved technical
+ solutions. It seems reasonable to believe that in the years to come,
+ IP will become a commonly used way to carry telephony. Some future
+ cellular telephony links might also be based on IP and IP telephony.
+ Cellular phones may have become more general-purpose, and may have IP
+ stacks supporting not only audio and video, but also web browsing,
+ email, gaming, etc.
+
+
+
+
+
+Bormann, et al. Standards Track [Page 6]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ One of the scenarios we are envisioning might then be the one in
+ Figure 1.1, where two mobile terminals are communicating with each
+ other. Both are connected to base stations over cellular links, and
+ the base stations are connected to each other through a wired (or
+ possibly wireless) network. Instead of two mobile terminals, there
+ could of course be one mobile and one wired terminal, but the case
+ with two cellular links is technically more demanding.
+
+ Mobile Base Base Mobile
+ Terminal Station Station Terminal
+
+
+ | ~ ~ ~ \ / \ / ~ ~ ~ ~ |
+ | | | |
+ +--+ | | +--+
+ | | | | | |
+ | | | | | |
+ +--+ | | +--+
+ | |
+ |=========================|
+
+ Cellular Wired Cellular
+ Link Network Link
+
+ Figure 1.1 : Scenario for IP telephony over cellular links
+
+ It is obvious that the wired network can be IP-based. With the
+ cellular links, the situation is less clear. IP could be terminated
+ in the fixed network, and special solutions implemented for each
+ supported service over the cellular link. However, this would limit
+ the flexibility of the services supported. If technically and
+ economically feasible, a solution with pure IP all the way from
+ terminal to terminal would have certain advantages. However, to make
+ this a viable alternative, a number of problems have to be addressed,
+ in particular problems regarding bandwidth efficiency.
+
+ For cellular phone systems, it is of vital importance to use the
+ scarce radio resources in an efficient way. A sufficient number of
+ users per cell is crucial, otherwise deployment costs will be
+ prohibitive. The quality of the voice service should also be as good
+ as in today's cellular systems. It is likely that even with support
+ for new services, lower quality of the voice service is acceptable
+ only if costs are significantly reduced.
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 7]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ A problem with IP over cellular links when used for interactive voice
+ conversations is the large header overhead. Speech data for IP
+ telephony will most likely be carried by RTP [RTP]. A packet will
+ then, in addition to link layer framing, have an IP [IPv4] header (20
+ octets), a UDP [UDP] header (8 octets), and an RTP header (12 octets)
+ for a total of 40 octets. With IPv6 [IPv6], the IP header is 40
+ octets for a total of 60 octets. The size of the payload depends on
+ the speech coding and frame sizes being used and may be as low as
+ 15-20 octets.
+
+ From these numbers, the need for reducing header sizes for efficiency
+ reasons is obvious. However, cellular links have characteristics
+ that make header compression as defined in [IPHC,CRTP] perform less
+ than well. The most important characteristic is the lossy behavior
+ of cellular links, where a bit error rate (BER) as high as 1e-3 must
+ be accepted to keep the radio resources efficiently utilized. In
+ severe operating situations, the BER can be as high as 1e-2. The
+ other problematic characteristic is the long round-trip time (RTT) of
+ the cellular link, which can be as high as 100-200 milliseconds. An
+ additional problem is that the residual BER is nontrivial, i.e.,
+ lower layers can sometimes deliver frames containing undetected
+ errors. A viable header compression scheme for cellular links must
+ be able to handle loss on the link between the compression and
+ decompression point as well as loss before the compression point.
+
+ Bandwidth is the most costly resource in cellular links. Processing
+ power is very cheap in comparison. Implementation or computational
+ simplicity of a header compression scheme is therefore of less
+ importance than its compression ratio and robustness.
+
+2. Terminology
+
+ 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.
+
+ BER
+
+ Bit Error Rate. Cellular radio links can have a fairly high BER.
+ In this document BER is usually given as a probability, but one
+ also needs to consider the error distribution as bit errors are
+ not independent.
+
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 8]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ Cellular links
+
+ Wireless links between mobile terminals and base stations.
+
+ Compression efficiency
+
+ The performance of a header compression scheme can be described
+ with three parameters: compression efficiency, robustness and
+ compression transparency. The compression efficiency is
+ determined by how much the header sizes are reduced by the
+ compression scheme.
+
+ Compression transparency
+
+ The performance of a header compression scheme can be described
+ with three parameters: compression efficiency, robustness, and
+ compression transparency. The compression transparency is a
+ measure of the extent to which the scheme ensures that the
+ decompressed headers are semantically identical to the original
+ headers. If all decompressed headers are semantically identical
+ to the corresponding original headers, the transparency is 100
+ percent. Compression transparency is high when damage propagation
+ is low.
+
+ Context
+
+ The context of the compressor is the state it uses to compress a
+ header. The context of the decompressor is the state it uses to
+ decompress a header. Either of these or the two in combination
+ are usually referred to as "context", when it is clear which is
+ intended. The context contains relevant information from previous
+ headers in the packet stream, such as static fields and possible
+ reference values for compression and decompression. Moreover,
+ additional information describing the packet stream is also part
+ of the context, for example information about how the IP
+ Identifier field changes and the typical inter-packet increase in
+ sequence numbers or timestamps.
+
+ Context damage
+
+ When the context of the decompressor is not consistent with the
+ context of the compressor, decompression may fail to reproduce the
+ original header. This situation can occur when the context of the
+ decompressor has not been initialized properly or when packets
+ have been lost or damaged between compressor and decompressor.
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 9]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ Packets which cannot be decompressed due to inconsistent contexts
+ are said to be lost due to context damage. Packets that are
+ decompressed but contain errors due to inconsistent contexts are
+ said to be damaged due to context damage.
+
+ Context repair mechanism
+
+ Context repair mechanisms are mechanisms that bring the contexts
+ in sync when they were not. This is needed to avoid excessive
+ loss due to context damage. Examples are the context request
+ mechanism of CRTP, the NACK mechanisms of O- and R-mode, and the
+ periodic refreshes of U-mode.
+
+ Note that there are also mechanisms that prevent (some) context
+ inconsistencies from occurring, for example the ACK-based updates
+ of the context in R-mode, the repetitions after change in U- and
+ O-mode, and the CRCs which protect context updating information.
+
+ CRC-DYNAMIC
+
+ Opposite of CRC-STATIC.
+
+ CRC-STATIC
+
+ A CRC over the original header is the primary mechanism used by
+ ROHC to detect incorrect decompression. In order to decrease
+ computational complexity, the fields of the header are
+ conceptually rearranged when the CRC is computed, so that it is
+ first computed over octets which are static (called CRC-STATIC in
+ this document) and then over octets whose values are expected to
+ change between packets (CRC-DYNAMIC). In this manner, the
+ intermediate result of the CRC computation, after it has covered
+ the CRC-STATIC fields, can be reused for several packets. The
+ restarted CRC computation only covers the CRC-DYNAMIC octets. See
+ section 5.9.
+
+ Damage propagation
+
+ Delivery of incorrect decompressed headers, due to errors in
+ (i.e., loss of or damage to) previous header(s) or feedback.
+
+ Loss propagation
+
+ Loss of headers, due to errors in (i.e., loss of or damage to)
+ previous header(s)or feedback.
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 10]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ Error detection
+
+ Detection of errors. If error detection is not perfect, there
+ will be residual errors.
+
+ Error propagation
+
+ Damage propagation or loss propagation.
+
+ Header compression profile
+
+ A header compression profile is a specification of how to compress
+ the headers of a certain kind of packet stream over a certain kind
+ of link. Compression profiles provide the details of the header
+ compression framework introduced in this document. The profile
+ concept makes use of profile identifiers to separate different
+ profiles which are used when setting up the compression scheme.
+ All variations and parameters of the header compression scheme
+ that are not part of the context state are handled by different
+ profile identifiers.
+
+ Packet
+
+ Generally, a unit of transmission and reception (protocol data
+ unit). Specifically, when contrasted with "frame", the packet
+ compressed and then decompressed by ROHC. Also called
+ "uncompressed packet".
+
+ Packet Stream
+
+ A sequence of packets where the field values and change patterns
+ of field values are such that the headers can be compressed using
+ the same context.
+
+ Pre-HC links
+
+ The Pre-HC links are all links that a packet has traversed before
+ the header compression point. If we consider a path with cellular
+ links as first and last hops, the Pre-HC links for the compressor
+ at the last link are the first cellular link plus the wired links
+ in between.
+
+ Residual error
+
+ Error introduced during transmission and not detected by lower-
+ layer error detection schemes.
+
+
+
+
+
+Bormann, et al. Standards Track [Page 11]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ Robustness
+
+ The performance of a header compression scheme can be described
+ with three parameters: compression efficiency, robustness, and
+ compression transparency. A robust scheme tolerates loss and
+ residual errors on the link over which header compression takes
+ place without losing additional packets or introducing additional
+ errors in decompressed headers.
+
+ RTT
+
+ The RTT (round-trip time) is the time elapsing from the moment the
+ compressor sends a packet until it receives feedback related to
+ that packet (when such feedback is sent).
+
+ Spectrum efficiency
+
+ Radio resources are limited and expensive. Therefore they must be
+ used efficiently to make the system economically feasible. In
+ cellular systems this is achieved by maximizing the number of
+ users served within each cell, while the quality of the provided
+ services is kept at an acceptable level. A consequence of
+ efficient spectrum use is a high rate of errors (frame loss and
+ residual bit errors), even after channel coding with error
+ correction.
+
+ String
+
+ A sequence of headers in which the values of all fields being
+ compressed change according to a pattern which is fixed with
+ respect to a sequence number. Each header in a string can be
+ compressed by representing it with a ROHC header which essentially
+ only carries an encoded sequence number. Fields not being
+ compressed (e.g., random IP-ID, UDP Checksum) are irrelevant to
+ this definition.
+
+ Timestamp stride
+
+ The timestamp stride (TS_STRIDE) is the expected increase in the
+ timestamp value between two RTP packets with consecutive sequence
+ numbers.
+
+
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 12]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+2.1. Acronyms
+
+ This section lists most acronyms used for reference.
+
+ AH Authentication Header.
+ CID Context Identifier.
+ CRC Cyclic Redundancy Check. Error detection mechanism.
+ CRTP Compressed RTP. RFC 2508.
+ CTCP Compressed TCP. Also called VJ header compression. RFC 1144.
+ ESP Encapsulating Security Payload.
+ FC Full Context state (decompressor).
+ FO First Order state (compressor).
+ GRE Generic Routing Encapsulation. RFC 2784, RFC 2890.
+ HC Header Compression.
+ IPHC IP Header Compression. RFC 2507.
+ IPX Flag in Extension 2.
+ IR Initiation and Refresh state (compressor). Also IR packet.
+ IR-DYN IR-DYN packet.
+ LSB Least Significant Bits.
+ MRRU Maximum Reconstructed Reception Unit.
+ MTU Maximum Transmission Unit.
+ MSB Most Significant Bits.
+ NBO Flag indicating whether the IP-ID is in Network Byte Order.
+ NC No Context state (decompressor).
+ O-mode Bidirectional Optimistic mode.
+ PPP Point-to-Point Protocol.
+ R-mode Bidirectional Reliable mode.
+ RND Flag indicating whether the IP-ID behaves randomly.
+ ROHC RObust Header Compression.
+ RTCP Real-Time Control Protocol. See RTP.
+ RTP Real-Time Protocol. RFC 1889.
+ RTT Round Trip Time (see section 2).
+ SC Static Context state (decompressor).
+ SN (compressed) Sequence Number. Usually RTP Sequence Number.
+ SO Second Order state (compressor).
+ SPI Security Parameters Index.
+ SSRC Sending source. Field in RTP header.
+ CSRC Contributing source. Optional list of CSRCs in RTP header.
+ TC Traffic Class. Octet in IPv6 header. See also TOS.
+ TOS Type Of Service. Octet in IPv4 header. See also TC.
+ TS (compressed) RTP Timestamp.
+ U-mode Unidirectional mode.
+ W-LSB Window based LSB encoding. See section 4.5.2.
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 13]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+3. Background
+
+ This chapter provides a background to the subject of header
+ compression. The fundamental ideas are described together with
+ existing header compression schemes. Their drawbacks and
+ requirements are then discussed, providing motivation for new header
+ compression solutions.
+
+3.1. Header compression fundamentals
+
+ The main reason why header compression can be done at all is the fact
+ that there is significant redundancy between header fields, both
+ within the same packet header but in particular between consecutive
+ packets belonging to the same packet stream. By sending static field
+ information only initially and utilizing dependencies and
+ predictability for other fields, the header size can be significantly
+ reduced for most packets.
+
+ Relevant information from past packets is maintained in a context.
+ The context information is used to compress (decompress) subsequent
+ packets. The compressor and decompressor update their contexts upon
+ certain events. Impairment events may lead to inconsistencies
+ between the contexts of the compressor and decompressor, which in
+ turn may cause incorrect decompression. A robust header compression
+ scheme needs mechanisms for avoiding context inconsistencies and also
+ needs mechanisms for making the contexts consistent when they were
+ not.
+
+3.2. Existing header compression schemes
+
+ The original header compression scheme, CTCP [VJHC], was invented by
+ Van Jacobson. CTCP compresses the 40 octet IP+TCP header to 4
+ octets. The CTCP compressor detects transport-level retransmissions
+ and sends a header that updates the context completely when they
+ occur. This repair mechanism does not require any explicit signaling
+ between compressor and decompressor.
+
+ A general IP header compression scheme, IP header compression [IPHC],
+ improves somewhat on CTCP and can compress arbitrary IP, TCP, and UDP
+ headers. When compressing non-TCP headers, IPHC does not use delta
+ encoding and is robust. When compressing TCP, the repair mechanism
+ of CTCP is augmented with a link-level nacking scheme which speeds up
+ the repair. IPHC does not compress RTP headers.
+
+ CRTP [CRTP, IPHC] by Casner and Jacobson is a header compression
+ scheme that compresses 40 octets of IPv4/UDP/RTP headers to a minimum
+ of 2 octets when the UDP Checksum is not enabled. If the UDP
+ Checksum is enabled, the minimum CRTP header is 4 octets. CRTP
+
+
+
+Bormann, et al. Standards Track [Page 14]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ cannot use the same repair mechanism as CTCP since UDP/RTP does not
+ retransmit. Instead, CRTP uses explicit signaling messages from
+ decompressor to compressor, called CONTEXT_STATE messages, to
+ indicate that the context is out of sync. The link round-trip time
+ will thus limit the speed of this context repair mechanism.
+
+ On lossy links with long round-trip times, such as most cellular
+ links, CRTP does not perform well. Each lost packet over the link
+ causes several subsequent packets to be lost since the context is out
+ of sync during at least one link round-trip time. This behavior is
+ documented in [CRTPC]. For voice conversations such long loss events
+ will degrade the voice quality. Moreover, bandwidth is wasted by the
+ large headers sent by CRTP when updating the context. [CRTPC] found
+ that CRTP did not perform well enough for a lossy cellular link. It
+ is clear that CRTP alone is not a viable header compression scheme
+ for IP telephony over cellular links.
+
+ To avoid losing packets due to the context being out of sync, CRTP
+ decompressors can attempt to repair the context locally by using a
+ mechanism known as TWICE. Each CRTP packet contains a counter which
+ is incremented by one for each packet sent out by the CRTP
+ compressor. If the counter increases by more than one, at least one
+ packet was lost over the link. The decompressor then attempts to
+ repair the context by guessing how the lost packet(s) would have
+ updated it. The guess is then verified by decompressing the packet
+ and checking the UDP Checksum -- if it succeeds, the repair is deemed
+ successful and the packet can be forwarded or delivered. TWICE
+ derives its name from the observation that when the compressed packet
+ stream is regular, the correct guess is to apply the update in the
+ current packet twice. [CRTPC] found that even with TWICE, CRTP
+ doubled the number of lost packets. TWICE improves CRTP performance
+ significantly. However, there are several problems with using TWICE:
+
+ 1) It becomes mandatory to use the UDP Checksum:
+
+ - the minimal compressed header size increases by 100% to 4
+ octets.
+
+ - most speech codecs developed for cellular links tolerate errors
+ in the encoded data. Such codecs will not want to enable the
+ UDP Checksum, since they do want damaged packets to be
+ delivered.
+
+ - errors in the payload will make the UDP Checksum fail when the
+ guess is correct (and might make it succeed when the guess is
+ wrong).
+
+
+
+
+
+Bormann, et al. Standards Track [Page 15]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ 2) Loss in an RTP stream that occurs before the compression point
+ will make updates in CRTP headers less regular. Simple-minded
+ versions of TWICE will then perform badly. More sophisticated
+ versions would need more repair attempts to succeed.
+
+3.3. Requirements on a new header compression scheme
+
+ The major problem with CRTP is that it is not sufficiently robust
+ against packets being damaged between compressor and decompressor. A
+ viable header compression scheme must be less fragile. This
+ increased robustness must be obtained without increasing the
+ compressed header size; a larger header would make IP telephony over
+ cellular links economically unattractive.
+
+ A major cause of the bad performance of CRTP over cellular links is
+ the long link round-trip time, during which many packets are lost
+ when the context is out of sync. This problem can be attacked
+ directly by finding ways to reduce the link round-trip time. Future
+ generations of cellular technologies may indeed achieve lower link
+ round-trip times. However, these will probably always be fairly
+ high. The benefits in terms of lower loss and smaller bandwidth
+ demands if the context can be repaired locally will be present even
+ if the link round-trip time is decreased. A reliable way to detect a
+ successful context repair is then needed.
+
+ One might argue that a better way to solve the problem is to improve
+ the cellular link so that packet loss is less likely to occur. Such
+ modifications do not appear to come for free, however. If links were
+ made (almost) error free, the system might not be able to support a
+ sufficiently large number of users per cell and might thus be
+ economically infeasible.
+
+ One might also argue that the speech codecs should be able to deal
+ with the kind of packet loss induced by CRTP, in particular since the
+ speech codecs probably must be able to deal with packet loss anyway
+ if the RTP stream crosses the Internet. While the latter is true,
+ the kind of loss induced by CRTP is difficult to deal with. It is
+ usually not possible to completely hide a loss event where well over
+ 100 ms worth of sound is completely lost. If such loss occurs
+ frequently at both ends of the end-to-end path, the speech quality
+ will suffer.
+
+ A detailed description of the requirements specified for ROHC may be
+ found in [REQ].
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 16]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+3.4. Classification of header fields
+
+ As mentioned earlier, header compression is possible due to the fact
+ that there is much redundancy between header field values within
+ packets, but especially between consecutive packets. To utilize
+ these properties for header compression, it is important to
+ understand the change patterns of the various header fields.
+
+ All header fields have been classified in detail in appendix A. The
+ fields are first classified at a high level and then some of them are
+ studied more in detail. Finally, the appendix concludes with
+ recommendations on how the various fields should be handled by header
+ compression algorithms. The main conclusion that can be drawn is
+ that most of the header fields can easily be compressed away since
+ they never or seldom change. Only 5 fields, with a combined size of
+ about 10 octets, need more sophisticated mechanisms. These fields
+ are:
+
+ - IPv4 Identification (16 bits) - IP-ID
+ - UDP Checksum (16 bits)
+ - RTP Marker (1 bit) - M-bit
+ - RTP Sequence Number (16 bits) - SN
+ - RTP Timestamp (32 bits) - TS
+
+ The analysis in Appendix A reveals that the values of the TS and IP-
+ ID fields can usually be predicted from the RTP Sequence Number,
+ which increments by one for each packet emitted by an RTP source.
+ The M-bit is also usually the same, but needs to be communicated
+ explicitly occasionally. The UDP Checksum should not be predicted
+ and is sent as-is when enabled.
+
+ The way ROHC RTP compression operates, then, is to first establish
+ functions from SN to the other fields, and then reliably communicate
+ the SN. Whenever a function from SN to another field changes, i.e.,
+ the existing function gives a result which is different from the
+ field in the header to be compressed, additional information is sent
+ to update the parameters of that function.
+
+ Headers specific to Mobile IP (for IPv4 or IPv6) do not receive any
+ special treatment in this document. They are compressible, however,
+ and it is expected that the compression efficiency for Mobile IP
+ headers will be good enough due to the handling of extension header
+ lists and tunneling headers. It would be relatively painless to
+ introduce a new ROHC profile with special treatment for Mobile IPv6
+ specific headers should the completed work on the Mobile IPv6
+ protocols (work in progress in the IETF) make that necessary.
+
+
+
+
+
+Bormann, et al. Standards Track [Page 17]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+4. Header compression framework
+
+4.1. Operating assumptions
+
+ Cellular links, which are a primary target for ROHC, have a number of
+ characteristics that are described briefly here. ROHC requires
+ functionality from lower layers that is outlined here and more
+ thoroughly described in the lower layer guidelines document [LLG].
+
+ Channels
+
+ ROHC header-compressed packets flow on channels. Unlike many
+ fixed links, some cellular radio links can have several channels
+ connecting the same pair of nodes. Each channel can have
+ different characteristics in terms of error rate, bandwidth, etc.
+
+ Context identifiers
+
+ On some channels, the ability to transport multiple packet streams
+ is required. It can also be feasible to have channels dedicated
+ to individual packet streams. Therefore, ROHC uses a distinct
+ context identifier space per channel and can eliminate context
+ identifiers completely for one of the streams when few streams
+ share a channel.
+
+ Packet type indication
+
+ Packet type indication is done in the header compression scheme
+ itself. Unless the link already has a way of indicating packet
+ types which can be used, such as PPP, this provides smaller
+ compressed headers overall. It may also be less difficult to
+ allocate a single packet type, rather than many, in order to run
+ ROHC over links such as PPP.
+
+ Reordering
+
+ The channel between compressor and decompressor is required to
+ maintain packet ordering, i.e., the decompressor must receive
+ packets in the same order as the compressor sent them.
+ (Reordering before the compression point, however, is dealt with,
+ i.e., there is no assumption that the compressor will only receive
+ packets in sequence.)
+
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 18]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ Duplication
+
+ The channel between compressor and decompressor is required to not
+ duplicate packets. (Duplication before the compression point,
+ however, is dealt with, i.e., there is no assumption that the
+ compressor will receive only one copy of each packet.)
+
+ Packet length
+
+ ROHC is designed under the assumption that lower layers indicate
+ the length of a compressed packet. ROHC packets do not contain
+ length information for the payload.
+
+ Framing
+
+ The link layer must provide framing that makes it possible to
+ distinguish frame boundaries and individual frames.
+
+ Error detection/protection
+
+ The ROHC scheme has been designed to cope with residual errors in
+ the headers delivered to the decompressor. CRCs and sanity checks
+ are used to prevent or reduce damage propagation. However, it is
+ RECOMMENDED that lower layers deploy error detection for ROHC
+ headers and do not deliver ROHC headers with high residual error
+ rates.
+
+ Without giving a hard limit on the residual error rate acceptable
+ to ROHC, it is noted that for a residual bit error rate of at most
+ 1E-5, the ROHC scheme has been designed not to increase the number
+ of damaged headers, i.e., the number of damaged headers due to
+ damage propagation is designed to be less than the number of
+ damaged headers caught by the ROHC error detection scheme.
+
+ Negotiation
+
+ In addition to the packet handling mechanisms above, the link
+ layer MUST provide a way to negotiate header compression
+ parameters, see also section 5.1.1. (For unidirectional links,
+ this negotiation may be performed out-of-band or even a priori.)
+
+4.2. Dynamicity
+
+ The ROHC protocol achieves its compression gain by establishing state
+ information at both ends of the link, i.e., at the compressor and at
+ the decompressor. Different parts of the state are established at
+ different times and with different frequency; hence, it can be said
+ that some of the state information is more dynamic than the rest.
+
+
+
+Bormann, et al. Standards Track [Page 19]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ Some state information is established at the time a channel is
+ established; ROHC assumes the existence of an out-of-band negotiation
+ protocol (such as PPP), or predefined channel state (most useful for
+ unidirectional links). In both cases, we speak of "negotiated
+ channel state". ROHC does not assume that this state can change
+ dynamically during the channel lifetime (and does not explicitly
+ support such changes, although some changes may be innocuous from a
+ protocol point of view). An example of negotiated channel state is
+ the highest context ID number to be used by the compressor (MAX_CID).
+
+ Other state information is associated with the individual packet
+ streams in the channel; this state is said to be part of the context.
+ Using context identifiers (CIDs), multiple packet streams with
+ different contexts can share a channel. The negotiated channel state
+ indicates the highest context identifier to be used, as well as the
+ selection of one of two ways to indicate the CID in the compressed
+ header.
+
+ It is up to the compressor to decide which packets to associate with
+ a context (or, equivalently, which packets constitute a single
+ stream); however, ROHC is efficient only when all packets of a stream
+ share certain properties, such as having the same values for fields
+ that are described as "static" in this document (e.g., the IP
+ addresses, port numbers, and RTP parameters such as the payload
+ type). The efficiency of ROHC RTP also depends on the compressor
+ seeing most RTP Sequence Numbers.
+
+ Streams need not share all characteristics important for compression.
+ ROHC has a notion of compression profiles: a compression profile
+ denotes a predefined set of such characteristics. To provide
+ extensibility, the negotiated channel state includes the set of
+ profiles acceptable to the decompressor. The context state includes
+ the profile currently in use for the context.
+
+ Other elements of the context state may include the current values of
+ all header fields (from these one can deduce whether an IPv4 header
+ is present in the header chain, and whether UDP Checksums are
+ enabled), as well as additional compression context that is not part
+ of an uncompressed header, e.g., TS_STRIDE, IP-ID characteristics
+ (incrementing as a 16-bit value in network byte order? random?), a
+ number of old reference headers, and the compressor/decompressor
+ state machines (see next section).
+
+ This document actually defines four ROHC profiles: One uncompressed
+ profile, the main ROHC RTP compression profile, and two variants of
+ this profile for compression of packets with header chains that end
+
+
+
+
+
+Bormann, et al. Standards Track [Page 20]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ in UDP and ESP, respectively, but where RTP compression is not
+ applicable. The descriptive text in the rest of this section is
+ referring to the main ROHC RTP compression profile.
+
+4.3. Compression and decompression states
+
+ Header compression with ROHC can be characterized as an interaction
+ between two state machines, one compressor machine and one
+ decompressor machine, each instantiated once per context. The
+ compressor and the decompressor have three states each, which in many
+ ways are related to each other even if the meaning of the states are
+ slightly different for the two parties. Both machines start in the
+ lowest compression state and transit gradually to higher states.
+
+ Transitions need not be synchronized between the two machines. In
+ normal operation it is only the compressor that temporarily transits
+ back to lower states. The decompressor will transit back only when
+ context damage is detected.
+
+ Subsequent sections present an overview of the state machines and
+ their corresponding states, respectively, starting with the
+ compressor.
+
+4.3.1. Compressor states
+
+ For ROHC compression, the three compressor states are the
+ Initialization and Refresh (IR), First Order (FO), and Second Order
+ (SO) states. The compressor starts in the lowest compression state
+ (IR) and transits gradually to higher compression states. The
+ compressor will always operate in the highest possible compression
+ state, under the constraint that the compressor is sufficiently
+ confident that the decompressor has the information necessary to
+ decompress a header compressed according to that state.
+
+ +----------+ +----------+ +----------+
+ | IR State | <--------> | FO State | <--------> | SO State |
+ +----------+ +----------+ +----------+
+
+ Decisions about transitions between the various compression states
+ are taken by the compressor on the basis of:
+
+ - variations in packet headers
+ - positive feedback from decompressor (Acknowledgments -- ACKs)
+ - negative feedback from decompressor (Negative ACKs -- NACKs)
+ - periodic timeouts (when operating in unidirectional mode, i.e.,
+ over simplex channels or when feedback is not enabled)
+
+
+
+
+
+Bormann, et al. Standards Track [Page 21]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ How transitions are performed is explained in detail in chapter 5 for
+ each mode of operation.
+
+4.3.1.1. Initialization and Refresh (IR) State
+
+ The purpose of the IR state is to initialize the static parts of the
+ context at the decompressor or to recover after failure. In this
+ state, the compressor sends complete header information. This
+ includes all static and nonstatic fields in uncompressed form plus
+ some additional information.
+
+ The compressor stays in the IR state until it is fairly confident
+ that the decompressor has received the static information correctly.
+
+4.3.1.2. First Order (FO) State
+
+ The purpose of the FO state is to efficiently communicate
+ irregularities in the packet stream. When operating in this state,
+ the compressor rarely sends information about all dynamic fields, and
+ the information sent is usually compressed at least partially. Only
+ a few static fields can be updated. The difference between IR and FO
+ should therefore be clear.
+
+ The compressor enters this state from the IR state, and from the SO
+ state whenever the headers of the packet stream do not conform to
+ their previous pattern. It stays in the FO state until it is
+ confident that the decompressor has acquired all the parameters of
+ the new pattern. Changes in fields that are always irregular are
+ communicated in all packets and are therefore part of what is a
+ uniform pattern.
+
+ Some or all packets sent in the FO state carry context updating
+ information. It is very important to detect corruption of such
+ packets to avoid erroneous updates and context inconsistencies.
+
+4.3.1.3. Second Order (SO) State
+
+ This is the state where compression is optimal. The compressor
+ enters the SO state when the header to be compressed is completely
+ predictable given the SN (RTP Sequence Number) and the compressor is
+ sufficiently confident that the decompressor has acquired all
+ parameters of the functions from SN to other fields. Correct
+ decompression of packets sent in the SO state only hinges on correct
+ decompression of the SN. However, successful decompression also
+ requires that the information sent in the preceding FO state packets
+ has been successfully received by the decompressor.
+
+
+
+
+
+Bormann, et al. Standards Track [Page 22]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ The compressor leaves this state and goes back to the FO state when
+ the header no longer conforms to the uniform pattern and cannot be
+ independently compressed on the basis of previous context
+ information.
+
+4.3.2. Decompressor states
+
+ The decompressor starts in its lowest compression state, "No Context"
+ and gradually transits to higher states. The decompressor state
+ machine normally never leaves the "Full Context" state once it has
+ entered this state.
+
+ +--------------+ +----------------+ +--------------+
+ | No Context | <---> | Static Context | <---> | Full Context |
+ +--------------+ +----------------+ +--------------+
+
+ Initially, while working in the "No Context" state, the decompressor
+ has not yet successfully decompressed a packet. Once a packet has
+ been decompressed correctly (for example, upon reception of an
+ initialization packet with static and dynamic information), the
+ decompressor can transit all the way to the "Full Context" state, and
+ only upon repeated failures will it transit back to lower states.
+ However, when that happens it first transits back to the "Static
+ Context" state. There, reception of any packet sent in the FO state
+ is normally sufficient to enable transition to the "Full Context"
+ state again. Only when decompression of several packets sent in the
+ FO state fails in the "Static Context" state will the decompressor go
+ all the way back to the "No Context" state.
+
+ When state transitions are performed is explained in detail in
+ chapter 5.
+
+4.4. Modes of operation
+
+ The ROHC scheme has three modes of operation, called Unidirectional,
+ Bidirectional Optimistic, and Bidirectional Reliable mode.
+
+ It is important to understand the difference between states, as
+ described in the previous chapter, and modes. These abstractions are
+ orthogonal to each other. The state abstraction is the same for all
+ modes of operation, while the mode controls the logic of state
+ transitions and what actions to perform in each state.
+
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 23]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ +----------------------+
+ | Unidirectional Mode |
+ | +--+ +--+ +--+ |
+ | |IR| |FO| |SO| |
+ | +--+ +--+ +--+ |
+ +----------------------+
+ ^ ^
+ / \
+ / \
+ v v
+ +----------------------+ +----------------------+
+ | Optimistic Mode | | Reliable Mode |
+ | +--+ +--+ +--+ | | +--+ +--+ +--+ |
+ | |IR| |FO| |SO| | <--------------> | |IR| |FO| |SO| |
+ | +--+ +--+ +--+ | | +--+ +--+ +--+ |
+ +----------------------+ +----------------------+
+
+ The optimal mode to operate in depends on the characteristics of the
+ environment of the compression protocol, such as feedback abilities,
+ error probabilities and distributions, effects of header size
+ variation, etc. All ROHC implementations MUST implement and support
+ all three modes of operation. The three modes are briefly described
+ in the following subsections.
+
+ Detailed descriptions of the three modes of operation regarding
+ compression and decompression logic are given in chapter 5. The mode
+ transition mechanisms, too, are described in chapter 5.
+
+4.4.1. Unidirectional mode -- U-mode
+
+ When in the Unidirectional mode of operation, packets are sent in one
+ direction only: from compressor to decompressor. This mode therefore
+ makes ROHC usable over links where a return path from decompressor to
+ compressor is unavailable or undesirable.
+
+ In U-mode, transitions between compressor states are performed only
+ on account of periodic timeouts and irregularities in the header
+ field change patterns in the compressed packet stream. Due to the
+ periodic refreshes and the lack of feedback for initiation of error
+ recovery, compression in the Unidirectional mode will be less
+ efficient and have a slightly higher probability of loss propagation
+ compared to any of the Bidirectional modes.
+
+ Compression with ROHC MUST start in the Unidirectional mode.
+ Transition to any of the Bidirectional modes can be performed as soon
+ as a packet has reached the decompressor and it has replied with a
+ feedback packet indicating that a mode transition is desired (see
+ chapter 5).
+
+
+
+Bormann, et al. Standards Track [Page 24]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+4.4.2. Bidirectional Optimistic mode -- O-mode
+
+ The Bidirectional Optimistic mode is similar to the Unidirectional
+ mode. The difference is that a feedback channel is used to send
+ error recovery requests and (optionally) acknowledgments of
+ significant context updates from decompressor to compressor (not,
+ however, for pure sequence number updates). Periodic refreshes are
+ not used in the Bidirectional Optimistic mode.
+
+ O-mode aims to maximize compression efficiency and sparse usage of
+ the feedback channel. It reduces the number of damaged headers
+ delivered to the upper layers due to residual errors or context
+ invalidation. The frequency of context invalidation may be higher
+ than for R-mode, in particular when long loss/error bursts occur.
+ Refer to section 4.7 for more details.
+
+4.4.3. Bidirectional Reliable mode -- R-mode
+
+ The Bidirectional Reliable mode differs in many ways from the
+ previous two. The most important differences are a more intensive
+ usage of the feedback channel and a stricter logic at both the
+ compressor and the decompressor that prevents loss of context
+ synchronization between compressor and decompressor except for very
+ high residual bit error rates. Feedback is sent to acknowledge all
+ context updates, including updates of the sequence number field.
+ However, not every packet updates the context in Reliable mode.
+
+ R-mode aims to maximize robustness against loss propagation and
+ damage propagation, i.e., minimize the probability of context
+ invalidation, even under header loss/error burst conditions. It may
+ have a lower probability of context invalidation than O-mode, but a
+ larger number of damaged headers may be delivered when the context
+ actually is invalidated. Refer to section 4.7 for more details.
+
+4.5. Encoding methods
+
+ This chapter describes the encoding methods used for header fields.
+ How the methods are applied to each field (e.g., values of associated
+ parameters) is specified in section 5.7.
+
+4.5.1. Least Significant Bits (LSB) encoding
+
+ Least Significant Bits (LSB) encoding is used for header fields whose
+ values are usually subject to small changes. With LSB encoding, the
+ k least significant bits of the field value are transmitted instead
+ of the original field value, where k is a positive integer. After
+ receiving k bits, the decompressor derives the original value using a
+ previously received value as reference (v_ref).
+
+
+
+Bormann, et al. Standards Track [Page 25]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ The scheme is guaranteed to be correct if the compressor and the
+ decompressor each use interpretation intervals
+
+ 1) in which the original value resides, and
+
+ 2) in which the original value is the only value that has the
+ exact same k least significant bits as those transmitted.
+
+ The interpretation interval can be described as a function f(v_ref,
+ k). Let
+
+ f(v_ref, k) = [v_ref - p, v_ref + (2^k - 1) - p]
+
+ where p is an integer.
+
+ <------- interpretation interval (size is 2^k) ------->
+ |-------------+---------------------------------------|
+ v_ref - p v_ref v_ref + (2^k-1) - p
+
+
+ The function f has the following property: for any value k, the k
+ least significant bits will uniquely identify a value in f(v_ref, k).
+
+ The parameter p is introduced so that the interpretation interval can
+ be shifted with respect to v_ref. Choosing a good value for p will
+ yield a more efficient encoding for fields with certain
+ characteristics. Below are some examples:
+
+ a) For field values that are expected always to increase, p can be
+ set to -1. The interpretation interval becomes
+ [v_ref + 1, v_ref + 2^k].
+
+ b) For field values that stay the same or increase, p can be set to
+ 0. The interpretation interval becomes [v_ref, v_ref + 2^k - 1].
+
+ c) For field values that are expected to deviate only slightly from a
+ constant value, p can be set to 2^(k-1) - 1. The interpretation
+ interval becomes [v_ref - 2^(k-1) + 1, v_ref + 2^(k-1)].
+
+ d) For field values that are expected to undergo small negative
+ changes and larger positive changes, such as the RTP TS for video,
+ or RTP SN when there is misordering, p can be set to 2^(k-2) - 1.
+ The interval becomes [v_ref - 2^(k-2) + 1, v_ref + 3 * 2^(k-2)],
+ i.e., 3/4 of the interval is used for positive changes.
+
+ The following is a simplified procedure for LSB compression and
+ decompression; it is modified for robustness and damage propagation
+ protection in the next subsection:
+
+
+
+Bormann, et al. Standards Track [Page 26]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ 1) The compressor (decompressor) always uses v_ref_c (v_ref_d), the
+ last value that has been compressed (decompressed), as v_ref;
+
+ 2) When compressing a value v, the compressor finds the minimum value
+ of k such that v falls into the interval f(v_ref_c, k). Call this
+ function k = g(v_ref_c, v). When only a few distinct values of k
+ are possible, for example due to limitations imposed by packet
+ formats (see section 5.7), the compressor will instead pick the
+ smallest k that puts v in the interval f(v_ref_c, k).
+
+ 3) When receiving m LSBs, the decompressor uses the interpretation
+ interval f(v_ref_d, m), called interval_d. It picks as the
+ decompressed value the one in interval_d whose LSBs match the
+ received m bits.
+
+ Note that the values to be encoded have a finite range; for example,
+ the RTP SN ranges from 0 to 0xFFFF. When the SN value is close to 0
+ or 0xFFFF, the interpretation interval can straddle the wraparound
+ boundary between 0 and 0xFFFF.
+
+ The scheme is complicated by two factors: packet loss between the
+ compressor and decompressor, and transmission errors undetected by
+ the lower layer. In the former case, the compressor and decompressor
+ will lose the synchronization of v_ref, and thus also of the
+ interpretation interval. If v is still covered by the
+ intersection(interval_c, interval_d), the decompression will be
+ correct. Otherwise, incorrect decompression will result. The next
+ section will address this issue further.
+
+ In the case of undetected transmission errors, the corrupted LSBs
+ will give an incorrectly decompressed value that will later be used
+ as v_ref_d, which in turn is likely to lead to damage propagation.
+ This problem is addressed by using a secure reference, i.e., a
+ reference value whose correctness is verified by a protecting CRC.
+ Consequently, the procedure 1) above is modified as follows:
+
+ 1) a) the compressor always uses as v_ref_c the last value that has
+ been compressed and sent with a protecting CRC.
+ b) the decompressor always uses as v_ref_d the last correct
+ value, as verified by a successful CRC.
+
+ Note that in U/O-mode, 1) b) is modified so that if decompression of
+ the SN fails using the last verified SN reference, another
+ decompression attempt is made using the last but one verified SN
+ reference. This procedure mitigates damage propagation when a small
+ CRC fails to detect a damaged value. See section 5.3.2.2.3 for
+ further details.
+
+
+
+
+Bormann, et al. Standards Track [Page 27]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+4.5.2. Window-based LSB encoding (W-LSB encoding)
+
+ This section describes how to modify the simplified algorithm in
+ 4.5.1 to achieve robustness.
+
+ The compressor may not be able to determine the exact value of
+ v_ref_d that will be used by the decompressor for a particular value
+ v, since some candidates for v_ref_d may have been lost or damaged.
+ However, by using feedback or by making reasonable assumptions, the
+ compressor can limit the candidate set. The compressor then
+ calculates k such that no matter which v_ref_d in the candidate set
+ the decompressor uses, v is covered by the resulting interval_d.
+
+ Since the decompressor always uses as the reference the last received
+ value where the CRC succeeded, the compressor maintains a sliding
+ window containing the candidates for v_ref_d. The sliding window is
+ initially empty. The following operations are performed on the
+ sliding window by the compressor:
+
+ 1) After sending a value v (compressed or uncompressed) protected by
+ a CRC, the compressor adds v to the sliding window.
+
+ 2) For each value v being compressed, the compressor chooses k =
+ max(g(v_min, v), g(v_max, v)), where v_min and v_max are the
+ minimum and maximum values in the sliding window, and g is the
+ function defined in the previous section.
+
+ 3) When the compressor is sufficiently confident that a certain value
+ v and all values older than v will not be used as reference by the
+ decompressor, the window is advanced by removing those values
+ (including v). The confidence may be obtained by various means.
+ In R-mode, an ACK from the decompressor implies that values older
+ than the ACKed one can be removed from the sliding window. In
+ U/O-mode there is always a CRC to verify correct decompression,
+ and a sliding window with a limited maximum width is used. The
+ window width is an implementation dependent optimization
+ parameter.
+
+ Note that the decompressor follows the procedure described in the
+ previous section, except that in R-mode it MUST ACK each header
+ received with a succeeding CRC (see also section 5.5).
+
+4.5.3. Scaled RTP Timestamp encoding
+
+ The RTP Timestamp (TS) will usually not increase by an arbitrary
+ number from packet to packet. Instead, the increase is normally an
+ integral multiple of some unit (TS_STRIDE). For example, in the case
+ of audio, the sample rate is normally 8 kHz and one voice frame may
+
+
+
+Bormann, et al. Standards Track [Page 28]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ cover 20 ms. Furthermore, each voice frame is often carried in one
+ RTP packet. In this case, the RTP increment is always n * 160 (=
+ 8000 * 0.02), for some integer n. Note that silence periods have no
+ impact on this, as the sample clock at the source normally keeps
+ running without changing either frame rate or frame boundaries.
+
+ In the case of video, there is usually a TS_STRIDE as well when the
+ video frame level is considered. The sample rate for most video
+ codecs is 90 kHz. If the video frame rate is fixed, say, to 30
+ frames/second, the TS will increase by n * 3000 (= n * 90000 / 30)
+ between video frames. Note that a video frame is often divided into
+ several RTP packets to increase robustness against packet loss. In
+ this case several RTP packets will carry the same TS.
+
+ When using scaled RTP Timestamp encoding, the TS is downscaled by a
+ factor of TS_STRIDE before compression. This saves
+
+ floor(log2(TS_STRIDE))
+
+ bits for each compressed TS. TS and TS_SCALED satisfy the following
+ equality:
+
+ TS = TS_SCALED * TS_STRIDE + TS_OFFSET
+
+ TS_STRIDE is explicitly, and TS_OFFSET implicitly, communicated to
+ the decompressor. The following algorithm is used:
+
+ 1. Initialization: The compressor sends to the decompressor the value
+ of TS_STRIDE and the absolute value of one or several TS fields.
+ The latter are used by the decompressor to initialize TS_OFFSET to
+ (absolute value) modulo TS_STRIDE. Note that TS_OFFSET is the
+ same regardless of which absolute value is used, as long as the
+ unscaled TS value does not wrap around; see 4) below.
+
+ 2. Compression: After initialization, the compressor no longer
+ compresses the original TS values. Instead, it compresses the
+ downscaled values: TS_SCALED = TS / TS_STRIDE. The compression
+ method could be either W-LSB encoding or the timer-based encoding
+ described in the next section.
+
+ 3. Decompression: When receiving the compressed value of TS_SCALED,
+ the decompressor first derives the value of the original
+ TS_SCALED. The original RTP TS is then calculated as TS =
+ TS_SCALED * TS_STRIDE + TS_OFFSET.
+
+ 4. Offset at wraparound: Wraparound of the unscaled 32-bit TS will
+ invalidate the current value of TS_OFFSET used in the equation
+ above. For example, let us assume TS_STRIDE = 160 = 0xA0 and the
+
+
+
+Bormann, et al. Standards Track [Page 29]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ current TS = 0xFFFFFFF0. TS_OFFSET is then 0x50 = 80. Then if
+ the next RTP TS = 0x00000130 (i.e., the increment is 160 * 2 =
+ 320), the new TS_OFFSET should be 0x00000130 modulo 0xA0 = 0x90 =
+ 144. The compressor is not required to re-initialize TS_OFFSET at
+ wraparound. Instead, the decompressor MUST detect wraparound of
+ the unscaled TS (which is trivial) and update TS_OFFSET to
+
+ TS_OFFSET = (Wrapped around unscaled TS) modulo TS_STRIDE
+
+ 5. Interpretation interval at wraparound: Special rules are needed
+ for the interpretation interval of the scaled TS at wraparound,
+ since the maximum scaled TS, TSS_MAX, (0xFFFFFFFF / TS_STRIDE) may
+ not have the form 2^m - 1. For example, when TS_STRIDE is 160,
+ the scaled TS is at most 26843545 which has LSBs 10011001. The
+ wraparound boundary between the TSS_MAX may thus not correspond to
+ a natural boundary between LSBs.
+
+ interpretation interval
+ |<------------------------------>|
+
+ unused scaled TS
+ ------------|--------------|---------------------->
+ TSS_MAX zero
+
+ When TSS_MAX is part of the interpretation interval, a number of
+ unused values are inserted into it after TSS_MAX such that their
+ LSBs follow naturally upon each other. For example, for TS_STRIDE
+ = 160 and k = 4, values corresponding to the LSBs 1010 through
+ 1111 are inserted. The number of inserted values depends on k and
+ the LSBs of the maximum scaled TS. The number of valid values in
+ the interpretation interval should be high enough to maintain
+ robustness. This can be ensured by the following rule:
+
+ Let a be the number of LSBs needed if there was no
+ wraparound, and let b be the number of LSBs needed to
+ disambiguate between TSS_MAX and zero where the a LSBs of
+ TSS_MAX are set to zero. The number of LSB bits to send
+ while TSS_MAX or zero is part of the interpretation interval
+ is b.
+
+ This scaling method can be applied to many frame-based codecs.
+ However, the value of TS_STRIDE might change during a session, for
+ example as a result of adaptation strategies. If that happens, the
+ unscaled TS is compressed until re-initialization of the new
+ TS_STRIDE and TS_OFFSET is completed.
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 30]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+4.5.4. Timer-based compression of RTP Timestamp
+
+ The RTP Timestamp [RFC 1889] is defined to identify the number of the
+ first sample used to generate the payload. When 1) RTP packets carry
+ payloads corresponding to a fixed sampling interval, 2) the sampling
+ is done at a constant rate, and 3) packets are generated in lock-step
+ with sampling, then the timestamp value will closely approximate a
+ linear function of the time of day. This is the case for
+ conversational media, such as interactive speech. The linear ratio
+ is determined by the source sample rate. The linear pattern can be
+ complicated by packetization (e.g., in the case of video where a
+ video frame usually corresponds to several RTP packets) or frame
+ rearrangement (e.g., B-frames are sent out-of-order by some video
+ codecs).
+
+ With a fixed sample rate of 8 kHz, 20 ms in the time domain is
+ equivalent to an increment of 160 in the unscaled TS domain, and to
+ an increment of 1 in the scaled TS domain with TS_STRIDE = 160.
+
+ As a consequence, the (scaled) TS of headers arriving at the
+ decompressor will be a linear function of time of day, with some
+ deviation due to the delay jitter (and the clock inaccuracies)
+ between the source and the decompressor. In normal operation, i.e.,
+ no crashes or failures, the delay jitter will be bounded to meet the
+ requirements of conversational real-time traffic. Hence, by using a
+ local clock the decompressor can obtain an approximation of the
+ (scaled) TS in the header to be decompressed by considering its
+ arrival time. The approximation can then be refined with the k LSBs
+ of the (scaled) TS carried in the header. The value of k required to
+ ensure correct decompression is a function of the jitter between the
+ source and the decompressor.
+
+ If the compressor knows the potential jitter introduced between
+ compressor and decompressor, it can determine k by using a local
+ clock to estimate jitter in packet arrival times, or alternatively it
+ can use a fixed k and discard packets arriving too much out of time.
+
+ The advantages of this scheme include:
+
+ a) The size of the compressed TS is constant and small. In
+ particular, it does NOT depend on the length of silence intervals.
+ This is in contrast to other TS compression techniques, which at
+ the beginning of a talkspurt require sending a number of bits
+ dependent on the duration of the preceding silence interval.
+
+ b) No synchronization is required between the clock local to the
+ compressor and the clock local to the decompressor.
+
+
+
+
+Bormann, et al. Standards Track [Page 31]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ Note that although this scheme can be made to work using both scaled
+ and unscaled TS, in practice it is always combined with scaled TS
+ encoding because of the less demanding requirement on the clock
+ resolution, e.g., 20 ms instead of 1/8 ms. Therefore, the algorithm
+ described below assumes that the clock-based encoding scheme operates
+ on the scaled TS. The case of unscaled TS would be similar, with
+ changes to scale factors.
+
+ The major task of the compressor is to determine the value of k. Its
+ sliding window now contains not only potential reference values for
+ the TS but also their times of arrival at the compressor.
+
+ 1) The compressor maintains a sliding window
+
+ {(T_j, a_j), for each header j that can be used as a reference},
+
+ where T_j is the scaled TS for header j, and a_j is the arrival
+ time of header j. The sliding window serves the same purpose as
+ the W-LSB sliding window of section 4.5.2.
+
+ 2) When a new header n arrives with T_n as the scaled TS, the
+ compressor notes the arrival time a_n. It then calculates
+
+ Max_Jitter_BC =
+
+ max {|(T_n - T_j) - ((a_n - a_j) / TIME_STRIDE)|,
+ for all headers j in the sliding window},
+
+ where TIME_STRIDE is the time interval equivalent to one
+ TS_STRIDE, e.g., 20 ms. Max_Jitter_BC is the maximum observed
+ jitter before the compressor, in units of TS_STRIDE, for the
+ headers in the sliding window.
+
+ 3) k is calculated as
+
+ k = ceiling(log2(2 * J + 1),
+
+ where J = Max_Jitter_BC + Max_Jitter_CD + 2.
+
+ Max_Jitter_CD is the upper bound of jitter expected on the
+ communication channel between compressor and decompressor (CD-CC).
+ It depends only on the characteristics of CD-CC.
+
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 32]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ The constant 2 accounts for the quantization error introduced by
+ the clocks at the compressor and decompressor, which can be +/-1.
+
+ Note that the calculation of k follows the compression algorithm
+ described in section 4.5.1, with p = 2^(k-1) - 1.
+
+ 4) The sliding window is subject to the same window operations as in
+ section 4.5.2, 1) and 3), except that the values added and removed
+ are paired with their arrival times.
+
+ Decompressor:
+
+ 1) The decompressor uses as its reference header the last correctly
+ (as verified by CRC) decompressed header. It maintains the pair
+ (T_ref, a_ref), where T_ref is the scaled TS of the reference
+ header, and a_ref is the arrival time of the reference header.
+
+ 2) When receiving a compressed header n at time a_n, the
+ approximation of the original scaled TS is calculated as:
+
+ T_approx = T_ref + (a_n - a_ref) / TIME_STRIDE.
+
+ 3) The approximation is then refined by the k least significant bits
+ carried in header n, following the decompression algorithm of
+ section 4.5.1, with p = 2^(k-1) - 1.
+
+ Note: The algorithm does not assume any particular pattern in the
+ packets arriving at the compressor, i.e., it tolerates reordering
+ before the compressor and nonincreasing RTP Timestamp behavior.
+
+ Note: Integer arithmetic is used in all equations above. If
+ TIME_STRIDE is not equal to an integral number of clock ticks,
+ time must be normalized such that TIME_STRIDE is an integral
+ number of clock ticks. For example, if a clock tick is 20 ms and
+ TIME_STRIDE is 30 ms, (a_n - a_ref) in 2) can be multiplied by 3
+ and TIME_STRIDE can have the value 2.
+
+ Note: The clock resolution of the compressor or decompressor can
+ be worse than TIME_STRIDE, in which case the difference, i.e.,
+ actual resolution - TIME_STRIDE, is treated as additional jitter
+ in the calculation of k.
+
+ Note: The clock resolution of the decompressor may be communicated
+ to the compressor using the CLOCK feedback option.
+
+ Note: The decompressor may observe the jitter and report this to
+ the compressor using the JITTER feedback option. The compressor
+ may use this information to refine its estimate of Max_Jitter_CD.
+
+
+
+Bormann, et al. Standards Track [Page 33]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+4.5.5. Offset IP-ID encoding
+
+ As all IPv4 packets have an IP Identifier to allow for fragmentation,
+ ROHC provides for transparent compression of this ID. There is no
+ explicit support in ROHC for the IPv6 fragmentation header, so there
+ is never a need to discuss IP IDs outside the context of IPv4.
+
+ This section assumes (initially) that the IPv4 stack at the source
+ host assigns IP-ID according to the value of a 2-byte counter which
+ is increased by one after each assignment to an outgoing packet.
+ Therefore, the IP-ID field of a particular IPv4 packet flow will
+ increment by 1 from packet to packet except when the source has
+ emitted intermediate packets not belonging to that flow.
+
+ For such IPv4 stacks, the RTP SN will increase by 1 for each packet
+ emitted and the IP-ID will increase by at least the same amount.
+ Thus, it is more efficient to compress the offset, i.e., (IP-ID - RTP
+ SN), instead of IP-ID itself.
+
+ The remainder of section 4.5.5 describes how to compress/decompress
+ the sequence of offsets using W-LSB encoding/decoding, with p = 0
+ (see section 4.5.1). All IP-ID arithmetic is done using unsigned
+ 16-bit quantities, i.e., modulo 2^16.
+
+ Compressor:
+
+ The compressor uses W-LSB encoding (section 4.5.2) to compress a
+ sequence of offsets
+
+ Offset_i = ID_i - SN_i,
+
+ where ID_i and SN_i are the values of the IP-ID and RTP SN of
+ header i. The sliding window contains such offsets and not the
+ values of header fields, but the rules for adding and deleting
+ offsets from the window otherwise follow section 4.5.2.
+
+ Decompressor:
+
+ The reference header is the last correctly (as verified by CRC)
+ decompressed header.
+
+ When receiving a compressed packet m, the decompressor calculates
+ Offset_ref = ID_ref - SN_ref, where ID_ref and SN_ref are the
+ values of IP-ID and RTP SN in the reference header, respectively.
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 34]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ Then W-LSB decoding is used to decompress Offset_m, using the
+ received LSBs in packet m and Offset_ref. Note that m may contain
+ zero LSBs for Offset_m, in which case Offset_m = Offset_ref.
+
+ Finally, the IP-ID for packet m is regenerated as
+
+ IP-ID for m = decompressed SN of packet m + Offset_m
+
+ Network byte order:
+
+ Some IPv4 stacks do use a counter to generate IP ID values as
+ described, but do not transmit the contents of this counter in
+ network byte order, but instead send the two octets reversed. In
+ this case, the compressor can compress the IP-ID field after
+ swapping the bytes. Consequently, the decompressor also swaps the
+ bytes of the IP-ID after decompression to regenerate the original
+ IP-ID. This requires that the compressor and the decompressor
+ synchronize on the byte order of the IP-ID field using the NBO or
+ NBO2 flag (see section 5.7).
+
+ Random IP Identifier:
+
+ Some IPv4 stacks generate the IP Identifier values using a
+ pseudo-random number generator. While this may provide some
+ security benefits, it makes it pointless to attempt compressing
+ the field. Therefore, the compressor should detect such random
+ behavior of the field. After detection and synchronization with
+ the decompressor using the RND or RND2 flag, the field is sent
+ as-is in its entirety as additional octets after the compressed
+ header.
+
+4.5.6. Self-describing variable-length values
+
+ The values of TS_STRIDE and a few other compression parameters can
+ vary widely. TS_STRIDE can be 160 for voice and 90 000 for 1 f/s
+ video. To optimize the transfer of such values, a variable number of
+ octets is used to encode them. The number of octets used is
+ determined by the first few bits of the first octet:
+
+ First bit is 0: 1 octet.
+ 7 bits transferred.
+ Up to 127 decimal.
+ Encoded octets in hexadecimal: 00 to 7F
+
+ First bits are 10: 2 octets.
+ 14 bits transferred.
+ Up to 16 383 decimal.
+ Encoded octets in hexadecimal: 80 00 to BF FF
+
+
+
+Bormann, et al. Standards Track [Page 35]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ First bits are 110: 3 octets.
+ 21 bits transferred.
+ Up to 2 097 151 decimal.
+ Encoded octets in hexadecimal: C0 00 00 to DF FF FF
+
+ First bits are 111: 4 octets.
+ 29 bits transferred.
+ Up to 536 870 911 decimal.
+ Encoded octets in hexadecimal: E0 00 00 00 to FF FF FF FF
+
+4.5.7. Encoded values across several fields in compressed headers
+
+ When a compressed header has an extension, pieces of an encoded value
+ can be present in more than one field. When an encoded value is
+ split over several fields in this manner, the more significant bits
+ of the value are closer to the beginning of the header. If the
+ number of bits available in compressed header fields exceeds the
+ number of bits in the value, the most significant field is padded
+ with zeroes in its most significant bits.
+
+ For example, an unscaled TS value can be transferred using an UOR-2
+ header (see section 5.7) with an extension of type 3. The Tsc bit of
+ the extension is then unset (zero) and the variable length TS field
+ of the extension is 4 octets, with 29 bits available for the TS (see
+ section 4.5.6). The UOR-2 TS field will contain the three most
+ significant bits of the unscaled TS, and the 4-octet TS field in the
+ extension will contain the remaining 29 bits.
+
+4.6. Errors caused by residual errors
+
+ ROHC is designed under the assumption that packets can be damaged
+ between the compressor and decompressor, and that such damaged
+ packets can be delivered to the decompressor ("residual errors").
+
+ Residual errors may damage the SN in compressed headers. Such damage
+ will cause generation of a header which upper layers may not be able
+ to distinguish from a correct header. When the compressed header
+ contains a CRC, the CRC will catch the bad header with a probability
+ dependent on the size of the CRC. When ROHC does not detect the bad
+ header, it will be delivered to upper layers.
+
+ Damage is not confined to the SN:
+
+ a) Damage to packet type indication bits can cause a header to be
+ interpreted as having a different packet type.
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 36]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ b) Damage to CID information may cause a packet to be interpreted
+ according to another context and possibly also according to
+ another profile. Damage to CIDs will be more harmful when a large
+ part of the CID space is being used, so that it is likely that the
+ damaged CID corresponds to an active context.
+
+ c) Feedback information can also be subject to residual errors, both
+ when feedback is piggybacked and when it is sent in separate ROHC
+ packets. ROHC uses sanity checks and adds CRCs to vital feedback
+ information to allow detection of some damaged feedback.
+
+ Note that context damage can also result in generation of
+ incorrect headers; section 4.7 elaborates further on this.
+
+4.7. Impairment considerations
+
+ Impairments to headers can be classified into the following types:
+
+ (1) the lower layer was not able to decode the packet and did not
+ deliver it to ROHC,
+
+ (2) the lower layer was able to decode the packet, but discarded
+ it because of a detected error,
+
+ (3) ROHC detected an error in the generated header and discarded
+ the packet, or
+
+ (4) ROHC did not detect that the regenerated header was damaged
+ and delivered it to upper layers.
+
+ Impairments cause loss or damage of individual headers. Some
+ impairment scenarios also cause context invalidation, which in turn
+ results in loss propagation and damage propagation. Damage
+ propagation and undetected residual errors both contribute to the
+ number of damaged headers delivered to upper layers. Loss
+ propagation and impairments resulting in loss or discarding of single
+ packets both contribute to the packet loss seen by upper layers.
+
+ Examples of context invalidating scenarios are:
+
+ (a) Impairment of type (4) on the forward channel, causing the
+ decompressor to update its context with incorrect information;
+
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 37]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ (b) Loss/error burst of pattern update headers: Impairments of
+ types (1),(2) and (3) on consecutive pattern update headers; a
+ pattern update header is a header carrying a new pattern
+ information, e.g., at the beginning of a new talk spurt; this
+ causes the decompressor to lose the pattern update
+ information;
+
+ (c) Loss/error burst of headers: Impairments of types (1),(2) and
+ (3) on a number of consecutive headers that is large enough to
+ cause the decompressor to lose the SN synchronization;
+
+ (d) Impairment of type (4) on the feedback channel which mimics a
+ valid ACK and makes the compressor update its context;
+
+ (e) a burst of damaged headers (3) erroneously triggers the "k-
+ out-of-n" rule for detecting context invalidation, which
+ results in a NACK/update sequence during which headers are
+ discarded.
+
+ Scenario (a) is mitigated by the CRC carried in all context updating
+ headers. The larger the CRC, the lower the chance of context
+ invalidation caused by (a). In R-mode, the CRC of context updating
+ headers is always 7 bits or more. In U/O-mode, it is usually 3 bits
+ and sometimes 7 or 8 bits.
+
+ Scenario (b) is almost completely eliminated when the compressor
+ ensures through ACKs that no context updating headers are lost, as in
+ R-mode.
+
+ Scenario (c) is almost completely eliminated when the compressor
+ ensures through ACKs that the decompressor will always detect the SN
+ wraparound, as in R-mode. It is also mitigated by the SN repair
+ mechanisms in U/O-mode.
+
+ Scenario (d) happens only when the compressor receives a damaged
+ header that mimics an ACK of some header present in the W-LSB window,
+ say ACK of header 2, while in reality header 2 was never received or
+ accepted by the decompressor, i.e., header 2 was subject to
+ impairment (1), (2) or (3). The damaged header must mimic the
+ feedback packet type, the ACK feedback type, and the SN LSBs of some
+ header in the W-LSB window.
+
+ Scenario (e) happens when a burst of residual errors causes the CRC
+ check to fail in k out of the last n headers carrying CRCs. Large k
+ and n reduces the probability of scenario (e), but also increases the
+ number of headers lost or damaged as a consequence of any context
+ invalidation.
+
+
+
+
+Bormann, et al. Standards Track [Page 38]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ ROHC detects damaged headers using CRCs over the original headers.
+ The smallest headers in this document either include a 3-bit CRC
+ (U/O-mode) or do not include a CRC (R-mode). For the smallest
+ headers, damage is thus detected with a probability of roughly 7/8
+ for U/O-mode. For R-mode, damage to the smallest headers is not
+ detected.
+
+ All other things (coding scheme at lower layers, etc.) being equal,
+ the rate of headers damaged by residual errors will be lower when
+ headers are compressed compared when they are not, since fewer bits
+ are transmitted. Consequently, for a given ROHC CRC setup the rate
+ of incorrect headers delivered to applications will also be reduced.
+
+ The above analysis suggests that U/O-mode may be more prone than R-
+ mode to context invalidation. On the other hand, the CRC present in
+ all U/O-mode headers continuously screens out residual errors coming
+ from lower layers, reduces the number of damaged headers delivered to
+ upper layers when context is invalidated, and permits quick detection
+ of context invalidation.
+
+ R-mode always uses a stronger CRC on context updating headers, but no
+ CRC in other headers. A residual error on a header which carries no
+ CRC will result in a damaged header being delivered to upper layers
+ (4). The number of damaged headers delivered to the upper layers
+ depends on the ratio of headers with CRC vs. headers without CRC,
+ which is a compressor parameter.
+
+5. The protocol
+
+5.1. Data structures
+
+ The ROHC protocol is based on a number of parameters that form part
+ of the negotiated channel state and the per-context state. This
+ section describes some of this state information in an abstract way.
+ Implementations can use a different structure for and representation
+ of this state. In particular, negotiation protocols that set up the
+ per-channel state need to establish the information that constitutes
+ the negotiated channel state, but it is not necessary to exchange it
+ in the form described here.
+
+5.1.1. Per-channel parameters
+
+ MAX_CID: Nonnegative integer; highest context ID number to be used by
+ the compressor (note that this parameter is not coupled to, but in
+ effect further constrained by, LARGE_CIDS).
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 39]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ LARGE_CIDS: Boolean; if false, the short CID representation (0 bytes
+ or 1 prefix byte, covering CID 0 to 15) is used; if true, the
+ embedded CID representation (1 or 2 embedded CID bytes covering CID 0
+ to 16383) is used.
+
+ PROFILES: Set of nonnegative integers, each integer indicating a
+ profile supported by the decompressor. The compressor MUST NOT
+ compress using a profile not in PROFILES.
+
+ FEEDBACK_FOR: Optional reference to a channel in the reverse
+ direction. If provided, this parameter indicates which channel any
+ feedback sent on this channel refers to (see 5.7.6.1).
+
+ MRRU: Maximum reconstructed reception unit. This is the size of the
+ largest reconstructed unit in octets that the decompressor is
+ expected to reassemble from segments (see 5.2.5). Note that this
+ size includes the CRC. If MRRU is negotiated to be 0, no segment
+ headers are allowed on the channel.
+
+5.1.2. Per-context parameters, profiles
+
+ Per-context parameters are established with IR headers (see section
+ 5.2.3). An IR header contains a profile identifier, which determines
+ how the rest of the header is to be interpreted. Note that the
+ profile parameter determines the syntax and semantics of the packet
+ type identifiers and packet types used in conjunction with a specific
+ context. This document describes profiles 0x0000, 0x0001, 0x0002,
+ and 0x0003; further profiles may be defined when ROHC is extended in
+ the future.
+
+ Profile 0x0000 is for sending uncompressed IP packets. See section
+ 5.10.
+
+ Profile 0x0001 is for RTP/UDP/IP compression, see sections 5.3
+ through 5.9.
+
+ Profile 0x0002 is for UDP/IP compression, i.e., compression of the
+ first 12 octets of the UDP payload is not attempted. See section
+ 5.11.
+
+ Profile 0x0003 is for ESP/IP compression, i.e., compression of the
+ header chain up to and including the first ESP header, but not
+ subsequent subheaders. See section 5.12.
+
+ Initially, all contexts are in no context state, i.e., all packets
+ referencing this context except IR packets are discarded. If defined
+ by a "ROHC over X" document, per-channel negotiation can be used to
+ pre-establish state information for a context (e.g., negotiating
+
+
+
+Bormann, et al. Standards Track [Page 40]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ profile 0x0000 for CID 15). Such state information can also be
+ marked read-only in the negotiation, which would cause the
+ decompressor to discard any IR packet attempting to modify it.
+
+5.1.3. Contexts and context identifiers
+
+ Associated with each compressed flow is a context, which is the state
+ compressor and decompressor maintain in order to correctly compress
+ or decompress the headers of the packet stream. Contexts are
+ identified by a context identifier, CID, which is sent along with
+ compressed headers and feedback information.
+
+ The CID space is distinct for each channel, i.e., CID 3 over channel
+ A and CID 3 over channel B do not refer to the same context, even if
+ the endpoints of A and B are the same nodes. In particular, CIDs for
+ any pairs of forward and reverse channels are not related (forward
+ and reverse channels need not even have CID spaces of the same size).
+
+ Context information is conceptually kept in a table. The context
+ table is indexed using the CID which is sent along with compressed
+ headers and feedback information. The CID space can be negotiated to
+ be either small, which means that CIDs can take the values 0 through
+ 15, or large, which means that CIDs take values between 0 and 2^14 -
+ 1 = 16383. Whether the CID space is large or small is negotiated no
+ later than when a channel is established.
+
+ A small CID with the value 0 is represented using zero bits. A small
+ CID with a value from 1 to 15 is represented by a four-bit field in
+ place of a packet type field (Add-CID) plus four more bits. A large
+ CID is represented using the encoding scheme of section 4.5.6,
+ limited to two octets.
+
+5.2. ROHC packets and packet types
+
+ The packet type indication scheme for ROHC has been designed under
+ the following constraints:
+
+ a) it must be possible to use only a limited number of packet sizes;
+ b) it must be possible to send feedback information in separate ROHC
+ packets as well as piggybacked on forward packets;
+ c) it is desirable to allow elimination of the CID for one packet
+ stream when few packet streams share a channel;
+ d) it is anticipated that some packets with large headers may be
+ larger than the MTU of very constrained lower layers.
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 41]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ These constraints have led to a design which includes
+
+ - optional padding,
+ - a feedback packet type,
+ - an optional Add-CID octet which provides 4 bits of CID, and
+ - a simple segmentation and reassembly mechanism.
+
+ A ROHC packet has the following general format (in the diagram,
+ colons ":" indicate that the part is optional):
+
+ --- --- --- --- --- --- --- ---
+ : Padding : variable length
+ --- --- --- --- --- --- --- ---
+ : Feedback : 0 or more feedback elements
+ --- --- --- --- --- --- --- ---
+ : Header : variable, with CID information
+ --- --- --- --- --- --- --- ---
+ : Payload :
+ --- --- --- --- --- --- --- ---
+
+ Padding is any number (zero or more) of padding octets. Either of
+ Feedback or Header must be present.
+
+ Feedback elements always start with a packet type indication.
+ Feedback elements carry internal CID information. Feedback is
+ described in section 5.2.2.
+
+ Header is either a profile-specific header or an IR or IR-DYN header
+ (see sections 5.2.3 and 5.2.4). Header either
+
+ 1) does not carry any CID information (indicating CID zero), or
+ 2) includes one Add-CID Octet (see below), or
+ 3) contains embedded CID information of length one or two octets.
+
+ Alternatives 1) and 2) apply only to compressed headers in channels
+ where the CID space is small. Alternative 3) applies only to
+ compressed headers in channels where the CID space is large.
+
+ Padding Octet
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ | 1 1 1 0 0 0 0 0 |
+ +---+---+---+---+---+---+---+---+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 42]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ Add-CID Octet
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ | 1 1 1 0 | CID |
+ +---+---+---+---+---+---+---+---+
+
+ CID: 0x1 through 0xF indicates CIDs 1 through 15.
+
+ Note: The Padding Octet looks like an Add-CID octet for CID 0.
+
+ Header either starts with a packet type indication or has a packet
+ type indication immediately following an Add-CID Octet. All Header
+ packet types have the following general format (in the diagram,
+ slashes "/" indicate variable length):
+
+ 0 x-1 x 7
+ --- --- --- --- --- --- --- ---
+ : Add-CID octet : if (CID 1-15) and (small CIDs)
+ +---+--- --- --- ---+--- --- ---+
+ | type indication | body | 1 octet (8-x bits of body)
+ +---+--- ---+---+---+--- --- ---+
+ : :
+ / 0, 1, or 2 octets of CID / 1 or 2 octets if (large CIDs)
+ : :
+ +---+---+---+---+---+---+---+---+
+ / body / variable length
+ +---+---+---+---+---+---+---+---+
+
+ The large CID, if present, is encoded according to section 4.5.6.
+
+5.2.1. ROHC feedback
+
+ Feedback carries information from decompressor to compressor. The
+ following principal kinds of feedback are supported. In addition to
+ the kind of feedback, other information may be included in profile-
+ specific feedback information.
+
+ ACK : Acknowledges successful decompression of a packet,
+ which means that the context is up-to-date with a high
+ probability.
+
+ NACK : Indicates that the dynamic context of the
+ decompressor is out of sync. Generated when several
+ successive packets have failed to be decompressed
+ correctly.
+
+
+
+
+
+Bormann, et al. Standards Track [Page 43]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ STATIC-NACK : Indicates that the static context of the decompressor
+ is not valid or has not been established.
+
+ It is anticipated that feedback to the compressor can be realized in
+ many ways, depending on the properties of the particular lower layer.
+ The exact details of how feedback is realized is to be specified in a
+ "ROHC over X" document, for each lower layer X in question. For
+ example, feedback might be realized using
+
+ 1) lower-layer specific mechanisms
+
+ 2) a dedicated feedback-only channel, realized for example by the
+ lower layer providing a way to indicate that a packet is a
+ feedback packet
+
+ 3) a dedicated feedback-only channel, where the timing of the
+ feedback provides information about which compressed packet caused
+ the feedback
+
+ 4) interspersing of feedback packets among normal compressed packets
+ going in the same direction as the feedback (lower layers do not
+ indicate feedback)
+
+ 5) piggybacking of feedback information in compressed packets going
+ in the same direction as the feedback (this technique may reduce
+ the per-feedback overhead)
+
+ 6) interspersing and piggybacking on the same channel, i.e., both 4)
+ and 5).
+
+ Alternatives 1-3 do not place any particular requirements on the ROHC
+ packet type scheme. Alternatives 4-6 do, however. The ROHC packet
+ type scheme has been designed to allow alternatives 4-6 (these may be
+ used for example over PPP):
+
+ a) The ROHC scheme provides a feedback packet type. The packet type
+ is able to carry variable-length feedback information.
+
+ b) The feedback information sent on a particular channel is passed
+ to, and interpreted by, the compressor associated with feedback on
+ that channel. Thus, the feedback information must contain CID
+ information if the associated compressor can use more than one
+ context. The ROHC feedback scheme requires that a channel carries
+ feedback to at most one compressor. How a compressor is
+ associated with feedback on a particular channel needs to be
+ defined in a "ROHC over X" document.
+
+
+
+
+
+Bormann, et al. Standards Track [Page 44]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ c) The ROHC feedback information format is octet-aligned, i.e.,
+ starts at an octet boundary, to allow using the format over a
+ dedicated feedback channel, 2).
+
+ d) To allow piggybacking, 5), it is possible to deduce the length of
+ feedback information by examining the first few octets of the
+ feedback. This allows the decompressor to pass piggybacked
+ feedback information to the associated same-side compressor
+ without understanding its format. The length information
+ decouples the decompressor from the compressor in the sense that
+ the decompressor can process the compressed header immediately
+ without waiting for the compressor to hand it back after parsing
+ the feedback information.
+
+5.2.2. ROHC feedback format
+
+ Feedback sent on a ROHC channel consists of one or more concatenated
+ feedback elements, where each feedback element has the following
+ format:
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ | 1 1 1 1 0 | Code | feedback type octet
+ +---+---+---+---+---+---+---+---+
+ : Size : if Code = 0
+ +---+---+---+---+---+---+---+---+
+ / feedback data / variable length
+ +---+---+---+---+---+---+---+---+
+
+ Code: 0 indicates that a Size octet is present.
+ 1-7 indicates the size of the feedback data field in
+ octets.
+
+ Size: Optional octet indicating the size of the feedback data
+ field in octets.
+
+ feedback data: Profile-specific feedback information. Includes
+ CID information.
+
+ The total size of the feedback data field is determinable upon
+ reception by the decompressor, by inspection of the Code field and
+ possibly the Size field. This explicit length information allows
+ piggybacking and also sending more than one feedback element in a
+ packet.
+
+ When the decompressor has determined the size of the feedback data
+ field, it removes the feedback type octet and the Size field (if
+ present) and hands the rest to the same-side associated compressor
+
+
+
+Bormann, et al. Standards Track [Page 45]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ together with an indication of the size. The feedback data received
+ by the compressor has the following structure (feedback sent on a
+ dedicated feedback channel MAY also use this format):
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ : Add-CID octet : if for small CIDs and (CID != 0)
+ +---+---+---+---+---+---+---+---+
+ : :
+ / large CID (4.5.6 encoding) / 1-2 octets if for large CIDs
+ : :
+ +---+---+---+---+---+---+---+---+
+ / feedback /
+ +---+---+---+---+---+---+---+---+
+
+ The large CID, if present, is encoded according to section 4.5.6.
+ CID information in feedback data indicates the CID of the packet
+ stream for which feedback is sent. Note that the LARGE_CIDS
+ parameter that controls whether a large CID is present is taken from
+ the channel state of the receiving compressor's channel, NOT from
+ that of the channel carrying the feedback.
+
+ It is REQUIRED that the feedback field have either of the following
+ two formats:
+
+ FEEDBACK-1
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ | profile specific information | 1 octet
+ +---+---+---+---+---+---+---+---+
+
+ FEEDBACK-2
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ |Acktype| |
+ +---+---+ profile specific / at least 2 octets
+ / information |
+ +---+---+---+---+---+---+---+---+
+
+ Acktype: 0 = ACK
+ 1 = NACK
+ 2 = STATIC-NACK
+ 3 is reserved (MUST NOT be used. Otherwise unparseable.)
+
+ The compressor can use the following logic to parse the feedback
+ field.
+
+
+
+Bormann, et al. Standards Track [Page 46]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ 1) If for large CIDs, the feedback will always start with a CID
+ encoded according to section 4.5.6. If the first bit is 0, the
+ CID uses one octet. If the first bit is 1, the CID uses two
+ octets.
+
+ 2) If for small CIDs, and the size is one octet, the feedback is a
+ FEEDBACK-1.
+
+ 3) If for small CIDs, and the size is larger than one octet, and the
+ feedback starts with the two bits 11, the feedback starts with an
+ Add-CID octet. If the size is 2, it is followed by FEEDBACK-1.
+ If the size is larger than 2, the Add-CID is followed by
+ FEEDBACK-2.
+
+ 4) Otherwise, there is no Add-CID octet, and the feedback starts with
+ a FEEDBACK-2.
+
+5.2.3. ROHC IR packet type
+
+ The IR header associates a CID with a profile, and typically also
+ initializes the context. It can typically also refresh (parts of)
+ the context. It has the following general format.
+
+ 0 1 2 3 4 5 6 7
+ --- --- --- --- --- --- --- ---
+ : Add-CID octet : if for small CIDs and (CID != 0)
+ +---+---+---+---+---+---+---+---+
+ | 1 1 1 1 1 1 0 | x | IR type octet
+ +---+---+---+---+---+---+---+---+
+ : :
+ / 0-2 octets of CID / 1-2 octets if for large CIDs
+ : :
+ +---+---+---+---+---+---+---+---+
+ | Profile | 1 octet
+ +---+---+---+---+---+---+---+---+
+ | CRC | 1 octet
+ +---+---+---+---+---+---+---+---+
+ | |
+ / profile specific information / variable length
+ | |
+ +---+---+---+---+---+---+---+---+
+
+ x: Profile specific information. Interpreted according to the
+ profile indicated in the Profile field.
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 47]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ Profile: The profile to be associated with the CID. In the IR
+ packet, the profile identifier is abbreviated to the 8 least
+ significant bits. It selects the highest-number profile in the
+ channel state parameter PROFILES that matches the 8 LSBs given.
+
+ CRC: 8-bit CRC computed using the polynomial of section 5.9.1. Its
+ coverage is profile-dependent, but it MUST cover at least the
+ initial part of the packet ending with the Profile field. Any
+ information which initializes the context of the decompressor
+ should be protected by the CRC.
+
+ Profile specific information: The contents of this part of the IR
+ packet are defined by the individual profiles. Interpreted
+ according to the profile indicated in the Profile field.
+
+5.2.4. ROHC IR-DYN packet type
+
+ In contrast to the IR header, the IR-DYN header can never initialize
+ an uninitialized context. However, it can redefine what profile is
+ associated with a context, see for example 5.11 (ROHC UDP) and 5.12
+ (ROHC ESP). Thus the type needs to be reserved at the framework
+ level. The IR-DYN header typically also initializes or refreshes
+ parts of a context, typically the dynamic part. It has the following
+ general format:
+
+ 0 1 2 3 4 5 6 7
+ --- --- --- --- --- --- --- ---
+ : Add-CID octet : if for small CIDs and (CID != 0)
+ +---+---+---+---+---+---+---+---+
+ | 1 1 1 1 1 0 0 0 | IR-DYN type octet
+ +---+---+---+---+---+---+---+---+
+ : :
+ / 0-2 octets of CID / 1-2 octets if for large CIDs
+ : :
+ +---+---+---+---+---+---+---+---+
+ | Profile | 1 octet
+ +---+---+---+---+---+---+---+---+
+ | CRC | 1 octet
+ +---+---+---+---+---+---+---+---+
+ | |
+ / profile specific information / variable length
+ | |
+ +---+---+---+---+---+---+---+---+
+
+ Profile: The profile to be associated with the CID. This is
+ abbreviated in the same way as with IR packets.
+
+
+
+
+
+Bormann, et al. Standards Track [Page 48]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ CRC: 8-bit CRC computed using the polynomial of section 5.9.1.
+ Its coverage is profile-dependent, but it MUST cover at least
+ the initial part of the packet ending with the Profile field.
+ Any information which initializes the context of the
+ decompressor should be protected by the CRC.
+
+ Profile specific information: This part of the IR packet is
+ defined by individual profiles. It is interpreted according
+ to the profile indicated in the Profile field.
+
+5.2.5. ROHC segmentation
+
+ Some link layers may provide a much more efficient service if the set
+ of different packet sizes to be transported is kept small. For such
+ link layers, these sizes will normally be chosen to transport
+ frequently occurring packets efficiently, with less frequently
+ occurring packets possibly adapted to the next larger size by the
+ addition of padding. The link layer may, however, be limited in the
+ size of packets it can offer in this efficient mode, or it may be
+ desirable to request only a limited largest size. To accommodate the
+ occasional packet that is larger than that largest size negotiated,
+ ROHC defines a simple segmentation protocol.
+
+5.2.5.1. Segmentation usage considerations
+
+ The segmentation protocol defined in ROHC is not particularly
+ efficient. It is not intended to replace link layer segmentation
+ functions; these SHOULD be used whenever available and efficient for
+ the task at hand.
+
+ ROHC segmentation should only be used for occasional packets with
+ sizes larger than what is efficient to accommodate, e.g., due to
+ exceptionally large ROHC headers. The segmentation scheme was
+ designed to reduce packet size variations that may occur due to
+ outliers in the header size distribution. In other cases,
+ segmentation should be done at lower layers. The segmentation scheme
+ should only be used for packet sizes that are larger than the maximum
+ size in the allowed set of sizes from the lower layers.
+
+ In summary, ROHC segmentation should be used with a relatively low
+ frequency in the packet flow. If this cannot be ensured,
+ segmentation should be performed at lower layers.
+
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 49]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+5.2.5.2. Segmentation protocol
+
+ Segment Packet
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ | 1 1 1 1 1 1 1 | F |
+ +---+---+---+---+---+---+---+---+
+ / Segment / variable length
+ +---+---+---+---+---+---+---+---+
+
+ F: Final bit. If set, it indicates that this is the last segment of
+ a reconstructed unit.
+
+ The segment header may be preceded by padding octets and/or feedback.
+ It never carries a CID.
+
+ All segment header packets for one reconstructed unit have to be sent
+ consecutively on a channel, i.e., any non-segment-header packet
+ following a nonfinal segment header aborts the reassembly of the
+ current reconstructed unit and causes the decompressor to discard the
+ nonfinal segments received on this channel so far. When a final
+ segment header is received, the decompressor reassembles the segment
+ carried in this packet and any nonfinal segments that immediately
+ preceded it into a single reconstructed unit, in the order they were
+ received. The reconstructed unit has the format:
+
+ Reconstructed Unit
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ | |
+ / Reconstructed ROHC packet / variable length
+ | |
+ +---+---+---+---+---+---+---+---+
+ / CRC / 4 octets
+ +---+---+---+---+---+---+---+---+
+
+ The CRC is used by the decompressor to validate the reconstructed
+ unit. It uses the FCS-32 algorithm with the following generator
+ polynomial: x^0 + x^1 + x^2 + x^4 + x^5 + x^7 + x^8 + x^10 + x^11 +
+ x^12 + x^16 + x^22 + x^23 + x^26 + x^32 [HDLC]. If the reconstructed
+ unit is 4 octets or less, or if the CRC fails, or if it is larger
+ than the channel parameter MRRU (see 5.1.1), the reconstructed unit
+ MUST be discarded by the decompressor.
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 50]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ If the CRC succeeds, the reconstructed ROHC packet is interpreted as
+ a ROHC Header, optionally followed by a payload. Note that this
+ means that there can be no padding and no feedback in the
+ reconstructed unit, and that the CID is derived from the initial
+ octets of the reconstructed unit.
+
+ (It should be noted that the ROHC segmentation protocol was inspired
+ by SEAL by Steve Deering et al., which later became ATM AAL5. The
+ same arguments for not having sequence numbers in the segments but
+ instead providing a strong CRC in the reconstructed unit apply here
+ as well. Note that, as a result of this protocol, there is no way in
+ ROHC to make any use of a segment that has residual bit errors.)
+
+5.2.6. ROHC initial decompressor processing
+
+ The following packet types are reserved at the framework level in the
+ ROHC scheme:
+
+ 1110: Padding or Add-CID octet
+ 11110: Feedback
+ 11111000: IR-DYN packet
+ 1111110: IR packet
+ 1111111: Segment
+
+ Other packet types can be used at will by individual profiles.
+
+ The following steps is an outline of initial decompressor processing
+ which upon reception of a ROHC packet can determine its contents.
+
+ 1) If the first octet is a Padding Octet (11100000),
+ strip away all initial Padding Octets and goto next step.
+
+ 2) If the first remaining octet starts with 1110, it is an Add-CID
+ octet:
+
+ remember the Add-CID octet; remove the octet.
+
+ 3) If the first remaining octet starts with 11110, and an Add-CID
+ octet was found in step 2),
+
+ an error has occurred; the header MUST be discarded without
+ further action.
+
+ 4) If the first remaining octet starts with 11110, and an Add-CID
+ octet was not found in step 2), this is feedback:
+
+ find the size of the feedback data, call it s;
+ remove the feedback type octet;
+
+
+
+Bormann, et al. Standards Track [Page 51]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ remove the Size octet if Code is 0;
+ send feedback data of length s to the same-side associated
+ compressor;
+ if packet exhausted, stop; otherwise goto 2).
+
+ 5) If the first remaining octet starts with 1111111, this is a
+ segment:
+
+ attempt reconstruction using the segmentation protocol
+ (5.2.5). If a reconstructed packet is not produced, this
+ finishes the processing of the original packet. If a
+ reconstructed packet is produced, it is fed into step 1)
+ above. Padding, segments, and feedback are not allowed in
+ reconstructed packets, so when processing them, steps 1),
+ 4), and 5) are modified so that the packet is discarded
+ without further action when their conditions match.
+
+ 6) Here, it is known that the rest is forward information (unless the
+ header is damaged).
+
+ 7) If the forward traffic uses small CIDs, there is no large CID in
+ the packet. If an Add-CID immediately preceded the packet type
+ (step 2), it has the CID of the Add-CID; otherwise it has CID 0.
+
+ 8) If the forward traffic uses large CIDs, the CID starts with the
+ second remaining octet. If the first bit(s) of that octet are not
+ 0 or 10, the packet MUST be discarded without further action. If
+ an Add-CID octet immediately preceded the packet type (step 2),
+ the packet MUST be discarded without further action.
+
+ 9) Use the CID to find the context.
+
+ 10) If the packet type is IR, the profile indicated in the IR packet
+ determines how it is to be processed. If the CRC fails to verify
+ the packet, it MUST be discarded. If a profile is indicated in
+ the context, the logic of that profile determines what, if any,
+ feedback is to be sent. If no profile is noted in the context,
+ no further action is taken.
+
+ 11) If the packet type is IR-DYN, the profile indicated in the IR-DYN
+ packet determines how it is to be processed.
+
+ a) If the CRC fails to verify the packet, it MUST be discarded.
+ If a profile is indicated in the context, the logic of that
+ profile determines what, if any, feedback is to be sent. If no
+ profile is noted in the context, no further action is taken.
+
+
+
+
+
+Bormann, et al. Standards Track [Page 52]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ b) If the context has not been initialized by an IR packet, the
+ packet MUST be discarded. The logic of the profile indicated
+ in the IR-DYN header (if verified by the CRC), determines what,
+ if any, feedback is to be sent.
+
+ 12) Otherwise, the profile noted in the context determines how the
+ rest of the packet is to be processed. If the context has not
+ been initialized by an IR packet, the packet MUST be discarded
+ without further action.
+
+ The procedure for finding the size of the feedback data is as
+ follows:
+
+ Examine the three bits which immediately follow the feedback packet
+ type. When these bits are
+ 1-7, the size of the feedback data is given by the bits;
+ 0, a Size octet, which explicitly gives the size of the
+ feedback data, is present after the feedback type octet.
+
+5.2.7. ROHC RTP packet formats from compressor to decompressor
+
+ ROHC RTP uses three packet types to identify compressed headers, and
+ two for initialization/refresh. The format of a compressed packet
+ can depend on the mode. Therefore a naming scheme of the form
+
+ <modes format is used in>-<packet type number>-<some property>
+
+ is used to uniquely identify the format when necessary, e.g., UOR-2,
+ R-1. For exact formats of the packet types, see section 5.7.
+
+ Packet type zero: R-0, R-0-CRC, UO-0.
+
+ This, the minimal, packet type is used when parameters of all SN-
+ functions are known by the decompressor, and the header to be
+ compressed adheres to these functions. Thus, only the W-LSB
+ encoded RTP SN needs to be communicated.
+
+ R-mode: Only if a CRC is present (packet type R-0-CRC) may the
+ header be used as a reference for subsequent decompression.
+
+ U-mode and O-mode: A small CRC is present in the UO-0 packet.
+
+ Packet type 1: R-1, R-1-ID, R-1-TS, UO-1, UO-1-ID, UO-1-TS.
+
+ This packet type is used when the number of bits needed for the SN
+ exceeds those available in packet type zero, or when the
+ parameters of the SN-functions for RTP TS or IP-ID change.
+
+
+
+
+Bormann, et al. Standards Track [Page 53]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ R-mode: R-1-* packets are not used as references for subsequent
+ decompression. Values for other fields than the RTP TS or IP-ID
+ can be communicated using an extension, but they do not update the
+ context.
+
+ U-mode and O-mode: Only the values of RTP SN, RTP TS and IP-ID can
+ be used as references for future compression. Nonupdating values
+ can be provided for other fields using an extension (UO-1-ID).
+
+ Packet type 2: UOR-2, UOR-2-ID, UOR-2-TS
+
+ This packet type can be used to change the parameters of any SN-
+ function, except those for most static fields. Headers of packets
+ transferred using packet type 2 can be used as references for
+ subsequent decompression.
+
+ Packet type: IR
+
+ This packet type communicates the static part of the context,
+ i.e., the value of the constant SN-functions. It can optionally
+ also communicate the dynamic part of the context, i.e., the
+ parameters of the nonconstant SN-functions.
+
+ Packet type: IR-DYN
+
+ This packet type communicates the dynamic part of the context,
+ i.e., the parameters of nonconstant SN-functions.
+
+5.2.8. Parameters needed for mode transition in ROHC RTP
+
+ The packet types IR (with dynamic information), IR-DYN, and UOR-2 are
+ common for all modes. They can carry a mode parameter which can take
+ the values U = Unidirectional, O = Bidirectional Optimistic, and R =
+ Bidirectional Reliable.
+
+ Feedback of types ACK, NACK, and STATIC-NACK carry sequence numbers,
+ and feedback packets can also carry a mode parameter indicating the
+ desired compression mode: U, O, or R.
+
+ As a shorthand, the notation PACKET(mode) is used to indicate which
+ mode value a packet carries. For example, an ACK with mode parameter
+ R is written ACK(R), and an UOR-2 with mode parameter O is written
+ UOR-2(O).
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 54]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+5.3. Operation in Unidirectional mode
+
+5.3.1. Compressor states and logic (U-mode)
+
+ Below is the state machine for the compressor in Unidirectional mode.
+ Details of the transitions between states and compression logic are
+ given subsequent to the figure.
+
+ Optimistic approach
+ +------>------>------>------>------>------>------>------>------+
+ | |
+ | Optimistic approach Optimistic approach |
+ | +------>------>------+ +------>------>------+ |
+ | | | | | |
+ | | v | v v
+ +----------+ +----------+ +----------+
+ | IR State | | FO State | | SO State |
+ +----------+ +----------+ +----------+
+ ^ ^ | ^ | |
+ | | Timeout | | Timeout / Update | |
+ | +------<------<------+ +------<------<------+ |
+ | |
+ | Timeout |
+ +------<------<------<------<------<------<------<------<------+
+
+5.3.1.1. State transition logic (U-mode)
+
+ The transition logic for compression states in Unidirectional mode is
+ based on three principles: the optimistic approach principle,
+ timeouts, and the need for updates.
+
+5.3.1.1.1. Optimistic approach, upwards transition
+
+ Transition to a higher compression state in Unidirectional mode is
+ carried out according to the optimistic approach principle. This
+ means that the compressor transits to a higher compression state when
+ it is fairly confident that the decompressor has received enough
+ information to correctly decompress packets sent according to the
+ higher compression state.
+
+ When the compressor is in the IR state, it will stay there until it
+ assumes that the decompressor has correctly received the static
+ context information. For transition from the FO to the SO state, the
+ compressor should be confident that the decompressor has all
+ parameters needed to decompress according to a fixed pattern.
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 55]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ The compressor normally obtains its confidence about decompressor
+ status by sending several packets with the same information according
+ to the lower compression state. If the decompressor receives any of
+ these packets, it will be in sync with the compressor. The number of
+ consecutive packets to send for confidence is not defined in this
+ document.
+
+5.3.1.1.2. Timeouts, downward transition
+
+ When the optimistic approach is taken as described above, there will
+ always be a possibility of failure since the decompressor may not
+ have received sufficient information for correct decompression.
+ Therefore, the compressor MUST periodically transit to lower
+ compression states. Periodic transition to the IR state SHOULD be
+ carried out less often than transition to the FO state. Two
+ different timeouts SHOULD therefore be used for these transitions.
+ For an example of how to implement periodic refreshes, see [IPHC]
+ chapters 3.3.1-3.3.2.
+
+5.3.1.1.3. Need for updates, downward transition
+
+ In addition to the downward state transitions carried out due to
+ periodic timeouts, the compressor must also immediately transit back
+ to the FO state when the header to be compressed does not conform to
+ the established pattern.
+
+5.3.1.2. Compression logic and packets used (U-mode)
+
+ The compressor chooses the smallest possible packet format that can
+ communicate the desired changes, and has the required number of bits
+ for W-LSB encoded values.
+
+5.3.1.3. Feedback in Unidirectional mode
+
+ The Unidirectional mode of operation is designed to operate over
+ links where a feedback channel is not available. If a feedback
+ channel is available, however, the decompressor MAY send an
+ acknowledgment of successful decompression with the mode parameter
+ set to U (send an ACK(U)). When the compressor receives such a
+ message, it MAY disable (or increase the interval between) periodic
+ IR refreshes.
+
+5.3.2. Decompressor states and logic (U-mode)
+
+ Below is the state machine for the decompressor in Unidirectional
+ mode. Details of the transitions between states and decompression
+ logic are given subsequent to the figure.
+
+
+
+
+Bormann, et al. Standards Track [Page 56]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ Success
+ +-->------>------>------>------>------>--+
+ | |
+ No Static | No Dynamic Success | Success
+ +-->--+ | +-->--+ +--->----->---+ +-->--+
+ | | | | | | | | |
+ | v | | v | v | v
+ +--------------+ +----------------+ +--------------+
+ | No Context | | Static Context | | Full Context |
+ +--------------+ +----------------+ +--------------+
+ ^ | ^ |
+ | k_2 out of n_2 failures | | k_1 out of n_1 failures |
+ +-----<------<------<-----+ +-----<------<------<-----+
+
+5.3.2.1. State transition logic (U-mode)
+
+ Successful decompression will always move the decompressor to the
+ Full Context state. Repeated failed decompression will force the
+ decompressor to transit downwards to a lower state. The decompressor
+ does not attempt to decompress headers at all in the No Context and
+ Static Context states unless sufficient information is included in
+ the packet itself.
+
+5.3.2.2. Decompression logic (U-mode)
+
+ Decompression in Unidirectional mode is carried out following three
+ steps which are described in subsequent sections.
+
+5.3.2.2.1. Decide whether decompression is allowed
+
+ In Full Context state, decompression may be attempted regardless of
+ what kind of packet is received. However, for the other states
+ decompression is not always allowed. In the No Context state only IR
+ packets, which carry the static information fields, may be
+ decompressed. Further, when in the Static Context state, only
+ packets carrying a 7- or 8-bit CRC can be decompressed (i.e., IR,
+ IR-DYN, or UOR-2 packets). If decompression may not be performed the
+ packet is discarded, unless the optional delayed decompression
+ mechanism is used, see section 6.1.
+
+5.3.2.2.2. Reconstruct and verify the header
+
+ When reconstructing the header, the decompressor takes the header
+ information already stored in the context and updates it with the
+ information received in the current header. (If the reconstructed
+ header fails the CRC check, these updates MUST be undone.)
+
+
+
+
+
+Bormann, et al. Standards Track [Page 57]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ The sequence number is reconstructed by replacing the sequence number
+ LSBs in the context with those received in the header. The resulting
+ value is then verified to be within the interpretation interval by
+ comparison with a previously reconstructed reference value v_ref (see
+ section 4.5.1). If it is not within this interval, an adjustment is
+ applied by adding N x interval_size to the reconstructed value so
+ that the result is brought within the interpretation interval. Note
+ that N can be negative.
+
+ If RTP Timestamp and IP Identification fields are not included in the
+ received header, they are supposed to be calculated from the sequence
+ number. The IP Identifier usually increases by the same delta as the
+ sequence number and the timestamp by the same delta times a fixed
+ value. See chapters 4.5.3 and 4.5.5 for details about how these
+ fields are encoded in compressed headers.
+
+ When working in Unidirectional mode, all compressed headers carry a
+ CRC which MUST be used to verify decompression.
+
+5.3.2.2.3. Actions upon CRC failure
+
+ This section is written so that it is applicable to all modes.
+
+ A mismatch in the CRC can be caused by one or more of:
+
+ 1. residual bit errors in the current header
+
+ 2. a damaged context due to residual bit errors in previous headers
+
+ 3. many consecutive packets being lost between compressor and
+ decompressor (this may cause the LSBs of the SN in compressed
+ packets to be interpreted wrongly, because the decompressor has
+ not moved the interpretation interval for lack of input -- in
+ essence, a kind of context damage).
+
+ (Cases 2 and 3 do not apply to IR packets; case 3 does not apply to
+ IR-DYN packets.) The 3-bit CRC present in some header formats will
+ eventually detect context damage reliably, since the probability of
+ undetected context damage decreases exponentially with each new
+ header processed. However, residual bit errors in the current header
+ are only detected with good probability, not reliably.
+
+ When a CRC mismatch is caused by residual bit errors in the current
+ header (case 1 above), the decompressor should stay in its current
+ state to avoid unnecessary loss of subsequent packets. On the other
+ hand, when the mismatch is caused by a damaged context (case 2), the
+ decompressor should attempt to repair the context locally. If the
+ local repair attempt fails, it must move to a lower state to avoid
+
+
+
+Bormann, et al. Standards Track [Page 58]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ delivering incorrect headers. When the mismatch is caused by
+ prolonged loss (case 3), the decompressor might attempt additional
+ decompression attempts. Note that case 3 does not occur in R-mode.
+
+ The following actions MUST be taken when a CRC check fails:
+
+ First, attempt to determine whether SN LSB wraparound (case 3) is
+ likely, and if so, attempt a correction. For this, the algorithm of
+ section 5.3.2.2.4 MAY be used. If another algorithm is used, it MUST
+ have at least as high a rate of correct repairs as the one in
+ 5.3.2.2.4. (This step is not applicable to R-mode.)
+
+ Second, if the previous step did not attempt a correction, a repair
+ should be attempted under the assumption that the reference SN has
+ been incorrectly updated. For this, the algorithm of section
+ 5.3.2.2.5 MAY be used. If another algorithm is used, it MUST have at
+ least as high a rate of correct repairs as the one in 5.3.2.2.5.
+ (This step is not applicable to R-mode.)
+
+ If both the above steps fail, additional decompression attempts
+ SHOULD NOT be made. There are two possible reasons for the CRC
+ failure: case 1 or unrecoverable context damage. It is impossible to
+ know for certain which of these is the actual cause. The following
+ rules are to be used:
+
+ a. When CRC checks fail only occasionally, assume residual errors in
+ the current header and simply discard the packet. NACKs SHOULD
+ NOT be sent at this time.
+
+ b. In the Full Context state: When the CRC check of k_1 out of the
+ last n_1 decompressed packets have failed, context damage SHOULD
+ be assumed and a NACK SHOULD be sent in O- and R-mode. The
+ decompressor moves to the Static Context state and discards all
+ packets until an update (IR, IR-DYN, UOR-2) which passes the CRC
+ check is received.
+
+ c. In the Static Context state: When the CRC check of k_2 out of the
+ last n_2 updates (IR, IR-DYN, UOR-2) have failed, static context
+ damage SHOULD be assumed and a STATIC-NACK is sent in O- and R-
+ mode. The decompressor moves to the No Context state.
+
+ d. In the No Context state: The decompressor discards all packets
+ until a static update (IR) which passes the CRC check is received.
+ (In O-mode and R-mode, feedback is sent according to sections
+ 5.4.2.2 and 5.5.2.2, respectively.)
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 59]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ Note that appropriate values for k_1, n_1, k_2, and n_2, are related
+ to the residual error rate of the link. When the residual error rate
+ is close to zero, k_1 = n_1 = k_2 = n_2 = 1 may be appropriate.
+
+5.3.2.2.4. Correction of SN LSB wraparound
+
+ When many consecutive packets are lost there will be a risk of
+ sequence number LSB wraparound, i.e., the SN LSBs being interpreted
+ wrongly because the interpretation interval has not moved for lack of
+ input. The decompressor might be able to detect this situation and
+ avoid context damage by using a local clock. The following algorithm
+ MAY be used:
+
+ a. The decompressor notes the arrival time, a(i), of each incoming
+ packet i. Arrival times of packets where decompression fails are
+ discarded.
+
+ b. When decompression fails, the decompressor computes INTERVAL =
+ a(i) - a(i - 1), i.e., the time elapsed between the arrival of the
+ previous, correctly decompressed packet and the current packet.
+
+ c. If wraparound has occurred, INTERVAL will correspond to at least
+ 2^k inter-packet times, where k is the number of SN bits in the
+ current header. On the basis of an estimate of the packet inter-
+ arrival time, obtained for example using a moving average of
+ arrival times, TS_STRIDE, or TS_TIME, the decompressor judges if
+ INTERVAL can correspond to 2^k inter-packet times.
+
+ d. If INTERVAL is judged to be at least 2^k packet inter-arrival
+ times, the decompressor adds 2^k to the reference SN and attempts
+ to decompress the packet using the new reference SN.
+
+ e. If this decompression succeeds, the decompressor updates the
+ context but SHOULD NOT deliver the packet to upper layers. The
+ following packet is also decompressed and updates the context if
+ its CRC succeeds, but SHOULD be discarded. If decompression of
+ the third packet using the new context also succeeds, the context
+ repair is deemed successful and this and subsequent decompressed
+ packets are delivered to the upper layers.
+
+ f. If any of the three decompression attempts in d. and e. fails, the
+ decompressor discards the packets and acts according to rules a)
+ through c) of section 5.3.2.2.3.
+
+ Using this mechanism, the decompressor may be able to repair the
+ context after excessive loss, at the expense of discarding two
+ packets.
+
+
+
+
+Bormann, et al. Standards Track [Page 60]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+5.3.2.2.5. Repair of incorrect SN updates
+
+ The CRC can fail to detect residual errors in the compressed header
+ because of its limited length, i.e., the incorrectly decompressed
+ packet can happen to have the same CRC as the original uncompressed
+ packet. The incorrect decompressed header will then update the
+ context. This can lead to an erroneous reference SN being used in
+ W-LSB decoding, as the reference SN is updated for each successfully
+ decompressed header of certain types.
+
+ In this situation, the decompressor will detect the incorrect
+ decompression of the following packet with high probability, but it
+ does not know the reason for the failure. The following mechanism
+ allows the decompressor to judge if the context was updated
+ incorrectly by an earlier packet and, if so, to attempt a repair.
+
+ a. The decompressor maintains two decompressed sequence numbers: the
+ last one (ref 0) and the one before that (ref -1).
+
+ b. When receiving a compressed header the SN (SN curr1) is
+ decompressed using ref 0 as the reference. The other header
+ fields are decompressed using this decompressed SN curr1. (This
+ is part of the normal decompression procedure prior to any CRC
+ test failures.)
+
+ c. If the decompressed header generated in b. passes the CRC test,
+ the references are shifted as follows:
+
+ ref -1 = ref 0
+ ref 0 = SN curr1.
+
+ d. If the header generated in b. does not pass the CRC test, and the
+ SN (SN curr2) generated when using ref -1 as the reference is
+ different from SN curr1, an additional decompression attempt is
+ performed based on SN curr2 as the decompressed SN.
+
+ e. If the decompressed header generated in b. does not pass the CRC
+ test and SN curr2 is the same as SN curr1, an additional
+ decompression attempt is not useful and is not attempted.
+
+ f. If the decompressed header generated in d. passes the CRC test,
+ ref -1 is not changed while ref 0 is set to SN curr2.
+
+ g. If the decompressed header generated in d. does not pass the CRC
+ test, the decompressor acts according to rules a) through c) of
+ section 5.3.2.2.3.
+
+
+
+
+
+Bormann, et al. Standards Track [Page 61]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ The purpose of this algorithm is to repair the context. If the
+ header generated in d. passes the CRC test, the references are
+ updated according to f., but two more headers MUST also be
+ successfully decompressed before the repair is deemed successful. Of
+ the three successful headers, the first two SHOULD be discarded and
+ only the third delivered to upper layers. If decompression of any of
+ the three headers fails, the decompressor MUST discard that header
+ and the previously generated headers, and act according to rules a)
+ through c) of section 5.3.2.2.3.
+
+5.3.2.3. Feedback in Unidirectional mode
+
+ To improve performance for the Unidirectional mode over a link that
+ does have a feedback channel, the decompressor MAY send an
+ acknowledgment when decompression succeeds. Setting the mode
+ parameter in the ACK packet to U indicates that the compressor is to
+ stay in Unidirectional mode. When receiving an ACK(U), the
+ compressor should reduce the frequency of IR packets since the static
+ information has been correctly received, but it is not required to
+ stop sending IR packets. If IR packets continue to arrive, the
+ decompressor MAY repeat the ACK(U), but it SHOULD NOT repeat the
+ ACK(U) continuously.
+
+5.4. Operation in Bidirectional Optimistic mode
+
+5.4.1. Compressor states and logic (O-mode)
+
+ Below is the state machine for the compressor in Bidirectional
+ Optimistic mode. The details of each state, state transitions, and
+ compression logic are given subsequent to the figure.
+
+ Optimistic approach / ACK
+ +------>------>------>------>------>------>------>------>------+
+ | |
+ | Optimistic appr. / ACK Optimistic appr. /ACK ACK |
+ | +------>------>------+ +------>--- -->-----+ +->--+
+ | | | | | | |
+ | | v | v | v
+ +----------+ +----------+ +----------+
+ | IR State | | FO State | | SO State |
+ +----------+ +----------+ +----------+
+ ^ ^ | ^ | |
+ | | STATIC-NACK | | NACK / Update | |
+ | +------<------<------+ +------<------<------+ |
+ | |
+ | STATIC-NACK |
+ +------<------<------<------<------<------<------<------<------+
+
+
+
+
+Bormann, et al. Standards Track [Page 62]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+5.4.1.1. State transition logic
+
+ The transition logic for compression states in Bidirectional
+ Optimistic mode has much in common with the logic of the
+ Unidirectional mode. The optimistic approach principle and
+ transitions occasioned by the need for updates work in the same way
+ as described in chapter 5.3.1. However, in Optimistic mode there are
+ no timeouts. Instead, the Optimistic mode makes use of feedback from
+ decompressor to compressor for transitions in the backward direction
+ and for OPTIONAL improved forward transition.
+
+5.4.1.1.1. Negative acknowledgments (NACKs), downward transition
+
+ Negative acknowledgments (NACKs), also called context requests,
+ obviate the periodic updates needed in Unidirectional mode. Upon
+ reception of a NACK the compressor transits back to the FO state and
+ sends updates (IR-DYN, UOR-2, or possibly IR) to the decompressor.
+ NACKs carry the SN of the latest packet successfully decompressed,
+ and this information MAY be used by the compressor to determine what
+ fields need to be updated.
+
+ Similarly, reception of a STATIC-NACK packet makes the compressor
+ transit back to the IR state.
+
+5.4.1.1.2. Optional acknowledgments, upwards transition
+
+ In addition to NACKs, positive feedback (ACKs) MAY also be used for
+ UOR-2 packets in the Bidirectional Optimistic mode. Upon reception
+ of an ACK for an updating packet, the compressor knows that the
+ decompressor has received the acknowledged packet and the transition
+ to a higher compression state can be carried out immediately. This
+ functionality is optional, so a compressor MUST NOT expect to get
+ such ACKs initially.
+
+ The compressor MAY use the following algorithm to determine when to
+ expect ACKs for UOR-2 packets. Let an update event be when a
+ sequence of UOR-2 headers are sent to communicate an irregularity in
+ the packet stream. When ACKs have been received for k_3 out of the
+ last n_3 update events, the compressor will expect ACKs. A
+ compressor which expects ACKs will repeat updates (possibly not in
+ every packet) until an ACK is received.
+
+5.4.1.2. Compression logic and packets used
+
+ The compression logic is the same for the Bidirectional Optimistic
+ mode as for the Unidirectional mode (see section 5.3.1.2).
+
+
+
+
+
+Bormann, et al. Standards Track [Page 63]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+5.4.2. Decompressor states and logic (O-mode)
+
+ The decompression states and the state transition logic are the same
+ as for the Unidirectional case (see section 5.3.2). What differs is
+ the decompression and feedback logic.
+
+5.4.2.1. Decompression logic, timer-based timestamp decompression
+
+ In Bidirectional mode (or if there is some other way for the
+ compressor to obtain the decompressor's clock resolution and the
+ link's jitter), timer-based timestamp decompression may be used to
+ improve compression efficiency when RTP Timestamp values are
+ proportional to wall-clock time. The mechanisms used are those
+ described in 4.5.4.
+
+5.4.2.2. Feedback logic (O-mode)
+
+ The feedback logic defines what feedback to send due to different
+ events when operating in the various states. As mentioned above,
+ there are three principal kinds of feedback; ACK, NACK and STATIC-
+ NACK. Further, the logic described below will refer to different
+ kinds of packets that can be received by the decompressor;
+ Initialization and Refresh (IR) packets, IR packets without static
+ information (IR-DYN) and type 2 packets (UOR-2), or type 1 (UO-1) and
+ type 0 packets (UO-0). A type 0 packet carries a packet header
+ compressed according to a fixed pattern, while type 1, 2 and IR-DYN
+ packets are used when this pattern is broken.
+
+ Below, rules are defined stating which feedback to use when. If the
+ optional feedback is used once, the decompressor is REQUIRED to
+ continue to send optional feedback for the lifetime of the packet
+ stream.
+
+ State Actions
+
+ NC: - When an IR packet passes the CRC check, send an ACK(O).
+ - When receiving a type 0, 1, 2 or IR-DYN packet, or an IR
+ packet has failed the CRC check, send a STATIC-NACK(O),
+ subject to the considerations at the beginning of section
+ 5.7.6.
+
+ SC: - When an IR packet is correctly decompressed, send an ACK(O).
+ - When a type 2 or an IR-DYN packet is correctly decompressed,
+ optionally send an ACK(O).
+ - When a type 0 or 1 packet is received, treat it as a
+ mismatching CRC and use the logic of section 5.3.2.2.3 to
+ decide if a NACK(O) should be sent.
+
+
+
+
+Bormann, et al. Standards Track [Page 64]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ - When decompression of a type 2 packet, an IR-DYN packet or an
+ IR packet has failed, use the logic of section 5.3.2.2.3 to
+ decide if a STATIC-NACK(O) should be sent.
+
+ FC: - When an IR packet is correctly decompressed, send an ACK(O).
+ - When a type 2 or an IR-DYN packet is correctly decompressed,
+ optionally send an ACK(O).
+ - When a type 0 or 1 packet is correctly decompressed, no
+ feedback is sent.
+ - When any packet fails the CRC check, use the logic of
+ 5.3.2.2.3 to decide if a NACK(O) should be sent.
+
+5.5. Operation in Bidirectional Reliable mode
+
+5.5.1. Compressor states and logic (R-mode)
+
+ Below is the state machine for the compressor in Bidirectional
+ Reliable mode. The details of each state, state transitions, and
+ compression logic are given subsequent to the figure.
+
+ ACK
+ +------>------>------>------>------>------>------>------+
+ | |
+ | ACK ACK | ACK
+ | +------>------>------+ +------>------>------+ +->-+
+ | | | | | | |
+ | | v | v | v
+ +----------+ +----------+ +----------+
+ | IR State | | FO State | | SO State |
+ +----------+ +----------+ +----------+
+ ^ ^ | ^ | |
+ | | STATIC-NACK | | NACK / Update | |
+ | +------<------<------+ +------<------<------+ |
+ | |
+ | STATIC-NACK |
+ +------<------<------<------<------<------<------<------<------+
+
+5.5.1.1. State transition logic (R-mode)
+
+ The transition logic for compression states in Reliable mode is based
+ on three principles: the secure reference principle, the need for
+ updates, and negative acknowledgments.
+
+5.5.1.1.1. Upwards transition
+
+ The upwards transition is determined by the secure reference
+ principle. The transition procedure is similar to the one described
+ in section 5.3.1.1.1, with one important difference: the compressor
+
+
+
+Bormann, et al. Standards Track [Page 65]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ bases its confidence only on acknowledgments received from the
+ decompressor. This ensures that the synchronization between the
+ compression context and decompression context will never be lost due
+ to packet losses.
+
+5.5.1.1.2. Downward transition
+
+ Downward transitions are triggered by the need for updates or by
+ negative acknowledgment (NACKs and STATIC_NACKs), as described in
+ section 5.3.1.1.3 and 5.4.1.1.1, respectively. Note that NACKs
+ should rarely occur in R-mode because of the secure reference used
+ (see fourth paragraph of next section).
+
+5.5.1.2. Compression logic and packets used (R-mode)
+
+ The compressor starts in the IR state by sending IR packets. It
+ transits to the FO state once it receives a valid ACK for an IR
+ packet sent (an ACK can only be valid if it refers to an SN sent
+ earlier). In the FO state, it sends the smallest packets that can
+ communicate the changes, according to W-LSB or other encoding rules.
+ Those packets could be of type R-1*, UOR-2, or even IR-DYN.
+
+ The compressor will transit to the SO state after it has determined
+ the presence of a string (see section 2), while also being confident
+ that the decompressor has the string parameters. The confidence can
+ be based on ACKs. For example, in a typical case where the string
+ pattern has the form of non-SN-field = SN * slope + offset, one ACK
+ is enough if the slope has been previously established by the
+ decompressor (i.e., only the new offset needs to be synchronized).
+ Otherwise, two ACKs are required since the decompressor needs two
+ headers to learn both the new slope and the new offset. In the SO
+ state, R-0* packets will be sent.
+
+ Note that a direct transition from the IR state to the SO state is
+ possible.
+
+ The secure reference principle is enforced in both compression and
+ decompression logic. The principle means that only a packet carrying
+ a 7- or 8-bit CRC can update the decompression context and be used as
+ a reference for subsequent decompression. Consequently, only field
+ values of update packets need to be added to the encoding sliding
+ windows (see 4.5) maintained by the compressor.
+
+ Reasons for the compressor to send update packets include:
+
+ 1) The update may lead to a transition to higher compression
+ efficiency (meaning either a higher compression state or smaller
+ packets in the same state).
+
+
+
+Bormann, et al. Standards Track [Page 66]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ 2) It is desirable to shrink sliding windows. Windows are only
+ shrunk when an ACK is received.
+
+ The generation of a CRC is infrequent since it is only needed for
+ an update packet.
+
+ One algorithm for sending update packets could be:
+
+ * Let pRTT be the number of packets that are sent during one
+ round-trip time. In the SO state, when (64 - pRTT) headers have
+ been sent since the last acked reference, the compressor will
+ send m1 consecutive R-0-CRC headers, then send (pRTT - m1) R-0
+ headers. After these headers have been sent, if the compressor
+ has not received an ACK to at least one of the previously sent
+ R0-CRC, it sends R-0-CRC headers continuously until it receives a
+ corresponding ACK. m1 is an implementation parameter, which can
+ be as large as pRTT.
+
+ * In the FO state, m2 UOR-2 headers are sent when there is a
+ pattern change, after which the compressor sends (pRTT - m2)
+ R-1-* headers. m2 is an implementation parameter, which can be
+ as large as pRTT. At that time, if the compressor has not
+ received enough ACKs to the previously sent UOR-2 packets in
+ order to transit to SO state, it can repeat the cycle with the
+ same m2, or repeat the cycle with a larger m2, or send UOR-2
+ headers continuously (m2 = pRTT). The operation stops when the
+ compressor has received enough ACKs to make the transition.
+
+ An algorithm for processing ACKs could be:
+
+ * Upon reception of an ACK, the compressor first derives the
+ complete SN (see section 5.7.6.1). Then it searches the sliding
+ window for an update packet that has the same SN. If found, that
+ packet is the one being ACKed. Otherwise, the ACK is invalid and
+ MUST be discarded.
+
+ * It is possible, although unlikely, that residual errors on the
+ reverse channel could cause a packet to mimic a valid ACK
+ feedback. The compressor may use a local clock to reduce the
+ probability of processing such a mistaken ACK. After finding the
+ update packet as described above, the compressor can check the
+ time elapsed since the packet was sent. If the time is longer
+ than RTT_U, or shorter than RTT_L, the compressor may choose to
+ discard the ACK. RTT_U and RTT_L correspond to an upper bound
+ and lower bound of the RTT, respectively. (These bounds should
+ be chosen appropriately to allow some variation of RTT.) Note
+ that the only side effect of discarding a good ACK is slightly
+ reduced compression efficiency.
+
+
+
+Bormann, et al. Standards Track [Page 67]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+5.5.2. Decompressor states and logic (R-mode)
+
+ The decompression states and the state transition logic are the same
+ as for the Unidirectional case (see section 5.3.2). What differs is
+ the decompression and feedback logic.
+
+5.5.2.1. Decompression logic (R-mode)
+
+ The rules for when decompression is allowed are the same as for U-
+ mode. Although the acking scheme in R-mode guarantees that non-
+ decompressible packets are never sent by the compressor, residual
+ errors can cause delivery of unexpected packets for which
+ decompression should not be attempted.
+
+ Decompression MUST follow the secure reference principle as described
+ in 5.5.1.2.
+
+ CRC verification is infrequent since only update packets carry CRCs.
+ A CRC mismatch can only occur due to 1) residual bit errors in the
+ current header, and/or 2) a damaged context due to residual bit
+ errors in previous headers or feedback. Although it is impossible to
+ determine which is the actual cause, case 1 is more likely, as a
+ previous header reconstructed according to a damaged packet is
+ unlikely to pass the 7- or 8-bit CRC, and damaged packets are
+ unlikely to result in feedback that damages the context. The
+ decompressor SHOULD act according to section 5.3.2.2.3 when CRCs
+ fail, except that no local repair is performed. Note that all the
+ parameter numbers, k_1, n_1, k_2, and n_2, are applied to the update
+ packets only (i.e., exclude R-0, R-1*).
+
+5.5.2.2. Feedback logic (R-mode)
+
+ The feedback logic for the Bidirectional Reliable mode is as follows:
+
+ - When an updating packet (i.e., a packet carrying a 7- or 8-bit CRC)
+ is correctly decompressed, send an ACK(R), subject to the sparse
+ ACK mechanism described below.
+
+ - When context damage is detected, send a NACK(R) if in Full Context
+ state, or a STATIC-NACK(R) if in Static Context state.
+
+ - In No Context state, send a STATIC-NACK(R) when receiving a non-IR
+ packet, subject to the considerations at the beginning of section
+ 5.7.6. The decompressor SHOULD NOT send STATIC-NACK(R) when
+ receiving an IR packet that fails the CRC check, as the compressor
+ will stay in IR state and thus continue sending IR packets until a
+ valid ACK is received (see section 5.5.1.2).
+
+
+
+
+Bormann, et al. Standards Track [Page 68]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ - Feedback is never sent for packets not updating the context (i.e.,
+ packets that do not carry a CRC)
+
+ A mechanism called "Sparse ACK" can be applied to reduce the feedback
+ overhead caused by a large RTT. For a sequence of ACK-triggering
+ events, a minimal set of ACKs MUST be sent:
+
+ 1) For a sequence of R-0-CRC packets, the first one MUST be ACKed.
+
+ 2) For a sequence of UOR-2, IR, or IR-DYN packets, the first N of
+ them MUST be ACKEd, where N is the number of ACKs needed to give
+ the compressor confidence that the decompressor has acquired the
+ new string parameters (see second paragraph of 5.5.1.2). In case
+ the decompressor cannot determine the value of N, the default
+ value 2 SHOULD be used. If the subsequently received packets
+ continue the same change pattern of header fields, sparse ACK can
+ be applied. Otherwise, each new pattern MUST be treated as a new
+ sequence, i.e., the first N packets that exhibit a new pattern
+ MUST be ACKed.
+
+ After sending these minimal ACKs, the decompressor MAY choose to ACK
+ only k subsequent packets per RTT ("Sparse ACKs"), where k is an
+ implementation parameter. To achieve robustness against loss of
+ ACKs, k SHOULD be at least 1.
+
+ To avoid ambiguity at the compressor, the decompressor MUST use the
+ feedback format whose SN field length is equal to or larger than the
+ one in the compressed packet that triggered the feedback.
+
+ Context damage is detected according to the principles in 5.3.2.2.3.
+
+ When the decompressor is capable of timer-based compression of the
+ RTP Timestamp (e.g., it has access to a clock with sufficient
+ resolution, and the jitter introduced internally in the receiving
+ node is sufficiently small) it SHOULD signal that it is ready to do
+ timer-based compression of the RTP Timestamp. The compressor will
+ then make a decision based on its knowledge of the channel and the
+ observed properties of the packet stream.
+
+5.6. Mode transitions
+
+ The decision to move from one compression mode to another is taken by
+ the decompressor and the possible mode transitions are shown in the
+ figure below. Subsequent chapters describe how the transitions are
+ performed together with exceptions for the compression and
+ decompression functionality during transitions.
+
+
+
+
+
+Bormann, et al. Standards Track [Page 69]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ +-------------------------+
+ | Unidirectional (U) mode |
+ +-------------------------+
+ / ^ \ ^
+ / / Feedback(U) \ \ Feedback(U)
+ / / \ \
+ / / \ \
+ Feedback(O) / / Feedback(R) \ \
+ v / v \
+ +---------------------+ Feedback(R) +-------------------+
+ | Optimistic (O) mode | ----------------> | Reliable (R) mode |
+ | | <---------------- | |
+ +---------------------+ Feedback(O) +-------------------+
+
+5.6.1. Compression and decompression during mode transitions
+
+ The following sections assume that, for each context, the compressor
+ and decompressor maintain a variable whose value is the current
+ compression mode for that context. The value of the variable
+ controls, for the context in question, which packet types to use,
+ which actions to be taken, etc.
+
+ As a safeguard against residual errors, all feedback sent during a
+ mode transition MUST be protected by a CRC, i.e., the CRC option MUST
+ be used. A mode transition MUST NOT be initiated by feedback which
+ is not protected by a CRC.
+
+ The subsequent subsections define exactly when to change the value of
+ the MODE variable. When ROHC transits between compression modes,
+ there are several cases where the behavior of compressor or
+ decompressor must be restricted during the transition phase. These
+ restrictions are defined by exception parameters that specify which
+ restrictions to apply. The transition descriptions in subsequent
+ chapters refer to these exception parameters and defines when they
+ are set and to what values. All mode related parameters are listed
+ below together with their possible values, with explanations and
+ restrictions:
+
+ Parameters for the compressor side:
+
+ - C_MODE:
+ Possible values for the C_MODE parameter are (U)NIDIRECTIONAL,
+ (O)PTIMISTIC and (R)ELIABLE. C_MODE MUST be initialized to U.
+
+ - C_TRANS:
+ Possible values for the C_TRANS parameter are (P)ENDING and
+ (D)ONE. C_TRANS MUST be initialized to D. When C_TRANS is P,
+ it is REQUIRED
+
+
+
+Bormann, et al. Standards Track [Page 70]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ 1) that the compressor only use packet formats common to all
+ modes,
+
+ 2) that mode information is included in packets sent, at least
+ periodically,
+
+ 3) that the compressor not transit to the SO state,
+
+ 4) that new mode transition requests be ignored.
+
+ Parameters for the decompressor side:
+
+ - D_MODE:
+ Possible values for the D_MODE parameter are (U)NIDIRECTIONAL,
+ (O)PTIMISTIC and (R)ELIABLE. D_MODE MUST be initialized to U.
+
+ - D_TRANS:
+ Possible values for the D_TRANS parameter are (I)NITIATED,
+ (P)ENDING and (D)ONE. D_TRANS MUST be initialized to D. A
+ mode transition can be initiated only when D_TRANS is D. While
+ D_TRANS is I, the decompressor sends a NACK or ACK carrying a
+ CRC option for each received packet.
+
+5.6.2. Transition from Unidirectional to Optimistic mode
+
+ When there is a feedback channel available, the decompressor may at
+ any moment decide to initiate transition from Unidirectional to
+ Bidirectional Optimistic mode. Any feedback packet carrying a CRC
+ can be used with the mode parameter set to O. The decompressor can
+ then directly start working in Optimistic mode. The compressor
+ transits from Unidirectional to Optimistic mode as soon as it
+ receives any feedback packet that has the mode parameter set to O and
+ that passes the CRC check. The transition procedure is described
+ below:
+
+ Compressor Decompressor
+ ----------------------------------------------
+ | |
+ | ACK(O)/NACK(O) +-<-<-<-| D_MODE = O
+ | +-<-<-<-<-<-<-<-+ |
+ C_MODE = O |-<-<-<-+ |
+ | |
+
+ If the feedback packet is lost, the compressor will continue to work
+ in Unidirectional mode, but as soon as any feedback packet reaches
+ the compressor it will transit to Optimistic mode.
+
+
+
+
+
+Bormann, et al. Standards Track [Page 71]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+5.6.3. From Optimistic to Reliable mode
+
+ Transition from Optimistic to Reliable mode is permitted only after
+ at least one packet has been correctly decompressed, which means that
+ at least the static part of the context is established. An ACK(R) or
+ a NACK(R) feedback packet carrying a CRC is sent to initiate the mode
+ transition. The compressor MUST NOT use packet types 0 or 1 during
+ transition. The transition procedure is described below:
+
+ Compressor Decompressor
+ ----------------------------------------------
+ | |
+ | ACK(R)/NACK(R) +-<-<-<-| D_TRANS = I
+ | +-<-<-<-<-<-<-<-+ |
+ C_TRANS = P |-<-<-<-+ |
+ C_MODE = R | |
+ |->->->-+ IR/IR-DYN/UOR-2(SN,R) |
+ | +->->->->->->->-+ |
+ |->-.. +->->->-| D_TRANS = P
+ |->-.. | D_MODE = R
+ | ACK(SN,R) +-<-<-<-|
+ | +-<-<-<-<-<-<-<-+ |
+ C_TRANS = D |-<-<-<-+ |
+ | |
+ |->->->-+ R-0*, R-1* |
+ | +->->->->->->->-+ |
+ | +->->->-| D_TRANS = D
+ | |
+
+ As long as the decompressor has not received an UOR-2, IR-DYN, or IR
+ packet with the mode transition parameter set to R, it must stay in
+ Optimistic mode. The compressor must not send packet types 1 or 0
+ while C_TRANS is P, i.e., not until it has received an ACK for a
+ UOR-2, IR-DYN, or IR packet sent with the mode transition parameter
+ set to R. When the decompressor receives packet types 0 or 1, after
+ having ACKed an UOR-2, IR-DYN, or IR packet, it sets D_TRANS to D.
+
+5.6.4. From Unidirectional to Reliable mode
+
+ The transition from Unidirectional to Reliable mode follows the same
+ transition procedure as defined in section 5.6.3 above.
+
+5.6.5. From Reliable to Optimistic mode
+
+ Either the ACK(O) or the NACK(O) feedback packet is used to initiate
+ the transition from Reliable to Optimistic mode and the compressor
+ MUST always run in the FO state during transition. The transition
+ procedure is described below:
+
+
+
+Bormann, et al. Standards Track [Page 72]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ Compressor Decompressor
+ ----------------------------------------------
+ | |
+ | ACK(O)/NACK(O) +-<-<-<-| D_TRANS = I
+ | +-<-<-<-<-<-<-<-+ |
+ C_TRANS = P |-<-<-<-+ |
+ C_MODE = O | |
+ |->->->-+ IR/IR-DYN/UOR-2(SN,O) |
+ | +->->->->->->->-+ |
+ |->-.. +->->->-| D_MODE = O
+ |->-.. |
+ | ACK(SN,O) +-<-<-<-|
+ | +-<-<-<-<-<-<-<-+ |
+ C_TRANS = D |-<-<-<-+ |
+ | |
+ |->->->-+ UO-0, UO-1* |
+ | +->->->->->->->-+ |
+ | +->->->-| D_TRANS = D
+ | |
+
+ As long as the decompressor has not received an UOR-2, IR-DYN, or IR
+ packet with the mode transition parameter set to O, it must stay in
+ Reliable mode. The compressor must not send packet types 0 or 1
+ while C_TRANS is P, i.e., not until it has received an ACK for an
+ UOR-2, IR-DYN, or IR packet sent with the mode transition parameter
+ set to O. When the decompressor receives packet types 0 or 1, after
+ having ACKed the UOR-2, IR-DYN, or IR packet, it sets D_TRANS to D.
+
+5.6.6. Transition to Unidirectional mode
+
+ The decompressor can force a transition back to Unidirectional mode
+ if it desires to do so. Regardless of which mode this transition
+ starts from, a three-way handshake MUST be carried out to ensure
+ correct transition on the compressor side. The transition procedure
+ is described below:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 73]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ Compressor Decompressor
+ ----------------------------------------------
+ | |
+ | ACK(U)/NACK(U) +-<-<-<-| D_TRANS = I
+ | +-<-<-<-<-<-<-<-+ |
+ C_TRANS = P |-<-<-<-+ |
+ C_MODE = U | |
+ |->->->-+ IR/IR-DYN/UOR-2(SN,U) |
+ | +->->->->->->->-+ |
+ |->-.. +->->->-|
+ |->-.. |
+ | ACK(SN,U) +-<-<-<-|
+ | +-<-<-<-<-<-<-<-+ |
+ C_TRANS = D |-<-<-<-+ |
+ | |
+ |->->->-+ UO-0, UO-1* |
+ | +->->->->->->->-+ |
+ | +->->->-| D_TRANS = D, D_MODE= U
+
+ After ACKing the first UOR-2(U), IR-DYN(U), or IR(U), the
+ decompressor MUST continue to send feedback with the Mode parameter
+ set to U until it receives packet types 0 or 1.
+
+5.7. Packet formats
+
+ The following notation is used in this section:
+
+ bits(X) = the number of bits for field X present in the compressed
+ header (including extension).
+
+ field(X) = the value of field X in the compressed header.
+
+ context(X) = the value of field X as established in the context.
+
+ value(X) = field(X) if X is present in the compressed header;
+ = context(X) otherwise.
+
+ hdr(X) = the value of field X in the uncompressed or
+ decompressed header.
+
+ Updating properties: Lists the fields in the context that are
+ directly updated by processing the compressed header. Note
+ that there may be dependent fields that are implicitly also
+ updated (e.g., an update to context(SN) often updates
+ context(TS) as well). See also section 5.2.7.
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 74]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ The following fields occur in several headers and extensions:
+
+ SN: The compressed RTP Sequence Number.
+
+ Compressed with W-LSB. The interpretation intervals, see section
+ 4.5.1, are defined as follows:
+
+ p = 1 if bits(SN) <= 4
+ p = 2^(bits(SN)-5) - 1 if bits(SN) > 4
+
+ IP-ID: A compressed IP-ID field.
+
+ IP-ID fields in compressed base headers carry the compressed IP-ID
+ of the innermost IPv4 header whose corresponding RND flag is not
+ 1. The rules below assume that the IP-ID is for the innermost IP
+ header. If it is for an outer IP header, the RND2 and NBO2 flags
+ are used instead of RND and NBO.
+
+ If value(RND) = 0, hdr(IP-ID) is compressed using Offset IP-ID
+ encoding (see section 4.5.5) using p = 0 and default-slope(IP-ID
+ offset) = 0.
+
+ If value(RND) = 1, IP-ID is the uncompressed hdr(IP-ID). IP-ID is
+ then passed as additional octets at the end of the compressed
+ header, after any extensions.
+
+ If value(NBO) = 0, the octets of hdr(IP-ID) are swapped before
+ compression and after decompression. The value of NBO is ignored
+ when value(RND) = 1.
+
+ TS: The compressed RTP Timestamp value.
+
+ If value(TIME_STRIDE) > 0, timer-based compression of the RTP
+ Timestamp is used (see section 4.5.4).
+
+ If value(Tsc) = 1, Scaled RTP Timestamp encoding is used before
+ compression (see section 4.5.3), and default-slope(TS) = 1.
+
+ If value(Tsc) = 0, the Timestamp value is compressed as-is, and
+ default-slope(TS) = value(TS_STRIDE).
+
+ The interpretation intervals, see section 4.5.1, are defined as
+ follows:
+
+ p = 2^(bits(TS)-2) - 1
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 75]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ CRC: The CRC over the original, uncompressed, header.
+
+ For 3-bit CRCs, the polynomial of section 5.9.2 is used.
+ For 7-bit CRCs, the polynomial of section 5.9.2 is used.
+ For 8-bit CRCs, the polynomial of section 5.9.1 is used.
+
+ M: RTP Marker bit.
+
+ Context(M) is initially zero and is never updated. value(M) = 1
+ only when field(M) = 1.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 76]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ The general format for a compressed RTP header is as follows:
+
+ 0 1 2 3 4 5 6 7
+ --- --- --- --- --- --- --- ---
+ : Add-CID octet : if for small CIDs and CID 1-15
+ +---+---+---+---+---+---+---+---+
+ | first octet of base header | (with type indication)
+ +---+---+---+---+---+---+---+---+
+ : :
+ / 0, 1, or 2 octets of CID / 1-2 octets if large CIDs
+ : :
+ +---+---+---+---+---+---+---+---+
+ / remainder of base header / variable number of bits
+ +---+---+---+---+---+---+---+---+
+ : :
+ / Extension (see 5.7.5) / extension, if X = 1 in base header
+ : :
+ --- --- --- --- --- --- --- ---
+ : :
+ + IP-ID of outer IPv4 header + 2 octets, if value(RND2) = 1
+ : :
+ --- --- --- --- --- --- --- ---
+ / AH data for outer list / variable (see 5.8.4.2)
+ --- --- --- --- --- --- --- ---
+ : :
+ + GRE checksum (see 5.8.4.4) + 2 octets, if GRE flag C = 1
+ : :
+ --- --- --- --- --- --- --- ---
+ : :
+ + IP-ID of inner IPv4 header + 2 octets, if value(RND) = 1
+ : :
+ --- --- --- --- --- --- --- ---
+ / AH data for inner list / variable (see 5.8.4.2)
+ --- --- --- --- --- --- --- ---
+ : :
+ + GRE checksum (see 5.8.4.4) + 2 octets, if GRE flag C = 1
+ : :
+ --- --- --- --- --- --- --- ---
+ : :
+ + UDP Checksum + 2 octets,
+ : : if context(UDP Checksum) != 0
+ --- --- --- --- --- --- --- ---
+
+ Note that the order of the fields following the optional extension is
+ the same as the order between the fields in an uncompressed header.
+
+ In subsequent sections, the position of the large CID in the diagrams
+ is indicated using this notation:
+
+
+
+Bormann, et al. Standards Track [Page 77]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ +===+===+===+===+===+===+===+===+
+
+ Whether the UDP Checksum field is present or not is controlled by the
+ value of the UDP Checksum in the context. If nonzero, the UDP
+ Checksum is enabled and sent along with each packet. If zero, the
+ UDP Checksum is disabled and not sent. Should hdr(UDP Checksum) be
+ nonzero when context(UDP Checksum) is zero, the header cannot be
+ compressed. It must be sent uncompressed or the context
+ reinitialized using an IR packet. Context(UDP Checksum) is updated
+ only by IR or IR-DYN headers, never by UDP checksums sent in headers
+ of type 2, 1, or 0.
+
+ When an IPv4 header is present in the static context, for which the
+ corresponding RND flag has not been established to be 1, the packet
+ types R-1 and UO-1 MUST NOT be used.
+
+ When no IPv4 header is present in the static context, or the RND
+ flags for all IPv4 headers in the context have been established to be
+ 1, the packet types R-1-ID, R-1-TS, UO-1-ID, and UO-1-TS MUST NOT be
+ used.
+
+ While in the transient state in which an RND flag is being
+ established, the packet types R-1-ID, R-1-TS, UO-1-ID, and UO-1-TS
+ MUST NOT be used. This implies that the RND flag(s) of the Extension
+ 3 may have to be inspected before the format of a base header
+ carrying an Extension 3 can be determined.
+
+5.7.1. Packet type 0: UO-0, R-0, R-0-CRC
+
+ Packet type 0 is indicated by the first bit being 0:
+
+ R-0
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ | 0 0 | SN |
+ +===+===+===+===+===+===+===+===+
+
+ Updating properties: R-0 packets do not update any part of the
+ context.
+
+
+
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 78]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ R-0-CRC
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ | 0 1 | SN |
+ +===+===+===+===+===+===+===+===+
+ |SN | CRC |
+ +---+---+---+---+---+---+---+---+
+
+ Note: The SN field straddles the CID field.
+
+ Updating properties: R-0-CRC packets update context(RTP Sequence
+ Number).
+
+ UO-0
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ | 0 | SN | CRC |
+ +===+===+===+===+===+===+===+===+
+
+ Updating properties: UO-0 packets update the current value of
+ context(RTP Sequence Number).
+
+5.7.2. Packet type 1 (R-mode): R-1, R-1-TS, R-1-ID
+
+ Packet type 1 is indicated by the first bits being 10:
+
+ R-1
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ | 1 0 | SN |
+ +===+===+===+===+===+===+===+===+
+ | M | X | TS |
+ +---+---+---+---+---+---+---+---+
+
+ Note: R-1 cannot be used if the context contains at least one IPv4
+ header with value(RND) = 0. This disambiguates it from R-1-ID and
+ R-1-TS.
+
+
+
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 79]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ R-1-ID
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ | 1 0 | SN |
+ +===+===+===+===+===+===+===+===+
+ | M | X |T=0| IP-ID |
+ +---+---+---+---+---+---+---+---+
+
+ Note: R-1-ID cannot be used if there is no IPv4 header in the
+ context or if value(RND) and value(RND2) are both 1.
+
+ R-1-TS
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ | 1 0 | SN |
+ +===+===+===+===+===+===+===+===+
+ | M | X |T=1| TS |
+ +---+---+---+---+---+---+---+---+
+
+ Note: R-1-TS cannot be used if there is no IPv4 header in the
+ context or if value(RND) and value(RND2) are both 1.
+
+ X: X = 0 indicates that no extension is present;
+ X = 1 indicates that an extension is present.
+
+ T: T = 0 indicates format R-1-ID;
+ T = 1 indicates format R-1-TS.
+
+ Updating properties: R-1* headers do not update any part of the
+ context.
+
+5.7.3. Packet type 1 (U/O-mode): UO-1, UO-1-ID, UO-1-TS
+
+ UO-1
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ | 1 0 | TS |
+ +===+===+===+===+===+===+===+===+
+ | M | SN | CRC |
+ +---+---+---+---+---+---+---+---+
+
+ Note: UO-1 cannot be used if the context contains at least one
+ IPv4 header with value(RND) = 0. This disambiguates it from UO-
+ 1-ID and UO-1-TS.
+
+
+
+
+Bormann, et al. Standards Track [Page 80]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ UO-1-ID
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ | 1 0 |T=0| IP-ID |
+ +===+===+===+===+===+===+===+===+
+ | X | SN | CRC |
+ +---+---+---+---+---+---+---+---+
+
+ Note: UO-1-ID cannot be used if there is no IPv4 header in the
+ context or if value(RND) and value(RND2) are both 1.
+
+ UO-1-TS
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ | 1 0 |T=1| TS |
+ +===+===+===+===+===+===+===+===+
+ | M | SN | CRC |
+ +---+---+---+---+---+---+---+---+
+
+ Note: UO-1-TS cannot be used if there is no IPv4 header in the
+ context or if value(RND) and value(RND2) are both 1.
+
+ X: X = 0 indicates that no extension is present;
+ X = 1 indicates that an extension is present.
+
+ T: T = 0 indicates format UO-1-ID;
+ T = 1 indicates format UO-1-TS.
+
+ Updating properties: UO-1* packets update context(RTP Sequence
+ Number). UO-1 and UO-1-TS packets update context(RTP Timestamp).
+ UO-1-ID packets update context(IP-ID). Values provided in
+ extensions, except those in other SN, TS, or IP-ID fields, do not
+ update the context.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 81]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+5.7.4. Packet type 2: UOR-2
+
+ Packet type 2 is indicated by the first bits being 110:
+
+ UOR-2
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ | 1 1 0 | TS |
+ +===+===+===+===+===+===+===+===+
+ |TS | M | SN |
+ +---+---+---+---+---+---+---+---+
+ | X | CRC |
+ +---+---+---+---+---+---+---+---+
+
+ Note: UOR-2 cannot be used if the context contains at least one
+ IPv4 header with value(RND) = 0. This disambiguates it from UOR-
+ 2-ID and UOR-2-TS.
+
+ Note: The TS field straddles the CID field.
+
+ UOR-2-ID
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ | 1 1 0 | IP-ID |
+ +===+===+===+===+===+===+===+===+
+ |T=0| M | SN |
+ +---+---+---+---+---+---+---+---+
+ | X | CRC |
+ +---+---+---+---+---+---+---+---+
+
+ Note: UOR-2-ID cannot be used if there is no IPv4 header in the
+ context or if value(RND) and value(RND2) are both 1.
+
+ UOR-2-TS
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ | 1 1 0 | TS |
+ +===+===+===+===+===+===+===+===+
+ |T=1| M | SN |
+ +---+---+---+---+---+---+---+---+
+ | X | CRC |
+ +---+---+---+---+---+---+---+---+
+
+ Note: UOR-2-TS cannot be used if there is no IPv4 header in the
+ context or if value(RND) and value(RND2) are both 1.
+
+
+
+Bormann, et al. Standards Track [Page 82]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ X: X = 0 indicates that no extension is present;
+ X = 1 indicates that an extension is present.
+
+ T: T = 0 indicates format UOR-2-ID;
+ T = 1 indicates format UOR-2-TS.
+
+ Updating properties: All values provided in UOR-2* packets update
+ the context, unless explicitly stated otherwise.
+
+5.7.5. Extension formats
+
+ (Note: the term extension as used for additional information
+ contained in the ROHC headers does not bear any relationship to the
+ term extension header used in IP.)
+
+ Fields in extensions are concatenated with the corresponding field in
+ the base compressed header, if there is one. Bits in an extension
+ are less significant than bits in the base compressed header (see
+ section 4.5.7).
+
+ The TS field is scaled in all extensions, as it is in the base
+ header, except optionally when using Extension 3 where the Tsc flag
+ can indicate that the TS field is not scaled. Value(TS_STRIDE) is
+ used as the scale factor when scaling the TS field.
+
+ In the following three extensions, the interpretation of the fields
+ depends on whether there is a T-bit in the base compressed header,
+ and if so, on the value of that field. When there is no T-bit, +T
+ and -T both mean TS. This is the case when there are no IPv4 headers
+ in the static context, and when all IPv4 headers in the static
+ context have their corresponding RND flag set (i.e., RND = 1).
+
+ If there is a T-bit,
+
+ T = 1 indicates that +T is TS, and
+ -T is IP-ID;
+
+ T = 0 indicates that +T is IP-ID, and
+ -T is TS.
+
+ Extension 0:
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ | 0 0 | SN | +T |
+ +---+---+---+---+---+---+---+---+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 83]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ Extension 1:
+
+ +---+---+---+---+---+---+---+---+
+ | 0 1 | SN | +T |
+ +---+---+---+---+---+---+---+---+
+ | -T |
+ +---+---+---+---+---+---+---+---+
+
+ Extension 2:
+
+ +---+---+---+---+---+---+---+---+
+ | 1 0 | SN | +T |
+ +---+---+---+---+---+---+---+---+
+ | +T |
+ +---+---+---+---+---+---+---+---+
+ | -T |
+ +---+---+---+---+---+---+---+---+
+
+ Extension 3 is a more elaborate extension which can give values for
+ fields other than SN, TS, and IP-ID. Three optional flag octets
+ indicate changes to IP header(s) and RTP header, respectively.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 84]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ Extension 3:
+
+ 0 1 2 3 4 5 6 7
+ +-----+-----+-----+-----+-----+-----+-----+-----+
+ | 1 1 | S |R-TS | Tsc | I | ip | rtp | (FLAGS)
+ +-----+-----+-----+-----+-----+-----+-----+-----+
+ | Inner IP header flags | ip2 | if ip = 1
+ ..... ..... ..... ..... ..... ..... ..... .....
+ | Outer IP header flags | if ip2 = 1
+ ..... ..... ..... ..... ..... ..... ..... .....
+ | SN | if S = 1
+ ..... ..... ..... ..... ..... ..... ..... .....
+ / TS (encoded as in section 4.5.6) / 1-4 octets,
+ ..... ..... ..... ..... ..... ..... ..... ..... if R-TS = 1
+ | |
+ / Inner IP header fields / variable,
+ | | if ip = 1
+ ..... ..... ..... ..... ..... ..... ..... .....
+ | IP-ID | 2 octets, if I = 1
+ ..... ..... ..... ..... ..... ..... ..... .....
+ | |
+ / Outer IP header fields / variable,
+ | | if ip2 = 1
+ ..... ..... ..... ..... ..... ..... ..... .....
+ | |
+ / RTP header flags and fields / variable,
+ | | if rtp = 1
+ ..... ..... ..... ..... ..... ..... ..... .....
+
+ S, R-TS, I, ip, rtp, ip2: Indicate presence of fields as shown to
+ the right of each field above.
+
+ Tsc: Tsc = 0 indicates that TS is not scaled;
+ Tsc = 1 indicates that TS is scaled according to section
+ 4.5.3, using value(TS_STRIDE).
+ Context(Tsc) is always 1. If scaling is not desired, the
+ compressor will establish TS_STRIDE = 1.
+
+ SN: See the beginning of section 5.7.
+
+ TS: Variable number of bits of TS, encoded according to
+ section 4.5.6. See the beginning of section 5.7.
+
+ IP-ID: See the beginning of section 5.7.
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 85]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ Inner IP header flags
+
+ These correspond to the inner IP header if there are two, and the
+ single IP header otherwise.
+
+ 0 1 2 3 4 5 6 7
+ ..... ..... ..... ..... ..... ..... ..... .....
+ | TOS | TTL | DF | PR | IPX | NBO | RND | ip2 | if ip = 1
+ ..... ..... ..... ..... ..... ..... ..... .....
+
+ TOS, TTL, PR, IPX: Indicates presence of fields as shown to the
+ right of the field in question below.
+
+ DF: Don't Fragment bit of IP header.
+
+ NBO: Indicates whether the octets of hdr(IP identifier) of this IP
+ header are swapped before compression and after decompression.
+
+ NBO = 1 indicates that the octets need not be swapped. NBO = 0
+ indicates that the octets are to be swapped. See section 4.5.5.
+
+ RND: Indicates whether hdr(IP identifier) is not to be compressed
+ but instead sent as-is in compressed headers.
+
+ IP2: Indicates presence of Outer IP header fields. Unless the
+ static context contains two IP headers, IP2 is always zero.
+
+ Inner IP header fields
+
+ ..... ..... ..... ..... ..... ..... ..... .....
+ | Type of Service/Traffic Class | if TOS = 1
+ ..... ..... ..... ..... ..... ..... ..... .....
+ | Time to Live/Hop Limit | if TTL = 1
+ ..... ..... ..... ..... ..... ..... ..... .....
+ | Protocol/Next Header | if PR = 1
+ ..... ..... ..... ..... ..... ..... ..... .....
+ / IP extension headers / variable,
+ ..... ..... ..... ..... ..... ..... ..... ..... if IPX = 1
+
+ Type of Service/Traffic Class: That field in the uncompressed IP
+ header (absolute value).
+
+ Time to Live/Hop Limit: That field in the uncompressed IP header.
+
+ Protocol/Next Header: That field in the uncompressed IP header.
+
+ IP extension header(s): According to section 5.8.5.
+
+
+
+
+Bormann, et al. Standards Track [Page 86]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ Outer IP header flags
+
+ The fields in this part of the Extension 3 header refer to the
+ outermost IP header:
+
+ 0 1 2 3 4 5 6 7
+ ..... ..... ..... ..... ..... ..... ..... ..... | TOS2| TTL2|
+ DF2 | PR2 |IPX2 |NBO2 |RND2 | I2 | if ip2 = 1
+ ..... ..... ..... ..... ..... ..... ..... .....
+
+ These flags are the same as the Inner IP header flags, but refer
+ to the outer IP header instead of the inner IP header. The
+ following flag, however, has no counterpart in the Inner IP header
+ flags:
+
+ I2: Indicates presence of the IP-ID field.
+
+ Outer IP header fields
+
+ ..... ..... ..... ..... ..... ..... ..... .....
+ | Type of Service/Traffic Class | if TOS2 = 1
+ ..... ..... ..... ..... ..... ..... ..... .....
+ | Time to Live/Hop Limit | if TTL2 = 1
+ ..... ..... ..... ..... ..... ..... ..... .....
+ | Protocol/Next Header | if PR2 = 1
+ ..... ..... ..... ..... ..... ..... ..... .....
+ / IP extension header(s) / variable,
+ ..... ..... ..... ..... ..... ..... ..... ..... if IPX2 = 1
+ | IP-ID | 2 octets,
+ ..... ..... ..... ..... ..... ..... ..... ..... if I2 = 1
+
+ The fields in this part of Extension 3 are as for the Inner IP
+ header fields, but they refer to the outer IP header instead of
+ the inner IP header. The following field, however, has no
+ counterpart among the Inner IP header fields:
+
+ IP-ID: The IP Identifier field of the outer IP header, unless
+ the inner header is an IPv6 header, in which case I2 is always
+ zero.
+
+
+
+
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 87]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ RTP header flags and fields
+
+ 0 1 2 3 4 5 6 7
+ ..... ..... ..... ..... ..... ..... ..... .....
+ | Mode |R-PT | M | R-X |CSRC | TSS | TIS | if rtp = 1
+ ..... ..... ..... ..... ..... ..... ..... .....
+ | R-P | RTP PT | if R-PT = 1
+ ..... ..... ..... ..... ..... ..... ..... .....
+ / Compressed CSRC list / if CSRC = 1
+ ..... ..... ..... ..... ..... ..... ..... .....
+ / TS_STRIDE / 1-4 oct if TSS = 1
+ ..... ..... ..... ..... ..... ..... ..... ....
+ / TIME_STRIDE (milliseconds) / 1-4 oct if TIS = 1
+ ..... ..... ..... ..... ..... ..... ..... .....
+
+ Mode: Compression mode. 0 = Reserved,
+ 1 = Unidirectional,
+ 2 = Bidirectional Optimistic,
+ 3 = Bidirectional Reliable.
+
+ R-PT, CSRC, TSS, TIS: Indicate presence of fields as shown to the
+ right of each field above.
+
+ R-P: RTP Padding bit, absolute value (presumed zero if absent).
+
+ R-X: RTP eXtension bit, absolute value.
+
+ M: See the beginning of section 5.7.
+
+ RTP PT: Absolute value of RTP Payload type field.
+
+ Compressed CSRC list: See section 5.8.1.
+
+ TS_STRIDE: Predicted increment/decrement of the RTP Timestamp
+ field when it changes. Encoded as in section 4.5.6.
+
+ TIME_STRIDE: Predicted time interval in milliseconds between
+ changes in the RTP Timestamp. Also an indication that the
+ compressor desires to perform timer-based compression of the RTP
+ Timestamp field: see section 4.5.4. Encoded as in section 4.5.6.
+
+5.7.5.1. RND flags and packet types
+
+ The values of the RND and RND2 flags are changed by sending UOR-2
+ headers with Extension 3, or IR-DYN headers, where the flag(s) have
+ their new values. The establishment procedure of the flags is the
+ normal one for the current mode, i.e., in U-mode and O-mode the
+ values are repeated several times to ensure that the decompressor
+
+
+
+Bormann, et al. Standards Track [Page 88]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ receives at least one. In R-mode, the flags are sent until an
+ acknowledgment for a packet with the new RND flag values is received.
+
+ The decompressor updates the values of its RND and RND2 flags
+ whenever it receives an UOR-2 with Extension 3 carrying values for
+ RND or RND2, and the UOR-2 CRC verifies successful decompression.
+
+ When an IPv4 header for which the corresponding RND flag has not been
+ established to be 1 is present in the static context, the packet
+ types R-1 and UO-1 MUST NOT be used.
+
+ When no IPv4 header is present in the static context, or the RND
+ flags for all IPv4 headers in the context have been established to be
+ 1, the packet types R-1-ID, R-1-TS, UO-1-ID, and UO-1-TS MUST NOT be
+ used.
+
+ While in the transient state in which an RND flag is being
+ established, the packet types R-1-ID, R-1-TS, UO-1-ID, and UO-1-TS
+ MUST NOT be used. This implies that the RND flag(s) of Extension 3
+ may have to be inspected before the exact format of a base header
+ carrying an Extension 3 can be determined, i.e., whether a T-bit is
+ present or not.
+
+5.7.5.2. Flags/Fields in context
+
+ Some flags and fields in Extension 3 need to be maintained in the
+ context of the decompressor. Their values are established using the
+ mechanism appropriate to the compression mode, unless otherwise
+ indicated in the table below and in referred sections.
+
+ Flag/Field Initial value Comment
+ ---------------------------------------------------------------------
+ Mode Unidirectional See section 5.6
+
+ NBO 1 See section 4.5.5
+ RND 0 See sections 4.5.5, 5.7.5.1
+
+ NBO2 1 As NBO, but for outer header
+ RND2 0 As RND, but for outer header
+
+ TS_STRIDE 1 See section 4.5.3
+ TIME_STRIDE 0 See section 4.5.4
+ Tsc 1 Tsc is always 1 in context;
+ can be 0 only when an Extension 3
+ is present. See the discussion of the
+ TS field in the beginning of section
+ 5.7.
+
+
+
+
+Bormann, et al. Standards Track [Page 89]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+5.7.6. Feedback packets and formats
+
+ When the round-trip time between compressor and decompressor is
+ large, several packets can be in flight concurrently. Therefore,
+ several packets may be received by the decompressor after feedback
+ has been sent and before the compressor has reacted to feedback.
+ Moreover, decompression may fail due to residual errors in the
+ compressed header.
+
+ Therefore,
+
+ a) in O-mode, the decompressor SHOULD limit the rate at which
+ feedback on successful decompression is sent (if it is sent at
+ all);
+ b) when decompression fails, feedback SHOULD be sent only when
+ decompression of several consecutive packets has failed, and when
+ this occurs, the feedback rate SHOULD be limited;
+ c) when packets are received which belong to a rejected packet
+ stream, the feedback rate SHOULD be limited.
+
+ A decompressor MAY limit the feedback rate by sending feedback only
+ for one out of every k packets provoking the same (kind of) feedback.
+ The appropriate value of k is implementation dependent; k might be
+ chosen such that feedback is sent 1-3 times per link round-trip time.
+
+ See section 5.2.2 for a discussion concerning ways to provide
+ feedback information to the compressor.
+
+5.7.6.1. Feedback formats for ROHC RTP
+
+ This section describes the format for feedback information in ROHC
+ RTP. See also 5.2.2.
+
+ Several feedback formats carry a field labeled SN. The SN field
+ contains LSBs of an RTP Sequence Number. The sequence number to use
+ is the sequence number of the header which caused the feedback
+ information to be sent. If that sequence number cannot be
+ determined, for example when decompression fails, the sequence number
+ to use is that of the last successfully decompressed header. If no
+ sequence number is available, the feedback MUST carry a SN-NOT-VALID
+ option. Upon reception, the compressor matches valid SN LSBs with
+ the most recent header sent with a SN with matching LSBs. The
+ decompressor must ensure that it sends enough SN LSBs in its feedback
+ that this correlation does not become ambiguous; e.g., if an 8-bit SN
+ LSB field could wrap around within a round-trip time, the FEEDBACK-1
+ format cannot be used.
+
+
+
+
+
+Bormann, et al. Standards Track [Page 90]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ FEEDBACK-1
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ | SN |
+ +---+---+---+---+---+---+---+---+
+
+ A FEEDBACK-1 is an ACK. In order to send a NACK or a STATIC-NACK,
+ FEEDBACK-2 must be used. FEEDBACK-1 does not contain any mode
+ information; FEEDBACK-2 must be used when mode information is
+ required.
+
+ FEEDBACK-2
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ |Acktype| Mode | SN |
+ +---+---+---+---+---+---+---+---+
+ | SN |
+ +---+---+---+---+---+---+---+---+
+ / Feedback options /
+ +---+---+---+---+---+---+---+---+
+
+ Acktype: 0 = ACK
+ 1 = NACK
+ 2 = STATIC-NACK
+ 3 is reserved (MUST NOT be used for parseability)
+
+ Mode: 0 is reserved
+ 1 = Unidirectional mode
+ 2 = Bidirectional Optimistic mode
+ 3 = Bidirectional Reliable mode
+
+
+ Feedback options: A variable number of feedback options, see
+ section 5.7.6.2. Options may appear in any order.
+
+5.7.6.2. ROHC RTP Feedback options
+
+ A ROHC RTP Feedback option has variable length and the following
+ general format:
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ | Opt Type | Opt Len |
+ +---+---+---+---+---+---+---+---+
+ / option data / Opt Len octets
+ +---+---+---+---+---+---+---+---+
+
+
+
+Bormann, et al. Standards Track [Page 91]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ Sections 5.7.6.3-9 describe the currently defined ROHC RTP feedback
+ options.
+
+5.7.6.3. The CRC option
+
+ The CRC option contains an 8-bit CRC computed over the entire
+ feedback payload, without the packet type and code octet, but
+ including any CID fields, using the polynomial of section 5.9.1. If
+ the CID is given with an Add-CID octet, the Add-CID octet immediately
+ precedes the FEEDBACK-1 or FEEDBACK-2 format. For purposes of
+ computing the CRC, the CRC fields of all CRC options are zero.
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ | Opt Type = 1 | Opt Len = 1 |
+ +---+---+---+---+---+---+---+---+
+ | CRC |
+ +---+---+---+---+---+---+---+---+
+
+ When receiving feedback information with a CRC option, the compressor
+ MUST verify the information by computing the CRC and comparing the
+ result with the CRC carried in the CRC option. If the two are not
+ identical, the feedback information MUST be ignored.
+
+5.7.6.4. The REJECT option
+
+ The REJECT option informs the compressor that the decompressor does
+ not have sufficient resources to handle the flow.
+
+ +---+---+---+---+---+---+---+---+
+ | Opt Type = 2 | Opt Len = 0 |
+ +---+---+---+---+---+---+---+---+
+
+ When receiving a REJECT option, the compressor stops compressing the
+ packet stream, and should refrain from attempting to increase the
+ number of compressed packet streams for some time. Any FEEDBACK
+ packet carrying a REJECT option MUST also carry a CRC option.
+
+5.7.6.5. The SN-NOT-VALID option
+
+ The SN-NOT-VALID option indicates that the SN of the feedback is not
+ valid. A compressor MUST NOT use the SN of the feedback to find the
+ corresponding sent header when this option is present.
+
+ +---+---+---+---+---+---+---+---+
+ | Opt Type = 3 | Opt Len = 0 |
+ +---+---+---+---+---+---+---+---+
+
+
+
+
+Bormann, et al. Standards Track [Page 92]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+5.7.6.6. The SN option
+
+ The SN option provides 8 additional bits of SN.
+
+ +---+---+---+---+---+---+---+---+
+ | Opt Type = 4 | Opt Len = 1 |
+ +---+---+---+---+---+---+---+---+
+ | SN |
+ +---+---+---+---+---+---+---+---+
+
+5.7.6.7. The CLOCK option
+
+ The CLOCK option informs the compressor of the clock resolution of
+ the decompressor. This is needed to allow the compressor to estimate
+ the jitter introduced by the clock of the decompressor when doing
+ timer-based compression of the RTP Timestamp.
+
+ +---+---+---+---+---+---+---+---+
+ | Opt Type = 5 | Opt Len = 1 |
+ +---+---+---+---+---+---+---+---+
+ | clock resolution (ms) |
+ +---+---+---+---+---+---+---+---+
+
+ The smallest clock resolution which can be indicated is 1
+ millisecond. The value zero has a special meaning: it indicates that
+ the decompressor cannot do timer-based compression of the RTP
+ Timestamp. Any FEEDBACK packet carrying a CLOCK option SHOULD also
+ carry a CRC option.
+
+5.7.6.8. The JITTER option
+
+ The JITTER option allows the decompressor to report the maximum
+ jitter it has observed lately, using the following formula which is
+ very similar to the formula for Max_Jitter_BC in section 4.5.4.
+
+ Let observation window i contain the decompressor's best
+ approximation of the sliding window of the compressor (see section
+ 4.5.4) when header i is received.
+
+ Max_Jitter_i =
+
+ max {|(T_i - T_j) - ((a_i - a_j) / TIME_STRIDE)|,
+ for all headers j in observation window i}
+
+ Max_Jitter =
+
+ max { Max_Jitter_i, for a large number of recent headers i }
+
+
+
+
+Bormann, et al. Standards Track [Page 93]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ This information may be used by the compressor to refine the formula
+ for determining k when doing timer-based compression of the RTP
+ Timestamp.
+
+ +---+---+---+---+---+---+---+---+
+ | Opt Type = 6 | Opt Len = 1 |
+ +---+---+---+---+---+---+---+---+
+ | Max_Jitter |
+ +---+---+---+---+---+---+---+---+
+
+ The decompressor MAY ignore the oldest observed values of
+ Max_Jitter_i. Thus, the reported Max_Jitter may decrease.
+ Robustness will be reduced if the compressor uses a jitter estimate
+ which is too small. Therefore, a FEEDBACK packet carrying a JITTER
+ option SHOULD also carry a CRC option. Moreover, the compressor MAY
+ ignore decreasing Max_Jitter values.
+
+5.7.6.9. The LOSS option
+
+ The LOSS option allows the decompressor to report the largest
+ observed number of packets lost in sequence. This information MAY be
+ used by the compressor to adjust the size of the reference window
+ used in U- and O-mode.
+
+ +---+---+---+---+---+---+---+---+
+ | Opt Type = 7 | Opt Len = 1 |
+ +---+---+---+---+---+---+---+---+
+ | longest loss event (packets) |
+ +---+---+---+---+---+---+---+---+
+
+ The decompressor MAY choose to ignore the oldest loss events. Thus,
+ the value reported may decrease. Since setting the reference window
+ too small can reduce robustness, a FEEDBACK packet carrying a LOSS
+ option SHOULD also carry a CRC option. The compressor MAY choose to
+ ignore decreasing loss values.
+
+5.7.6.10. Unknown option types
+
+ If an option type unknown to the compressor is encountered, it must
+ continue parsing the rest of the FEEDBACK packet, which is possible
+ since the length of the option is explicit, but MUST otherwise ignore
+ the unknown option.
+
+5.7.6.11. RTP feedback example
+
+ Feedback for CID 8 indicating an ACK for SN 17 and Bidirectional
+ Reliable mode can have the following formats.
+
+
+
+
+Bormann, et al. Standards Track [Page 94]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ Assuming small CIDs:
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ | 1 1 1 1 0 | 0 1 1 | feedback packet type, Code = 3
+ +---+---+---+---+---+---+---+---+
+ | 1 1 1 0 | 1 0 0 0 | Add-CID octet with CID = 8
+ +---+---+---+---+---+---+---+---+
+ | 0 0 | 1 1 | SN MSB = 0 | AckType = ACK, Mode = Reliable
+ +---+---+---+---+---+---+---+---+
+ | SN LSB = 17 |
+ +---+---+---+---+---+---+---+---+
+
+ The second, third, and fourth octet are handed to the compressor.
+
+ The FEEDBACK-1 format may also be used. Assuming large CIDs:
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ | 1 1 1 1 0 | 0 1 0 | feedback packet type, Code = 2
+ +---+---+---+---+---+---+---+---+
+ | 0 0 0 0 1 0 0 0 | large CID with value 8
+ +---+---+---+---+---+---+---+---+
+ | SN LSB = 17 |
+ +---+---+---+---+---+---+---+---+
+
+ The second and third octet are handed to the compressor.
+
+ Assuming small CIDs:
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ | 1 1 1 1 0 | 0 1 0 | feedback packet type, Code = 2
+ +---+---+---+---+---+---+---+---+
+ | 1 1 1 0 | 1 0 0 0 | Add-CID octet with CID = 8
+ +---+---+---+---+---+---+---+---+
+ | SN LSB = 17 |
+ +---+---+---+---+---+---+---+---+
+
+ The second and third octet are handed to the compressor.
+
+
+
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 95]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ Assuming small CIDs and CID 0 instead of CID 8:
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ | 1 1 1 1 0 | 0 0 1 | feedback packet type, Code = 1
+ +---+---+---+---+---+---+---+---+
+ | SN LSB = 17 |
+ +---+---+---+---+---+---+---+---+
+
+ The second octet is handed to the compressor.
+
+5.7.7. RTP IR and IR-DYN packets
+
+ The subheaders which are compressible are split into a STATIC part
+ and a DYNAMIC part. These parts are defined in sections 5.7.7.3
+ through 5.7.7.7.
+
+ The structure of a chain of subheaders is determined by each header
+ having a Next Header, or Protocol, field. This field identifies the
+ type of the following header. Each Static part below that is
+ followed by another Static part contains the Next Header/Protocol
+ field and allows parsing of the Static chain; the Dynamic chain, if
+ present, is structured analogously.
+
+ IR and IR-DYN packets will cause a packet to be delivered to upper
+ layers if and only if the payload is non-empty. This means that an
+ IP/UDP/RTP packet where the UDP length indicates a UDP payload of
+ size 12 octets cannot be represented by an IR or IR-DYN packet. Such
+ packets can instead be represented using the UNCOMPRESSED profile
+ (section 5.10).
+
+5.7.7.1. Basic structure of the IR packet
+
+ This packet type communicates the static part of the context, i.e.,
+ the values of the constant SN functions. It can optionally also
+ communicate the dynamic part of the context, i.e., the parameters of
+ nonconstant SN functions. It can also optionally communicate the
+ payload of an original packet, if any.
+
+
+
+
+
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 96]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ 0 1 2 3 4 5 6 7
+ --- --- --- --- --- --- --- ---
+ | Add-CID octet | if for small CIDs and CID != 0
+ +---+---+---+---+---+---+---+---+
+ | 1 1 1 1 1 1 0 | D |
+ +---+---+---+---+---+---+---+---+
+ | |
+ / 0-2 octets of CID info / 1-2 octets if for large CIDs
+ | |
+ +---+---+---+---+---+---+---+---+
+ | Profile | 1 octet
+ +---+---+---+---+---+---+---+---+
+ | CRC | 1 octet
+ +---+---+---+---+---+---+---+---+
+ | |
+ | Static chain | variable length
+ | |
+ +---+---+---+---+---+---+---+---+
+ | |
+ | Dynamic chain | present if D = 1, variable length
+ | |
+ - - - - - - - - - - - - - - - -
+ | |
+ | Payload | variable length
+ | |
+ - - - - - - - - - - - - - - - -
+
+ D: D = 1 indicates that the dynamic chain is present.
+
+ Profile: Profile identifier, abbreviated as defined in section
+ 5.2.3.
+
+ CRC: 8-bit CRC, computed according to section 5.9.1.
+
+ Static chain: A chain of static subheader information.
+
+ Dynamic chain: A chain of dynamic subheader information. What
+ dynamic information is present is inferred from the Static
+ chain.
+
+ Payload: The payload of the corresponding original packet, if any.
+ The presence of a payload is inferred from the packet length.
+
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 97]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+5.7.7.2. Basic structure of the IR-DYN packet
+
+ This packet type communicates the dynamic part of the context, i.e.,
+ the parameters of nonconstant SN functions.
+
+ 0 1 2 3 4 5 6 7
+ --- --- --- --- --- --- --- ---
+ : Add-CID octet : if for small CIDs and CID != 0
+ +---+---+---+---+---+---+---+---+
+ | 1 1 1 1 1 0 0 0 | IR-DYN packet type
+ +---+---+---+---+---+---+---+---+
+ : :
+ / 0-2 octets of CID info / 1-2 octets if for large CIDs
+ : :
+ +---+---+---+---+---+---+---+---+
+ | Profile | 1 octet
+ +---+---+---+---+---+---+---+---+
+ | CRC | 1 octet
+ +---+---+---+---+---+---+---+---+
+ | |
+ / Dynamic chain / variable length
+ | |
+ +---+---+---+---+---+---+---+---+
+ : :
+ / Payload / variable length
+ : :
+ - - - - - - - - - - - - - - - -
+
+ Profile: Profile identifier, abbreviated as defined in section 5.2.3.
+
+ CRC: 8-bit CRC, computed according to section 5.9.1.
+
+ NOTE: As the CRC checks only the integrity of the header
+ itself, an acknowledgment of this header does not signify that
+ previous changes to the static chain in the context are also
+ acknowledged. In particular, care should be taken when IR
+ packets that update an existing context are followed by IR-DYN
+ packets.
+
+ Dynamic chain: A chain of dynamic subheader information. What
+ dynamic information is present is inferred from the Static chain of
+ the context.
+
+ Payload: The payload of the corresponding original packet, if any.
+ The presence of a payload is inferred from the packet length.
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 98]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ Note: The static and dynamic chains of IR or IR-DYN packets for
+ profile 0x0001 (ROHC RTP) MUST end with the static and dynamic parts
+ of an RTP header. If not, the packet MUST be discarded and the
+ context MUST NOT be updated.
+
+ Note: The static or dynamic chains of IR or IR-DYN packets for
+ profile 0x0002 (ROHC UDP) MUST end with the static and dynamic parts
+ of a UDP header. If not, the packet MUST be discarded and the
+ context MUST NOT be updated.
+
+ Note: The static or dynamic chains of IR or IR-DYN packets for
+ profile 0x0003 (ROHC ESP) MUST end with the static and dynamic parts
+ of an ESP header. If not, the packet MUST be discarded and the
+ context MUST NOT be updated.
+
+5.7.7.3. Initialization of IPv6 Header [IPv6]
+
+ Static part:
+
+ +---+---+---+---+---+---+---+---+
+ | Version = 6 |Flow Label(msb)| 1 octet
+ +---+---+---+---+---+---+---+---+
+ / Flow Label (lsb) / 2 octets
+ +---+---+---+---+---+---+---+---+
+ | Next Header | 1 octet
+ +---+---+---+---+---+---+---+---+
+ / Source Address / 16 octets
+ +---+---+---+---+---+---+---+---+
+ / Destination Address / 16 octets
+ +---+---+---+---+---+---+---+---+
+
+ Dynamic part:
+
+ +---+---+---+---+---+---+---+---+
+ | Traffic Class | 1 octet
+ +---+---+---+---+---+---+---+---+
+ | Hop Limit | 1 octet
+ +---+---+---+---+---+---+---+---+
+ / Generic extension header list / variable length
+ +---+---+---+---+---+---+---+---+
+
+ Eliminated:
+
+ Payload Length
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 99]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ Extras:
+
+ Generic extension header list: Encoded according to section
+ 5.8.6.1, with all header items present in uncompressed form.
+
+ CRC-DYNAMIC: Payload Length field (octets 5-6).
+
+ CRC-STATIC: All other fields (octets 1-4, 7-40).
+
+ CRC coverage for extension headers is defined in section 5.8.7.
+
+ Note: The Next Header field indicates the type of the following
+ header in the static chain, rather than being a copy of the Next
+ Header field of the original IPv6 header. See also section 5.7.7.8.
+
+5.7.7.4. Initialization of IPv4 Header [IPv4, section 3.1].
+
+ Static part:
+
+ Version, Protocol, Source Address, Destination Address.
+
+ +---+---+---+---+---+---+---+---+
+ | Version = 4 | 0 |
+ +---+---+---+---+---+---+---+---+
+ | Protocol |
+ +---+---+---+---+---+---+---+---+
+ / Source Address / 4 octets
+ +---+---+---+---+---+---+---+---+
+ / Destination Address / 4 octets
+ +---+---+---+---+---+---+---+---+
+
+ Dynamic part:
+
+ Type of Service, Time to Live, Identification, DF, RND, NBO,
+ extension header list.
+
+ +---+---+---+---+---+---+---+---+
+ | Type of Service |
+ +---+---+---+---+---+---+---+---+
+ | Time to Live |
+ +---+---+---+---+---+---+---+---+
+ / Identification / 2 octets
+ +---+---+---+---+---+---+---+---+
+ | DF|RND|NBO| 0 |
+ +---+---+---+---+---+---+---+---+
+ / Generic extension header list / variable length
+ +---+---+---+---+---+---+---+---+
+
+
+
+
+Bormann, et al. Standards Track [Page 100]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ Eliminated:
+
+ IHL (IP Header Length, must be 5)
+ Total Length (inferred in decompressed packets)
+ MF flag (More Fragments flag, must be 0)
+ Fragment Offset (must be 0)
+ Header Checksum (inferred in decompressed packets)
+ Options, Padding (must not be present)
+
+ Extras:
+
+ RND, NBO See section 5.7.
+
+ Generic extension header list: Encoded according to section
+ 5.8.6.1, with all header items present in uncompressed form.
+
+ CRC-DYNAMIC: Total Length, Identification, Header Checksum
+ (octets 3-4, 5-6, 11-12).
+
+ CRC-STATIC: All other fields (octets 1-2, 7-10, 13-20)
+
+ CRC coverage for extension headers is defined in section 5.8.7.
+
+ Note: The Protocol field indicates the type of the following header
+ in the static chain, rather than being a copy of the Protocol field
+ of the original IPv4 header. See also section 5.7.7.8.
+
+5.7.7.5. Initialization of UDP Header [RFC-768].
+
+ Static part:
+
+ +---+---+---+---+---+---+---+---+
+ / Source Port / 2 octets
+ +---+---+---+---+---+---+---+---+
+ / Destination Port / 2 octets
+ +---+---+---+---+---+---+---+---+
+
+ Dynamic part:
+
+ +---+---+---+---+---+---+---+---+
+ / Checksum / 2 octets
+ +---+---+---+---+---+---+---+---+
+
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 101]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ Eliminated:
+
+ Length
+
+ The Length field of the UDP header MUST match the Length field(s)
+ of the preceding subheaders, i.e., there must not be any padding
+ after the UDP payload that is covered by the IP Length.
+
+ CRC-DYNAMIC: Length field, Checksum (octets 5-8).
+
+ CRC-STATIC: All other fields (octets 1-4).
+
+5.7.7.6. Initialization of RTP Header [RTP].
+
+ Static part:
+
+ SSRC.
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ / SSRC / 4 octets
+ +---+---+---+---+---+---+---+---+
+
+ Dynamic part:
+
+ P, X, CC, PT, M, sequence number, timestamp, timestamp stride,
+ CSRC identifiers.
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ | V=2 | P | RX| CC | (RX is NOT the RTP X bit)
+ +---+---+---+---+---+---+---+---+
+ | M | PT |
+ +---+---+---+---+---+---+---+---+
+ / RTP Sequence Number / 2 octets
+ +---+---+---+---+---+---+---+---+
+ / RTP Timestamp (absolute) / 4 octets
+ +---+---+---+---+---+---+---+---+
+ / Generic CSRC list / variable length
+ +---+---+---+---+---+---+---+---+
+ : Reserved | X | Mode |TIS|TSS: if RX = 1
+ +---+---+---+---+---+---+---+---+
+ : TS_Stride : 1-4 octets, if TSS = 1
+ +---+---+---+---+---+---+---+---+
+ : Time_Stride : 1-4 octets, if TIS = 1
+ +---+---+---+---+---+---+---+---+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 102]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ Eliminated:
+
+ Nothing.
+
+ Extras:
+
+ RX: Controls presence of extension.
+
+ Mode: Compression mode. 0 = Reserved,
+ 1 = Unidirectional,
+ 2 = Bidirectional Optimistic,
+ 3 = Bidirectional Reliable.
+
+ X: Copy of X bit from RTP header (presumed 0 if RX = 0)
+
+ Reserved: Set to zero when sending, ignored when received.
+
+ Generic CSRC list: CSRC list encoded according to section
+ 5.8.6.1, with all CSRC items present.
+
+ CRC-DYNAMIC: Octets containing M-bit, sequence number field,
+ and timestamp (octets 2-8).
+
+ CRC-STATIC: All other fields (octets 1, 9-12, original CSRC list).
+
+5.7.7.7. Initialization of ESP Header [ESP, section 2]
+
+ This is for the case when the NULL encryption algorithm [NULL] is NOT
+ being used with ESP, so that subheaders after the ESP header are
+ encrypted (see 5.12). See 5.8.4.3 for compression of the ESP header
+ when NULL encryption is being used.
+
+ Static part:
+
+ +---+---+---+---+---+---+---+---+
+ / SPI / 4 octets
+ +---+---+---+---+---+---+---+---+
+
+ Dynamic part:
+
+ +---+---+---+---+---+---+---+---+
+ / Sequence Number / 4 octets
+ +---+---+---+---+---+---+---+---+
+
+ Eliminated:
+
+ Other fields are encrypted, and can neither be located nor
+ compressed.
+
+
+
+Bormann, et al. Standards Track [Page 103]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ CRC-DYNAMIC: Sequence number (octets 5-8)
+
+ CRC-STATIC: All other octets.
+
+ Note: No encrypted data is considered to be part of the header for
+ purposes of computing the CRC, i.e., octets after the eight octet are
+ not considered part of the header.
+
+5.7.7.8. Initialization of Other Headers
+
+ Headers not explicitly listed in previous subsections can be
+ compressed only by making them part of an extension header chain
+ following an IPv4 or IPv6 header, see section 5.8.
+
+5.8. List compression
+
+ Header information from the packet stream to be compressed can be
+ structured as an ordered list, which is largely constant between
+ packets. The generic structure of such a list is as follows.
+
+ +--------+--------+--...--+--------+
+ list: | item 1 | item 2 | | item n |
+ +--------+--------+--...--+--------+
+
+ This section describes the compression scheme for such information.
+ The basic principles of list-based compression are the following:
+
+ 1) While the list is constant, no information about the list is sent
+ in compressed headers.
+
+ 2) Small changes in the list are represented as additions (Insertion
+ scheme), or deletions (Removal scheme), or both (Remove Then
+ Insert scheme).
+
+ 3) The list can also be sent in its entirety (Generic scheme).
+
+ There are two kinds of lists: CSRC lists in RTP packets, and
+ extension header chains in IP packets (both IPv4 and IPv6).
+
+ IPv6 base headers and IPv4 headers cannot be part of an extension
+ header chain. Headers which can be part of extension header chains
+ include
+
+ a) the AH header
+ b) the null ESP header
+ c) the minimal encapsulation header [RFC2004, section 3.1]
+ d) the GRE header [GRE1, GRE2]
+ e) IPv6 extension headers.
+
+
+
+Bormann, et al. Standards Track [Page 104]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ The table-based item compression scheme (5.8.1), which reduces the
+ size of each item, is described first. Then it is defined which
+ reference list to use in the insertion and removal schemes (5.8.2).
+ List encoding schemes are described in section 5.8.3, and a few
+ special cases in section 5.8.4. Finally, exact formats are described
+ in sections 5.8.5-5.8.6.
+
+5.8.1. Table-based item compression
+
+ The Table-based item compression scheme is a way to compress
+ individual items sent in compressed lists. The compressor assigns
+ each item in a list a unique identifier Index. The compressor
+ conceptually maintains a table with all items, indexed by Index. The
+ (Index, item) pair is sent together in compressed lists until the
+ compressor gains enough confidence that the decompressor has observed
+ the mapping between the item and its Index. Such confidence is
+ obtained by receiving an acknowledgment from the decompressor in R-
+ mode, and in U/O-mode by sending L (Index, item) pairs (not
+ necessarily consecutively). After that, the Index alone is sent in
+ compressed lists to indicate the corresponding item. The compressor
+ may reassign an existing Index to a new item, and then needs to re-
+ establish the mapping in the same manner as above.
+
+ The decompressor conceptually maintains a table that contains all
+ (Index, item) pairs it knows about. The table is updated whenever an
+ (Index, item) pair is received (and decompression is verified by a
+ CRC). The decompressor retrieves the item from the table whenever an
+ Index without an accompanying item is received.
+
+5.8.1.1. Translation table in R-mode
+
+ At the compressor side, an entry in the Translation Table has the
+ following structure.
+
+ +-------+------+---------------+
+ Index i | Known | item | SN1, SN2, ... |
+ +-------+------+---------------+
+
+ The Known flag indicates whether the mapping between Index i and item
+ has been established, i.e., if Index i alone can be sent in
+ compressed lists. Known is initially zero. It is also set to zero
+ whenever Index i is assigned to a new item. Known is set to one when
+ the corresponding (Index, item) pair is acknowledged.
+ Acknowledgments are based on the RTP Sequence Number, so a list of
+ RTP Sequence Numbers of all packets which contain the (Index, item)
+ pair is included in the translation table. When a packet with a
+ sequence number in the sequence number list is acknowledged, the
+ Known flag is set, and the sequence number list can be discarded.
+
+
+
+Bormann, et al. Standards Track [Page 105]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ Each entry in the Translation Table at the decompressor side has the
+ following structure:
+
+ +-------+------+
+ Index i | Known | item |
+ +-------+------+
+
+ All Known fields are initialized to zero. Whenever the decompressor
+ receives an (Index, item) pair, it inserts item into the table at
+ position Index and sets the Known flag in that entry to one. If an
+ index without an accompanying item is received for which the Known
+ flag is zero, the header MUST be discarded and a NACK SHOULD be sent.
+
+5.8.1.2. Translation table in U/O-modes
+
+ At the compressor side, each entry in the Translation Table has the
+ following structure:
+
+ +-------+------+---------+
+ Index | Known | item | Counter |
+ +-------+------+---------+
+
+ The Index, Known, and item fields have the same meaning as in section
+ 5.8.1.1.
+
+ Known is set when the (Index, item) pair has been sent in L
+ compressed lists (not necessarily consecutively). The Counter field
+ keeps track of how many times the pair has been sent. Counter is set
+ to 0 for each new entry added to the table, and whenever Index is
+ assigned to a new item. Counter is incremented by 1 whenever an
+ (Index, item) pair is sent. When the counter reaches L, the Known
+ field is set and after that only the Index needs to be sent in
+ compressed lists.
+
+ At the decompressor side, the Translation Table is the same as the
+ Translation Table defined in R-mode.
+
+5.8.2. Reference list determination
+
+ In reference based compression schemes (i.e., addition or deletion
+ based schemes), compression and decompression of a list (curr_list)
+ are based on a reference list (ref_list) which is assumed to be
+ present in the context of both compressor and decompressor. The
+ compressed list is an encoding of the differences between curr_list
+ and ref_list. Upon reception of a compressed list, the decompressor
+ applies the differences to its reference list in order to obtain the
+ original list.
+
+
+
+
+Bormann, et al. Standards Track [Page 106]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ To identify the reference list (to be) used, each compressed list
+ carries an identifier (ref_id). The reference list is established by
+ different methods in R-mode and U/O-mode.
+
+5.8.2.1. Reference list in R-mode and U/O-mode
+
+ In R-mode, the choice of reference list is based on acknowledgments,
+ i.e., the compressor uses as ref_list the latest list which has been
+ acknowledged by the decompressor. The ref_list is updated only upon
+ receiving an acknowledgment. The least significant bits of the RTP
+ Sequence Number of the acknowledged packet are used as the ref_id.
+
+ In U/O-mode, a sequence of identical lists are considered as
+ belonging to the same generation and are all assigned the same
+ generation identifier (gen_id). Gen_id increases by 1 each time the
+ list changes and is carried in compressed and uncompressed lists that
+ are candidates for being used as reference lists. Normally, Gen_id
+ must have been repeated in at least L headers before the list can be
+ used as a ref_list. However, some acknowledgments may be sent in O-
+ mode (and also in U-mode), and whenever an acknowledgment for a
+ header is received, the list of that header is considered known and
+ need not be repeated further. The least significant bits of the
+ Gen_id is used as the ref_id in U/O-mode.
+
+ The logic of the compressor and decompressor for reference based list
+ compression is similar to that for SN and TS. The principal
+ difference is that the decompressor maintains a sliding window with
+ candidates for ref_list, and retrieves ref_list from the sliding
+ window using the ref_id of the compressed list.
+
+ Logic of compressor:
+
+ a) In the IR state, the compressor sends Generic lists (see 5.8.5)
+ containing all items of the current list in order to establish or
+ refresh the context of the decompressor.
+
+ In R-mode, such Generic lists are sent until a header is
+ acknowledged. The list of that header can be used as a reference
+ list to compress subsequent lists.
+
+ In U/O-mode, the compressor sends generation identifiers with the
+ Generic lists until
+
+ 1) a generation identifier has been repeated L times, or
+
+ 2) an acknowledgment for a header carrying a generation identifier
+ has been received.
+
+
+
+
+Bormann, et al. Standards Track [Page 107]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ The repeated (1) or acknowledged (2) list can be used as a
+ reference list to compress subsequent lists and is kept together
+ with its generation identifier.
+
+ b) When not in the IR state, the compressor moves to the FO state
+ when it observes a difference between curr_list and the previous
+ list. It sends compressed lists based on ref_list to update the
+ context of the decompressor. (However, see d).)
+
+ In R-mode, the compressor keeps sending compressed lists using the
+ same reference until it receives an acknowledgment for a packet
+ containing the newest list. The compressor may then move to the
+ SO state with regard to the list.
+
+ In U/O-mode, the compressor keeps sending compressed lists with
+ generation identifiers until
+
+ 1) a generation identifier has been repeated L times, or
+
+ 2) an acknowledgment for a header carrying the latest generation
+ identifier has been received.
+
+ The repeated or acknowledged list is used as the future reference
+ list. The compressor may move to the SO state with regard to the
+ list.
+
+ c) In R-mode, the compressor maintains a sliding window containing
+ the lists which have been sent to update the context of the
+ decompressor and have not yet been acknowledged. The sliding
+ window shrinks when an acknowledgment arrives: all lists sent
+ before the acknowledged list are removed. The compressor may use
+ the Index to represent items of lists in the sliding window.
+
+ In U/O-mode, the compressor needs to store
+
+ 1) the reference list and its generation identifier, and
+
+ 2) if the current generation identifier is different from the
+ reference generation, the current list and the sequence
+ numbers with which the current list has been sent.
+
+ (2) is needed to determine if an acknowledgment concerns the
+ latest generation. It is not needed in U-mode.
+
+ d) In U/O-mode, the compressor may choose to not send a generation
+ identifier with a compressed list. Such lists without generation
+ identifiers are not assigned a new generation identifier and must
+
+
+
+
+Bormann, et al. Standards Track [Page 108]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ not be used as future reference lists. They do not update the
+ context. This feature is useful when a new list is repeated few
+ times and the list then reverts back to its old value.
+
+ Logic of decompressor:
+
+ e) In R-mode, the decompressor acknowledges all received uncompressed
+ or compressed lists which establish or update the context. (Such
+ compressed headers contain a CRC.)
+
+ In O-mode, the decompressor MAY acknowledge a list with a new
+ generation identifier, see section 5.4.2.2.
+
+ In U-mode, the decompressor MAY acknowledge a list sent in an IR
+ packet, see section 5.3.2.3.
+
+ f) The decompressor maintains a sliding window which contains the
+ lists that may be used as reference lists.
+
+ In R-mode, the sliding window contains lists which have been
+ acknowledged but not yet used as reference lists.
+
+ In U/O-mode, the sliding window contains at most one list per
+ generation. It contains all generations seen by the decompressor
+ newer than the last generation used as a reference.
+
+ g) When the decompressor receives a compressed list, it retrieves the
+ proper ref_list from the sliding window based on the ref_id, and
+ decompresses the compressed list obtaining curr_list.
+
+ In R-mode, curr_list is inserted into the sliding window if an
+ acknowledgment is sent for it. The sliding window is shrunk by
+ removing all lists received before ref_list.
+
+ In U/O-mode, curr_list is inserted into the sliding window
+ together with its generation identifier if the compressed list had
+ a generation identifier and the sliding window does not contain a
+ list with that generation identifier. All lists with generations
+ older than ref_id are removed from the sliding window.
+
+5.8.3. Encoding schemes for the compressed list
+
+ Four encoding schemes for the compressed list are described here.
+ The exact formats of the compressed CSRC list and compressed IP
+ extension header list using these encoding schemes are described in
+ sections 5.8.5-5.8.6.
+
+
+
+
+
+Bormann, et al. Standards Track [Page 109]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ Generic scheme
+
+ In contrast to subsequent schemes, this scheme does not rely on a
+ reference list having been established. The entire list is sent,
+ using table based compression for each individual item. The
+ generic scheme is always used when establishing the context of the
+ decompressor and may also be used at other times, as the
+ compressor sees fit.
+
+ Insertion Only scheme
+
+ When the new list can be constructed from ref_list by adding
+ items, a list of the added items is sent (using table based
+ compression), along with the positions in ref_list where the new
+ items will be inserted. An insertion bit mask indicates the
+ insertion positions in ref_list.
+
+ Upon reception of a list compressed according to the Insertion
+ Only scheme, curr_list is obtained by scanning the insertion bit
+ mask from left to right. When a '0' is observed, an item is
+ copied from the ref_list. When a '1' is observed, an item is
+ copied from the list of added items. If a '1' is observed when
+ the list of added items has been exhausted, an error has occurred
+ and decompression fails: The header MUST NOT be delivered to upper
+ layers; it should be discarded, and MUST NOT be acknowledged nor
+ used as a reference.
+
+ To construct the insertion bit mask and the list of added items,
+ the compressor MAY use the following algorithm:
+
+ 1) An empty bit list and an empty Inserted Item list are generated
+ as the starting point.
+
+ 2) Start by considering the first item of curr_list and ref_list.
+
+ 3) If curr_list has a different item than ref_list,
+
+ a set bit (1) is appended to the bit list;
+ the first item in curr_list (represented using table-based
+ item compression) is appended to the Inserted Item list;
+ advance to the next item of curr_list;
+
+ otherwise,
+
+ a zero bit (0) is appended to the bit list;
+
+ advance to the next item of curr_list;
+ advance to the next item of ref_list.
+
+
+
+Bormann, et al. Standards Track [Page 110]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ 4) Repeat 3) until curr_list has been exhausted.
+
+ 5) If the length of the bit list is less than the required bit
+ mask length, append additional zeroes.
+
+ Removal Only scheme
+
+ This scheme can be used when curr_list can be obtained by removing
+ some items in ref_list. The positions of the items which are in
+ ref_list, but not in curr_list, are sent as a removal bit mask.
+
+ Upon reception of the compressed list, the decompressor obtains
+ curr_list by scanning the removal bit mask from left to right.
+ When a '0' is observed, the next item of ref_list is copied into
+ curr_list. When a '1' is observed, the next item of ref_list is
+ skipped over without being copied. If a '0' is observed when
+ ref_list has been exhausted, an error has occurred and
+ decompression fails: The header MUST NOT be delivered to upper
+ layers; it should be discarded, and MUST NOT be acknowledged nor
+ used as a reference.
+
+ To construct the removal bit mask and the list of added items, the
+ compressor MAY use the following algorithm:
+
+ 1) An empty bit list is generated as the starting point.
+
+ 2) Start by considering the first item of curr_list and ref_list.
+
+ 3) If curr_list has a different item than ref_list,
+
+ a set bit (1) is appended to the bit list;
+ advance to the next item of ref_list;
+
+ otherwise,
+
+ a zero bit (0) is appended to the bit list;
+ advance to the next item of curr_list;
+ advance to the next item of ref_list.
+
+ 4) Repeat 3) until curr_list has been exhausted.
+
+ 5) If the length of the bit list is less than the required bit
+ mask length, append additional ones.
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 111]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ Remove Then Insert scheme
+
+ In this scheme, curr_list is obtained by first removing items from
+ ref_list, and then inserting items into the resulting list. A
+ removal bit mask, an insertion bit mask, and a list of added items
+ are sent.
+
+ Upon reception of the compressed list, the decompressor processes
+ the removal bit mask as in the Removal Only scheme. The resulting
+ list is then used as the reference list when the insertion bit
+ mask and the list of added items are processed, as in the
+ Insertion Only scheme.
+
+5.8.4. Special handling of IP extension headers
+
+ In CSRC list compression, each CSRC is assigned an index. In
+ contrast, in IP extension header list compression an index is usually
+ associated with a type of extension header. When there is more than
+ one IP header, there is more than one list of extension headers. An
+ index per type per list is then used.
+
+ The association with a type means that a new index need not always be
+ used each time a field in an IP extension header changes. However,
+ when a field in an extension header changes, the mapping between the
+ index and the new value of the extension header needs to be
+ established, except in the special handling cases defined in the
+ following subsections.
+
+5.8.4.1. Next Header field
+
+ The next header field in an IP header or extension header changes
+ whenever the type of the immediately following header changes, e.g.,
+ when a new extension header is inserted after it, when the immediate
+ subsequent extension header is removed from the list, or when the
+ order of extension headers is changed. Thus it may not be uncommon
+ that, for a given header, the next header field changes while the
+ remaining fields do not change.
+
+ Therefore, in the case that only the next header field changes, the
+ extension header is considered to be unchanged and rules for special
+ treatment of the change in the next header field are defined below.
+
+ All communicated uncompressed extension header items indicate their
+ own type in their Next Header field. Note that the rules below
+ explain how to treat the Next Header fields while showing the
+ conceptual reference list as an exact recreation of the original
+ uncompressed extension header list.
+
+
+
+
+Bormann, et al. Standards Track [Page 112]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ a) When a subsequent extension header is removed from the list, the
+ new value of the next header field is obtained from the reference
+ extension header list. For example, assume that the reference
+ header list (ref_list) consists of headers A, B and C (ref_ext_hdr
+ A, B, C), and the current extension header list (curr_list) only
+ consists of extension headers A and C (curr_ext_hdr A, C). The
+ order and value of the next header fields of these extension
+ headers are as follows.
+
+ ref_list:
+ +--------+-----+ +--------+-----+ +--------+-----+
+ | type B | | | type C | | | type D | |
+ +--------+ | +--------+ | +--------+ |
+ | | | | | |
+ +--------------+ +--------------+ +--------------+
+ ref_ext_hdr A ref_ext_hdr B ref_ext_hdr C
+
+ curr_list:
+ +--------+-----+ +--------+-----+
+ | type C | | | type D | |
+ +--------+ | +--------+ |
+ | | | |
+ +--------------+ +--------------+
+ curr_ext_hdr A curr_ext_hdr C
+
+ Comparing the curr_ext_hdr A in curr_list and the ref_ext_hdr A in
+ ref_list, the value of next header field is changed from "type B"
+ to "type C" because of the removal of extension header B. The new
+ value of the next header field in curr_ext_hdr A, i.e., "type C",
+ does not need to be sent to the decompressor. Instead, it is
+ retrieved from the next header field of the removed ref_ext_hdr B.
+
+ b) When a new extension header is inserted after an existing
+ extension header, the next header field in the communicated item
+ will carry the type of itself, rather than the type of the header
+ that follows. For example, assume that the reference header list
+ (ref_list) consists of headers A and C (ref_ext_hdr A, C), and the
+ current header list (curr_list) consists of headers A, B and C
+ (curr_ext_hdr A, B, C). The order and the value of the next
+ header fields of these extension headers are as follows.
+
+
+
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 113]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ ref_list:
+ +--------+-----+ +--------+-----+
+ | type C | | | type D | |
+ +--------+ | +--------+ |
+ | | | |
+ +--------------+ +--------------+
+ ref_ext_hdr A ref_ext_hdr C
+
+ curr_list:
+ +--------+-----+ +--------+-----+ +--------+-----+
+ | type B | | | type C | | | type D | |
+ +--------+ | +--------+ | +--------+ |
+ | | | | | |
+ +--------------+ +--------------+ +--------------+
+ curr_ext_hdr A curr_ext_hdr B curr_ext_hdr C
+
+ Comparing the curr_list and the ref_list, the value of the next
+ header field in extension header A is changed from "type C" to
+ "type B".
+
+ The uncompressed curr_ext_hdr B is carried in the compressed
+ header list. However, it carries "type B" instead of "type C" in
+ its next header field. When the decompressor inserts a new header
+ after curr_ext_hdr A, the next header field of A is taken from the
+ new header, and the next header field of the new header is taken
+ from ref_ext_hdr A.
+
+ c) Some headers whose compression is defined in this document do not
+ contain Next Header fields or do not have their Next Header field
+ in the standard position (first octet of the header). The GRE and
+ ESP headers are such headers. When sent as uncompressed items in
+ lists, these headers are modified so that they do have a Next
+ Header field as their first octet (see 5.8.4.3 and 5.8.4.4). This
+ is necessary to enable the decompressor to decode the item.
+
+5.8.4.2. Authentication Header (AH)
+
+ The sequence number field in the AH [AH] contains a monotonically
+ increasing counter value for a security association. Therefore, when
+ comparing curr_list with ref_list, if the sequence number in AH
+ changes and SPI field does not change, the AH is not considered as
+ changed.
+
+ If the sequence number in the AH linearly increases as the RTP
+ Sequence Number increases, and the compressor is confident that the
+ decompressor has obtained the pattern, the sequence number in AH need
+ not be sent. The decompressor applies linear extrapolation to
+ reconstruct the sequence number in the AH.
+
+
+
+Bormann, et al. Standards Track [Page 114]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ Otherwise, a compressed sequence number is included in the IPX
+ compression field in an Extension 3 of an UOR-2 header.
+
+ The authentication data field in AH changes from packet to packet and
+ is sent as-is. If the uncompressed AH is sent, the authentication
+ data field is sent inside the uncompressed AH; otherwise, it is sent
+ after the compressed IP/UDP/RTP and IPv6 extension headers and before
+ the payload. See beginning of section 5.7.
+
+ Note: The payload length field of the AH uses a different notion of
+ length than other IPv6 extension headers.
+
+5.8.4.3. Encapsulating Security Payload Header (ESP)
+
+ When the Encapsulating Security Payload Header (ESP) [ESP] is present
+ and an encryption algorithm other than NULL is being used, the UDP
+ and RTP headers are both encrypted and cannot be compressed. The ESP
+ header thus ends the compressible header chain. The ROHC ESP profile
+ defined in section 5.12 MAY be used for the stream in this case.
+
+ A special case is when the NULL encryption algorithm is used. This
+ is the case when the ESP header is used for authentication only, and
+ not for encryption. The payload is not encrypted by the NULL
+ encryption algorithm, so compression of the rest of the header chain
+ is possible. The rest of this section describes compression of the
+ ESP header when the NULL encryption algorithm is used with ESP.
+
+ It is not possible to determine whether NULL encryption is used by
+ inspecting a header in the stream, this information is present only
+ at the encryption endpoints. However, a compressor may attempt
+ compression under the assumption that the NULL encryption algorithm
+ is being used, and later abort compression when the assumption proves
+ to be false.
+
+ The compressor may, for example, inspect the Next Header fields and
+ the header fields supposed to be static in subsequent headers in
+ order to determine if NULL encryption is being used. If these change
+ unpredictably, an encryption algorithm other than NULL is probably
+ being used and compression of subsequent headers SHOULD be aborted.
+ Compression of the stream is then either discontinued, or a profile
+ that compresses only up to the ESP header may be used (see 5.12).
+ While attempting to compress the header, the compressor should use
+ the SPI of the ESP header together with the destination IP address as
+ the defining fields for determining which packets belong to the
+ stream.
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 115]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ In the ESP header [ESP, section 2], the fields that can be compressed
+ are the SPI, the sequence number, the Next Header, and the padding
+ bytes if they are in the standard format defined in [ESP]. (As
+ always, the decompressor reinserts these fields based on the
+ information in the context. Care must be taken to correctly reinsert
+ all the information as the Authentication Data must be verified over
+ the exact same information it was computed over.)
+
+ ESP header [ESP, section 2]:
+
+ 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
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Security Parameters Index (SPI) |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Sequence Number |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Payload Data (variable) |
+ ~ ~
+ | |
+ + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | | Padding (0-255 octets) |
+ +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | | Pad Length | Next Header |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Authentication Data |
+ + (variable length, but assumed to be 12 octets) +
+ | |
+ + +
+ | |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ SPI: Static. If it changes, it needs to be reestablished.
+
+ Sequence Number: Not sent when the offset from the sequence number
+ of the compressed header is constant. When the offset is not
+ constant, the sequence number may be compressed by sending
+ LSBs. See 5.8.4.
+
+ Payload Data: This is where subsequent headers are to be found.
+ Parsed according to the Next Header field.
+
+ Padding: The padding octets are assumed to be as defined in [ESP],
+ i.e., to take the values 1, 2, ..., k, where k = Pad Length.
+ If the padding in the static context has this pattern, padding
+ in compressed headers is assumed to have this pattern as well
+ and is removed. If padding in the static context does not
+ have this pattern, the padding is not removed.
+
+
+
+Bormann, et al. Standards Track [Page 116]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ Pad Length: Dynamic. Always sent. 14th octet from end of packet.
+
+ Next Header: Static. 13th octet from end of packet.
+
+ Authentication Data: Can have variable length, but when compression
+ of NULL-encryption ESP header is attempted, it is assumed to have
+ length 12 octets.
+
+ The sequence number in ESP has the same behavior as the sequence
+ number field in AH. When it increases linearly, it can be compressed
+ to zero bits. When it does not increase linearly, a compressed
+ sequence number is included in the IPX compression field in an
+ Extension 3 of an UOR-2 header.
+
+ The information which is part of an uncompressed item of a compressed
+ list is the Next Header field, followed by the SPI and the Sequence
+ Number. Padding, Pad Length, Next Header, and Authentication Data
+ are sent as-is at the end of the packet. This means that the Next
+ Header occurs in two places.
+
+ Uncompressed ESP list item:
+
+ +---+---+---+---+---+---+---+---+
+ | Next Header ! 1 octet (see section 5.8.4.1)
+ +---+---+---+---+---+---+---+---+
+ / SPI / 4 octets
+ +---+---+---+---+---+---+---+---+
+ / Sequence Number / 4 octets
+ +---+---+---+---+---+---+---+---+
+
+ When sending Uncompressed ESP list items, all ESP fields near the
+ the end of the packet are left untouched (Padding, Pad Length,
+ Next Header, Authentication Data).
+
+ A compressed item consists of a compressed sequence number. When an
+ item is compressed, Padding (if it follows the 1, 2, ..., k pattern)
+ and Next Header are removed near the end of the packet.
+ Authentication Data and Pad Length remain as-is near the end of the
+ packet.
+
+5.8.4.4. GRE Header [RFC 2784, RFC 2890]
+
+ The GRE header is a set of flags, followed by a mandatory Protocol
+ Type and optional parts as indicated by the flags.
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 117]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ The sequence number field in the GRE header contains a counter value
+ for a GRE tunnel. Therefore, when comparing curr_list with ref_list,
+ if the sequence number in GRE changes, the GRE is not considered as
+ changed.
+
+ If the sequence number in the GRE header linearly increases as the
+ RTP Sequence Number increases and the compressor is confident that
+ the decompressor has received the pattern, the sequence number in GRE
+ need not be sent. The decompressor applies linear extrapolation to
+ reconstruct the sequence number in the GRE header.
+
+ Otherwise, a compressed sequence number is included in the IPX
+ compression field in an Extension 3 of an UOR-2 header.
+
+ The checksum data field in GRE, if present, changes from packet to
+ packet and is sent as-is. If the uncompressed GRE header is sent,
+ the checksum data field is sent inside the uncompressed GRE header;
+ otherwise, if present, it is sent after the compressed IP/UDP/RTP and
+ IPv6 extension headers and before the payload. See beginning of
+ section 5.7.
+
+ In order to allow simple parsing of lists of items, an uncompressed
+ GRE header sent as an item in a list is modified from the original
+ GRE header in the following manner: 1) the 16-bit Protocol Type field
+ that encodes the type of the subsequent header using Ether types (see
+ Ether types section in [ASSIGNED]) is removed. 2) A one-octet Next
+ Header field is inserted as the first octet of the header. The value
+ of the Next Header field corresponds to GRE (this value is 47
+ according to the Assigned Internet Protocol Number section of
+ [ASSIGNED]) when the uncompressed item is to be inserted in a list,
+ and to the type of the subsequent header when the uncompressed item
+ is in a Generic list. Note that this implies that only GRE headers
+ with Ether types that correspond to an IP protocol number can be
+ compressed.
+
+ Uncompressed GRE list item:
+
+ +---+---+---+---+---+---+---+---+
+ | Next Header ! 1 octet (see section 5.8.4.1)
+ +---+---+---+---+---+---+---+---+
+ / C | | K | S | | Ver | 1 octet
+ +---+---+---+---+---+---+---+---+
+ / Checksum / 2 octets, if C=1
+ +---+---+---+---+---+---+---+---+
+ / Key / 4 octets, if K=1
+ +---+---+---+---+---+---+---+---+
+ / Sequence Number / 4 octets, if S=1
+ +---+---+---+---+---+---+---+---+
+
+
+
+Bormann, et al. Standards Track [Page 118]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ The bits left blank in the second octet are set to zero when
+ sending and ignored when received.
+
+ The fields Reserved0 and Reserved1 of the GRE header [GRE2] must
+ be all zeroes; otherwise, the packet cannot be compressed by this
+ profile.
+
+5.8.5. Format of compressed lists in Extension 3
+
+5.8.5.1. Format of IP Extension Header(s) field
+
+ In Extension 3 (section 5.7.5), there is a field called IP extension
+ header(s). This section describes the format of that field.
+
+ 0 1 2 3 4 5 6 7
+ +-----+-----+-----+-----+-----+-----+-----+-----+
+ | CL | ASeq| ESeq| Gseq| res | 1 octet
+ +-----+-----+-----+-----+-----+-----+-----+-----+
+ : compressed AH Seq Number, 1 or 4 octets : if ASeq = 1
+ ----- ----- ----- ----- ----- ----- ----- -----
+ : compressed ESP Seq Number, 1 or 4 octets : if Eseq = 1
+ ----- ----- ----- ----- ----- ----- ----- -----
+ : compressed GRE Seq Number, 1 or 4 octets : if Gseq = 1
+ ----- ----- ----- ----- ----- ----- ----- -----
+ : compressed header list, variable length : if CL = 1
+ ----- ----- ----- ----- ----- ----- ----- -----
+
+ ASeq: indicates presence of compressed AH Seq Number
+ ESeq: indicates presence of compressed ESP Seq Number
+ GSeq: indicates presence of compressed GRE Seq Number
+ CL: indicates presence of compressed header list
+ res: reserved; set to zero when sending, ignored when received
+
+ When Aseq, Eseq, or Gseq is set, the corresponding header item (AH,
+ ESP, or GRE header) is compressed. When not set, the corresponding
+ header item is sent uncompressed or is not present.
+
+ The format of compressed AH, ESP and GRE Sequence Numbers can each be
+ either of the following:
+
+
+
+
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 119]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+
+ | 0 | LSB of sequence number | | 1 | |
+ +---+---+---+---+---+---+---+---+ +---+ +
+ | |
+ + LSB of sequence number +
+ | |
+ + +
+ | |
+ +---+---+---+---+---+---+---+---+
+
+ The format of the compressed header list field is described in
+ section 5.8.6.
+
+5.8.5.2. Format of Compressed CSRC List
+
+ The Compressed CSRC List field in the RTP header part of an Extension
+ 3 (section 5.7.5) is as in section 5.8.6.
+
+5.8.6. Compressed list formats
+
+ This section describes the format of compressed lists. The format is
+ the same for CSRC lists and header lists. In CSRC lists, the items
+ are CSRC identifiers; in header lists, they are uncompressed or
+ compressed headers, as described in 5.8.4.2-4.
+
+5.8.6.1. Encoding Type 0 (generic scheme)
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ | ET=0 |GP |PS | CC = m |
+ +---+---+---+---+---+---+---+---+
+ : gen_id : 1 octet, if GP = 1
+ +---+---+---+---+---+---+---+---+
+ | XI 1, ..., XI m | m octets, or m * 4 bits
+ / --- --- --- ---/
+ | : Padding : if PS = 0 and m is odd
+ +---+---+---+---+---+---+---+---+
+ | |
+ / item 1, ..., item n / variable
+ | |
+ +---+---+---+---+---+---+---+---+
+
+ ET: Encoding type is zero.
+
+ PS: Indicates size of XI fields:
+ PS = 0 indicates 4-bit XI fields;
+ PS = 1 indicates 8-bit XI fields.
+
+
+
+Bormann, et al. Standards Track [Page 120]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ GP: Indicates presence of gen_id field.
+
+ CC: CSRC counter from original RTP header.
+
+ gen_id: Identifier for a sequence of identical lists. It is
+ present in U/O-mode when the compressor decides that it may use
+ this list as a future reference list.
+
+ XI 1, ..., XI m: m XI items. The format of an XI item is as
+ follows:
+
+ +---+---+---+---+
+ PS = 0: | X | Index |
+ +---+---+---+---+
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ PS = 1: | X | Index |
+ +---+---+---+---+---+---+---+---+
+
+ X = 1 indicates that the item corresponding to the Index
+ is sent in the item 0, ..., item n list.
+ X = 0 indicates that the item corresponding to the Index is
+ not sent.
+
+ When 4-bit XI items are used and m > 1, the XI items are placed in
+ octets in the following manner:
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ | XI k | XI k + 1 |
+ +---+---+---+---+---+---+---+---+
+
+ Padding: A 4-bit padding field is present when PS = 0 and m is
+ odd. The Padding field is set to zero when sending and ignored
+ when receiving.
+
+ Item 1, ..., item n:
+
+ Each item corresponds to an XI with X = 1 in XI 1, ..., XI m.
+
+
+
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 121]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+5.8.6.2. Encoding Type 1 (insertion only scheme)
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ | ET=1 |GP |PS | XI 1 |
+ +---+---+---+---+---+---+---+---+
+ : gen_id : 1 octet, if GP = 1
+ +---+---+---+---+---+---+---+---+
+ | ref_id |
+ +---+---+---+---+---+---+---+---+
+ / insertion bit mask / 1-2 octets
+ +---+---+---+---+---+---+---+---+
+ | XI list | k octets, or (k - 1) * 4 bits
+ / --- --- --- ---/
+ | : Padding : if PS = 0 and k is even
+ +---+---+---+---+---+---+---+---+
+ | |
+ / item 1, ..., item n / variable
+ | |
+ +---+---+---+---+---+---+---+---+
+
+ Unless explicitly stated otherwise, fields have the same meaning and
+ values as for encoding type 0.
+
+ ET: Encoding type is one (1).
+
+ XI 1: When PS = 0, the first 4-bit XI item is placed here.
+ When PS = 1, the field is set to zero when sending, and
+ ignored when receiving.
+
+ ref_id: The identifier of the reference CSRC list used when the
+ list was compressed. It is the 8 least significant bits of
+ the RTP Sequence Number in R-mode and gen_id (see section
+ 5.8.2) in U/O-mode.
+
+ insertion bit mask: Bit mask indicating the positions where new
+ items are to be inserted. See Insertion Only scheme in
+ section 5.8.3. The bit mask can have either of the
+ following two formats:
+
+
+
+
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 122]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ | 0 | 7-bit mask | bit 1 is the first bit
+ +---+---+---+---+---+---+---+---+
+
+ +---+---+---+---+---+---+---+---+
+ | 1 | | bit 1 is the first bit
+ +---+ 15-bit mask +
+ | | bit 7 is the last bit
+ +---+---+---+---+---+---+---+---+
+
+ XI list: XI fields for items to be inserted. When the insertion
+ bit mask has k ones, the total number of XI fields is k. When
+ PS = 1, all XI fields are in the XI list. When PS = 0, the
+ first XI field is in the XI 1 field, and the remaining k - 1
+ XI fields are in the XI list.
+
+ Padding: Present when PS = 0 and k is even.
+
+ item 1, ..., item n: One item for each XI field with the X bit
+ set.
+
+5.8.6.3. Encoding Type 2 (removal only scheme)
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ | ET=2 |GP |res| Count |
+ +---+---+---+---+---+---+---+---+
+ : gen_id : 1 octet, if GP = 1
+ +---+---+---+---+---+---+---+---+
+ | ref_id |
+ +---+---+---+---+---+---+---+---+
+ / removal bit mask / 1-2 octets
+ +---+---+---+---+---+---+---+---+
+
+ Unless explicitly stated otherwise, fields have the same meaning
+ and values as in section 5.8.5.2.
+
+ ET: Encoding type is 2.
+
+ res: Reserved. Set to zero when sending, ignored when
+ received.
+
+ Count: Number of elements in ref_list.
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 123]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ removal bit mask: Indicates the elements in ref_list to be
+ removed in order to obtain the current list. See section
+ 5.8.3. The removal bit mask has the same format as the
+ insertion bit mask of section 5.8.6.3.
+
+5.8.6.4. Encoding Type 3 (remove then insert scheme)
+
+ See section 5.8.3 for a description of the Remove then insert
+ scheme.
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ | ET=3 |GP |PS | XI 1 |
+ +---+---+---+---+---+---+---+---+
+ : gen_id : 1 octet, if GP = 1
+ +---+---+---+---+---+---+---+---+
+ | ref_id |
+ +---+---+---+---+---+---+---+---+
+ / removal bit mask / 1-2 octets
+ +---+---+---+---+---+---+---+---+
+ / insertion bit mask / 1-2 octets
+ +---+---+---+---+---+---+---+---+
+ | XI list | k octets, or (k - 1) * 4 bits
+ / --- --- --- ---/
+ | : Padding : if PS = 0 and k is even
+ +---+---+---+---+---+---+---+---+
+ | |
+ / item 1, ..., item n / variable
+ | |
+ +---+---+---+---+---+---+---+---+
+
+ The fields in this header have the same meaning and formats as in
+ section 5.8.5.2, except when explicitly stated otherwise below.
+
+ ET: Encoding type is 3.
+
+ removal bit mask: See section 5.8.6.3.
+
+5.8.7. CRC coverage for extension headers
+
+ All fields of extension headers are CRC-STATIC, with the following
+ exceptions which are CRC-DYNAMIC.
+
+ 1) Entire AH header.
+ 2) Entire ESP header.
+ 3) Sequence number in GRE, Checksum in GRE
+
+
+
+
+
+Bormann, et al. Standards Track [Page 124]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+5.9. Header compression CRCs, coverage and polynomials
+
+ This chapter describes how to calculate the CRCs used in packet
+ headers defined in this document. (Note that another type of CRC is
+ defined for reconstructed units in section 5.2.5.)
+
+5.9.1. IR and IR-DYN packet CRCs
+
+ The CRC in the IR and IR-DYN packet is calculated over the entire IR
+ or IR-DYN packet, excluding Payload and including CID or any Add-CID
+ octet. For purposes of computing the CRC, the CRC field in the
+ header is set to zero.
+
+ The initial content of the CRC register is to be preset to all 1's.
+
+ The CRC polynomial to be used for the 8-bit CRC is:
+
+ C(x) = 1 + x + x^2 + x^8
+
+5.9.2. CRCs in compressed headers
+
+ The CRC in compressed headers is calculated over all octets of the
+ entire original header, before compression, in the following manner.
+
+ The octets of the header are classified as either CRC-STATIC or CRC-
+ DYNAMIC, and the CRC is calculated over:
+
+ 1) the concatenated CRC-STATIC octets of the original header, placed
+ in the same order as they appear in the original header, followed
+ by
+
+ 2) the concatenated CRC-DYNAMIC octets of the original header, placed
+ in the same order as they appear in the original header.
+
+ The intention is that the state of the CRC computation after 1) will
+ be saved. As long as the CRC-STATIC octets do not change, the CRC
+ calculation will then only need to process the CRC-DYNAMIC octets.
+
+ In a typical RTP/UDP/IPv4 header, 25 octets are CRC-STATIC and 15 are
+ CRC-DYNAMIC. In a typical RTP/UDP/IPv6 header, 49 octets are CRC-
+ STATIC and 11 are CRC-DYNAMIC. This technique will thus reduce the
+ computational complexity of the CRC calculation by roughly 60% for
+ RTP/UDP/IPv4 and by roughly 80% for RTP/UDP/IPv6.
+
+ Note: Whenever the CRC-STATIC fields change, the new saved CRC state
+ after 1) is compared with the old state. If the states are
+ identical, the CRC cannot catch the error consisting in the
+ decompressor not having updated the static context. In U/O-mode the
+
+
+
+Bormann, et al. Standards Track [Page 125]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ compressor SHOULD then for a while use packet types with another CRC
+ length, for which there is a difference in CRC state, to ensure error
+ detection.
+
+ The initial content of the CRC register is preset to all 1's.
+
+ The polynomial to be used for the 3 bit CRC is:
+
+ C(x) = 1 + x + x^3
+
+ The polynomial to be used for the 7 bit CRC is:
+
+ C(x) = 1 + x + x^2 + x^3 + x^6 + x^7
+
+ The CRC in compressed headers is calculated over the entire original
+ header, before compression.
+
+5.10. ROHC UNCOMPRESSED -- no compression (Profile 0x0000)
+
+ In ROHC, compression has not been defined for all kinds of IP
+ headers. Profile 0x0000 provides a way to send IP packets without
+ compressing them. This can be used for IP fragments, RTCP packets,
+ and in general for any packet for which compression of the header has
+ not been defined, is not possible due to resource constraints, or is
+ not desirable for some other reason.
+
+ After initialization, the only overhead for sending packets using
+ Profile 0x0000 is the size of the CID. When uncompressed packets are
+ frequent, Profile 0x0000 should be associated with a CID with size
+ zero or one octet. There is no need to associate Profile 0x0000 with
+ more than one CID.
+
+5.10.1. IR packet
+
+ The initialization packet (IR packet) for Profile 0x0000 has the
+ following format:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 126]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ 0 1 2 3 4 5 6 7
+ --- --- --- --- --- --- --- ---
+ : Add-CID octet : if for small CIDs and (CID != 0)
+ +---+---+---+---+---+---+---+---+
+ | 1 1 1 1 1 1 0 |res|
+ +---+---+---+---+---+---+---+---+
+ : :
+ / 0-2 octets of CID info / 1-2 octets if for large CIDs
+ : :
+ +---+---+---+---+---+---+---+---+
+ | Profile = 0 | 1 octet
+ +---+---+---+---+---+---+---+---+
+ | CRC | 1 octet
+ +---+---+---+---+---+---+---+---+
+ : : (optional)
+ / IP packet / variable length
+ : :
+ --- --- --- --- --- --- --- ---
+
+ res: Always zero.
+
+ Profile: 0.
+
+ CRC: 8-bit CRC, computed using the polynomial of section 5.9.1.
+ The CRC covers the first octet of the IR packet through the
+ Profile octet of the IR packet, i.e., it does not cover the
+ CRC itself or the IP packet.
+
+ IP packet: An uncompressed IP packet may be included in the IR
+ packet. The decompressor determines if the IP packet is
+ present by considering the length of the IR packet.
+
+5.10.2. Normal packet
+
+ A Normal packet is a normal IP packet plus CID information. When the
+ channel uses small CIDs, and profile 0x0000 is associated with a CID
+ > 0, an Add-CID octet is prepended to the IP packet. When the
+ channel uses large CIDs, the CID is placed so that it starts at the
+ second octet of the Normal packet.
+
+
+
+
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 127]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ 0 1 2 3 4 5 6 7
+ --- --- --- --- --- --- --- ---
+ : Add-CID octet : if for small CIDs and (CID != 0)
+ +---+---+---+---+---+---+---+---+
+ | first octet of IP packet |
+ +---+---+---+---+---+---+---+---+
+ : :
+ / 0-2 octets of CID info / 1-2 octets if for large CIDs
+ : :
+ +---+---+---+---+---+---+---+---+
+ | |
+ / rest of IP packet / variable length
+ | |
+ +---+---+---+---+---+---+---+---+
+
+ Note that the first octet of the IP packet starts with the bit
+ pattern 0100 (IPv4) or 0110 (IPv6). This does not conflict with any
+ reserved packet types. Hence, no bits in addition to the CID are
+ needed. The profile is reasonably future-proof since problems do not
+ occur until IP version 14.
+
+5.10.3. States and modes
+
+ There are two modes in Profile 0x0000: Unidirectional mode and
+ Bidirectional mode. In Unidirectional mode, the compressor repeats
+ the IR packet periodically. In Bidirectional mode, the compressor
+ never repeats the IR packet. The compressor and decompressor always
+ start in Unidirectional mode. Whenever feedback is received, the
+ compressor switches to Bidirectional mode.
+
+ The compressor can be in either of two states: the IR state or the
+ Normal state. It starts in the IR state.
+
+ a) IR state: Only IR packets can be sent. After sending a small
+ number of IR packets (only one when refreshing), the compressor
+ switches to the Normal state.
+
+ b) Normal state: Only Normal packets can be sent. When in
+ Unidirectional mode, the compressor periodically transits back to
+ the IR state. The length of the period is implementation
+ dependent, but should be fairly long. Exponential backoff may be
+ used.
+
+ c) When feedback is received in any state, the compressor switches to
+ Bidirectional mode.
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 128]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ The decompressor can be in either of two states: NO_CONTEXT or
+ FULL_CONTEXT. It starts in NO_CONTEXT.
+
+ d) When an IR packet is received in the NO_CONTEXT state, the
+ decompressor first verifies the packet using the CRC. If the
+ packet is OK, the decompressor 1) moves to the FULL_CONTEXT state,
+ 2) delivers the IP packet to upper layers if present, 3) MAY send
+ an ACK. If the packet is not OK, it is discarded without further
+ action.
+
+ e) When any other packet is received in the NO_CONTEXT state, it is
+ discarded without further action.
+
+ f) When an IR packet is received in the FULL_CONTEXT state, the
+ packet is first verified using the CRC. If OK, the decompressor
+ 1) delivers the IP packet to upper layers if present, 2) MAY send
+ an ACK. If the packet is not OK, no action is taken.
+
+ g) When a Normal packet is received in the FULL_CONTEXT state, the
+ CID information is removed and the IP packet is delivered to upper
+ layers.
+
+5.10.4. Feedback
+
+ The only kind of feedback in Profile 0x0000 is ACKs. Profile 0x0000
+ MUST NOT be rejected. Profile 0x0000 SHOULD be associated with at
+ most one CID. ACKs use the FEEDBACK-1 format of section 5.2. The
+ value of the profile-specific octet in the FEEDBACK-1 ACK is 0
+ (zero).
+
+5.11. ROHC UDP -- non-RTP UDP/IP compression (Profile 0x0002)
+
+ UDP/IP headers do not have a sequence number which is as well-behaved
+ as the RTP Sequence Number. For UDP/IPv4, there is an IP-ID field
+ which may be echoed in feedback information, but when no IPv4 header
+ is present such feedback identification becomes problematic.
+
+ Therefore, in the ROHC UDP profile, the compressor generates a 16-bit
+ sequence number SN which increases by one for each packet received in
+ the packet stream. This sequence number is thus relatively well-
+ behaved and can serve as the basis for most mechanisms described for
+ ROHC RTP. It is called SN or UDP SN below. Unless stated otherwise,
+ the mechanisms of ROHC RTP are used also for ROHC UDP, with the UDP
+ SN taking the role of the RTP Sequence Number.
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 129]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ The ROHC UDP profile always uses p = -1 when interpreting the SN,
+ since there will be no repetitions or reordering of the compressor-
+ generated SN. The interpretation interval thus always starts with
+ (ref_SN + 1).
+
+5.11.1. Initialization
+
+ The static context for ROHC UDP streams can be initialized in either
+ of two ways:
+
+ 1) By using an IR packet as in section 5.7.7.1, where the profile is
+ two (2) and the static chain ends with the static part of an UDP
+ packet. At the compressor, UDP SN is initialized to a random
+ value when the IR packet is sent.
+
+ 2) By reusing an existing context where the existing static chain
+ contains the static part of a UDP packet, e.g., the context of a
+ stream compressed using ROHC RTP (profile 0x0001). This is done
+ with an IR-DYN packet (section 5.7.7.2) identifying profile
+ 0x0002, where the dynamic chain corresponds to the prefix of the
+ existing static chain that ends with the UDP header. UDP SN is
+ initialized to the RTP Sequence Number if the earlier profile was
+ profile 0x0001, and to a random number otherwise.
+
+ For ROHC UDP, the dynamic part of a UDP packet is different from
+ section 5.7.7.5: a two-octet field containing the UDP SN is added
+ after the Checksum field. This affects the format of dynamic chains
+ in IR and IR-DYN packets.
+
+ Note: 2) can be used for packet streams which were initially assumed
+ to be RTP streams, so that compression started with profile 0x0001,
+ but were later found evidently not to be RTP streams.
+
+5.11.2. States and modes
+
+ ROHC UDP uses the same states and modes as ROHC RTP. Mode
+ transitions and state logic are the same except when explicitly
+ stated otherwise. Mechanisms dealing with fields in the RTP header
+ (except the RTP SN) are not used. The decompressed UDP SN is never
+ included in any header delivered to upper layers. The UDP SN is used
+ in place of the RTP SN in feedback.
+
+
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 130]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+5.11.3. Packet types
+
+ The general format of a ROHC UDP packet is the same as for ROHC RTP
+ (see beginning of section 5.7). Padding and CIDs are the same, as is
+ the feedback packet type (5.7.6.1) and the feedback. IR and IR-DYN
+ packets (5.7.7) are changed as described in 5.11.1.
+
+ The general format of compressed packets is also the same, but there
+ are differences in specific formats and extensions as detailed below.
+ The differences are caused by removal of all RTP specific information
+ except the RTP SN, which is replaced by the UDP SN.
+
+ Unless explicitly stated below, the packet formats are as in sections
+ 5.7.1-6.
+
+ R-1
+
+ The TS field is replaced by an IP-ID field. The M flag has become
+ part of IP-ID. The X bit has moved. The formats R-1-ID and R-1-
+ TS are not used.
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ | 1 0 | SN |
+ +===+===+===+===+===+===+===+===+
+ | X | IP-ID |
+ +---+---+---+---+---+---+---+---+
+
+ UO-1
+
+ The TS field is replaced by an IP-ID field. The M flag has become
+ part of SN. Formats UO-1-ID and UO-1-TS are not used.
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ | 1 0 | IP-ID |
+ +===+===+===+===+===+===+===+===+
+ | SN | CRC |
+ +---+---+---+---+---+---+---+---+
+
+ UOR-2
+
+
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 131]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ New format:
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ | 1 1 0 | SN |
+ +===+===+===+===+===+===+===+===+
+ | X | CRC |
+ +---+---+---+---+---+---+---+---+
+
+5.11.4. Extensions
+
+ Extensions are as in 5.7.5, with the following exceptions:
+
+ Extension 0:
+
+ +---+---+---+---+---+---+---+---+
+ | 0 0 | SN | IP-ID |
+ +---+---+---+---+---+---+---+---+
+
+ Extension 1:
+
+ +---+---+---+---+---+---+---+---+
+ | 0 1 | SN | IP-ID |
+ +---+---+---+---+---+---+---+---+
+ | IP-ID |
+ +---+---+---+---+---+---+---+---+
+
+ Extension 2:
+
+ +---+---+---+---+---+---+---+---+
+ | 1 0 | SN | IP-ID2 |
+ +---+---+---+---+---+---+---+---+
+ | IP-ID2 |
+ +---+---+---+---+---+---+---+---+
+ | IP-ID |
+ +---+---+---+---+---+---+---+---+
+
+ IP-ID2: For outer IP-ID field.
+
+ Extension 3 is the same as Extension 3 in section 5.7.5, with the
+ following exceptions.
+
+ 1) The initial flag octet has the following format:
+
+ 0 1 2 3 4 5 6 7
+ +-----+-----+-----+-----+-----+-----+-----+-----+
+ | 1 1 | S | Mode | I | ip | ip2 |
+ +-----+-----+-----+-----+-----+-----+-----+-----+
+
+
+
+Bormann, et al. Standards Track [Page 132]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ Mode: Replaces R-TS and Tsc of 5.7.5. Provides mode information
+ as was earlier done in RTP header flags and fields.
+
+ ip2: Replaces rtp bit of 5.7.5. Moved here from the Inner IP
+ header flags octet.
+
+ 2) The bit which was the ip2 flag in the Inner IP header flags in
+ 5.7.5 is reserved. It is set to zero when sending and ignored
+ when receiving.
+
+5.11.5. IP-ID
+
+ Treated as in ROHC RTP, but the offset is from UDP SN.
+
+5.11.6. Feedback
+
+ Feedback is as for ROHC RTP with the following exceptions:
+
+ 1) UDP SN replaces RTP SN in feedback.
+ 2) The CLOCK option (5.7.6.6) is not used.
+ 3) The JITTER option (5.7.6.7) is not used.
+
+5.12. ROHC ESP -- ESP/IP compression (Profile 0x0003)
+
+ When the ESP header is being used with an encryption algorithm other
+ than NULL, subheaders after the ESP header are encrypted and cannot
+ be compressed. Profile 0x0003 is for compression of the chain of
+ headers up to and including the ESP header in this case. When the
+ NULL encryption algorithm is being used, other profiles can be used
+ and could give higher compression rates. See section 5.8.4.3.
+
+ This profile is very similar to the ROHC UDP profile. It uses the
+ ESP sequence number as the basis for compression instead of a
+ generated number, but is otherwise very similar to ROHC UDP. The
+ interpretation interval (value of p) for the ESP-based SN is as with
+ ROHC RTP (profile 0x0001). Apart from this, unless stated explicitly
+ below, mechanisms and formats are as for ROHC UDP.
+
+5.12.1. Initialization
+
+ The static context for ROHC ESP streams can be initialized in either
+ of two ways:
+
+ 1) by using an IR packet as in section 5.7.7.1, where the profile is
+ three (3) and the static chain ends with the static part of an ESP
+ header.
+
+
+
+
+
+Bormann, et al. Standards Track [Page 133]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ 2) by reusing an existing context, where the existing static chain
+ contains the static part of an ESP header. This is done with an
+ IR-DYN packet (section 5.7.7.2) identifying profile 0x0003, where
+ the dynamic chain corresponds to the prefix of the existing static
+ chain that ends with the ESP header.
+
+ In contrast to ROHC UDP, no extra sequence number is added to the
+ dynamic part of the ESP header: the ESP sequence number is the only
+ element.
+
+ Note: 2) can be used for streams where compression has been initiated
+ under the assumption that NULL encryption was being used with ESP.
+ When it becomes obvious that an encryption algorithm other than NULL
+ is being used, the compressor may send an IR-DYN according to 2) to
+ switch to profile 0x0003 without having to send an IR packet.
+
+5.12.2. Packet types
+
+ The packet types for ROHC ESP are the same as for ROHC UDP, except
+ that the ESP sequence number is used instead of the generated
+ sequence number of ROHC UDP. The ESP header is not part of any
+ compressed list in ROHC ESP.
+
+6. Implementation issues
+
+ This document specifies mechanisms for the protocol and leaves many
+ details on the use of these mechanisms to the implementers. This
+ chapter is aimed to give guidelines, ideas and suggestions for
+ implementing the scheme.
+
+6.1. Reverse decompression
+
+ This section describes an OPTIONAL decompressor operation to reduce
+ the number of packets discarded due to an invalid context.
+
+ Once a context becomes invalid (e.g., when more consecutive packet
+ losses than expected have occurred), subsequent compressed packets
+ cannot immediately be decompressed correctly. Reverse decompression
+ aims at decompressing such packets later instead of discarding them,
+ by storing them until the context has been updated and validated and
+ then attempting decompression.
+
+ Let the sequence of stored packets be i, i + 1, ..., i + k, where i
+ is the first packet and i + k is the last packet before the context
+ was updated. The decompressor will attempt to recover the stored
+ packets in reverse order, i.e., starting with i + k, and working back
+ toward i. When a stored packet has been reconstructed, its
+ correctness is verified using its CRC. Packets not carrying a CRC
+
+
+
+Bormann, et al. Standards Track [Page 134]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ must not be delivered to upper layers. Packets where the CRC
+ succeeds are delivered to upper layers in their original order, i.e.,
+ i, i + 1, ..., i + k.
+
+ Note that this reverse decompression introduces buffering while
+ waiting for the context to be validated and thereby introduces
+ additional delay. Thus, it should be used only when some amount of
+ delay is acceptable. For example, for video packets belonging to the
+ same video frame, the delay in packet arrivals does not cause
+ presentation time delay. Delay-insensitive streaming applications
+ can also be tolerant of such delay. If the decompressor cannot
+ determine whether the application can tolerate delay, it should not
+ perform reverse decompression.
+
+ The following illustrates the decompression procedure in some detail:
+
+ 1. The decompressor stores compressed packets that cannot be
+ decompressed correctly due to an invalid context.
+
+ 2. When the decompressor has received a context updating packet and
+ the context has been validated, it proceeds to recover the last
+ packet stored. After decompression, the decompressor checks the
+ correctness of the reconstructed header using the CRC.
+
+ 3. If the CRC indicates successful decompression, the decompressor
+ stores the complete packet and attempts to decompress the
+ preceding packet. In this way, the stored packets are recovered
+ in reverse order until no compressed packets are left. For each
+ packet, the decompressor checks the correctness of the
+ decompressed headers using the header compression CRC.
+
+ 4. If the CRC indicates an incorrectly decompressed packet, the
+ reverse decompression attempt MUST be terminated and all remaining
+ uncompressed packets MUST be discarded.
+
+ 5. Finally, the decompressor forwards all the correctly decompressed
+ packets to upper layers in their original order.
+
+6.2. RTCP
+
+ RTCP is the RTP Control Protocol [RTP]. RTCP is based on periodic
+ transmission of control packets to all participants in a session,
+ using the same distribution mechanism as for data packets. Its
+ primary function is to provide feedback from the data receivers on
+ the quality of the data distribution. The feedback information may
+ be used for issues related to congestion control functions, and
+ directly useful for control of adaptive encodings.
+
+
+
+
+Bormann, et al. Standards Track [Page 135]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ In an RTP session there will be two types of packet streams: one with
+ the RTP header and application data, and one with the RTCP control
+ information. The difference between the streams at the transport
+ level is in the UDP port numbers: the RTP port number is always even,
+ the RTCP port number is that number plus one and therefore always odd
+ [RTP, section 10]. The ROHC header compressor implementation has
+ several ways at hand to handle the RTCP stream:
+
+ 1. One compressor/decompressor entity carrying both types of streams
+ on the same channel, using CIDs to distinguish between them. For
+ sending a single RTP stream together with its RTCP packets on one
+ channel, it is most efficient to set LARGE_CIDS to false, send the
+ RTP packets with the implied CID 0 and use the Add-CID mechanism
+ to send the RTCP packets.
+
+ 2. Two compressor/decompressor entities, one for RTP and another one
+ for RTCP, carrying the two types of streams on separate channels.
+ This means that they will not share the same CID number space.
+
+ RTCP headers may simply be sent uncompressed using profile 0x0000.
+ More efficiently, ROHC UDP compression (profile 0x0002) can be used.
+
+6.3. Implementation parameters and signals
+
+ A ROHC implementation may have two kinds of parameters: configuration
+ parameters that are mandatory and must be negotiated between
+ compressor and decompressor peers, and implementation parameters that
+ are optional and, when used, stipulate how a ROHC implementation is
+ to operate.
+
+ Configuration parameters are mandatory and must be negotiated between
+ compressor and decompressor, so that they have the same values at
+ both compressor and decompressor, see section 5.1.1.
+
+ Implementation parameters make it possible for an external entity to
+ stipulate how an implementation of a ROHC compressor or decompressor
+ should operate. Implementation parameters have local significance,
+ are optional to use and are thus not necessary to negotiate between
+ compressor and decompressor. Note that this does not preclude
+ signaling or negotiating implementation parameters using lower layer
+ functionality in order to set the way a ROHC implementation should
+ operate. Some implementation parameters are valid only at either of
+ compressor or decompressor. Implementation parameters may further be
+ divided into parameters that allow an external entity to describe the
+ way the implementation should operate and parameters that allow an
+ external entity to trigger a specific event, i.e., signals.
+
+
+
+
+
+Bormann, et al. Standards Track [Page 136]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+6.3.1. ROHC implementation parameters at compressor
+
+ CONTEXT_REINITIALIZATION -- signal
+ This parameter triggers a reinitialization of the entire context at
+ the decompressor, both the static and the dynamic part. The
+ compressor MUST, when CONTEXT_REINITIALIZATION is triggered, back off
+ to the IR state and fully reinitialize the context by sending IR
+ packets with both the static and dynamic chains covering the entire
+ uncompressed headers until it is reasonably confident that the
+ decompressor contexts are reinitialized. The context
+ reinitialization MUST be done for all contexts at the compressor.
+ This parameter may for instance be used to do context relocation at,
+ e.g., a cellular handover that results in a change of compression
+ point in the radio access network.
+
+ NO_OF_PACKET_SIZES_ALLOWED -- value: positive integer
+ This parameter may be set by an external entity to specify the number
+ of packet sizes a ROHC implementation may use. However, the
+ parameter may be used only if PACKET_SIZES is not used by an external
+ entity. With this parameter set, the ROHC implementation at the
+ compressor MUST NOT use more different packet sizes than the value
+ this parameter stipulates. The ROHC implementation must itself be
+ able to determine which packet sizes will be used and describe these
+ to an external entity using PACKET_SIZES_USED. It should be noted
+ that one packet size might be used for several header formats, and
+ that the number of packet sizes can be reduced by employing padding
+ and segmentation.
+
+ NO_OF_PACKET_SIZES_USED _- value: positive integer
+ This parameter is set by the ROHC implementation to indicate how many
+ packet sizes it will actually use. It can be set to a large value to
+ indicate that no particular attempt is made to minimize that number.
+
+ PACKET_SIZES_ALLOWED -- value: list of positive integers (bytes)
+ This parameter, if set, governs which packet sizes in bytes may be
+ used by the ROHC implementation. Thus, packet sizes not in the set
+ of values for this parameter MUST NOT be used. Hence, an external
+ entity can mandate a ROHC implementation to produce packet sizes that
+ fit pre-configured lower layers better. If this parameter is used to
+ stipulate which packet sizes a ROHC implementation can use, the
+ following rules apply:
+
+ - A packet large enough to hold the entire IR header (both static and
+ dynamic chain) MUST be part of the set of sizes, unless MRRU is set
+ to a large enough value to allow segmentation.
+ - The packet size likely to be used most frequently in the SO state
+ SHOULD be part of the set.
+
+
+
+
+Bormann, et al. Standards Track [Page 137]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ - The packet size likely to be used most frequently in the FO state
+ SHOULD be part of the set.
+
+ PACKET_SIZES_USED -- values: set of positive integers (bytes)
+ This parameter describes which packet sizes a ROHC implementation
+ uses if NO_OF_PACKET_SIZES_ALLOWED or PACKET_SIZES_ALLOWED is used by
+ an external entity to stipulate how many packet sizes a ROHC
+ implementation should use. The information about used packet sizes
+ (bytes) in this parameter, may then be used to configure lower
+ layers.
+
+ PAYLOAD_SIZES -_ values: set of positive integer values (bytes)
+ This parameter is set by an external entity that wants to make use of
+ the PACKET_SIZES_USED parameter to indicate which payload sizes can
+ be expected.
+
+ When a ROHC implementation has a limited set of allowed packet sizes,
+ and the most preferable header format has a size that is not part of
+ the set, it has the following options:
+
+ - Choose the next larger header format from the allowed set. This is
+ probably the most efficient choice.
+ - Use the most preferable header format as if there were no
+ restrictions on size, and then add padding octets to complete a
+ packet of the next larger size in the allowed set.
+ - Use segmentation to fragment the packet into pieces that would make
+ up packets of sizes that are permissible (possibly after the
+ addition of padding to the last segment).
+
+ It should be noted that even if the two last parameters introduce the
+ possibility of restricting the number of packet sizes used, such
+ restrictions will have a negative impact on compression performance.
+
+6.3.2. ROHC implementation parameters at decompressor
+
+ MODE -- values: [U-mode, O-mode, R-mode]
+ This parameter triggers a mode transition using the mechanism
+ described in chapter 5 when the parameter changes value, i.e., to U-
+ mode (Unidirectional mode), O-mode (Bidirectional Optimistic mode) or
+ R-mode (Bidirectional Reliable mode). The mode transition is made
+ from the current mode to the new mode as signaled by the
+ implementation parameter. For example, if the current mode is
+ Bidirectional Optimistic mode, MODE should have the value O-mode. If
+ the MODE is changed to R-mode, a mode transition MUST be made from
+ Bidirectional Optimistic mode to Bidirectional Reliable mode. MODE
+ should not only serve as a trigger for mode transitions, but also
+ make it visible which mode ROHC operates in.
+
+
+
+
+Bormann, et al. Standards Track [Page 138]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ CLOCK_RESOLUTION -- value: nonnegative integer
+ This parameter indicates the system clock resolution in units of
+ milliseconds. A zero (0) value means that there is no clock
+ available. If nonzero, this parameter allows the decompressor to use
+ timer-based TS compression (section 4.5.4) and SN wraparound
+ detection (section 5.3.2.2.4). In this case, its specific value is
+ also significant for correctness of the algorithms.
+
+ REVERSE_DECOMPRESSION_DEPTH -- value: nonnegative integer
+ This parameter determines whether reverse decompression as described
+ in section 6.1 should be used or not, and if used, to what extent.
+ The value indicates the maximum number of packets that can be
+ buffered, and thus possibly be reverse decompressed by the
+ decompressor. A zero (0) value means that reverse decompression MUST
+ NOT be used.
+
+6.4. Handling of resource limitations at the decompressor
+
+ In a point-to-point link, the two nodes can agree on the number of
+ compressed sessions they are prepared to support for this link. It
+ may, however, not be possible for the decompressor to accurately
+ predict when it will run out of resources. ROHC allows the
+ negotiated number of contexts to be larger than could be accommodated
+ in the worst case. Then, as context resources are consumed, an
+ attempt to set up a new context may be rejected by the decompressor,
+ using the REJECT option of the feedback payload.
+
+ Upon reception of a REJECT option, the compressor SHOULD wait for a
+ while before attempting to compress additional streams destined for
+ the rejecting node.
+
+6.5. Implementation structures
+
+ This section provides some explanatory material on data structures
+ that a ROHC implementation will have to maintain in one form or
+ another. It is not intended to constrain the implementations.
+
+6.5.1. Compressor context
+
+ The compressor context consists of a static part and a dynamic part.
+ The content of the static part is the same as the static chain
+ defined in section 5.7.7. The dynamic part consists of multiple
+ elements which can be categorized into four types.
+
+ a) Sliding Window (SW)
+ b) Translation Table (TT)
+ c) Flag
+ d) Field
+
+
+
+Bormann, et al. Standards Track [Page 139]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ These elements may be common to all modes or mode specific. The
+ following table summarizes all these elements.
+
+ +--------+---------------------------+-------------+----------------+
+ | | Common to | Specific to | Specific to |
+ | | all modes | R-mode | U/O-mode |
+ +--------+---------------------------+-------------+----------------+
+ | SWs | GSW | R_CSW | UO_CSW |
+ | | | R_IESW | UO_IESW |
+ +--------+---------------------------+-------------+----------------+
+ | TTs | | R_CTT | UO_CTT |
+ | | | R_IETT | UO_IETT |
+ +--------+---------------------------+-------------+----------------+
+ | Flags | UDP Chksum | | ACKED |
+ | | TSS, TIS | | |
+ | | RND, RND2 | | |
+ | | NBO, NBO2 | | |
+ +--------+---------------------------+-------------+----------------+
+ | Fields | Profile | | CSRC_REF_ID |
+ | | C_MODE | | CSRC_GEN_ID |
+ | | C_STATE | | CSRC_GEN_COUNT |
+ | | C_TRANS | | IPEH_REF_ID |
+ | | TS_STRIDE (if TSS = 1) | | IPEH_GEN_ID |
+ | | TS_OFFSET (if TSS = 1) | | IPEH_GEN_COUNT |
+ | | TIME_STRIDE (if TIS = 1) | | |
+ | | CURR_TIME (if TIS = 1) | | |
+ | | MAX_JITTER_CD (if TIS = 1)| | |
+ | | LONGEST_LOSS_EVENT(O) | | |
+ | | CLOCK_RESOLUTION(O) | | |
+ | | MAX_JITTER(O) | | |
+ +--------+---------------------------+-------------+----------------+
+
+ 1) GSW: Generic W_LSB Sliding Window
+
+ Each element in GSW consists of all the dynamic fields in the
+ dynamic chain (defined in section 5.7.7) plus the fields specified
+ in a) but excluding the fields specified in b).
+
+ a) Packet Arrival Time (if TIS = 1)
+ Scaled RTP Time Stamp (if TSS = 1) (optional)
+ Offset_i (if RND = 0) (optional)
+
+ b) UDP Checksum, TS Stride, CSRC list, IPv6 Extension Headers
+
+ 2) R_CSW: CSRC Sliding Window in R-mode
+
+ R_IESW: IPv6 Extension Header Sliding Window in R-mode
+
+
+
+
+Bormann, et al. Standards Track [Page 140]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ UO_CSW: CSRC Sliding Window in U/O-mode
+
+ UO_IESW: IPv6 Extension Header Sliding Window in U/O-mode
+
+ Each element in R_CSW, R_IESW, UO_CSW and UO_IESW is defined in
+ section 6.5.3.
+
+ 3) R_CTT: CSRC Translation Table in R-mode
+
+ R_IETT: IPv6 Extension Header Translation Table in U/O-mode
+
+ UO_CTT: CSRC Translation Table in U/O-mode
+
+ UO_IETT: IPv6 Extension Header Translation Table in U/O-mode
+
+ Each element in R_CTT and R_IETT is defined in section 5.8.1.1.
+ Each element in UO_CTT and UO_IETT is defined in section 5.8.1.2.
+
+ 4) ACKED: Indicates whether or not the decompressor has ever acked
+
+ 5) CURR_TIME: The current time value (used for context relocation
+ when timer-based timestamp compression is used)
+
+ 6) All the other flags and fields are defined elsewhere in the ROHC
+ document.
+
+6.5.2. Decompressor context
+
+ The decompressor context consists of a static part and a dynamic
+ part. The content of the static part is the same as the static chain
+ defined in section 5.7.7. The dynamic part consists of multiple
+ elements, one of which is the nonstatic reference header that
+ includes all the nonstatic fields. These nonstatic fields are the
+ fields in the dynamic chain defined in section 5.7.7, excluding UDP
+ Checksum and TS_Stride. All the remaining elements can be
+ categorized into four types:
+
+ a) Sliding Window (SW)
+ b) Translation Table (TT)
+ d) Flag
+ e) Field
+
+ These elements may be mode specific or common to all modes. The
+ following table summarizes all these elements.
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 141]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ +--------+---------------------------+-------------+----------------+
+ | | Common to | Specific to | Specific to |
+ | | all modes | R-mode | U/O-mode |
+ +--------+---------------------------+-------------+----------------+
+ | SWs | | R_CSW | UO_CSW |
+ | | | R_IESW | UO_IESW |
+ +--------+---------------------------+-------------+----------------+
+ | TTs | | R_CTT | UO_CTT |
+ | | | R_IETT | UO_IETT |
+ +--------+---------------------------+-------------+----------------+
+ | Flags | UDP Checksum | | ACKED |
+ | | TSS, TIS | | |
+ | | RND, RND2 | | |
+ | | NBO, NBO2 | | |
+ +--------+---------------------------+-------------+----------------+
+ | Fields | Profile | | CSRC_GEN_ID |
+ | | D_MODE | | IPEH_GEN_ID |
+ | | D_STATE | | PRE_SN_V_REF |
+ | | D_TRANS | | |
+ | | TS_STRIDE (if TSS = 1) | | |
+ | | TS_OFFSET (if TSS = 1) | | |
+ | | TIME_STRIDE (if TIS = 1) | | |
+ | | PKT_ARR_TIME (if TIS = 1) | | |
+ | | LONGEST_LOSS_EVENT(O) | | |
+ | | CLOCK_RESOLUTION(O) | | |
+ | | MAX_JITTER(O) | | |
+ +--------+---------------------------+-------------+----------------+
+
+ 1) ACKED: Indicates whether or not ACK has ever been sent.
+
+ 2) PKT_ARR_TIME: The arrival time of the packet that most recently
+ decompressed and verified using CRC.
+
+ PRE_SN_V_REF: The sequence number of the packet verified before
+ the most recently verified packet.
+
+ CSRC_GEN_ID: The CSRC gen_id of the most recently received packet.
+
+ IPEH_GEN_ID: The IPv6 Extension Header gen_id of the most recently
+ received packet.
+
+ 3) The remaining elements are as defined in the compressor context.
+
+6.5.3. List compression: Sliding windows in R-mode and U/O-mode
+
+ In R-mode list compression (see section 5.8.2.1), each entry in the
+ sliding window, both at the compressor side and at the decompressor
+ side, has the following structure:
+
+
+
+Bormann, et al. Standards Track [Page 142]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ +---------------------+--------+------------+
+ | RTP Sequence Number | icount | index list |
+ +---------------------+--------+------------+
+
+ The table index list contains a list of index. Each of these index
+ corresponds to the item in the original list carried in the packet
+ identified by the RTP Sequence Number. The mapping between the index
+ and the item is identified in the translation table. The icount
+ field carries the number of index in the following index list.
+
+ In U/O-mode list compression, each entry in the sliding window at
+ both the compressor side and decompressor side has the following
+ structure.
+
+ +--------+--------+------------+
+ | Gen_id | icount | index list |
+ +--------+--------+------------+
+
+ The icount and index list fields are the same as defined in R-mode.
+ Instead of using the RTP Sequence Number to identify each entry, the
+ Gen_id is included in the sliding window in U/O-mode.
+
+7. Security Considerations
+
+ Because encryption eliminates the redundancy that header compression
+ schemes try to exploit, there is some inducement to forego encryption
+ of headers in order to enable operation over low-bandwidth links.
+ However, for those cases where encryption of data (and not headers)
+ is sufficient, RTP does specify an alternative encryption method in
+ which only the RTP payload is encrypted and the headers are left in
+ the clear. That would still allow header compression to be applied.
+
+ ROHC compression is transparent with regard to the RTP Sequence
+ Number and RTP Timestamp fields, so the values of those fields can be
+ used as the basis of payload encryption schemes (e.g., for
+ computation of an initialization vector).
+
+ A malfunctioning or malicious header compressor could cause the
+ header decompressor to reconstitute packets that do not match the
+ original packets but still have valid IP, UDP and RTP headers and
+ possibly also valid UDP checksums. Such corruption may be detected
+ with end-to-end authentication and integrity mechanisms which will
+ not be affected by the compression. Moreover, this header
+ compression scheme uses an internal checksum for verification of
+ reconstructed headers. This reduces the probability of producing
+ decompressed headers not matching the original ones without this
+ being noticed.
+
+
+
+
+Bormann, et al. Standards Track [Page 143]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ Denial-of-service attacks are possible if an intruder can introduce
+ (for example) bogus STATIC, DYNAMIC or FEEDBACK packets onto the link
+ and thereby cause compression efficiency to be reduced. However, an
+ intruder having the ability to inject arbitrary packets at the link
+ layer in this manner raises additional security issues that dwarf
+ those related to the use of header compression.
+
+8. IANA Considerations
+
+ The ROHC profile identifier is a non-negative integer. In many
+ negotiation protocols, it will be represented as a 16-bit value. Due
+ to the way the profile identifier is abbreviated in ROHC packets, the
+ 8 least significant bits of the profile identifier have a special
+ significance: Two profile identifiers with identical 8 LSBs should be
+ assigned only if the higher-numbered one is intended to supersede the
+ lower-numbered one. To highlight this relationship, profile
+ identifiers should be given in hexadecimal (as in 0x1234, which would
+ for example supersede 0x0A34).
+
+ Following the policies outlined in [IANA-CONSIDERATIONS], the IANA
+ policy for assigning new values for the profile 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. In the 8 LSBs, 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 LSB value 255 is reserved for
+ future extensibility of the present specification.
+
+ The following profile identifiers are already allocated:
+
+ Profile Document Usage
+ identifier
+
+ 0x0000 RFCthis ROHC uncompressed
+ 0x0001 RFCthis ROHC RTP
+ 0x0002 RFCthis ROHC UDP
+ 0x0003 RFCthis ROHC ESP
+
+
+
+
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 144]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+9. Acknowledgments
+
+ Earlier header compression schemes described in [CJHC], [IPHC], and
+ [CRTP] have been important sources of ideas and knowledge.
+
+ The editor would like to extend his warmest thanks to Mikael
+ Degermark, who actually did a lot of the editing work, and Peter
+ Eriksson, who made a copy editing pass through the document,
+ significantly increasing its editorial consistency. Of course, all
+ remaining editorial problems have then been inserted by the editor.
+
+ Thanks to Andreas Jonsson (Lulea University), who supported this work
+ by his study of header field change patterns.
+
+ Finally, this work would not have succeeded without the continual
+ advice in navigating the IETF standards track, garnished with both
+ editorial and technical comments, from the IETF transport area
+ directors, Allison Mankin and Scott Bradner.
+
+10. Intellectual Property Right Claim Considerations
+
+ The IETF has been notified of intellectual property rights claimed in
+ regard to some or all of the specification contained in this
+ document. For more information consult the online list of claimed
+ rights.
+
+ The IETF takes no position regarding the validity or scope of any
+ intellectual property or other rights that might be claimed to
+ pertain to the implementation or use of the technology described in
+ this document or the extent to which any license under such rights
+ might or might not be available; neither does it represent that it
+ has made any effort to identify any such rights. Information on the
+ IETF's procedures with respect to rights in standards-track and
+ standards-related documentation can be found in BCP-11. Copies of
+ claims of rights made available for publication and any assurances of
+ licenses to be made available, or the result of an attempt made to
+ obtain a general license or permission for the use of such
+ proprietary rights by implementors or users of this specification can
+ be obtained from the IETF Secretariat.
+
+ The IETF invites any interested party to bring to its attention any
+ copyrights, patents or patent applications, or other proprietary
+ rights which may cover technology that may be required to practice
+ this standard. Please address the information to the IETF Executive
+ Director.
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 145]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+11. References
+
+11.1. Normative References
+
+ [UDP] Postel, J., "User Datagram Protocol", STD 6,
+ RFC 768, August 1980.
+
+ [IPv4] Postel, J., "Internet Protocol", STD 5, RFC
+ 791, September 1981.
+
+ [IPv6] Deering, S. and R. Hinden, "Internet Protocol,
+ Version 6 (IPv6) Specification", RFC 2460,
+ December 1998.
+
+ [RTP] Schulzrinne, H., Casner, S., Frederick, R. and
+ V. Jacobson, "RTP: A Transport Protocol for
+ Real-Time Applications", RFC 1889, January
+ 1996.
+
+ [HDLC] Simpson, W., "PPP in HDLC-like framing", STD
+ 51, RFC 1662, July 1994.
+
+ [ESP] Kent, S. and R. Atkinson, "IP Encapsulating
+ Security Payload", RFC 2406, November 1998.
+
+ [NULL] Glenn, R. and S. Kent, "The NULL Encryption
+ Algorithm and Its Use With Ipsec", RFC 2410,
+ November 1998.
+
+ [AH] Kent, S. and R. Atkinson, "IP Authentication
+ Header", RFC 2402, November 1998.
+
+ [MINE] Perkins, C., "Minimal Encapsulation within IP",
+ RFC 2004, October 1996.
+
+ [GRE1] Farinacci, D., Li, T., Hanks, S., Meyer, D. and
+ P. Traina, "Generic Routing Encapsulation
+ (GRE)", RFC 2784, March 2000.
+
+ [GRE2] Dommety, G., "Key and Sequence Number
+ Extensions to GRE", RFC 2890, August 2000.
+
+ [ASSIGNED] Reynolds, J. and J. Postel, "Assigned Numbers",
+ STD 2, RFC 1700, October 1994.
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 146]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+11.2. Informative References
+
+ [VJHC] Jacobson, V., "Compressing TCP/IP Headers for
+ Low-Speed Serial Links", RFC 1144, February
+ 1990.
+
+ [IPHC] Degermark, M., Nordgren, B. and S. Pink, "IP
+ Header Compression", RFC 2507, February 1999.
+
+ [CRTP] Casner, S. and V. Jacobson, "Compressing
+ IP/UDP/RTP Headers for Low-Speed Serial Links",
+ RFC 2508, February 1999.
+
+ [CRTPC] Degermark, M., Hannu, H., Jonsson, L.E.,
+ Svanbro, K., "Evaluation of CRTP Performance
+ over Cellular Radio Networks", IEEE Personal
+ Communication Magazine, Volume 7, number 4, pp.
+ 20-25, August 2000.
+
+ [REQ] Degermark, M., "Requirements for robust
+ IP/UDP/RTP header compression", RFC 3096, June
+ 2001.
+
+ [LLG] Svanbro, K., "Lower Layer Guidelines for Robust
+ RTP/UDP/IP Header Compression", Work in
+ Progress.
+
+ [IANA-CONSIDERATIONS] Alvestrand, H. and T. Narten, "Guidelines for
+ Writing an IANA Considerations Section in
+ RFCs", BCP 26, RFC 2434, October 1998.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 147]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+12. Authors' Addresses
+
+ Carsten Bormann, Editor
+ Universitaet Bremen TZI
+ Postfach 330440
+ D-28334 Bremen, Germany
+
+ Phone: +49 421 218 7024
+ Fax: +49 421 218 7000
+ EMail: cabo@tzi.org
+
+
+ Carsten Burmeister
+ Panasonic European Laboratories GmbH
+ Monzastr. 4c
+ 63225 Langen, Germany
+
+ Phone: +49-6103-766-263
+ Fax: +49-6103-766-166
+ EMail: burmeister@panasonic.de
+
+
+ Mikael Degermark
+ The University of Arizona
+ Dept of Computer Science
+ P.O. Box 210077
+ Tucson, AZ 85721-0077, USA
+
+ Phone: +1 520 621-3498
+ Fax: +1 520 621-4642
+ EMail: micke@cs.arizona.edu
+
+
+ Hideaki Fukushima
+ Matsushita Electric Industrial Co.,
+ Ltd006, Kadoma, Kadoma City,
+ Osaka, Japan
+
+ Phone: +81-6-6900-9192
+ Fax: +81-6-6900-9193
+ EMail: fukusima@isl.mei.co.jp
+
+
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 148]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ Hans Hannu
+ Box 920
+ Ericsson Erisoft AB
+ SE-971 28 Lulea, Sweden
+
+ Phone: +46 920 20 21 84
+ Fax: +46 920 20 20 99
+ EMail: hans.hannu@ericsson.com
+
+
+ Lars-Erik Jonsson
+ Box 920
+ Ericsson Erisoft AB
+ SE-971 28 Lulea, Sweden
+
+ Phone: +46 920 20 21 07
+ Fax: +46 920 20 20 99
+ EMail: lars-erik.jonsson@ericsson.com
+
+
+ Rolf Hakenberg
+ Panasonic European Laboratories GmbH
+ Monzastr. 4c
+ 63225 Langen, Germany
+
+ Phone: +49-6103-766-162
+ Fax: +49-6103-766-166
+ EMail: hakenberg@panasonic.de
+
+
+ Tmima Koren
+ Cisco Systems, Inc.
+ 170 West Tasman Drive
+ San Jose, CA 95134, USA
+
+ Phone: +1 408-527-6169
+ EMail: tmima@cisco.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 149]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ Khiem Le
+ 2-700
+ Mobile Networks Laboratory
+ Nokia Research Center
+ 6000 Connection Drive
+ Irving, TX 75039, USA
+
+ Phone: +1-972-894-4882
+ Fax: +1 972 894-4589
+ EMail: khiem.le@nokia.com
+
+
+ Zhigang Liu
+ 2-700
+ Mobile Networks Laboratory
+ Nokia Research Center
+ 6000 Connection Drive
+ Irving, TX 75039, USA
+
+ Phone: +1 972 894-5935
+ Fax: +1 972 894-4589
+ EMail: zhigang.liu@nokia.com
+
+
+ Anton Martensson
+ Ericsson Radio Systems AB
+ Torshamnsgatan 23
+ SE-164 80 Stockholm, Sweden
+
+ Phone: +46 8 404 3881
+ Fax: +46 8 757 5550
+ EMail: anton.martensson@era.ericsson.se
+
+
+ Akihiro Miyazaki
+ Matsushita Electric Industrial Co., Ltd
+ 1006, Kadoma, Kadoma City, Osaka, Japan
+
+ Phone: +81-6-6900-9192
+ Fax: +81-6-6900-9193
+ EMail: akihiro@isl.mei.co.jp
+
+
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 150]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ Krister Svanbro
+ Box 920
+ Ericsson Erisoft AB
+ SE-971 28 Lulea, Sweden
+
+ Phone: +46 920 20 20 77
+ Fax: +46 920 20 20 99
+ EMail: krister.svanbro@ericsson.com
+
+
+ Thomas Wiebke
+ Panasonic European Laboratories GmbH
+ Monzastr. 4c
+ 63225 Langen, Germany
+
+ Phone: +49-6103-766-161
+ Fax: +49-6103-766-166
+ EMail: wiebke@panasonic.de
+
+
+ Takeshi Yoshimura
+ NTT DoCoMo, Inc.
+ 3-5, Hikarinooka
+ Yokosuka, Kanagawa, 239-8536, Japan
+
+ Phone: +81-468-40-3515
+ Fax: +81-468-40-3788
+ EMail: yoshi@spg.yrp.nttdocomo.co.jp
+
+
+ Haihong Zheng
+ 2-700
+ Mobile Networks Laboratory
+ Nokia Research Center
+ 6000 Connection Drive
+ Irving, TX 75039, USA
+
+ Phone: +1 972 894-4232
+ Fax: +1 972 894-4589
+ EMail: haihong.zheng@nokia.com
+
+
+
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 151]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+Appendix A. Detailed classification of header fields
+
+ Header compression is possible thanks to the fact that most header
+ fields do not vary randomly from packet to packet. Many of the
+ fields exhibit static behavior or change in a more or less
+ predictable way. When designing a header compression scheme, it is
+ of fundamental importance to understand the behavior of the fields in
+ detail.
+
+ In this appendix, all IP, UDP and RTP header fields are classified
+ and analyzed in two steps. First, we have a general classification
+ in A.1 where the fields are classified on the basis of stable
+ knowledge and assumptions. The general classification does not take
+ into account the change characteristics of changing fields because
+ those will vary more or less depending on the implementation and on
+ the application used. A less stable but more detailed analysis of
+ the change characteristics is then done in A.2. Finally, A.3
+ summarizes this appendix with conclusions about how the various
+ header fields should be handled by the header compression scheme to
+ optimize compression and functionality.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 152]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+A.1. General classification
+
+ At a general level, the header fields are separated into 5 classes:
+
+ INFERRED These fields contain values that can be inferred from
+ other values, for example the size of the frame
+ carrying the packet, and thus do not have to be
+ handled at all by the compression scheme.
+
+ STATIC These fields are expected to be constant throughout
+ the lifetime of the packet stream. Static information
+ must in some way be communicated once.
+
+ STATIC-DEF STATIC fields whose values define a packet stream.
+ They are in general handled as STATIC.
+
+ STATIC-KNOWN These STATIC fields are expected to have well-known
+ values and therefore do not need to be communicated
+ at all.
+
+ CHANGING These fields are expected to vary in some way:
+ randomly, within a limited value set or range, or in
+ some other manner.
+
+
+ In this section, each of the IP, UDP and RTP header fields is
+ assigned to one of these classes. For all fields except those
+ classified as CHANGING, the motives for the classification are also
+ stated. In section A.2, CHANGING fields are further examined and
+ classified on the basis of their expected change behavior.
+
+A.1.1. IPv6 header fields
+
+ +---------------------+-------------+----------------+
+ | Field | Size (bits) | Class |
+ +---------------------+-------------+----------------+
+ | Version | 4 | STATIC |
+ | Traffic Class | 8 | CHANGING |
+ | Flow Label | 20 | STATIC-DEF |
+ | Payload Length | 16 | INFERRED |
+ | Next Header | 8 | STATIC |
+ | Hop Limit | 8 | CHANGING |
+ | Source Address | 128 | STATIC-DEF |
+ | Destination Address | 128 | STATIC-DEF |
+ +---------------------+-------------+----------------+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 153]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ Version
+
+ The version field states which IP version is used. Packets with
+ different values in this field must be handled by different IP
+ stacks. All packets of a packet stream must therefore be of the
+ same IP version. Accordingly, the field is classified as STATIC.
+
+ Flow Label
+
+ This field may be used to identify packets belonging to a specific
+ packet stream. If not used, the value should be set to zero.
+ Otherwise, all packets belonging to the same stream must have the
+ same value in this field, it being one of the fields that define
+ the stream. The field is therefore classified as STATIC-DEF.
+
+ Payload Length
+
+ Information about packet length (and, consequently, payload
+ length) is expected to be provided by the link layer. The field
+ is therefore classified as INFERRED.
+
+ Next Header
+
+ This field will usually have the same value in all packets of a
+ packet stream. It encodes the type of the subsequent header.
+ Only when extension headers are sometimes present and sometimes
+ not, will the field change its value during the lifetime of the
+ stream. The field is therefore classified as STATIC.
+
+ Source and Destination addresses
+
+ These fields are part of the definition of a stream and must thus
+ be constant for all packets in the stream. The fields are
+ therefore classified as STATIC-DEF.
+
+ Total size of the fields in each class:
+
+ +--------------+--------------+
+ | Class | Size (octets)|
+ +--------------+--------------+
+ | INFERRED | 2 |
+ | STATIC | 1.5 |
+ | STATIC-DEF | 34.5 |
+ | CHANGING | 2 |
+ +--------------+--------------+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 154]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+A.1.2. IPv4 header fields
+
+ +---------------------+-------------+----------------+
+ | Field | Size (bits) | Class |
+ +---------------------+-------------+----------------+
+ | Version | 4 | STATIC |
+ | Header Length | 4 | STATIC-KNOWN |
+ | Type Of Service | 8 | CHANGING |
+ | Packet Length | 16 | INFERRED |
+ | Identification | 16 | CHANGING |
+ | Reserved flag | 1 | STATIC-KNOWN |
+ | Don't Fragment flag | 1 | STATIC |
+ | More Fragments flag | 1 | STATIC-KNOWN |
+ | Fragment Offset | 13 | STATIC-KNOWN |
+ | Time To Live | 8 | CHANGING |
+ | Protocol | 8 | STATIC |
+ | Header Checksum | 16 | INFERRED |
+ | Source Address | 32 | STATIC-DEF |
+ | Destination Address | 32 | STATIC-DEF |
+ +---------------------+-------------+----------------+
+
+ Version
+
+ The version field states which IP version is used. Packets with
+ different values in this field must be handled by different IP
+ stacks. All packets of a packet stream must therefore be of the
+ same IP version. Accordingly, the field is classified as STATIC.
+
+ Header Length
+
+ As long no options are present in the IP header, the header length
+ is constant and well known. If there are options, the fields
+ would be STATIC, but it is assumed here that there are no options.
+ The field is therefore classified as STATIC-KNOWN.
+
+ Packet Length
+
+ Information about packet length is expected to be provided by the
+ link layer. The field is therefore classified as INFERRED.
+
+ Flags
+
+ The Reserved flag must be set to zero and is therefore classified
+ as STATIC-KNOWN. The Don't Fragment (DF) flag will be constant
+ for all packets in a stream and is therefore classified as STATIC.
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 155]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ Finally, the More Fragments (MF) flag is expected to be zero
+ because fragmentation is NOT expected, due to the small packet
+ size expected. The More Fragments flag is therefore classified as
+ STATIC-KNOWN.
+
+ Fragment Offset
+
+ Under the assumption that no fragmentation occurs, the fragment
+ offset is always zero. The field is therefore classified as
+ STATIC-KNOWN.
+
+ Protocol
+
+ This field will usually have the same value in all packets of a
+ packet stream. It encodes the type of the subsequent header.
+ Only when extension headers are sometimes present and sometimes
+ not, will the field change its value during the lifetime of a
+ stream. The field is therefore classified as STATIC.
+
+ Header Checksum
+
+ The header checksum protects individual hops from processing a
+ corrupted header. When almost all IP header information is
+ compressed away, there is no point in having this additional
+ checksum; instead it can be regenerated at the decompressor side.
+ The field is therefore classified as INFERRED.
+
+ Source and Destination addresses
+
+ These fields are part of the definition of a stream and must thus
+ be constant for all packets in the stream. The fields are
+ therefore classified as STATIC-DEF.
+
+ Total size of the fields in each class:
+
+ +--------------+----------------+
+ | Class | Size (octets) |
+ +--------------+----------------+
+ | INFERRED | 4 |
+ | STATIC | 1 oct + 5 bits |
+ | STATIC-DEF | 8 |
+ | STATIC-KNOWN | 2 oct + 3 bits |
+ | CHANGING | 4 |
+ +--------------+----------------+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 156]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+A.1.3. UDP header fields
+
+ +------------------+-------------+-------------+
+ | Field | Size (bits) | Class |
+ +------------------+-------------+-------------+
+ | Source Port | 16 | STATIC-DEF |
+ | Destination Port | 16 | STATIC-DEF |
+ | Length | 16 | INFERRED |
+ | Checksum | 16 | CHANGING |
+ +------------------+-------------+-------------+
+
+ Source and Destination ports
+
+ These fields are part of the definition of a stream and must thus
+ be constant for all packets in the stream. The fields are
+ therefore classified as STATIC-DEF.
+
+ Length
+
+ This field is redundant and is therefore classified as INFERRED.
+
+ Total size of the fields in each class:
+
+ +------------+---------------+
+ | Class | Size (octets) |
+ +------------+---------------+
+ | INFERRED | 2 |
+ | STATIC-DEF | 4 |
+ | CHANGING | 2 |
+ +------------+---------------+
+
+A.1.4. RTP header fields
+
+ +-----------------+-------------+----------------+
+ | Field | Size (bits) | Class |
+ +-----------------+-------------+----------------+
+ | Version | 2 | STATIC-KNOWN |
+ | Padding | 1 | STATIC |
+ | Extension | 1 | STATIC |
+ | CSRC Counter | 4 | CHANGING |
+ | Marker | 1 | CHANGING |
+ | Payload Type | 7 | CHANGING |
+ | Sequence Number | 16 | CHANGING |
+ | Timestamp | 32 | CHANGING |
+ | SSRC | 32 | STATIC-DEF |
+ | CSRC | 0(-480) | CHANGING |
+ +-----------------+-------------+----------------+
+
+
+
+
+Bormann, et al. Standards Track [Page 157]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ Version
+
+ Only one working RTP version exists, namely version 2. The field
+ is therefore classified as STATIC-KNOWN.
+
+ Padding
+
+ The use of this field is application-dependent, but when payload
+ padding is used it is likely to be present in all packets. The
+ field is therefore classified as STATIC.
+
+ Extension
+
+ If RTP extensions are used by the application, these extensions
+ are likely to be present in all packets (but the use of extensions
+ is very uncommon). However, for safety's sake this field is
+ classified as STATIC and not STATIC-KNOWN.
+
+ SSRC
+
+ This field is part of the definition of a stream and must thus be
+ constant for all packets in the stream. The field is therefore
+ classified as STATIC-DEF.
+
+ Total size of the fields in each class:
+
+ +--------------+---------------+
+ | Class | Size (octets) |
+ +--------------+---------------+
+ | STATIC | 2 bits |
+ | STATIC-DEF | 4 |
+ | STATIC-KNOWN | 2 bits |
+ | CHANGING | 7.5(-67.5) |
+ +--------------+---------------+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 158]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+A.1.5. Summary for IP/UDP/RTP
+
+ Summarizing this for IP/UDP/RTP one obtains
+
+ +----------------+----------------+----------------+
+ | Class \ IP ver | IPv6 (octets) | IPv4 (octets) |
+ +----------------+----------------+----------------+
+ | INFERRED | 4 | 6 |
+ | STATIC | 1 oct + 6 bits | 1 oct + 7 bits |
+ | STATIC-DEF | 42.5 | 16 |
+ | STATIC-KNOWN | 2 bits | 2 oct + 5 bits |
+ | CHANGING | 11.5(-71.5) | 13.5(-73.5) |
+ +----------------+----------------+----------------+
+ | Total | 60(-120) | 40(-100) |
+ +----------------+----------------+----------------+
+
+A.2. Analysis of change patterns of header fields
+
+ To design suitable mechanisms for efficient compression of all header
+ fields, their change patterns must be analyzed. For this reason, an
+ extended classification is done based on the general classification
+ in A.1, considering the fields which were labeled CHANGING in that
+ classification. Different applications will use the fields in
+ different ways, which may affect their behavior. For the fields
+ whose behavior is variable, typical behavior for conversational audio
+ and video will be discussed.
+
+ The CHANGING fields are separated into five different subclasses:
+
+ STATIC These are fields that were classified as
+ CHANGING on a general basis, but are classified
+ as STATIC here due to certain additional
+ assumptions.
+
+ SEMISTATIC These fields are STATIC most of the time.
+ However, occasionally the value changes but
+ reverts to its original value after a known
+ number of packets.
+
+ RARELY-CHANGING (RC) These are fields that change their values
+ occasionally and then keep their new values.
+
+ ALTERNATING These fields alternate between a small number
+ of different values.
+
+ IRREGULAR These, finally, are the fields for which no
+ useful change pattern can be identified.
+
+
+
+
+Bormann, et al. Standards Track [Page 159]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ To further expand the classification possibilities without increasing
+ complexity, the classification can be done either according to the
+ values of the field and/or according to the values of the deltas for
+ the field.
+
+ When the classification is done, other details are also stated
+ regarding possible additional knowledge about the field values and/or
+ field deltas, according to the classification. For fields classified
+ as STATIC or SEMISTATIC, the case could be that the value of the
+ field is not only STATIC but also well KNOWN a priori (two states for
+ SEMISTATIC fields). For fields with non-irregular change behavior,
+ it could be known that changes usually are within a LIMITED range
+ compared to the maximal change for the field. For other fields, the
+ values are completely UNKNOWN.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 160]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ Table A.1 classifies all the CHANGING fields on the basis of their
+ expected change patterns, especially for conversational audio and
+ video.
+
+ +------------------------+-------------+-------------+-------------+
+ | Field | Value/Delta | Class | Knowledge |
+ +========================+=============+=============+=============+
+ | Sequential | Delta | STATIC | KNOWN |
+ | -----------+-------------+-------------+-------------+
+ | IPv4 Id: Seq. jump | Delta | RC | LIMITED |
+ | -----------+-------------+-------------+-------------+
+ | Random | Value | IRREGULAR | UNKNOWN |
+ +------------------------+-------------+-------------+-------------+
+ | IP TOS / Tr. Class | Value | RC | UNKNOWN |
+ +------------------------+-------------+-------------+-------------+
+ | IP TTL / Hop Limit | Value | ALTERNATING | LIMITED |
+ +------------------------+-------------+-------------+-------------+
+ | Disabled | Value | STATIC | KNOWN |
+ | UDP Checksum: ---------+-------------+-------------+-------------+
+ | Enabled | Value | IRREGULAR | UNKNOWN |
+ +------------------------+-------------+-------------+-------------+
+ | No mix | Value | STATIC | KNOWN |
+ | RTP CSRC Count: -------+-------------+-------------+-------------+
+ | Mixed | Value | RC | LIMITED |
+ +------------------------+-------------+-------------+-------------+
+ | RTP Marker | Value | SEMISTATIC | KNOWN/KNOWN |
+ +------------------------+-------------+-------------+-------------+
+ | RTP Payload Type | Value | RC | UNKNOWN |
+ +------------------------+-------------+-------------+-------------+
+ | RTP Sequence Number | Delta | STATIC | KNOWN |
+ +------------------------+-------------+-------------+-------------+
+ | RTP Timestamp | Delta | RC | LIMITED |
+ +------------------------+-------------+-------------+-------------+
+ | No mix | - | - | - |
+ | RTP CSRC List: -------+-------------+-------------+-------------+
+ | Mixed | Value | RC | UNKNOWN |
+ +------------------------+-------------+-------------+-------------+
+
+ Table A.1 : Classification of CHANGING header fields
+
+ The following subsections discuss the various header fields in
+ detail. Note that table A.1 and the discussions below do not
+ consider changes caused by loss or reordering before the compression
+ point.
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 161]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+A.2.1. IPv4 Identification
+
+ The Identification field (IP ID) of the IPv4 header is there to
+ identify which fragments constitute a datagram when reassembling
+ fragmented datagrams. The IPv4 specification does not specify
+ exactly how this field is to be assigned values, only that each
+ packet should get an IP ID that is unique for the source-destination
+ pair and protocol for the time the datagram (or any of its fragments)
+ could be alive in the network. This means that assignment of IP ID
+ values can be done in various ways, which we have separated into
+ three classes.
+
+ Sequential jump
+
+ This is the most common assignment policy in today's IP stacks. A
+ single IP ID counter is used for all packet streams. When the
+ sender is running more than one packet stream simultaneously, the
+ IP ID can increase by more than one between packets in a stream.
+ The IP ID values will be much more predictable and require less
+ bits to transfer than random values, and the packet-to-packet
+ increment (determined by the number of active outgoing packet
+ streams and sending frequencies) will usually be limited.
+
+ Random
+
+ Some IP stacks assign IP ID values using a pseudo-random number
+ generator. There is thus no correlation between the ID values of
+ subsequent datagrams. Therefore there is no way to predict the IP
+ ID value for the next datagram. For header compression purposes,
+ this means that the IP ID field needs to be sent uncompressed
+ with each datagram, resulting in two extra octets of header. IP
+ stacks in cellular terminals SHOULD NOT use this IP ID assignment
+ policy.
+
+ Sequential
+
+ This assignment policy keeps a separate counter for each outgoing
+ packet stream and thus the IP ID value will increment by one for
+ each packet in the stream, except at wrap around. Therefore, the
+ delta value of the field is constant and well known a priori.
+ When RTP is used on top of UDP and IP, the IP ID value follows
+ the RTP Sequence Number. This assignment policy is the most
+ desirable for header compression purposes. However, its usage is
+ not as common as it perhaps should be. The reason may be that it
+ can be realized only when UDP and IP are implemented together so
+ that UDP, which separates packet streams by the Port
+ identification fields, can make IP use separate ID counters for
+ each packet stream.
+
+
+
+Bormann, et al. Standards Track [Page 162]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+ In order to avoid violating [IPv4], packets sharing the same IP
+ address pair and IP protocol number cannot use the same IP ID
+ values. Therefore, implementations of sequential policies must
+ make the ID number spaces disjoint for packet streams of the same
+ IP protocol going between the same pair of nodes. This can be
+ done in a number of ways, all of which introduce occasional
+ jumps, and thus makes the policy less than perfectly sequential.
+ For header compression purposes less frequent jumps are
+ preferred.
+
+ It should be noted that the ID is an IPv4 mechanism and is therefore
+ not a problem for IPv6. For IPv4 the ID could be handled in three
+ different ways. First, we have the inefficient but reliable solution
+ where the ID field is sent as-is in all packets, increasing the
+ compressed headers by two octets. This is the best way to handle the
+ ID field if the sender uses random assignment of the ID field.
+ Second, there can be solutions with more flexible mechanisms
+ requiring less bits for the ID handling as long as sequential jump
+ assignment is used. Such solutions will probably require even more
+ bits if random assignment is used by the sender. Knowledge about the
+ sender's assignment policy could therefore be useful when choosing
+ between the two solutions above. Finally, even for IPv4, header
+ compression could be designed without any additional information for
+ the ID field included in compressed headers. To use such schemes, it
+ must be known which assignment policy for the ID field is being used
+ by the sender. That might not be possible to know, which implies
+ that the applicability of such solutions is very uncertain. However,
+ designers of IPv4 stacks for cellular terminals SHOULD use an
+ assignment policy close to sequential.
+
+A.2.2. IP Traffic-Class / Type-Of-Service
+
+ The Traffic-Class (IPv6) or Type-Of-Service (IPv4) field is expected
+ to be constant during the lifetime of a packet stream or to change
+ relatively seldom.
+
+A.2.3. IP Hop-Limit / Time-To-Live
+
+ The Hop-Limit (IPv6) or Time-To-Live (IPv4) field is expected to be
+ constant during the lifetime of a packet stream or to alternate
+ between a limited number of values due to route changes.
+
+A.2.4. UDP Checksum
+
+ The UDP checksum is optional. If disabled, its value is constantly
+ zero and could be compressed away. If enabled, its value depends on
+ the payload, which for compression purposes is equivalent to it
+ changing randomly with every packet.
+
+
+
+Bormann, et al. Standards Track [Page 163]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+A.2.5. RTP CSRC Counter
+
+ This is a counter indicating the number of CSRC items present in the
+ CSRC list. This number is expected to be almost constant on a
+ packet- to-packet basis and change by small amounts. As long as no
+ RTP mixer is used, the value of this field is zero.
+
+A.2.6. RTP Marker
+
+ For audio the marker bit should be set only in the first packet of a
+ talkspurt, while for video it should be set in the last packet of
+ every picture. This means that in both cases the RTP marker is
+ classified as SEMISTATIC with well-known values for both states.
+
+A.2.7. RTP Payload Type
+
+ Changes of the RTP payload type within a packet stream are expected
+ to be rare. Applications could adapt to congestion by changing
+ payload type and/or frame sizes, but that is not expected to happen
+ frequently.
+
+A.2.8. RTP Sequence Number
+
+ The RTP Sequence Number will be incremented by one for each packet
+ sent.
+
+A.2.9. RTP Timestamp
+
+ In the audio case:
+
+ As long as there are no pauses in the audio stream, the RTP
+ Timestamp will be incremented by a constant delta, corresponding
+ to the number of samples in the speech frame. It will thus mostly
+ follow the RTP Sequence Number. When there has been a silent
+ period and a new talkspurt begins, the timestamp will jump in
+ proportion to the length of the silent period. However, the
+ increment will probably be within a relatively limited range.
+
+ In the video case:
+
+ Between two consecutive packets, the timestamp will either be
+ unchanged or increase by a multiple of a fixed value corresponding
+ to the picture clock frequency. The timestamp can also decrease
+ by a multiple of the fixed value if B-pictures are used. The
+ delta interval, expressed as a multiple of the picture clock
+ frequency, is in most cases very limited.
+
+
+
+
+
+Bormann, et al. Standards Track [Page 164]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+A.2.10. RTP Contributing Sources (CSRC)
+
+ The participants in a session, which are identified by the CSRC
+ fields, are expected to be almost the same on a packet-to-packet
+ basis with relatively few additions and removals. As long as RTP
+ mixers are not used, no CSRC fields are present at all.
+
+A.3. Header compression strategies
+
+ This section elaborates on what has been done in previous sections.
+ On the basis of the classifications, recommendations are given on how
+ to handle the various fields in the header compression process.
+ Seven different actions are possible; these are listed together with
+ the fields to which each action applies.
+
+A.3.1. Do not send at all
+
+ The fields that have well known values a priori do not have to be
+ sent at all. These are:
+
+ - IPv6 Payload Length
+ - IPv4 Header Length
+ - IPv4 Reserved Flag
+ - IPv4 Last Fragment Flag
+ - IPv4 Fragment Offset
+
+ - UDP Checksum (if disabled)
+ - RTP Version
+
+A.3.2. Transmit only initially
+
+ The fields that are constant throughout the lifetime of the packet
+ stream have to be transmitted and correctly delivered to the
+ decompressor only once. These are:
+
+ - IP Version
+ - IP Source Address
+ - IP Destination Address
+ - IPv6 Flow Label
+ - IPv4 May Fragment Flag
+ - UDP Source Port
+ - UDP Destination Port
+ - RTP Padding Flag
+ - RTP Extension Flag
+ - RTP SSRC
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 165]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+A.3.3. Transmit initially, but be prepared to update
+
+ The fields that are changing only occasionally must be transmitted
+ initially but there must also be a way to update these fields with
+ new values if they change. These fields are:
+
+ - IPv6 Next Header
+ - IPv6 Traffic Class
+ - IPv6 Hop Limit
+ - IPv4 Protocol
+ - IPv4 Type Of Service (TOS)
+ - IPv4 Time To Live (TTL)
+ - RTP CSRC Counter
+ - RTP Payload Type
+ - RTP CSRC List
+
+ Since the values of the IPv4 Protocol and the IPv6 Next Header fields
+ are in effect linked to the type of the subsequent header, they
+ deserve special treatment when subheaders are inserted or removed.
+
+A.3.4. Be prepared to update or send as-is frequently
+
+ For fields that normally either are constant or have values deducible
+ from some other field, but that frequently diverge from that
+ behavior, there must be an efficient way to update the field value or
+ send it as-is in some packets. These fields are:
+
+ - IPv4 Identification (if not sequentially assigned)
+ - RTP Marker
+ - RTP Timestamp
+
+A.3.5. Guarantee continuous robustness
+
+ For fields that behave like a counter with a fixed delta for ALL
+ packets, the only requirement on the transmission encoding is that
+ packet losses between compressor and decompressor must be tolerable.
+ If several such fields exist, all these can be communicated together.
+ Such fields can also be used to interpret the values for fields
+ listed in the previous section. Fields that have this counter
+ behavior are:
+
+ - IPv4 Identification (if sequentially assigned)
+ - RTP Sequence Number
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 166]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+A.3.6. Transmit as-is in all packets
+
+ Fields that have completely random values for each packet must be
+ included as-is in all compressed headers. Those fields are:
+
+ - IPv4 Identification (if randomly assigned)
+ - UDP Checksum (if enabled)
+
+A.3.7. Establish and be prepared to update delta
+
+ Finally, there is a field that is usually increasing by a fixed delta
+ and is correlated to another field. For this field it would make
+ sense to make that delta part of the context state. The delta must
+ then be initiated and updated in the same way as the fields listed in
+ A.3.3. The field to which this applies is:
+
+ - RTP Timestamp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 167]
+
+RFC 3095 Robust Header Compression July 2001
+
+
+Full Copyright Statement
+
+ Copyright (C) The Internet Society (2001). All Rights Reserved.
+
+ This document and translations of it may be copied and furnished to
+ others, and derivative works that comment on or otherwise explain it
+ or assist in its implementation may be prepared, copied, published
+ and distributed, in whole or in part, without restriction of any
+ kind, provided that the above copyright notice and this paragraph are
+ included on all such copies and derivative works. However, this
+ document itself may not be modified in any way, such as by removing
+ the copyright notice or references to the Internet Society or other
+ Internet organizations, except as needed for the purpose of
+ developing Internet standards in which case the procedures for
+ copyrights defined in the Internet Standards process must be
+ followed, or as required to translate it into languages other than
+ English.
+
+ The limited permissions granted above are perpetual and will not be
+ revoked by the Internet Society or its successors or assigns.
+
+ This document and the information contained herein is provided on an
+ "AS IS" basis and 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.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Bormann, et al. Standards Track [Page 168]
+