A method of communicating data using virtualization, the method comprising: a) spawning, at a first device, a first plurality of virtual machines, wherein each of the first plurality of virtual machines virtualizes network capabilities of the first device such that a first plurality of virtual network connections are provided; b) splitting into a first plurality of data streams, at endpoint software running on the first device, first data for communication to a second device; c) selecting, at the first device by the endpoint software, a first plurality of deflects for use in communicating the first plurality of data streams; wherein each of the deflects represents deflect software; d) communicating each of the first plurality of data streams using a different one of the first plurality of virtual network connections over a different one of the selected first plurality of deflects; e) spawning, at a first deflect of the selected first plurality of deflects, a second plurality of virtual machines, wherein each of the second plurality of virtual machines virtualizes network capabilities of the first deflect such that a second plurality of virtual network connections are provided; f) receiving, at the first deflect, a first data stream of the first plurality of data streams; g) splitting, at the first deflect, the first data stream of the first plurality of data streams into a second plurality of data streams; h) selecting, at the first deflect, a second plurality of deflects for use in communicating the second plurality of data streams; i) communicating each of the second plurality of data streams using different one of the second plurality of virtual network connections over a different one of the selected second plurality of deflects; j) receiving, at a second deflect from a first set of deflects, the second plurality of data streams; wherein the first set of deflects comprises none, one or more deflects of the selected second plurality of deflects; k) reassembling, at the second deflect, the second plurality of data streams into the first data stream, and communicating the first data stream onward to the second device; l) receiving, at the second device from a second set of deflects, the first plurality of data streams including the reassembled first data stream; wherein the second set of deflects comprises none, one or more deflects of the first plurality of deflects or the second deflect; and m) reassembling, at the second device, the first plurality of data streams into the first data. a) spawning, at a first device, a first plurality of virtual machines, wherein each of the first plurality of virtual machines virtualizes network capabilities of the first device such that a first plurality of virtual network connections are provided; b) splitting into a first plurality of data streams, at endpoint software running on the first device, first data for communication to a second device; c) selecting, at the first device by the endpoint software, a first plurality of deflects for use in communicating the first plurality of data streams; wherein each of the deflects represents deflect software; d) communicating each of the first plurality of data streams using a different one of the first plurality of virtual network connections over a different one of the selected first plurality of deflects; e) spawning, at a first deflect of the selected first plurality of deflects, a second plurality of virtual machines, wherein each of the second plurality of virtual machines virtualizes network capabilities of the first deflect such that a second plurality of virtual network connections are provided; f) receiving, at the first deflect, a first data stream of the first plurality of data streams; g) splitting, at the first deflect, the first data stream of the first plurality of data streams into a second plurality of data streams; h) selecting, at the first deflect, a second plurality of deflects for use in communicating the second plurality of data streams; i) communicating each of the second plurality of data streams using different one of the second plurality of virtual network connections over a different one of the selected second plurality of deflects; j) receiving, at a second deflect from a first set of deflects, the second plurality of data streams; wherein the first set of deflects comprises none, one or more deflects of the selected second plurality of deflects; k) reassembling, at the second deflect, the second plurality of data streams into the first data stream, and communicating the first data stream onward to the second device; l) receiving, at the second device from a second set of deflects, the first plurality of data streams including the reassembled first data stream; wherein the second set of deflects comprises none, one or more deflects of the first plurality of deflects or the second deflect; and m) reassembling, at the second device, the first plurality of data streams into the first data.