跳到主要内容

1. Introduction (简介)

1. Introduction (简介)

本文档描述了一种适用于低速串行链路的 IP 头压缩方法.

头压缩对于低速和中速链路很重要, 因为它可以:

  • 使链路上允许的最大传输单元 (Maximum Transmission Unit, MTU) 尽可能小

    MTU 是不分片就可以在链路上传输的最大分组大小.小的 MTU 对慢速链路很重要, 以避免延迟敏感的交互式流量落后于大批量传输分组.例如, 为了将排队延迟限制在 200 ms, 必须在 9600 bps 链路上使用小于 240 个八位字节的 MTU.但是, 在这种链路上, IPv6 要求最小 1280 个八位字节的 MTU, IPv4 没有强制要求小的 MTU.与具有小 MTU 的链路一起使用时, 需要在慢速链路上进行分片.当分组在慢速链路上被分片时, 必须发送额外的头: 在头中使用的字节数对于所有分片来说加起来比原始头大.头压缩可以显著减少这些额外头的字节数, 尤其是当原始分组很小时, 并且因此减少发送分组的时间, 因此增加了可以在慢速链路上使用的最大 MTU.

  • 允许对延迟敏感的低数据速率流量使用小分组

    对于此类应用, 例如语音, 如果分组很大, 则用数据填充分组的时间是显著的.为了获得低的端到端延迟, 首选小分组.在没有头压缩的情况下, 最小可能的 IPv6/UDP 头 (48 个八位字节) 在分组速率为 50 个分组/秒时消耗 19.2 kbit/s.50 个分组/秒等效于每个分组中有 20 ms 的语音样本.IPv4/UDP 头在 50 个分组/秒时消耗 11.2 kbit/s.隧道或路由头, 例如为了支持移动性, 将使头消耗的带宽增加 10-20 kbit/s.这应该与实际声音样本所需的带宽进行比较, 例如使用 GSM 编码时为 13 kbit/s.头压缩可以显著减少头所需的带宽, 例如在该示例中减少到约 1.7 kbit/s.这使得在 14.4 和 28.8 kbit/s 调制解调器上进行更高质量的语音传输成为可能.

  • 减少头开销

    今天, 用于中速链路上大批量传输的 TCP 段的常见大小为 512 个八位字节.当 TCP 段被隧道传输时, 例如因为使用了移动 IP, IPv6/IPv6/TCP 头为 100 个八位字节.头压缩将 IPv6/TCP 的头开销从 19.5% 降低到小于 1%, 并将隧道 IPv4/TCP 的头开销从 11.7% 降低到小于 1%.对于高达几 Mbit/s 的线速, 这是一个显著的增益.

    IPv6 规范规定路径 MTU 发现, 因此使用 IPv6 时, 大批量 TCP 传输应该在可能的情况下使用大于 512 个八位字节的段.尽管如此, 使用 1400 个八位字节的段 (RFC 894 以太网封装允许 1500 个八位字节的有效载荷, 其中 100 个八位字节用于 IP 头), 头压缩将 IPv6 头开销从 7.1% 减少到 0.4%.

  • 降低有损链路上的分组丢失率

    因为每个分组发送的比特更少, 所以对于给定的比特错误率, 分组丢失率将更低.这导致 TCP 的吞吐量更高, 因为发送窗口可以在丢失之间打开得更多, 并且 UDP 的丢失分组更少.

这里描述的机制旨在用于点对点链路.然而, 已经注意允许对多址链路和多播进行扩展.

可以压缩的头包括 TCP、UDP、IPv4 和 IPv6 基础头和扩展头.对于 TCP 分组, 使用 Van Jacobson [RFC-1144] 的机制从丢失中恢复.还描述了两种额外的机制, 这些机制提高了 VJ 头压缩在有损链路上的效率.对于非 TCP 分组, 压缩慢启动和周期性头刷新允许在丢失更改上下文的头后最小化分组丢弃期间.有钩子用于在 UDP 之上添加头压缩方案, 例如 RTP 头的压缩.

头压缩依赖于属于同一分组流的连续分组中许多字段是恒定的或很少改变.在分组之间不改变的字段根本不需要传输.经常改变的字段, 具有小和/或可预测的值, 例如 TCP 序列号, 可以递增编码, 以便这些字段所需的比特数显著减少.只有经常且随机改变的字段, 例如校验和或认证数据, 需要在每个头中传输.

头压缩的一般原理是偶尔发送具有完整头的分组; 后续的压缩头引用由完整头建立的上下文, 并可能包含对上下文的增量更改.

该头压缩方案不要求同一流中的所有分组都通过压缩链路.然而, 对于 TCP 流, 后续头之间的差异可能变得更加不规则, 并且压缩率可能降低.也不要求相应的 TCP 数据和确认分组在相反方向上遍历链路.

该头压缩方案在第一跳或最后一跳链路以及网络中间的链路上很有用.当许多分组流 (几百个) 遍历链路时, 可能会发生一种称为 CID 抖动的现象, 其中头很少能与现有上下文匹配, 并且必须以未压缩或完整头的形式发送.实现需要使用诸如滞后之类的技术来确保提供最高压缩率的分组流保持其上下文.这种技术在网络中间更有可能需要.