A method comprising: at a first mobile device having a user interface, one or more wireless interfaces, and one or more processors coupled to the one or more wireless interfaces and the user interface: receiving, at a mux module over a first connection, first data having a payload sent from a first client application executing on the one or more processors, the first data including first header information identifying a second device as a destination for the first data, the mux module executing on the one or more processors, wherein a virtual address is assigned to the first connection; identifying, by the mux module, a primary socket connection between the first mobile device and the second device, wherein the mux module includes a tunnel controller, and wherein identifying the primary socket connection for the first data includes: creating, at the tunnel controller, a mapping between a device identifier of the second device and the virtual address; and selecting a first link from among a plurality of links for sending the first data to the second device, wherein the first link corresponds to a first wireless interface and a first transport layer protocol, wherein the first wireless interface or the first transport layer protocol differs from a second wireless interface or a second transport layer protocol of a second link of the plurality of links; transmitting the first data to the second device using the primary socket connection; receiving, at the mux module over a second connection, second data having a payload sent from a second client application executing on the one or more processors, the second data including second header information identifying the second device as the destination for the second data; identifying, by the mux module, that the primary socket connection exists between the first mobile device and the second device; and transmitting the second data to the second device using the primary socket connection. receiving, at a mux module over a first connection, first data having a payload sent from a first client application executing on the one or more processors, the first data including first header information identifying a second device as a destination for the first data, the mux module executing on the one or more processors, wherein a virtual address is assigned to the first connection; identifying, by the mux module, a primary socket connection between the first mobile device and the second device, wherein the mux module includes a tunnel controller, and wherein identifying the primary socket connection for the first data includes: creating, at the tunnel controller, a mapping between a device identifier of the second device and the virtual address; and selecting a first link from among a plurality of links for sending the first data to the second device, wherein the first link corresponds to a first wireless interface and a first transport layer protocol, wherein the first wireless interface or the first transport layer protocol differs from a second wireless interface or a second transport layer protocol of a second link of the plurality of links; transmitting the first data to the second device using the primary socket connection; receiving, at the mux module over a second connection, second data having a payload sent from a second client application executing on the one or more processors, the second data including second header information identifying the second device as the destination for the second data; identifying, by the mux module, that the primary socket connection exists between the first mobile device and the second device; and transmitting the second data to the second device using the primary socket connection. creating, at the tunnel controller, a mapping between a device identifier of the second device and the virtual address; and selecting a first link from among a plurality of links for sending the first data to the second device, wherein the first link corresponds to a first wireless interface and a first transport layer protocol, wherein the first wireless interface or the first transport layer protocol differs from a second wireless interface or a second transport layer protocol of a second link of the plurality of links; transmitting the first data to the second device using the primary socket connection; receiving, at the mux module over a second connection, second data having a payload sent from a second client application executing on the one or more processors, the second data including second header information identifying the second device as the destination for the second data; identifying, by the mux module, that the primary socket connection exists between the first mobile device and the second device; and transmitting the second data to the second device using the primary socket connection.