RFC 4224 INFORMATIONAL HEADER COMPRESSION · REORDERING · ROHC

ROHC reordering: RObust Header Compression (ROHC): ROHC over Channels That Can Reorder Packets

How header compression built for in-order links can still be used on links that deliver packets out of order.

On rfc-editor.org ↗
PUBLISHED
January 2006
AUTHORS
G. Pelletier, L-E. Jonsson, K. Sandlund
STREAM
IETF
ROHC PROFILES IN SCOPE
0x0001, 0x0002, 0x0003, 0x0004, 0x0007 and 0x0008
PROFILES EXCLUDED FROM REORDERING
0x0005 and 0x0105, the link-layer assisted profiles
OFFSET P FOR THE UDP AND IP PROFILES
-1, independently of bits(SN)
OFFSET P WITH 8 BITS OF SEQUENCE NUMBER
7
ACKNOWLEDGEMENT CHECKSUM IN R-MODE
7 or 8 bit CRC
HEADER SIZE OF A CONSERVATIVE COMPRESSOR
at least 3 octets in R-mode, 4 octets in U/O-mode
DOI
10.17487/RFC4224

RFC text

Contents
Original text · RFC Editor View on rfc-editor.org ↗
Network Working Group                                       G. Pelletier
Request for Comments: 4224                                  L-E. Jonsson
Category: Informational                                      K. Sandlund
                                                                Ericsson
                                                            January 2006


                   RObust Header Compression (ROHC):
              ROHC over Channels That Can Reorder Packets

Status of This Memo

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

Copyright Notice

   Copyright (C) The Internet Society (2006).

Abstract

   RObust Header Compression (ROHC), RFC 3095, defines a framework for
   header compression, along with a number of compression protocols
   (profiles).  One operating assumption for the profiles defined in RFC
   3095 is that the channel between compressor and decompressor is
   required to maintain packet ordering.  This document discusses
   aspects of using ROHC over channels that can reorder packets.  It
   provides guidelines on how to implement existing profiles over such
   channels, as well as suggestions for the design of new profiles.

Table of Contents

   1. Introduction ....................................................3
   2. Terminology .....................................................4
   3. Applicability of This Document to ROHC Profiles .................5
      3.1. Profiles within Scope ......................................5
      3.2. Profiles with Special Considerations .......................5
      3.3. Profiles Incompatible with Reordering ......................6
   4. Background ......................................................6
      4.1. Reordering Channels ........................................6
      4.2. Robustness Principles of ROHC ..............................6
           4.2.1. Optimistic Approach (U/O-mode) ......................7
           4.2.2. Secure Reference Principle (R-mode) .................7
   5. Problem Description .............................................7
      5.1. ROHC and Reordering Channels ...............................7
           5.1.1. LSB Interpretation Interval and Reordering ..........7
           5.1.2. Reordering of Packets in R-mode .....................9
                  5.1.2.1. Updating Packets ...........................9
                  5.1.2.2. Non-Updating Packets ......................10
           5.1.3. Reordering of Packets in U/O-mode ..................10
           5.1.4. Reordering on the Feedback Channel .................11
           5.1.5. List Compression ...................................11
           5.1.6. Reordering and Mode Transitions ....................12
      5.2. Consequences of Reordering ................................13
           5.2.1. Functionality Incompatible with Reordering .........13
           5.2.2. Context Damage (Loss of Synchronization) ...........13
           5.2.3. Detected Decompression Failures (U/O/R-mode) .......13
           5.2.4. Undetected Decompression Failures (R-mode only) ....14
   6. Making ROHC Tolerant against Reordering ........................14
      6.1. Properties of ROHC Implementations ........................14
           6.1.1. Compressing Headers with Robustness against
                  Reordering .........................................14
                  6.1.1.1. Reordering and the Optimistic Approach ....15
                  6.1.1.2. Reordering and the Secure
                           Reference Principle .......................15
                  6.1.1.3. Robust Selection of Compressed Header .....15
           6.1.2. Implementing a Reordering-Tolerant Decompressor ....16
                  6.1.2.1. Decompressor Feedback Considerations ......16
                  6.1.2.2. Considerations for Local Repair
                           Mechanisms ................................17
      6.2. Specifying ROHC Profiles with Robustness against
           Reordering ................................................17
           6.2.1. Profiles with Interpretation Interval
                  Offset p = -1 ......................................17
           6.2.2. Modifying the Interpretation Interval Offset .......18
                  6.2.2.1. Example Profile for Handling Reordering ...18
                  6.2.2.2. Defining the Values of p for New
                           Profiles ..................................18

   7. Security Considerations ........................................19
   8. Acknowledgements ...............................................19
   9. Informative References .........................................19

1.  Introduction

   RObust Header Compression (ROHC), RFC 3095 [1], defines a framework
   for header compression, along with a number of compression protocols
   (profiles).  One operating assumption for the profiles defined in RFC
   3095 is that the channel between compressor and decompressor is
   required to maintain packet ordering for each compressed flow.  The
   motivation behind this assumption was that the primary candidate
   channels considered did guarantee in-order delivery of header-
   compressed packets.  This assumption made it possible to meet the
   design objectives that were on top of the requirements list at the
   time when ROHC was being designed, namely to improve the compression
   efficiency and the tolerance to packet losses.

   Since the publication of RFC 3095 in 2001, the question about ROHC
   operation over channels that do not guarantee in-order delivery has
   surfaced several times; arguments that ROHC cannot perform adequately
   over such channels have been heard.  Specifically, this has been
   raised as a weakness when compared to other header compression
   alternatives, as RFC 3095 explicitly states its inability to operate
   if in-order delivery is not guaranteed.  For those familiar with the
   details of ROHC and of other header compression schemes, it is clear
   that this is a misconception, but it can also be easily understood
   that the wording used in RFC 3095 can lead to such interpretation.

   This document discusses the various aspects of implementing ROHC over
   channels that can reorder header-compressed packets.  It explains
   different ways of implementing the profiles found in RFC 3095, as
   well as other profiles based on those profiles, over reordering
   channels.  This can be achieved either by ensuring that compressor
   implementations use compressed headers that are sufficiently robust
   to the expected possible reordering and/or by modifying decompressor
   implementations to tolerate reordered packets.  Ideas regarding how
   existing profiles could be updated and how new profiles can be
   defined to cope efficiently with reordering are also discussed.

   In some scenarios, there might be external means (such as a sequence
   number) to detect and potentially correct reordering.  That is, for
   example, the case when running compression over an IPsec
   Encapsulating Security Payload (ESP) tunnel.  With such external
   means to detect reordering, the decompressor can be modified to make
   use of the external information provided, and reordering can then be
   handled.  How to make use of external means to address reordering is,
   however, out of scope for this document.

2.  Terminology

   This document uses terminology consistent with RFC 3759 [2], and is
   in itself only informative.  Although it does discuss technical
   aspects of implementing the ROHC specifications in particular
   environments, it does not specify any new technology.

   ROHC

      The term "ROHC" herein refers to the following profiles:

         - 0x0001, 0x0002, and 0x0003 defined in RFC 3095 [1];
         - 0x0004 for compression of IP-only headers [3];
         - 0x0007 and 0x0008 for compression of UDP-Lite headers [4].

      The term "ROHC" excludes the following profiles, which are either
      not affected by reordering or have the assumption of in-order
      delivery as a fundamental requirement for their proper operation:

         - 0x0000 (uncompressed) [1];
         - 0x0005 (Link-Layer Assisted (LLA)) [5] and 0x0105
           (R-mode extension to LLA) [6];

   Reordering

      A type of transmission taking place between compressor and
      decompressor where in-order delivery of header-compressed packets
      is not guaranteed.

   Reordering channel

      A connection over which reordering, as defined above, can occur.

   Sequentially early packet

      A packet that reaches the decompressor before one or several
      packets of the same context identifier (CID) that were delayed on
      the link.  At the time of the arrival of a sequentially early
      packet, the packet(s) delayed on the link cannot be differentiated
      from lost packet(s).

   Sequentially late packet

      A packet is late within its sequence if it reaches the
      decompressor after one or several other packets belonging to the
      same CID have been received, although the sequentially late packet
      was sent from the compressor before the other packet(s).

   Updating packet

      A packet that updates the context of the decompressor, e.g., all
      packets except R-0 and R-1* in RFC 3095 [1].

   Non-updating packet

      A packet that does not update the context of the decompressor,
      e.g., only R-0 and R-1* in RFC 3095 [1].

   Change packet

      A packet that updates one or more fields of the context other than
      the fields pertaining to the functions established with respect to
      the sequence number (SN).  Specifically, it is a packet that
      updates fields other than the SN, the IPv4 identifier (IP-ID), the
      sequence number of an extension header or the RTP timestamp (TS).

3.  Applicability of This Document to ROHC Profiles

   This document addresses general reordering issues for ROHC profiles.
   The foremost objectives are to ensure that ROHC implementations do
   not forward packets with incorrectly decompressed headers to upper
   layers, as well as to limit the possible increase in the rate of
   decompression failures or in events leading to context damage, when
   compression is applied over reordering channels.

3.1.  Profiles within Scope

   The following sections outline solutions that are generally
   applicable to profiles 0x0001 (RTP), 0x0002 (UDP), and 0x0003 (ESP)
   defined in RFC 3095 [1].  Profile 0x0000 (uncompressed) is not
   affected by reordering, as the headers are sent uncompressed.  The
   solutions also apply to profiles for IP-only (0x0004) [3] and for
   UDP-Lite (0x0007 and 0x0008) [4].  These profiles are based on the
   profiles of RFC 3095 [1] and inherently make the same in-order
   delivery assumption.

3.2.  Profiles with Special Considerations

   Special considerations are needed to make some of the implementation
   solutions of sections 6.1 and 6.2 applicable to profiles 0x0002 (UDP)
   [1], 0x0004 (IP-only) [3], and 0x0008 (UDP-Lite) [4].  For these
   profiles, the SN is generated at the compressor, as it is not present
   in headers being compressed.  For the least significant bit (LSB)
   encoding method, the interpretation interval offset (p) is always
   p = -1 (see section 5.1.1) when interpreting the SN.  The SN is thus
   required to increase for each packet received at the decompressor,
   which means that reordered packets cannot be decompressed.

3.3.  Profiles Incompatible with Reordering

   The ROHC LLA profiles defined in RFC 3242 [5] and RFC 3408 [6] have
   been explicitly designed with in-order delivery as a fundamental
   requirement to their proper operation.  Profiles 0x0005 and 0x0105
   can therefore not be implemented over channels where reordering can
   occur; this document therefore does not apply to these profiles.

4.  Background

   ROHC was designed with the assumption that packets are delivered in
   order from compressor to decompressor.  This was considered as a
   reasonable working assumption for links where it was expected that
   ROHC would be used.  However, many have expressed that it would be
   desirable to use ROHC also over connections where in-order delivery
   is not guaranteed [7].

4.1.  Reordering Channels

   The reordering channels that are potential candidates to use ROHC are
   single-hop channels and multi-hop virtual channels.

   A single-hop channel is a point-to-point link that constitutes a
   single IP hop.  Note that one IP hop could be one or multiple
   physical links.  For example, a single-hop reordering channel could
   be a wireless link that applies error detection and performs
   retransmissions to guarantee error-free delivery of all data.
   Another example could be a wireless connection that performs
   bicasting of data during a handoff procedure.

   A multi-hop virtual channel is a virtual point-to-point link that
   traverses multiple IP hops.  A multi-hop virtual channel would
   typically be an IP tunnel, where compression is applied over the
   tunnel by the endpoints of the tunnel (not to be confused with single
   link compression of tunneled packets).

4.2.  Robustness Principles of ROHC

   Robustness is based on the optimistic approach in the unidirectional
   and optimistic modes of operation (U/O-mode), and on the secure
   reference principle in the bidirectional reliable mode (R-mode).
   Both approaches have different characteristics in the presence of
   reordering between compressor and decompressor.  However, in any
   mode, decompression of sequentially early packets will generally be
   handled quite well since they will be perceived and treated by the
   decompressor as if there had been one or more packet losses.

4.2.1.  Optimistic Approach (U/O-mode)

   A ROHC compressor uses the optimistic approach to reduce header
   overhead when performing context updates in U/O-mode.  The compressor
   normally repeats the same update until it is fairly confident that
   the decompressor has successfully received the information.  The
   number of consecutive packets needed to obtain this confidence is
   open to implementations, and this number is normally related to the
   packet loss characteristics of the link where header compression is
   used (see also [1], section 5.3.1.1.1).

   All packet types used in U/O-mode are context updating.

4.2.2.  Secure Reference Principle (R-mode)

   A ROHC compressor uses the secure reference principle in R-mode to
   ensure that context synchronization between ROHC peers cannot be lost
   due to packet losses.  The compressor obtains its confidence that the
   decompressor has successfully updated the context from a packet
   carrying a 7- or 8-bit Cyclic Redundancy Check (CRC) based on
   acknowledgements received from the decompressor (see also [1],
   section 5.5.1.2).

   The secure reference principle makes it possible for a compressor to
   use packets that do not update the context (i.e., R-0 and R-1* [1]).

5.  Problem Description

5.1.  ROHC and Reordering Channels

   This section reviews different aspects of ROHC susceptible of being
   impacted by reordering of compressed packets between ROHC peers.

5.1.1.  LSB Interpretation Interval and Reordering

   The least significant bit (LSB) encoding method defined in RFC 3095
   ([1], section 5.7) specifies the interpretation interval offset,
   called p, as follows:

   For profiles 0x0001, 0x0003, and 0x0007:

      p = 1, when bits(SN) <= 4;
      p = 2^(bits(SN)-5) - 1 otherwise.

      The resulting table describing the interpretation interval is as
      follows:

         +-----------+--------------+--------------+
         | bits (SN) |   Offset p   | (2^k-1) - p  |
         |     k     | (reordering) |   (losses)   |
         +-----------+--------------+--------------+
         |     4     |      1       |      14      |
         |     5     |      0       |      31      |
         |     6     |      1       |      62      |
         |     7     |      3       |      124     |
         |     8     |      7       |      248     |
         |     9     |      15      |      496     |
         +-----------+--------------+--------------+

      As shown in the table above, the ability for ROHC to handle
      sequentially late packets depends on the number of bits sent in
      each packet.  For example, a sequentially late packet of type 0
      (with either 4 or 6 bits of SN) sets the limit to one packet out
      of sequence for successful decompression to be possible.

   For profiles 0x0002, 0x0004, and 0x0008:

      p = - 1, independently of bits(SN).

      A value of p = -1 means that the interpretation interval offset
      can only take positive values and that no sequentially late packet
      can be decompressed if reordering occurs over the link.

   The trade-off between reordering and robustness

      The ability of ROHC to handle sequentially late packets is limited
      by the interpretation interval offset of the sliding window used
      for LSB encoding.  This offset has a very small value for packets
      with a small number of sequence number (SN) bits, but grows with
      the number of SN bits transmitted.

      For channels where both packet losses and reordering can occur,
      modifications to the interpretation interval face a trade-off
      between the amount of reordering and the number of consecutive
      packet losses that can be handled by the decompressor.  If the
      negative offset (i.e., p) is increased to handle a larger amount
      of reordering, the value of the positive offset of the
      interpretation interval must be decreased.  This may impact the
      compression efficiency when the channel has a high loss rate.

      This is shown in the figure:

        <--- interpretation interval (size is 2^k) ---->
        |------------------+---------------------------|
      Lower              v_ref                       Upper
      Bound                                          Bound
        <--- reordering --> <--------- losses --------->
         max delta(SN) = p   max delta(SN) = (2^k-1) - p

        where v_ref is the reference value as per [1], section 4.5.1.

      In practice, the maximum variation in SN value (max delta(SN)) due
      to reordering that can be handled will normally correspond to the
      maximum number of packets that can be reordered.  The same applies
      to the maximum number of consecutive packet losses covered by the
      robustness interval.

   Timer-based compression of RTP TS (see [1], section 4.5.4) provides
   means to reduce the number of timestamp bits needed in compressed
   headers after longer gaps in the packet stream (e.g., for an audio
   stream, this is typically due to silence suppression).  To use
   timer-based compression, an upper limit on the inter-arrival jitter
   must be reliably estimated by the compressor.  It should be noted
   that although the risk of reordering of course means there is a more
   significant jitter on the path between the compressor and the
   decompressor, there are no special reordering considerations for
   timer-based compression.  It all still boils down to the task of
   estimating the jitter, requiring channel characteristics knowledge at
   the compressor, and/or jitter estimation figures received from the
   decompressor.

5.1.2.  Reordering of Packets in R-mode

5.1.2.1.  Updating Packets

   The compressor always adds references in the sliding window for all
   updating packets sent.  The compressor removes values older than
   values for which it has received an acknowledgement to shrink the
   window and thereby increase the compression efficiency.

   The decompressor always updates the context when receiving an
   updating packet and uses the new reference for decompression.
   Acknowledgements are sent to allow the compressor to shrink its
   sliding window.

   Reordering between updating packets

      The decompressor can update its context from the reception of a
      sequentially late updating packet.  The decompressor reference is
      then updated with a value that is no longer in the sliding window
      of the compressor.  This "missing reference" can be caused by
      reordering when operating in R-mode.

      The result is that the compressor and the decompressor lose
      synchronization with each other.  When the decompressor
      acknowledges the sequentially late packet, the compressor might
      already have discarded the reference to this sequence number, and
      continue to compress packets based on more recent references (in
      packet arrival time).  Decompression will then be attempted using
      the wrong reference.

5.1.2.2.  Non-Updating Packets

   Reordering between non-updating packets only

      A non-updating packet that reaches the decompressor out of
      sequence only with respect to other non-updating packets can
      always be decompressed properly.

   Reordering between non-updating packets and updating packets

      When a non-updating packet is reordered and becomes sequentially
      late with respect to an updating packet, the decompressor may have
      already updated the context with a new reference when the late
      packet is received.  It is thus possible for a non-updating packet
      to be decompressed based on the wrong reference because of
      reordering when operating in R-mode.

      Since decompression of non-updating packets cannot be verified,
      this can lead to a packet erroneously decompressed to be forwarded
      to upper layers.

5.1.3.  Reordering of Packets in U/O-mode

   Reordering between non-change packets only

      When only non-change packets are reordered with respect to each
      other, decompression of sequentially late packets is limited by
      the offset p of the interpretation interval (see section 5.1.1).
      Decompression of a sequentially late packet with SN = x is
      possible if the value of the SN of the packet that last updated
      the context was less than or equal to x + p.

      Problems occur if context(SN) has increased by more than p with
      respect to field(SN) carried within the packet to decompress.

      This means that for a well-behaved stream with a constant unit
      increase in the RTP SN, a packet can arrive up to p packets out of
      sequence and still be correctly decompressed.  Otherwise, it
      cannot be properly decompressed.  It also means that if the
      compressor sends two consecutive packets with SN(packet1)=100 and
      SN(packet2)=108 when p=7, packet1 cannot be decompressed if it
      arrives even one packet late due to reordering.

   Reordering involving change packets

      When a packet is reordered and becomes sequentially late with
      respect to a change packet, decompression of the late packet may
      eventually fail, as the context information required for
      successful decompression may not be available anymore.

   Decompression can always be verified since all U/O-mode packet types
   are context updating.  Consequently, a failure to decompress a packet
   that is caused by reordering can be detected, and context
   invalidation due to reordering can thus be avoided.  The risk of
   forwarding incorrectly decompressed packets to upper layers is
   therefore small when operating in U/O-mode.  For channels known to
   reorder packets, U/O-mode should therefore be the preferred mode of
   operation.  The additional risk of losing context synchronization, or
   for erroneous packet to be delivered to upper layers, is limited.

5.1.4.  Reordering on the Feedback Channel

   For R-mode, upon reception of an acknowledgement, the compressor
   searches the sliding window to locate an updating packet with the
   corresponding SN; if it is not found, the acknowledgement is invalid
   and is discarded ([1], section 5.5.1.2).  In other words, feedback
   received out of order either is still useful or is discarded.

   In U/O-mode, if the compressor updates its context based on feedback,
   the same logic as for R-mode applies in practice.

   Reordering on the feedback channel has thus no impact in either mode.

5.1.5.  List Compression

   ROHC list compression is an additional compression scheme for RTP
   contributing source (CSRC) lists and IP extension header chains.  The
   base is called table-based item compression, and it is almost
   completely independent from the rest of the ROHC compression logic.
   Therefore, this part of the scheme does not exhibit any special
   vulnerabilities when it comes to reordering, assuming a reasonable
   optimistic approach is used in U/O-mode.  Specifically, it does not
   suffer significantly from the "missing reference" problem when
   operating in R-mode.

   On top of the table-based item compression mechanism, an additional
   compression technique may be used, called reference based list
   compression.  Reference based list compression however has a logic
   that is similar to the rest of the ROHC compression logic, and
   therefore it suffers from similar reordering vulnerabilities,
   especially the "missing reference" problem of R-mode.  Note, however,
   that the generation identifier used in U/O-mode makes that scheme
   more robust to reordering.

   When using list encoding type 1, 2, or 3, which makes use of
   reference lists, decompression will succeed only if all individual
   items are known by the decompressor, along with the correct reference
   list required to properly decompress the packet.  List compression
   using the "Generic scheme", also known as "Encoding type 0", is not
   using reference based list compression, and type 0 decompression will
   thus succeed as long as all individual items are known by the
   decompressor.  Because of this, type 0 list compression should be the
   preferred method used when operating over reordering channels.

5.1.6.  Reordering and Mode Transitions

   Transition from U/O-mode to R-mode

      This transition can be affected by reordering if a packet type 0
      (UO-0) is reordered and delayed by at least one round-trip time
      (RTT).  If the decompressor initiates a mode change request to
      R-mode in the meantime, the reordered UO-0 packet may be handled
      as an R-0 packet; it can be erroneously decompressed and forwarded
      to upper layers.  This is because the decompressor can switch to
      R-mode as soon as it sends the acknowledgement Ack(SN, R) to the
      compressor (see also [1], section 5.6).

   Transition from R-mode to U/O-mode

      A similar situation as above can occur during this transition.
      However, because the outcome of the decompression is always
      verified using a CRC verification in U/O-mode, the reordered
      packet will most likely fail decompression and will be discarded.

   The above situation, although it is not deemed to occur frequently,
   is still possible; thus, mode transitions from U/O-mode to R-mode
   should be avoided when reordering can occur.

5.2.  Consequences of Reordering

   The context updating properties of the packets exchanged between ROHC
   peers are the most important factors to consider when deriving the
   impacts of reordering.  For this reason, the robustness properties of
   the U/O-mode and of the R-mode are affected differently.

   The effects of reordering on ROHC can be summarized as follows:

   - Functionality incompatible with reordering;
   - Increased probability of context damage (loss of synchronization);
   - Increased number of decompression failures - Detected (U/O/R-mode);
   - Increased number of decompression failures - Undetected (R-mode).

5.2.1.  Functionality Incompatible with Reordering

   There is one optional ROHC function that cannot work in the presence
   of reordering between ROHC peers.

   The ROHC segmentation scheme (see [1], section 5.2.5) relies entirely
   on the in-order delivery of each segment, as there is no sequencing
   information in the segments.  A segmented packet for which one (or
   more) segment is received out of order cannot be decompressed, and it
   is discarded by the decompressor.  Therefore, segmentation should not
   be used if there can be reordering between the ROHC peers.

   The use of this optional feature is open to implementations and is
   local to the compressor only; it does not impact the decompressor.

5.2.2.  Context Damage (Loss of Synchronization)

   Reordering of packets between ROHC peers can impact the robustness
   properties of the optimistic approach (U/O-mode) as well as the
   reliability of the secure reference principle (R-mode).

   The successful decompression of a sequentially late change packet
   (U/O-mode) and/or updating packet (R-mode) can update the context of
   the decompressor in a manner unexpected by the compressor.  This can
   lead to a loss of context synchronization between the ROHC peers.

5.2.3.  Detected Decompression Failures (U/O/R-mode)

   Reordering of packets between ROHC peers can lead to an increase in
   the number of decompression failures for context updating packets
   (see sections 5.1.2.1 and 5.1.3).  Fortunately, as the outcome of the
   decompression of updating packets can be verified, the decompressor
   can reliably detect decompression failures, including those caused by
   reordering, and discard the packet.  Note that local repairs, subject
   to the limitations stated in [1] section 5.3.2.2.3, can still be
   performed.

5.2.4.  Undetected Decompression Failures (R-mode only)

   Reordering of packets between ROHC peers can lead to an increase in
   the number of decompression errors for non-updating packets.  For
   R-mode, decompression of R-0 and R-1* packets cannot be verified.  If
   reordering occurs and decompression is performed using the wrong
   secure reference (see section 5.1.2.1 and 5.1.2.2), the decompressor
   cannot reliably detect such errors.  As a result, erroneous packets
   may be forwarded to upper layers.

6.  Making ROHC Tolerant against Reordering

   This section describes different approaches that can improve the
   performance of ROHC when used over reordering channels and minimize
   the effects of reordering.  Examples are provided to guide
   implementers and designers of new profiles.  The solutions target
   either the properties of ROHC implementations or the specification of
   profiles.  This is covered by sections 6.1 and 6.2, respectively.

6.1.  Properties of ROHC Implementations

   Existing ROHC profiles can be implemented with the capability to
   properly handle packet reordering.  The methods described in this
   section conform with, and thus do not require any modifications to,
   the ROHC specifications within scope of this document (see section
   3).  Specifically, the methods presented in this section can be
   implemented without any impairment to interoperability with other
   ROHC implementations that do not use these methods.

   The methods suggested here may, however, lower the compression
   efficiency, and these modifications should not be used when
   reordering is known not to occur.  Some of these methods aim to
   increase the decompression success rate at the decompressor, while
   others aim to avoid context damage that would cause a loss of context
   synchronization between compressor and decompressor.

   The methods proposed are each addressing specific issues listed in
   section 5 and can be combined to achieve better robustness against
   reordering.

6.1.1.  Compressing Headers with Robustness against Reordering

   The methods described in this section are methods local only to the
   compressor implementation.  They can be used without modifications or
   impact to the decompressor.

6.1.1.1.  Reordering and the Optimistic Approach

   The optimistic approach is affected by the reordering characteristics
   of the channel when operating over a reordering channel.  Compressor
   implementations should therefore adjust their optimistic approach
   strategy to match both packet loss and reordering characteristics.

   For example, the number of repetitions for each context update can be
   increased.  The compressor should ensure that each update is repeated
   until it is reasonably confident that at least one change packet in
   the sequence of repetitions has reached the decompressor before the
   first packet sent after this sequence.

6.1.1.2.  Reordering and the Secure Reference Principle

   Fundamental to the secure reference principle is that only values
   acknowledged by the decompressor can be used as reference for
   compression.  In addition, some of the packet types used in R-mode do
   not include a CRC over the original uncompressed header, and the
   decompressor has no means to verify the outcome of the decompression.

   Decompression of non-updating packet types thus entirely relies on
   the cumulative effect of previous updates to the secure reference,
   and the compressed data is based on the current value of the
   reference.  This reference must be synchronized between ROHC peers.
   For R-0 and R-1* packets, the reception of the encoded bits applied
   to the secure reference is sufficient for correct decompression, but
   only when in-order delivery between ROHC peers is guaranteed.

   Avoiding the "missing reference" problem (section 5.1.2.1)

      A compressor implementation can delay the advance in the sliding
      window to a reference acknowledged by the decompressor, until it
      has confidence that no acknowledgement for any of the values that
      could be discarded can be received.  This confidence can be based
      on the maximum delay that reordering can introduce over the
      channel.

6.1.1.3.  Robust Selection of Compressed Header

   Packet formats can be chosen with an interpretation interval for the
   LSB encoded sequence number that allows for larger negative offsets
   (see section 5.1.1).  This provides the capability to decompress
   sequentially late packets with a greater amount of reordering.

   To achieve this, the compressor should be implemented conservatively
   in terms of the choice of packet types to send, by transmitting
   packets with more sequence number bits.  As shown in the table in
   section 5.1.1, using 8 bits of SN allows a packet to be decompressed
   when the reordering leads to up to 7 units in sequence number
   variation (i.e., delta(SN)).  Increasing the number of SN bits (i.e.,
   using a larger SN_k [1]) transmitted will make ROHC even more
   tolerant to reordering.

   For example, a conservative compressor implementation could use the
   packet types as shown in the table below:

      +----------------------+-------------------------+
      | Optimal Packet Type  | Alternative Packet Type |
      | (without reordering) |  (reordering possible)  |
      +----------------------+-------------------------+
      | UO-0                 | UOR-2*-ext0             |
      | R-0                  | R-1*-ext0               |
      | R-0-CRC              | UOR-2*-ext0             |
      | R-1*                 | R-1*-ext0               |
      | UO-1                 | UOR-2-ext0              |
      | UO-1-TS              | UOR-2-TS-ext0           |
      | UO-1-ID              | UO-1-ID-ext3 (with S=1) |
      |                      | UOR-2-ID-ext0           |
      | UOR-2*               | UOR-2*-ext0             |
      +----------------------+-------------------------+

   Such a compressor implementation would thus always be sending at
   least 3 octets (R-mode) or 4 octets (U/O-mode).  This is a trade-off
   when compared to the 1 octet that can be sent by a more aggressive
   implementation operating on a channel with no reordering.

   Note that since the interpretation interval for profiles 0x0002,
   0x0004, and 0x0008 is always p = -1 independently of bits(SN), the
   methods suggested in this section will not work for these profiles
   unless this value is modified (section 6.2.1).

6.1.2.  Implementing a Reordering-Tolerant Decompressor

   The methods described in this section are methods local only to the
   decompressor implementation.  They can be used without modifications
   or impact to the compressor.

6.1.2.1.  Decompressor Feedback Considerations

   Reducing the feedback rate when the flow behaves linearly

      The decompressor should reduce its feedback rate when a large
      number of UOR-2 packets with extensions are received, when the
      flow behaves linearly (i.e., when only fields pertaining to the
      functions established with respect to the sequence number are
      changing).

      In particular, if the compressor implementation makes a more
      conservative selection of packet types (section 6.1.1.3) in order
      to handle reordering, the decompressor should try to avoid sending
      more feedback than it would for the case where the more optimal
      packet types are used.  This can be useful to minimize the usage
      of the feedback channel, thereby improving efficiency of the link.

      Note that even if the decompressor does not make this adjustment
      to its feedback rate, packet losses or context damages will not
      increase.

   Acknowledgements and sequentially late packets

      Reordered feedback (or feedback for packets received out of order)
      will not cause problems (see section 5.1.4).  However, the
      decompressor should not send acknowledging feedback for a packet
      that can be identified as being sequentially late (e.g., based on
      the sequence number of the packet), as the current state of the
      context will better reflect the compressor context than the
      content of the reordered packet.

6.1.2.2.  Considerations for Local Repair Mechanisms

   When decompression fails, and if reordering can be assumed to be the
   cause of this failure, subsequent decompressions may be attempted for
   sequentially late packets by going backward in the interpretation
   interval (as opposed to moving forward for local repair).  If one of
   the decompression attempts is successful, the late packet may be
   passed on to upper layers with or without updating the decompressor
   context.  If the subsequent decompression attempt fails, the packet
   should be handled according to [1] section 5.3.2.2.3.

6.2.  Specifying ROHC Profiles with Robustness against Reordering

6.2.1.  Profiles with Interpretation Interval Offset p = -1

   New revisions of profiles 0x0002 (UDP) [1], 0x0004 (IP-only) [3], and
   0x0008 (UDP-Lite) [4] should redefine how the value of the offset p
   is determined, and use the same algorithm as in profile 0x0001 [1]
   instead of p = -1 independently of bits(SN) (section 5.1.1).

   While such a change would make these updated profiles slightly less
   robust to packet losses, they would still be no less robust than
   profile 0x0001.

6.2.2.  Modifying the Interpretation Interval Offset

   The interpretation interval offset p could be modified for existing
   profiles to handle reordering while improving the compression
   efficiency when compared to the solution in section 6.1.1.3.

6.2.2.1.  Example Profile for Handling Reordering

   The value of the interpretation interval offset p can be adjusted to
   achieve a robustness against reordering similar to the effect of
   selecting packet types as suggested in section 6.1.1.3.

   Consider a scenario where robustness against packet losses is kept a
   priority, and for which of a value p=7 is deemed enough.  In this
   case, a ratio where the positive offset is about twice as large as
   the negative offset can be used.  This leaves a value of p = 2^k/ 3.

   The resulting values are shown in the following table:

         +-----------+--------------+----------------+
         | bits (SN) |   Offset p   | Positive range |
         |     k     | (reordering) |    (losses)    |
         +-----------+--------------+----------------+
         |     4     |        5     |        10      |
         |     5     |       10     |        21      |
         |     6     |       21     |        42      |
         |     7     |       42     |        85      |
         |     8     |       85     |       170      |
         |     9     |      170     |       341      |
         +-----------+--------------+----------------+

   Using this value for p, a fair amount of reordering can be handled
   without having to send UOR-2 packets most of the time.  The trade-off
   is that this is at the expense of robustness against packet losses.

6.2.2.2.  Defining the Values of p for New Profiles

   As described in RFC 3095 [1], the interpretation interval when
   sending k bits of SN is defined as follows:

      f(v_ref, k) = [v_ref - p, v_ref + (2^k - 1) - p]

   The negative bound (v_ref - p) limits the ability to handle
   reordering, and the positive bound (v_ref + (2^k - 1) - p) limits the
   ability to handle packet losses.

   Adjusting p will increase one of these ranges, while the other range
   will decrease.  This trade-off between the capability to handle
   reordering and packet losses, including how these correlate with each
   other, should be considered in a ROHC profile that is meant to handle
   reordering.

   For example, if it is desirable for a profile to be as robust against
   reordering (negative range) and against packet losses (positive
   range), this range can be made equal by setting p near (2^k / 2).

7.  Security Considerations

   This document does not include additional security risks to [1].  In
   addition, it may lower risks related to context damage in R-mode with
   injected packets when sequentially late packets do not update the
   context (section 6.1.2.1).

8.  Acknowledgements

   Thanks to the committed WG document reviewers, Carl Knutsson and Mark
   West, for their review efforts.  Thanks also to Aniruddha Kulkarni,
   Ramin Rezaiifar, and Gorry Fairhurst for their constructive comments.

9.  Informative References

   [1]  Bormann, C., Burmeister, C., Degermark, M., Fukushima, H.,
        Hannu, H., Jonsson, L-E., Hakenberg, R., Koren, T., Le, K., Liu,
        Z., Martensson, A., Miyazaki, A., Svanbro, K., Wiebke, T.,
        Yoshimura, T., and H. Zheng, "RObust Header Compression (ROHC):
        Framework and four profiles: RTP, UDP, ESP, and uncompressed",
        RFC 3095, July 2001.

   [2]  Jonsson, L-E., "RObust Header Compression (ROHC): Terminology
        and Channel Mapping Examples", RFC 3759, April 2004.

   [3]  Jonsson, L-E. and G. Pelletier, "RObust Header Compression
        (ROHC): A Compression Profile for IP", RFC 3843, June 2004.

   [4]  Pelletier, G., "RObust Header Compression (ROHC): Profiles for
        User Datagram Protocol (UDP) Lite", RFC 4019, April 2005.

   [5]  Jonsson, L-E. and G. Pelletier, "RObust Header Compression
        (ROHC): A Link-Layer Assisted Profile for IP/UDP/RTP", RFC 3242,
        April 2002.

   [6]  Liu, Z. and K. Le, "Zero-byte Support for Bidirectional Reliable
        Mode (R-mode) in Extended Link-Layer Assisted RObust Header
        Compression (ROHC) Profile", RFC 3408, December 2002.

   [7]  Ash, J., Goode, B., Hand, J., and R. Zhang, "Requirements for
        Header Compression over MPLS", RFC 4247, November 2005.

Authors' Addresses

   Ghyslain Pelletier
   Ericsson AB
   Box 920
   SE-971 28 Lulea, Sweden

   Phone: +46 8 404 29 43
   Fax:   +46 920 996 21
   EMail: ghyslain.pelletier@ericsson.com


   Lars-Erik Jonsson
   Ericsson AB
   Box 920
   SE-971 28 Lulea, Sweden

   Phone: +46 8 404 29 61
   Fax:   +46 920 996 21
   EMail: lars-erik.jonsson@ericsson.com


   Kristofer Sandlund
   Ericsson AB
   Box 920
   SE-971 28 Lulea, Sweden

   Phone: +46 8 404 41 58
   Fax:   +46 920 996 21
   EMail: kristofer.sandlund@ericsson.com

Full Copyright Statement

   Copyright (C) The Internet Society (2006).

   This document is subject to the rights, licenses and restrictions
   contained in BCP 78, and except as set forth therein, the authors
   retain all their rights.

   This document and the information contained herein are provided on an
   "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
   ENGINEERING TASK FORCE DISCLAIM 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.

Intellectual Property

   The IETF takes no position regarding the validity or scope of any
   Intellectual Property Rights 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; nor does it represent that it has
   made any independent effort to identify any such rights.  Information
   on the procedures with respect to rights in RFC documents can be
   found in BCP 78 and BCP 79.

   Copies of IPR disclosures made to the IETF Secretariat 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 implementers or users of this
   specification can be obtained from the IETF on-line IPR repository at
   http://www.ietf.org/ipr.

   The IETF invites any interested party to bring to its attention any
   copyrights, patents or patent applications, or other proprietary
   rights that may cover technology that may be required to implement
   this standard.  Please address the information to the IETF at
   ietf-ipr@ietf.org.

Acknowledgement

   Funding for the RFC Editor function is provided by the IETF
   Administrative Support Activity (IASA).

ISO Plain Language

On this page
PROBLEMThe ROHC profiles assume the link between compressor and decompressor delivers packets in order, and ROHC has been faulted for that assumption on links that do not.
MECHANISMThe document analyses how reordering breaks each ROHC mode, then shows how a compressor or decompressor can be changed, and how a profile's sequence number window can be redefined, so that the existing profiles work over reordering channels.
THE CATCHIt is an Informational guidance document rather than a specification. It shows the claim that ROHC cannot cope with reordering is a misreading of RFC 3095, at the cost of some compression efficiency.

§1The Assumption That Breaks

RObust Header Compression (ROHC), defined in RFC 3095, is a framework for header compression together with a number of compression protocols, called profiles. One operating assumption of those profiles is that the channel between compressor and decompressor is required to maintain packet ordering for each compressed flow. The assumption was reasonable when ROHC was designed, because the candidate channels considered did guarantee in-order delivery of header-compressed packets, and relying on it made it possible to meet the design objectives that were top of the requirements list at the time, namely better compression efficiency and tolerance to packet loss.

Since RFC 3095 was published in 2001 the question of running ROHC over channels that do not guarantee in-order delivery has surfaced several times, and arguments that ROHC cannot perform adequately over such channels have been heard, as a weakness compared with other header compression alternatives. The authors call this a misconception that is easy to understand given the wording of RFC 3095. This document explains different ways of implementing the profiles of RFC 3095, and profiles based on them, over reordering channels: either by ensuring the compressor uses compressed headers that are sufficiently robust to the expected reordering, or by modifying the decompressor to tolerate reordered packets. It also discusses how existing profiles could be updated and how new profiles could be defined to cope efficiently with reordering.

The document is informative and specifies no new technology. It also leaves aside the case where something outside ROHC, such as a sequence number, can already detect and possibly correct the reordering, which happens for example when compression runs over an IPsec Encapsulating Security Payload tunnel.

ROHC compresses the repeated headers in a packet stream so that less bandwidth is needed. It assumes packets reach the decompressor in the order they were sent. This document explains how ROHC can still be used on links that shuffle packets, and why the claim that it cannot is a misunderstanding.

§2Terms for a Channel That Shuffles Packets

The document uses the terminology of RFC 3759 and adds the terms it needs. A reordering channel is a connection over which in-order delivery of header-compressed packets is not guaranteed. The candidate channels are single-hop channels, which are point-to-point links forming a single IP hop and possibly made up of one or more physical links, such as a wireless link that detects errors and retransmits, or a wireless connection that broadcasts data during a handoff. The other kind is a multi-hop virtual channel, typically an IP tunnel, where the endpoints of the tunnel apply compression to the tunnel itself.

A sequentially early packet reaches the decompressor before one or several packets of the same context identifier that were delayed on the link. At the moment it arrives, the delayed packets cannot be told apart from lost ones. A sequentially late packet is late within its sequence because it reaches the decompressor after one or several other packets of the same context identifier have been received, although it was sent from the compressor before them.

Not all packets behave the same way. An updating packet updates the context of the decompressor; in RFC 3095 all packet types except R-0 and R-1* do this. A non-updating packet does not update the context, and only R-0 and R-1* are of that kind. A change packet updates one or more fields of the context other than the fields that pertain to the sequence number: it updates fields other than the SN, the IPv4 identifier, the sequence number of an extension header, or the RTP timestamp.

A packet that arrives early looks exactly like a packet that was lost, because the receiver cannot tell the difference at first. A packet that arrives late was sent before packets the receiver already has. These two cases need different handling.

§4How ROHC Keeps the Two Ends in Step

ROHC is based on the optimistic approach in the unidirectional and optimistic modes of operation, and on the secure reference principle in the bidirectional reliable mode. In the optimistic approach the compressor reduces header overhead when performing context updates by normally repeating the same update until it is fairly confident the decompressor has successfully received the information. The number of consecutive packets needed to obtain that confidence is open to implementations, and is normally related to the packet loss characteristics of the link where the compression is used. All packet types used in U/O-mode are context updating.

In the secure reference principle the compressor obtains its confidence that the decompressor has successfully updated the context from a packet carrying a 7- or 8-bit Cyclic Redundancy Check, based on the acknowledgements received from the decompressor. That confidence is what makes it possible for the compressor to use packets that do not update the context, R-0 and R-1*.

The two approaches have different characteristics in the presence of reordering between compressor and decompressor. They share one property: in any mode, decompression of sequentially early packets will generally be handled quite well, because the decompressor perceives them and treats them as if there had been one or more packet losses.

ROHC has two ways of keeping the sending and receiving ends in agreement. In the optimistic mode the sender repeats an update until it is confident the update arrived. In the reliable mode the receiver acknowledges what it got, and the sender only builds on references the receiver has confirmed. Reordering affects these two modes differently.

THE TWO ROBUSTNESS PRINCIPLES ROHC IS BUILT ON
  • Optimistic approach (U/O-mode)The compressor repeats the same context update until it is fairly confident the decompressor received it. Every packet type used in this mode updates the context.
  • Secure reference principle (R-mode)The compressor takes its confidence from a 7- or 8-bit checksum carried in acknowledgements, and may then use packets that do not update the context, R-0 and R-1*.
  • Sequentially early packetsHandled well in either mode, because the decompressor treats a packet that arrives early as if one or more packets had been lost.

§5.1How Far a Packet Can Move and Still Be Decompressed

The least significant bit encoding method of RFC 3095 places the sequence number inside an interpretation interval around a reference value, with an offset called p on the negative side. For profiles 0x0001, 0x0003 and 0x0007 the offset is p = 1 when the sequence number is at most 4 bits wide, and p = 2^(bits(SN)-5) - 1 otherwise. For profiles 0x0002, 0x0004 and 0x0008 the offset is always p = -1, independently of the size of the sequence number.

The negative offset is what decides how much reordering can be handled, because it is the largest amount by which the sequence number may differ from the reference and still be decompressed. With 8 bits of sequence number the offset is 7, so a packet that arrives up to 7 sequence numbers out of step can still be decompressed. With p = -1 no sequentially late packet can be decompressed at all, which is why the document calls out profiles 0x0002, 0x0004 and 0x0008 as needing special treatment: for them the sequence number is generated at the compressor, so it must increase for each packet received at the decompressor and reordered packets cannot be decompressed.

Adjusting p is a trade-off. The interpretation interval has size 2^k. Its lower bound is the reference minus p, which limits the reordering that can be handled, and its upper bound is the reference plus (2^k-1) - p, which limits the number of consecutive losses that can be handled. Raising p to cope with more reordering takes that room away from the loss side, and that may reduce compression efficiency when the channel has a high loss rate.

ROHC puts each sequence number inside a window of possible values around a reference. The size of the window on the low side, called p, decides how far a packet can arrive out of order and still be decoded. Making that side bigger helps with reordering but leaves less room for the decoder to survive lost packets.

INTERPRETATION INTERVAL FOR PROFILES 0x0001, 0x0003 AND 0x0007
bits(SN)Offset p (reordering)(2^k - 1) - p (losses)
4114
5031
6162
73124
87248
915496

§5.2What Goes Wrong When Packets Arrive Out of Order

The document lists four effects of reordering. Some functionality cannot work. The ROHC segmentation scheme relies entirely on the in-order delivery of each segment, because the segments carry no sequencing information, so a segmented packet for which one or more segments arrive out of order cannot be decompressed and is discarded by the decompressor. Segmentation should therefore not be used if there can be reordering between the ROHC peers.

Context damage, that is a loss of synchronisation between the two ends, becomes more likely. The successful decompression of a sequentially late change packet in U/O-mode, or of a sequentially late updating packet in R-mode, can update the context of the decompressor in a manner unexpected by the compressor, and the peers lose synchronisation.

Some decompression failures are detected. For updating packets the outcome of the decompression can be verified, so the decompressor can reliably detect decompression failures, including those caused by reordering, and discard the packet.

Some failures are not detected, and this happens only in R-mode. The decompression of R-0 and R-1* packets cannot be verified. If reordering causes decompression to use the wrong secure reference, the decompressor cannot reliably detect the error, and erroneous packets may be forwarded to the upper layers. Two mechanisms produce this. The first is the missing reference: a sequentially late updating packet sets the decompressor reference to a value that is no longer in the sliding window of the compressor, so when the decompressor acknowledges it the compressor may already have discarded that reference and continue compressing against more recent ones, and later packets are decompressed against the wrong reference. The second is a non-updating packet that becomes sequentially late with respect to an updating packet, in which case the context has already been updated when the late packet is received.

Reordering breaks ROHC in four ways. Some features stop working, the two ends can fall out of step, and some packets fail to decompress. Most failures are caught, because updating packets carry a check. The dangerous case is the reliable mode, where non-updating packets cannot be checked, so a wrongly decoded packet can be passed on.

§6Making ROHC Tolerate Reordering

Two groups of remedies are given. The first changes implementations rather than the protocol, and can be done without impairing interoperability with other ROHC implementations that do not use the methods. These methods may lower the compression efficiency, and they should not be used when reordering is known not to occur.

On the compressor side, the optimistic approach strategy should be adjusted to match both the packet loss and the reordering characteristics of the channel, for example by increasing the number of repetitions for each context update, so that each update is repeated until the compressor is reasonably confident that at least one change packet in the sequence has reached the decompressor before the first packet sent after that sequence. For the secure reference principle, the compressor can delay the advance of its sliding window to a reference that the decompressor has acknowledged, until it is confident that no acknowledgement for any of the values it could discard can still be received, a confidence it can base on the maximum delay that reordering can introduce over the channel.

The compressor can also select packet types conservatively, transmitting more sequence number bits, which provides larger negative offsets and so lets the decompressor handle more reordering. A compressor built this way always sends at least 3 octets in R-mode or 4 octets in U/O-mode, against the 1 octet that an aggressive implementation can send on a channel with no reordering.

On the decompressor side, feedback that arrives out of order causes no problem, but the decompressor should not send acknowledging feedback for a packet it can identify as sequentially late, because the current state of the context reflects the compressor better than the content of the reordered packet does. When decompression fails and reordering can be assumed to be the cause, the decompressor can retry by going backward in the interpretation interval rather than moving forward as in local repair, and pass the packet on if a retry succeeds. The decompressor should also reduce its feedback rate when the flow behaves linearly, so that a conservative compressor does not cause more feedback traffic on the link.

The second group of remedies changes the profile specification. New revisions of profiles 0x0002, 0x0004 and 0x0008 should redefine how the value of p is determined and use the same algorithm as profile 0x0001, instead of always using p = -1. Such a change would make those profiles slightly less robust to packet losses, but no less robust than profile 0x0001. For a profile meant to handle reordering, the document offers an example in which the positive range is about twice as large as the negative range, which leaves p = 2^k / 3, with values of 5, 10, 21, 42, 85 and 170 for 4 to 9 bits of sequence number. If a profile should be equally robust to reordering and to losses, p can be set near 2^k / 2.

The fix has two sides. An implementation can repeat updates, send more sequence number bits, hold back references and check for late packets, and none of that needs a change to the protocol. A profile can also be redefined so that its window allows more reordering, at the cost of tolerating fewer losses.

CONSERVATIVE PACKET TYPE CHOICES, AS PRINTED IN THE RFC
Optimal packet type and its alternative when reordering is possible
Optimal Packet Type  | Alternative Packet Type
UO-0                 | UOR-2*-ext0
R-0                  | R-1*-ext0
R-0-CRC              | UOR-2*-ext0
R-1*                 | R-1*-ext0
UO-1                 | UOR-2-ext0
UO-1-TS              | UOR-2-TS-ext0
UO-1-ID              | UO-1-ID-ext3 (with S=1)
                     | UOR-2-ID-ext0
UOR-2*               | UOR-2*-ext0

§7References