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

Multipath TCP patches from BZ 69292 #476

Closed
wants to merge 2 commits into from
Closed

Commits on Aug 30, 2024

  1. Add Multipath TCP (MPTCP) support (Proxy)

    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, MPTCP 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, MPTCP 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 it on Linux, an application must explicitly enable
    it when creating the socket. No need to change anything
    else in the application.
    
    Adding the possibility to create MPTCP sockets would thus
    be a really fine addition to httpd, by allowing clients
    to make use of their different interfaces.
    
    This patch introduces the possibilty to connect to backend
    servers using MPTCP. Note however that these changes are
    only available on Linux, as IPPROTO_MPTCP is Linux specific
    for the time being.
    
    For proxies, we can connect using MPTCP by passing the
    "multipathtcp" parameter:
    
    ProxyPass "/example" "http://backend.example.com" multipathtcp=On
    
    We then store this information in the worker and create sockets
    appropriately according to this value.
    
    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]
    Aperence authored and notroj committed Aug 30, 2024
    Configuration menu
    Copy the full SHA
    dfa6aec View commit details
    Browse the repository at this point in the history
  2. Add Multipath TCP (MPTCP) support (Core)

    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, MPTCP 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, MPTCP 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 it on Linux, an application must explicitly enable
    it when creating the socket. No need to change anything
    else in the application.
    
    Adding the possibility to create MPTCP sockets would thus
    be a really fine addition to httpd, by allowing clients
    to make use of their different interfaces.
    
    This patch introduces the possibility to listen with MPTCP
    sockets. Note however that these changes are only available
    on Linux, as IPPROTO_MPTCP is Linux specific for the time being.
    
    To do so, we extended the Listen directive to include
    a "multipathtcp" option, allowing to create MPTCP sockets
    instead of regular TCP ones:
    
    Listen 80 options=multipathtcp
    
    We then store this information in flags for the listen directive
    and create sockets appropriately according to this value.
    
    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]
    Aperence authored and notroj committed Aug 30, 2024
    Configuration menu
    Copy the full SHA
    0d56d53 View commit details
    Browse the repository at this point in the history