Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[core] add MPTCP support #132

Closed
wants to merge 1 commit into from
Closed

[core] add MPTCP support #132

wants to merge 1 commit into from

Commits on Mar 15, 2024

  1. [core] add MPTCP support

    Multipath TCP (MPTCP), standardized in RFC8684 [1], is a TCP extension
    that enables a TCP connection to use different paths.
    Multipath TCP has been used for several use cases.
    On smartphones, Multipath TCP enables seamless handovers between
    cellular and Wi-Fi networks while preserving established connections.
    This use-case is what pushed Apple to use MPTCP since 2013 in multiple
    applications [2]. On dual-stack hosts, Multipath TCP enables the TCP
    connection to automatically use the best performing path,
    either IPv4 or IPv6. If one path fails, Multipath TCP automatically
    uses the other path. To benefit from MPTCP, both the client and the
    server have to support it.
    
    Multipath TCP is a backward-compatible TCP extension that is enabled by
    default on recent Linux distributions (Debian, Ubuntu, Redhat, ...).
    Multipath TCP is included in the Linux kernel since version 5.6 [3].
    To use Multipath TCP on Linux, a server application must explicitly
    enable it when creating the socket. No need to change anything else in
    the application. This is what the attached patch is doing.
    
    It is important to note that a MPTCP-enabled server continues to accept
    regular TCP connections that do not use the Multipath TCP extension
    without any performance impact.
    
    When a connection request is received, and is linked to a listening
    socket with MPTCP support, the kernel will simply check if MPTCP
    options are present. If not, the accepted socket will be a "plain" TCP
    one.
    
    This commit modifies the creation of sockets on Linux, trying to use
    Multipath TCP is available. If not, a plain TCP socket is created
    instead. A new option is now available: `server.network-mptcp`. This
    option is enabled by default. It seems important to enable this option
    by default on the server side, to let clients using MPTCP while not
    degrading performances when "plain" TCP is used. If the option is not
    enabled by default, it looks difficult to convince each administrator to
    enable it explicitly. This technology is mainly useful for the client
    side while it doesn't change much for the server side where no other
    configuration is needed.
    
    Link: https://www.rfc-editor.org/rfc/rfc8684.html [1]
    Link: https://www.tessares.net/apples-mptcp-story-so-far/ [2]
    Link: https://www.mptcp.dev [3]
    Co-developed-by: Maxime Dourov <mux99@live.be>
    Co-developed-by: Olivier Bonaventure <Olivier.Bonaventure@uclouvain.be>
    Co-developed-by: Matthieu Baerts <matttbe@kernel.org>
    Signed-off-by: Maxime Dourov (UCLouvain) <mux99@live.be>
    mux99 committed Mar 15, 2024
    Configuration menu
    Copy the full SHA
    ddb43fc View commit details
    Browse the repository at this point in the history