Multipath TCP
The approach of incorporating multiple IP addresses in the transport protocol is comparable to
SHIM6’s efforts one level further down in the protocol stack, in so far as this is an end-to-end
mechanism with a shared multiplex state maintained in the two end hosts, and no state whatsoever in
the network.
The basic mechanisms for Multipath TCP (MTCP) are also similar to that of SHIM6, with an initial
capability exchange to confirm that both parties support the mechanism, allowing the parties to then
open up additional paths, or channels. But at this point the functionality diverges. In SHIM6 these
alternate paths are provisioned as backup paths in the event of failure of the primary path, while in the
case of MPTCP these additional paths can be used immediately to spread the load of the
communication across these paths, if so desired by the application.
One of the most critical assumptions of MPTCP was drawn from SHIM6, in that the existence of
multiple addresses in a host is sufficient to indicate the existence of multiple diverse paths within the
network. Whether this is in fact the case of not is perhaps not that critical, in that even in the case
where the addresses are on the same path from end-to-end the end result is roughly equivalent to
running multiple parallel sessions of TCP.
The basic approach to Multipath TCP is the division of the application’s single outbound flow
into multiple sub-flows, each operating its own end-to-end TCP session, and the re-joining of multiple
input sub flows into a single flow to present to the remote counterpart application. This is shown inThis is essentially a “shim” inserted in the TCP module. To the upper level application MPTCP can
operate in a manner that is entirely consistent with TCP, so that the opening up of subflows and the
manner in which data is assigned to particular subflows is intentionally opaque to the upper level
application. The envisaged API allows the application to add and remove addresses from the local
multipath pool but the remainder of the operation of the MPTCP shim is not envisaged to be directly
managed by the application. MPTCP also leaves the lower level components of TCP essentially
untouched, in so far as each MPCTP subflow is a conventional TCP flow. On the data sender’s side the
MPTCP shim essentially splits the received stream from the application into blocks and directs
individual blocks into separate TCP subflows. On the receiver’s side the MPTCP shim assembles the
blocks from each TCP subflow and reassembles the original data stream to pass to the local application.