Which network to use when - Socket Intents
2017-10-22, 12:15–12:55, Galerie

Nowadays, most end devices have multiple network interfaces to connect to the Internet. They usually pick a statically configured default interface, such as WiFi, which they prefer over LTE when both are available, but this is not necessarily the choice that provides the best performance to the application. Socket Intents is a research prototype that addresses the problem of finding policies of which network interface to pick for what kind of traffic or application. It provides several networking APIs through which an application can specify its "Intents", i.e., what it knows or assumes about its own traffic. The prototype then decides which of the available network interfaces to use.

Hacking the Socket API for fun and research
The Socket Intents framework is a research prototype developed at the INET group at TU Berlin, running in user space on Linux and Mac OS. It is written in C and released under a BSD license. Using the Socket Intents library, an application can set up a connection specifying its "Intents", e.g., whether the connection is going to be a small query or a large bulk transfer, whether it is intended to be a long-lived steady stream of data or a series of interactive bursts, and whether it is time-critical or background traffic. The client library then queries a daemon, the Multi Access Manager (MAM), to make a decision about which of the available network interfaces to bind this connection to, based on the Intents and on current performance estimates if available.
Socket Intents aims to overcome the assumption that only one network interface would be available at a time, or that there is always the same statically configured "default" interface to use. By itself, the Socket API does not provide a good way to choose between different interfaces without placing the burden on the application. Instead of having each applications implement an interface selection logic by itself, Socket Intents provides one daemon, the Multi Access Manager, to gather as much information about the currently available network interfaces and their performance as possible. As it knows about the performance of the connected networks and about the needs of the application, based on its Intents, the Multi Access Manager can make decisions about which network interface to ues for what connection. It can also make decisions for individual objects, e.g., components of a web page, and schedule them among multiple persistens TCP connections that were established over multiple interfaces. Also, it is compatible with Multi-Path TCP (MPTCP) and can choose to schedule an object or connection over not a single interface, but multiple bundles interfaces.