The Multi-Class Extension to Multi-Link PPP
Extracted elements (22)
A 1500-byte packet on a 28.8 kbit/s modem occupies the link for ~400 ms, producing round-trip delays of at least one second, which is unacceptable for real-time conversation. Fragmentation with priority interleaving is therefore required.
Four bits (rather than three) are allocated to the class field in the long sequence number format so that prefix elision can be applied selectively: when only some packets of a priority level share a common prefix, two class numbers can be allocated, one with and one without the prefix association.
Given the 1:72 ratio of smallest high-priority packets (~22 bytes, compressed RTP/G.723.1) to largest expected packets (1500 bytes MTU), at most ~8 levels of suspension are needed in practice; 28.8 kbit/s links require at least two levels (audio suspends video, video suspends other long packets).
The multi-class extension reuses previously unused bits in the existing PPP Multilink header (2 bits in the short sequence number format, 6 in the long format) as a class number, allowing multiple independent multilink instances without changing the PID or requiring a new protocol.
An instance of the Short Sequence Number Header Format Option (from RFC 1990) is treated as equivalent to this document's Multilink Header Format option with Code=6 and number of suspendable classes equal to 1, preserving backward compatibility.
Class number bits outside the negotiated suspendable-class range MAY be used for other semantics if negotiated by other means (e.g., via LCP extensions), allowing future extensibility without conflicting with this specification.
If no Multilink Header Format option and no Short Sequence Number Header Format option is present but an MRRU option is present, long sequence number multilink headers with class 0 only are used by default (equivalent to Code=2, number of suspendable classes=1).
Using standard PPP Multilink as-is (without classes) already provides two levels of priority — multilink fragments can be suspended by non-multilink packets — but this approach supports only one level of suspension and prevents true parallel multi-link fragment reordering.
A receiver willing to accept prefix-elided packets SHOULD request the Prefix Elision option with empty content; the sender can then use Configure-Nak to propose the desired class-to-prefix mapping.
If a Multilink Header Format option is offered on a link intended to join an existing bundle, the system MUST offer the same option value previously negotiated for the bundle, or none if none was negotiated previously.
Implementations SHOULD support at least 4 suspendable classes for the short sequence number format and at least 8 for the long sequence number format, unless configured differently.
The Multilink Header Format option MUST NOT occur more than once in a Configure-Request or Configure-Ack, and if it is present the Short Sequence Number Header Format option MUST NOT also be present.
The Prefix Elision option MUST NOT occur more than once in a Configure-Request or Configure-Nak.
When the Multilink Header Format option is negotiated, the accepting implementation MUST either transmit all subsequent multilink packets on all links of the bundle with the negotiated header format, or Configure-Nak or Configure-Reject the option.
When the Prefix Elision option is negotiated, the accepting implementation MUST transmit all subsequent multilink packets of each named class with the specified prefix removed from the start of the packet, or Configure-Nak or Configure-Reject the option.
Each class number runs a separate copy of the PPP Multilink mechanism, maintaining its own independent sequence number space and reassembly buffer; class 0 is the default and corresponds to the original single-class multilink behavior.
Prefix elision associates a class number with a common byte prefix (e.g., a protocol identifier) that is stripped from every packet of that class before transmission and implicitly prepended after reassembly, reducing per-fragment overhead without replacing header or data compression.
Operation of the multi-class extension to PPP Multilink is believed to be no more and no less secure than operation of the underlying PPP Multilink protocol (RFC 1990); no additional security properties or vulnerabilities are introduced.
Long Sequence Number Fragment Format with Classes (Figure 3): PPP PID 0x003d, MP header is B(1)|E(1)|class(4)|0(1)|0(1)|sequence_number(24), followed by fragment data and PPP FCS. The 4-bit class field provides 16 suspendable classes.
Multilink Header Format LCP Option (Figure 4, Type=27, Length=4): one-octet Code field (2=long seq with classes, 6=short seq with classes) and one-octet '# Susp Clses' field bounding the maximum class number usable for suspendable classes.
Prefix Elision LCP Option (Figure 5, Type=26): variable-length; after the Type and Option Length octets, contains one or more tuples of (1-octet Class, 1-octet Prefix Length, Prefix bytes), associating each named class with a byte prefix to be stripped before transmission and re-prepended after reassembly.
Short Sequence Number Fragment Format with Classes (Figure 2): PPP PID 0x003d, MP header is B(1)|E(1)|cls(2)|sequence_number(12), followed by fragment data and PPP FCS. The 2-bit cls field provides 4 suspendable classes.