MPTCP and Middleware
Today’s Internet is not the Internet of old. Today’s Internet is replete with various forms of
middleware that includes NATs, load balancers, traffic shapers, proxies, filters and firewalls. The
implication of this is that any deviation from the most basic forms of use of IP will run into various
issues with various forms of middleware.
For MPTCP the most obvious problem is that of middleware that strips out unknown TCP options.
However, more insidious issues come with the ADD_ADDR messages and NATs on the path.
Sending IP addresses within the data payload of a NATTed connection is always a failure-prone option,
and MPTCP is no exception here. MPTCP contains no inbuilt NAT detection functions, and no way to
determine the directionality of the NAT. A host can communicate to the remote end it’s own IP
address of additional available addresses, but if there is a NAT translating the local host outbound
connections then the actual address will be unavailable for use until the host actually starts a TCP
session using this local address as the source.
A simple approach that is effective where there are NATs in place is to leave the role of initiation of
new Subflows to the host that started the connection in the first place. In a Client / Server
environment this would imply that the role of setting up new Subflows is one that is best left to the
client in such cases. However, no such constraints exist when there are no NATs, and in that case
either end can initiate new subflows, and the ADD_ADDR messages can keep the other end informed
about potential new parallel paths between the two hosts. Logically it makes little sense for MPTCP
itself to define a NAT-sensing probe behavior, but it makes a lot of sense for the application using
MPTCP to undertake such a test.