rfc-1717

The PPP Multilink Protocol (MP)

K. Sklower, B. Lloyd, G. McGregor, D. Carr
date1994-11 streamLegacy statusPROPOSED STANDARD pages21 canonicalhttps://www.rfc-editor.org/rfc/rfc1717 doi10.17487/RFC1717
This document proposes a method for splitting, recombining and sequencing datagrams across multiple logical data links. [STANDARDS-TRACK]

obsoleted by

Extracted elements (31)

design-rationale §1.1

Multilink offers a pure software alternative to bit-level synchronization (BONDING) for bonding multiple ISDN or async channels. The four-byte sequencing header allows splitting and reassembly of packets across parallel virtual circuits, reducing latency and increasing effective MRU compared to simple per-packet alternation (the 'Bank Teller's algorithm'), which causes reordering.

design-rationale §4.2

Receiver buffer space SHOULD be at least twice the sum of per-channel slippage values (S[c] = R[c] * D[c, c_worst]) plus maximum fragment sizes for all channels. Allocating less risks false-positive fragment loss declarations under bursty traffic with heterogeneous link delays.

design-rationale §4.1

Senders SHOULD send null fragments (B and E bits set, no payload) on links that would otherwise go idle immediately after transmitting an E-bit fragment. Without null fragments the receiver cannot advance M, potentially stalling reassembly indefinitely; implementations may defer null fragments until a timer expires at the cost of longer stalls.

design-rationale §5.1.3

The Endpoint Discriminator option enables automatic bundle formation by identifying the physical peer endpoint across independently negotiated PPP links. Classes with globally unique values (IP address, IEEE 802.1 MAC) are preferred; Locally Assigned and PPP Magic-Number Block classes are deprecated because uniqueness is not guaranteed.

design-rationale §3

There is no separate FCS applied to the reconstituted multi-fragment packet; integrity is provided entirely by each member link's individual frame FCS. This avoids a redundant second integrity pass at the bundle level.

interoperability-note §2

Member links may be of heterogeneous physical types (async dial-up, synchronous leased lines, ISDN B-channels, X.25 SVCs, Frame Relay). Links of different transmission rates may coexist in one bundle, and fragment sizes may be proportioned to link speeds.

interoperability-note §2

Network protocols sent without multilink headers cannot be sequenced and will be delivered in any convenient order. NCP packets may flow with or without multilink headers over any member link once that link has identified itself as belonging to a multilink arrangement.

interoperability-note §3

Systems are not required to fragment small packets, segments need not be equal in size, and a packet may be sent as a single fragment (both B and E bits set). Individual member links may have PPP options (ACCM, Magic Number, LQM, compression, etc.) that differ from each other.

normative-requirement §5.1.1 MUST NOT

A system MUST NOT accept the Multilink MRRU LCP option if it is not willing to symmetrically have its own transmitted packets interpreted under the same bundle-level multilink arrangement.

normative-requirement §3.1 MUST NOT

A system MUST NOT add padding to any packet that cannot be recognized as padded by the peer; non-terminal fragments MUST NOT be padded by any method other than Self-Describing-Padding. A system that may pad non-terminal fragments MUST negotiate Self-Describing-Padding (RFC 1570) on the member link before sending multilink data.

normative-requirement §2 MUST NOT

An implementation MUST NOT transmit LCP Configure-Request, -Reject, -Ack, -Nak, Terminate-Request, or -Ack packets via the multilink procedure; a receiver of such packets via multilink MUST silently discard them.

normative-requirement §4.1 MUST

An implementation MUST set the sequence number of the first fragment on a newly-constructed bundle to zero, and MUST NOT reset the sequence number space when a secondary link joins an existing bundle.

normative-requirement §5.1.3 MUST

Bundle-joining decision tree: (1) no auth, no discriminator — all new links MUST join one bundle; (2) discriminator match → MUST join matching bundle, mismatch → MUST establish new bundle; (3) auth match → MUST join, mismatch → MUST establish new; (4) discriminator and auth — both match → MUST join, either mismatches → MUST establish new bundle.

normative-requirement §5.1.3 MUST

If a system receives a Configure-Nak or Configure-Reject of the Endpoint Discriminator option it MUST remove the option from any subsequent Configure-Request. If the option is absent from a received Configure-Request, the system MUST NOT generate a Configure-Nak for it.

normative-requirement §5.1.3 MUST NOT

If an Endpoint Discriminator option is received but neither the Multilink MRRU nor Short Sequence Number option is received, the implementation MUST NOT assume multilink operation is being requested on the discriminator alone.

normative-requirement §5 MUST

If reliable multilink operation is desired, PPP Reliable Transmission (ISO LAPB) MUST be negotiated prior to use of the Multilink Protocol on each member link. Regardless of reliability mode, an implementation MUST present a loss signal to NCPs running over the multilink arrangement when fragment loss is detected.

normative-requirement §4.1 MUST

On each member link the sender MUST transmit fragments with strictly increasing sequence numbers modulo the sequence space size. The sequence number is not reset per PPP packet; a sequence number is consumed even for single-fragment packets.

normative-requirement §3 MUST

The reserved field (between the E bit and the sequence number) MUST be set to zero; it is 2 bits wide when short sequence numbers are negotiated, 6 bits otherwise.

normative-requirement §5.1.2 MUST

When the Short Sequence Number Header Format option is received, an implementation MUST either transmit all subsequent multilink packets on all bundle links using 12-bit sequence numbers or Configure-NAK/Configure-Reject the option.

protocol-element §2

A bundle is a virtual PPP link entity aggregating multiple physical or logical member links between a fixed pair of systems. It is named by the pair of system identifiers, which may include PPP authentication results and LCP negotiation information.

protocol-element §3

PPP Multilink uses protocol identifier 0x003d to encapsulate fragments. A single reassembly structure is associated with each bundle; all fragments received over member links are presented to the same network-layer protocol machine whether or not they carry multilink headers.

protocol-element §3

The B (Beginning) bit is set to 1 on the first fragment of a PPP packet and 0 on all others; the E (Ending) bit is set to 1 on the last fragment. A fragment may have both bits set, indicating it carries an entire PPP packet.

registry §5.1.3

Endpoint Discriminator Class values: 0 (Null, max 0 bytes), 1 (Locally Assigned, max 20 bytes, deprecated), 2 (IP Address, fixed 4 bytes), 3 (IEEE 802.1 MAC Address, fixed 6 bytes, global-bit and multicast-bit must be clear), 4 (PPP Magic-Number Block, max 20 bytes, deprecated), 5 (E.164 Directory Number, max 15 bytes). Authoritative list maintained in Assigned Numbers.

registry

registry §5.1

Three new LCP Configuration Option types are assigned: Type 17 (Multilink MRRU), Type 18 (Short Sequence Number Header Format), and Type 19 (Endpoint Discriminator). Values are registered in the Assigned Numbers RFC.

registry

security-consideration §8

The security of the Multilink Protocol is entirely dependent on the underlying PPP authentication protocols. To securely join an existing bundle, authentication MUST be used; without it a hostile peer can join any bundle by presenting a falsified Endpoint Discriminator option.

security

state-machine §4.1

Fragment loss detection: receiver maintains M = minimum most-recently-received sequence number across all member links. When M advances past an unassembled packet's E-bit fragment, a loss is declared; receiver discards all fragments up to M, then either starts reassembling from M (if B bit set) or resynchronizes by discarding all non-B-bit fragments until a new B-bit fragment arrives.

wire-format §5.1.3

Endpoint Discriminator LCP option (Type=19, Length=3+address): a 1-octet Class field selecting the identifier address space and a variable-length Address field identifying the transmitting endpoint; supports Classes 0–5 (Null, Locally Assigned, IP, MAC, PPP Magic-Number Block, E.164 Directory Number).

wire-format §3

Long-sequence-number fragment format: PPP header (Address 0xff, Control 0x03, PID 0x003d), followed by a 4-byte MP header with B (Beginning) bit, E (Ending) bit, 6 reserved bits (must be zero), and a 24-bit sequence number, then fragment data and PPP FCS.

wire-format §5.1.1

Multilink MRRU LCP option (Type=17, Length=4): a 2-byte Max-Receive-Reconstructed-Unit field indicating the largest reassembled PDU payload the sender can accept; defaults to 1600 bytes if not explicitly negotiated.

wire-format §3

Short-sequence-number fragment format: PPP header (Address 0xff, Control 0x03, PID 0x003d), followed by a 2-byte MP header with B bit, E bit, 2 reserved bits (must be zero), and a 12-bit sequence number, then fragment data and PPP FCS.

wire-format §5.1.2

Short Sequence Number Header Format LCP option (Type=18, Length=2): zero-data option signaling that the sender wishes to receive fragments with 12-bit sequence numbers rather than the default 24-bit sequence numbers.