ZEC Configuring MultiPath TCP
- Avinash Bisht (Unlicensed)
Developed by the Internet Engineering Task Force's (IETF) Multipath TCP working group, MultiPath TCP (MPTCP) is an effort towards enabling the simultaneous use of several IP-addresses/interfaces by a modification of TCP that presents a regular TCP interface to applications, while in fact spreading data across several subflows. This means that the Linux Kernel should be updated to support MPTCP. The MPTCP functionality is similar to Zixi's "multi-link bonding" feature, which is available for UDP only, while MPTCP works on TCP.
If both the sending end and the receiving end support MultiPath TCP, Zixi can use this functionality to transmit a stream over TCP using multiple network interfaces (e.g. Wifi + mobile). The multiple links can be configured to:
- Aggregate - aggregates the bandwidth of the multiple links in order to use the total capacity of these links. In this case Zixi will use all available bandwidth among all available flows (if needed) to send the stream.
- Duplicate - enhance the path's resiliency by duplicating the stream and sending through all links in order to overcome errors and packet loss.
MultiPath Modes
MultiPath TCP can be used in two modes:
- Pull – when pulling the stream, the receiving-end has multiple network interfaces (e.g. two NIC) while the sending side has one network interface. When the stream is pulled by the receiving-end using the MultiPath feature, the client (receiving side / puller) creates the sub-flows, (one per nic) and connects to the "source" (the server). The definition of the NICs in the destination is done automatically at the OS socket level. To configure this mode:
- In the sending side - In Settings > Live Protocols screen, enable the Allow automatic Pull output option. In this option the output will be created automatically when the Pull connection is established. Following the connection, the two links will be displayed as bonded links. When the connection is established, the two links will be displayed as bonded links as shown below.
- In the receiving side – Configure a TS over HTTP Input as Pull. When the connection is established, only one link is displayed as shown below.
- In the sending side - In Settings > Live Protocols screen, enable the Allow automatic Pull output option. In this option the output will be created automatically when the Pull connection is established. Following the connection, the two links will be displayed as bonded links. When the connection is established, the two links will be displayed as bonded links as shown below.
- Push – when pushing the stream, the receiving-end has one or more network interfaces (e.g. two NICs) while the sending side can have one network interface. In this case, you should configure it in the following way:
- In the sending side – you will need to configure a TCP output from the ZEC in the sending side. In this case you can configure the two links as Aggregate or Duplicate, as described above. When the connection is established, the two links will be displayed as bonded links as shown below.
- In the receiving side - In the receiving-end, if this is also a ZEC, you have two options:
- Configure a TS over HTTP Input as Push. In this option the Push input is ready in advance and will show the bitrates of both TCP connections when the connection has been established.
- In Settings > Live Protocols screen, enable the Allow automatic Push input option. In this option the input will be created automatically when the Push connection is established.
When the connection is established, the two links will be displayed as bonded links as shown below.
- In the sending side – you will need to configure a TCP output from the ZEC in the sending side. In this case you can configure the two links as Aggregate or Duplicate, as described above. When the connection is established, the two links will be displayed as bonded links as shown below.
MultiPath TCP Setup
Zixi supports MultiPath TCP for Linux based on the OS Kernel support. This means that the Linux Kernel should be updated to support MPTCP.
-> To setup MultiPath TCP:
- Follow the relevant instructions in - https://multipath-tcp.org/pmwiki.php/Users/HowToInstallMPTCP?