The PPP Multilink Protocol (MP)
obsoletes
- rfc-1717 — The PPP Multilink Protocol (MP)
Extracted elements (30)
A receiver SHOULD allocate at least twice the sum of per-channel slippage S[c] = R[c] × D[c, c-worst] plus the maximum fragment sizes across all channels; any less risks incorrectly declaring packet loss. No buffer size is sufficient to guarantee correct detection against an adversarial peer that withholds fragments on one channel.
Null fragments (both B and E bits set, no payload) SHOULD be sent on links that become idle immediately after transmitting an E-bit fragment, to advance M at the receiver and prevent indefinite reassembly stalls. Implementations may defer null fragments until a timer expires to avoid wasting bandwidth.
Senders SHOULD avoid keeping member links idle because M is not incremented on idle links, delaying the receiver's ability to detect lost fragments. Senders SHOULD rotate traffic among all member links when total traffic would not overflow a single link.
Whether to transmit leading zeroes in the Protocol Field is determined once at bundle creation by examining whether PFC has been negotiated on the first link admitted to the bundle, and this choice is kept in force for the bundle's lifetime to avoid alignment-dependent performance problems in some implementations.
Compression may run separately on each member link or over the bundle as a logical group link. Per-link compression streams use the Compression Control Protocol with an alternative PPP protocol ID to distinguish them from bundle-level compression.
RFC 1990 tightens RFC 1717: the SSNHF option alone no longer signals multilink intent (MRRU is required), the initial sequence number is defined as 0, there is no default MRRU value, Config-Nak of the EID is prohibited, and all links in a bundle must use the same sequence number format. Systems obeying these restrictions are fully interoperable with conforming RFC 1717 implementations.
A system MUST be able to receive the full 1500-octet Information field of any reassembled PPP packet, though it MAY attempt to negotiate a smaller or larger MRRU value.
A system MUST include the LCP MRRU option in every LCP negotiation intended to instantiate or join an existing bundle. When joining an existing bundle, the system MUST offer the same MRRU value previously negotiated for that bundle.
A system MUST NOT send any multilink packets on any link unless the peer has offered the MMRU LCP option and the system has Configure-Ack'd it during the most recent LCP negotiation on that link.
An implementation MUST NOT transmit LCP Configure-Request, -Reject, -Ack, -Nak, Terminate-Request, or -Ack packets via the multilink procedure, and MUST silently discard any such packets received over the bundle.
An implementation MUST set the sequence number of the first fragment transmitted on a newly-constructed bundle to zero. Joining a secondary link to an existing bundle is invisible to the protocol and MUST NOT reset the sequence number space.
Bundle assignment is governed by four scenarios: (1) no auth, no discriminator — all links MUST join one bundle; (2) discriminator, no auth — match MUST join, mismatch MUST establish new bundle; (3) auth, no discriminator — match MUST join, mismatch MUST establish new bundle; (4) both — both must match to join, either mismatch MUST establish new bundle.
If a system receives a Configure-Nak or Configure-Reject of the Endpoint Discriminator option, it MUST remove it from any additional Configure-Request. The system MUST NOT generate a Configure-Nak of this option if it was not present in the peer's Configure-Request.
If reliable multilink operation is desired, PPP Reliable Transmission (ISO LAPB) MUST be negotiated prior to the use of the Multilink Protocol on each member link. An implementation MUST present a signal to NCPs over the multilink arrangement when a loss has occurred, whether or not reliable delivery is employed.
Implementations MUST NOT include the Address and Control Field (0xFF 0x03) in the logical entity to be fragmented. An implementation MUST accept reassembled packets with and without leading zeroes in the Protocol Field.
Non-terminal multilink fragments MUST NOT be padded with trailing material by any method other than Self-Describing-Padding. A system MUST NOT add padding to any packet that cannot be recognized as padded by the peer.
On each member link, the sender MUST transmit fragments with strictly increasing sequence numbers modulo the sequence space. Sequence numbers are not reset per PPP packet; a number is consumed even for single-fragment (B=1, E=1) packets.
The reserved field in the MP header MUST be set to zero; it is 6 bits in the long-sequence format and 2 bits in the short-sequence format.
The Short Sequence Number Header Format option MUST be negotiated when the bundle is instantiated if 12-bit sequence numbers are desired, and MUST be explicitly included in every LCP Configure-Request when a system intends to add a link to a bundle already using 12-bit sequence numbers.
When link Y is added to a bundle containing existing link X, a system MUST transmit a Multilink-encapsulated packet on X before transmitting any Multilink-encapsulated packets on Y.
A bundle is the virtual PPP link-layer entity combining multiple physical links between a fixed pair of systems, named by the pair of system identifiers. All fragments received on any member link are presented to a single network-layer protocol processing machine whether or not they carry multilink headers.
The B(eginning) and E(nding) one-bit fields in the MP header mark fragment boundaries: B=1 on the first fragment of a PPP packet, E=1 on the last. A single-fragment packet has both bits set to 1. These bits drive the reassembly state machine at the receiver.
The Endpoint Discriminator Option (Type=19) identifies the transmitting system and drives bundle assignment. It contains a one-octet Class field (0=Null, 1=Local, 2=IP Address, 3=IEEE 802.1 MAC, 4=PPP Magic-Number Block, 5=PSTN Directory Number) and a variable-length Address field whose maximum length and content depend on the class.
The Multilink MRRU LCP Option (Type=17, Length=4) signals that the sender implements PPP Multilink and specifies the Max-Receive-Reconstructed-Unit as a 2-octet field. Its presence and acceptance cause all packets from the same peer on any link where the option is accepted to be processed by a single common protocol machine.
The Short Sequence Number Header Format Option (Type=18, Length=2) advises the peer that the sender wishes to receive fragments with 12-bit sequence numbers. When a peer Configure-Acks this option, it MUST transmit all multilink packets on all bundle links with 12-bit sequence numbers.
Operation of the Multilink Protocol is no more and no less secure than the PPP authentication protocols it relies upon; no independent security mechanism is introduced. The reader is directed to those protocols for further discussion.
To securely join an existing bundle, a PPP authentication protocol must be used to obtain authenticated peer information. Without authentication, a hostile peer can join an existing bundle by presenting a falsified Endpoint Discriminator option.
Fragment loss detection maintains M, the minimum of the most recently received sequence number across all member links. A lost fragment is detected when M advances past the sequence number of an E-bit fragment belonging to an incompletely reassembled packet; the receiver then discards all fragments up to the lowest-numbered E-bit fragment with sequence >= U (the deduced lost sequence).
The long sequence number fragment format uses PPP protocol identifier 0x00-0x3d, followed by a 4-byte MP header containing a B(eginning) bit, E(nding) bit, 6 reserved bits (MUST be zero), and a 24-bit sequence number. This is the default format when the Short Sequence Number Header Format Option has not been negotiated.
The short sequence number fragment format uses the same PPP protocol identifier 0x00-0x3d but with a 2-byte MP header containing a B bit, E bit, 2 reserved bits (MUST be zero), and a 12-bit sequence number. This format must be negotiated via the Short Sequence Number Header Format LCP option before it may be used.