Redesigning the Network Stack for Mobile Devices
Poor connectivity is common when using wireless networks on the go. Connectivity comes and goes, throughput varies, latencies can be extremely unpredictable, and failures are frequent. Industry reports that demand is growing faster than wireless capacity, and the wireless crunch will continue for some time to come. Yet users expect to run increasingly rich and demanding applications on their smart-phones, such as video streaming, anywhere-anytime access to their personal files, and online gaming; all of which depend on connectivity to the cloud over unpredictable wireless networks. Given the mismatch between user expectations and wireless network characteristics, users will continue to be frustrated with application performance on their mobile computing devices.
The problem is often attributed to a shortage of wireless capacity or spectrum. This is simply not true. Today, if we stand in the middle of a city, we can likely "see" multiple cellular and WiFi networks. But, frustratingly, this capacity and infrastructure is not available to us. Our contracts with cellular companies restrict access to other networks; most private WiFi networks require authentication, and are effectively inaccessible to us. Although we are often surrounded by abundant wireless capacity, almost all is off-limits. This is not good for us, and it is not good for network owners: Their network might have lots of spare capacity, even though a paying customer is close-by.
We believe users should be able to travel in a rich field of wireless networks with access to all wireless infrastructure around them, leading to a competitive marketplace with lower-cost connectivity and broader coverage. In the extreme, if all barriers to fluidity can be removed, users could connect to multiple networks at the same time, opening up enormous capacity and coverage.
The good news is that smartphones will be armed with multiple radios capable of connecting to several networks at the same time. Whereas today's phones commonly have four or five radios (e.g. 3G, 4G, WiFi, Bluetooth), in future they will have more. Shrinking geometries and energy-efficient circuit design will lead to mobile devices with ten or more radios; a mobile device will talk to multiple APs at the same time for improved capacity, coverage and seamless handover. If a smartphone can take advantage of multiple wireless networks at the same time, then the user can experience:
- Seamless connectivity: by using the best current network, and allowing the client to choose which network to connect to dynamically,
- Faster connections: by stitching together flows over multiple networks,
- Lower loss: by using diversity, and potentially coding over multiple channels,
- Lower usage charges: by choosing to use the most cost-effective network that meets the application needs,
- Lower energy: by using the network with the current lowest energy-usage per byte.
In our vision, intelligent and autonomous mobile devices will hunt the vicinity to find the best radio networks, and will choose which one(s) to connect to so as to best meet the user's needs. Key to our vision is the notion that control rests with the client (the user and the smart-phone): The network and the mobile client software will provide information about the presence, performance and price of different networks; the client and the applications decide which one(s) to use.
Our vision requires much more than just multiple radios and multiple networks-it requires that the mobile client (as well as the applications and user) can take advantage of them. Today's clients are ill-equipped to do so, having grown up in an era of TCP connections bound to a single physical network connection.
To equip the clients with the necessary capabilities, we created Hercules, a new client networking stack. Hercules empowers users to dynamically choose which set of interfaces their applications use, as well as which retransmission and congestion mechanisms to use. Applications disclose what semantics they desire by providing hints to the network stack which then decides what network(s) to use, and how to configure the stack. Our architecture can be used to communicate with an existing stack (backward compatibility), or allow two clients running Hercules to use multiple interfaces, customize their communications, and use new features.
Hercules is motivated by mobile clients with multiple wireless interfaces, but all of the principles and design choices described in this paper apply to a client with wired interfaces, or a mix of the two.
We have plenty of work ahead of us, and we are still refining the architecture and creating new experiments. We will explore how ON.Lab can help carry on the development of Hercules, or help transfer it to an open industry effort like Android. We hope others will build upon Hercules to demonstrate clients that interact with the network controller (for example, to interpose middleboxes, or implement network-specific coding schemes); or outsource the control plane entirely to a remote location.