Network congestion management

Technologies for managing congestion of a communication channel includes a network device for receiving a network packet from a computing device destined for another computing device, analyzing network traffic flows over a communication channel established between the network device and an upstream network device, and determining whether the communication channel is congested as a function of the network traffic flows. Such technologies may also include storing the received packet in a local storage in response to determining that the communication channel is congested, transmitting an acknowledgement packet to the computing device in response to storing the received network packet local storage, and transmitting the stored network packet to the upstream network device in response to determining that the communication channel is no longer congested.

BACKGROUND

Modern computing devices are becoming ubiquitous tools for personal, business, and social uses. As a result, the computer networks over which those computing devices communicate are being required to handle an ever-increasing amount of traffic. Due to that increased demand, it is not uncommon for one or more communication channels of a computer network to become temporarily congested with traffic. During periods of congestion, one or more network packets being transmitted from one computing device to another computing device may be lost. Such packet loss often results in the computing device having to retransmit the lost network packets, which may further add to the congestion.

DETAILED DESCRIPTION OF THE DRAWINGS

Referring now toFIG. 1, in the illustrative embodiment, a system100for managing congestion of a network communication channel includes one or more network devices110(e.g., a network device112and an upstream network device114), a source computing device102, a destination computing device104, and a network180. In use, one or more network connections (e.g., network traffic flows120) may be established over the network180between the source computing device102and the destination computing device104. Each of the network traffic flows may include one or more data packets generated by the source computing device102and destined for the destination computing device104. In some embodiments, the one or more network devices110are configured to facilitate transmitting one or more of the data packets generated by the source computing device102to the destination computing device104. For example, in the illustrative embodiment shown inFIG. 1, the network device112may receive one or more data packets from the source computing device102and then forward those packets to the upstream network device114for transmission to the destination computing device104. In some embodiments, the network device112is configured to forward those packets to the upstream network device114over a communication channel182established between the network device112and the upstream network device114.

In some embodiments, the network device112is also configured to determine whether the communication channel182established with the upstream network device114is congested. To do so, the network device112may monitor one or more network traffic flows120over the communication channel182established between the network device112and the upstream network device114. For example, in some embodiments, the network device112may monitor one or more existing network traffic flows130over the communication channel182. In such embodiments, the network device112may determine whether the communication channel182is congested (e.g., saturated, at capacity, etc.) based at least in part on, or otherwise as a function of, one or more network packets corresponding to the existing network traffic flows130.

As discussed in more detail below, the network device112may store network packets corresponding to a new network traffic flow140over the communication channel182in response to determining that the communication channel182is congested. In some embodiments, the new network traffic flow140may correspond to a new connection established between the source computing device102and the destination computing device104over the network180. In such embodiments, in order to facilitate preserving the new network connection (e.g., the new network traffic flow140that is being stored), the network device112may transmit an acknowledgement packet and/or message to the source computing device102for each network packet stored for the new network traffic flow140. To do so, the network device112may spoof or otherwise impersonate the destination computing device104such that the source computing device102believes that the acknowledgement packets are originating from the destination computing device104rather than the network device112. At the same or a substantially similar time, the network device112may transmit a keep-alive packet to one or more of the upstream network device114, other network devices110, and/or directly to the destination computing device104. As a result, the destination computing device104and/or one or more applications executing on the destination computing device104may believe that the new network connection (e.g., the new network traffic flow140) is still active, which may facilitate preventing the destination computing device104and/or one or more applications executing on the destination computing device104from unilaterally closing/terminating the new network connection.

After a reference amount of time, the network device112may determine that the communication channel182is no longer congested and, as a result, may retrieve and replay or otherwise forward the stored network packets to the upstream network device114for subsequent delivery to the destination computing device104. In doing so, the network device112may spoof or otherwise impersonate the source computing device102such that the upstream network device114and/or the destination computing device104believe that the replayed network packets are originating from the source computing device102rather than the network device112. Additionally, the network device112may intercept and drop or otherwise discard acknowledgement packets and/or messages received from the upstream network device114or the destination computing device104. In doing so, the network device112may facilitate preventing the source computing device102from receiving acknowledgement packets corresponding to replayed network packets.

It should be appreciated that by storing data packets associated with the newly established network traffic flow140, acknowledging the receipt of the stored data packets from the source computing device102, and later replaying the stored data packets to the upstream network device114and/or the destination computing device104, the network device112may preserve the newly established network traffic flow140and prevent the data packets associated with the newly established network traffic flow140from contributing to congestion of the communication channel182. For example, in some embodiments, the number of network packets lost and/or the number of network packets needing to be retransmitted may be reduced

Each of the network devices110(e.g., the network device112and the upstream network device114) may be embodied as any type of networking device capable of performing the functions described herein including, a network router, a network switch, a network hub, a wireless access point, a desktop computer, a laptop computer, and/or any other type of networking or computing device. As shown inFIG. 2, each of the illustrative network devices112,114includes a processor202, a memory206, an input/output (I/O) subsystem204, a data storage208, and communication circuitry212. Of course, the network devices112,114may include other or additional components, such as those commonly found in a networking and/or computing device (e.g., various input/output devices), in other embodiments. Additionally, in some embodiments, one or more of the illustrative components may be incorporated in, or otherwise from a portion of, another component. For example, the memory206, or portions thereof, may be incorporated in the processor202in some embodiments.

The processor202may be embodied as any type of processor capable of performing the functions described herein. For example, the processor202may be embodied as a single or multi-core processor(s), digital signal processor, microcontroller, or other processor or processing/controlling circuit. Similarly, the memory206may be embodied as any type of volatile or non-volatile memory or data storage capable of performing the functions described herein. In operation, the memory206may store various data and software used during operation of the network devices112,114such as operating systems, applications, programs, libraries, and drivers. The memory206is communicatively coupled to the processor202via the I/O subsystem204, which may be embodied as circuitry and/or components to facilitate input/output operations with the processor202, the memory206, and other components of the network devices112,114. For example, the I/O subsystem204may be embodied as, or otherwise include, memory controller hubs, input/output control hubs, firmware devices, communication links (i.e., point-to-point links, bus links, wires, cables, light guides, printed circuit board traces, etc.) and/or other components and subsystems to facilitate the input/output operations. In some embodiments, the I/O subsystem204may form a portion of a system-on-a-chip (SoC) and be incorporated, along with the processor202, the memory206, and other components of the network devices112,114, on a single integrated circuit chip.

The data storage208may be embodied as any type of device or devices configured for short-term or long-term storage of data such as, for example, memory devices and circuits, memory cards, hard disk drives, solid-state drives, or other data storage devices. In some embodiments, the data storage208may be configured to store network traffic data210. As discussed in more detail below, the network traffic data210may include one or more network packets associated with a new network traffic flow140over the communication channel182established between one or more of the network devices110(e.g., the network device112and the upstream network device114). The network traffic data210may also include information regarding one or more of the network traffic flows120. For example, in some embodiments, the network traffic data210may include information corresponding to the status (e.g., active, amount of time inactive, etc.) of one or more of the network traffic flows120. Such information may be stored in one or more tables, files, and/or in any other format suitable for storing traffic flow information.

The communication circuitry212of the network devices112,114may be embodied as any communication circuit, device, or collection thereof, capable of enabling communications between the network devices112,114and one or more other network devices110, the source computing device102, the destination computing device104, and/or other computing devices. The communication circuitry212may be configured to use any one or more communication technology (e.g., wireless or wired communications) and associated protocols (e.g., Ethernet, Wi-Fi®, WiMAX, etc.) to effect such communication.

Referring back toFIG. 1, the network device112communicates, in some embodiments, with one or more of the upstream network device114, the source computing device102, the destination computing device104, and/or other computing devices over the network180. The network180may be embodied as any number of various wired and/or wireless communication networks. For example, the network180may be embodied as or otherwise include a local area network (LAN), a wide area network (WAN), a cellular network, or a publicly-accessible, global network such as the Internet. As such, it should be appreciated that the network180may also include any number of additional devices to facilitate communication between the network device112and one or more of the upstream network device114, the source computing device102, the destination computing device104, and/or the other computing devices.

It should be appreciated that although only one communication channel182is established between two network devices110(e.g., the network device112and the upstream network device114) in the illustrative embodiment, any number of communication channels may be established between any number of the network devices110. Additionally, it should be understood that any number of existing network traffic flows130and/or new network traffic flows140may be established between the source computing device102and the destination computing device104.

Each of the source computing device102and the destination computing device104may be embodied as any type of computing device for processing, receiving, storing, and communicating data over the network180. For example, each computing device102,104may be separately embodied as a network device, a desktop computer, a laptop computer, a tablet computer, a “smart” phone, a mobile media device, a game console, a mobile internet device (MID), a personal digital assistant, a “smart” appliance, or other computer and/or computing device. As such, the source computing device102and the destination computing device104may include various hardware and software components (e.g., a processor, I/O subsystem, memory, and communication circuitry) commonly found in a computing device, which are not shown inFIG. 1for clarity of the description. In some embodiments, the source computing device102may be configured to generate one or more network packets (e.g., data packets) intended for the destination computing device104. In such embodiments, the source computing device102may transmit the one or more network packets to the network device112, which as discussed in more detail below, may forward those packets to the upstream network device114for subsequent transmission to the destination computing device104. It should be appreciated that although only two computing devices (e.g., the source computing device102and the destination computing device104) are shown in the illustrative embodiment, any number of computing devices may be included in other embodiments. Further, although the terms “source” and “destination” are shown and described with reference to the illustrative computing devices102,104ofFIG. 1, communications (e.g., network packets) may be sent between the computing device102and the computing device104in either direction in other embodiments. That is, in some embodiments, the destination computing device104may instead (or additionally) send data packets to the source computing device102.

Referring now toFIG. 3, in one embodiment, each of the network devices110(e.g., the network device112and the upstream network device114) establishes an environment300during operation. The illustrative environment300includes a communication module302, congestion management module304, and the data storage208, each of which may be embodied as software, firmware, hardware, or a combination thereof. It should be appreciated that each of the network devices110(e.g., the network device112and the upstream network device114) may include other components, sub-components, modules, and devices commonly found in a network device, which are not illustrated inFIG. 3for clarity of the description. Additionally, it should be understood that although each of the network devices112,114may establish the illustrative environment300during operation, the following discussion of that illustrative environment300is described with specific reference to the network device112for clarity of the description.

The communication module302facilitates communications between any component and/or sub-component of the network device112and one or more of the upstream network device114, the source computing device102, the destination computing device104, and/or other computing devices. For example, the communication module302may be configured to receive network packets from the source computing device102and forward those packets to the upstream network device114for further processing (e.g., subsequent transmission to the destination computing device104, subsequent transmission to other network devices110, etc.). Additionally, in some embodiments, the communication module302may be configured to receive network packets from the upstream network device114and forward those packets to the source computing device102.

As discussed, the network device112may be configured to determine whether the communication channel182established between the network device112and the upstream network device114is congested (e.g., saturated, at capacity, etc.). To do so, the congestion management module304is configured to analyze network packets corresponding to one or more existing network traffic flows130over the communication channel182and determine whether any includes information indicative of the communication channel182being congested. For example, in some embodiments, the one or more existing network traffic flows130may be embodied as, or otherwise correspond to, one or more transmission control protocol connections over the communication channel182. In such embodiments, the congestion management module304may analyze the header information of the corresponding network packets and determine whether any such header information includes a congestion widow size and/or an explicit congestion notification indicative of the communication channel182being congested. In some embodiments, the congestion management module304may monitor the number and/or frequency of network packets being lost across the communication channel182. For example, the congestion management module304may keep track of (e.g., log, count, etc.) the number (e.g., quantity, amount, etc.) of network packets being retransmitted over the communication channel182, the frequency of network packets being retransmitted over the communication channel182, the number (e.g., quantity, amount, etc.) of duplicate acknowledgements being received over the communication channel182, and/or the frequency of duplicate acknowledgements being received over the communication channel182. The congestion management module304may thereafter determine that the number and/or frequency of network packets being retransmitted over the communication channel182, or the number and/or frequency of duplicate acknowledgments being received over the communication channel182, exceeds a reference amount or frequency. In such embodiments, the congestion management module304may determine that the communication channel182is congested based on such data. However, it should be appreciated that the congestion management module304may use any suitable technology or process for determining that the communication channel182is congested (e.g., heartbeats, network latency, packet sniffing, bandwidth monitoring, network interface controller availability, processor utilization, Simple Network Management Protocol messages, etc.).

The congestion management module304may also be configured to determine whether network packets corresponding to a new network traffic flow140should be transmitted over the communication channel182based at least in part on, or otherwise as a function of, determining whether the communication channel182is congested. For example, in embodiments wherein it is determined that the communication channel182is not congested, network packets corresponding to existing network traffic flows130(e.g., previously established traffic flows) as well as those corresponding to new network traffic flows140, are forwarded or otherwise transmitted unimpeded to the upstream network device114over the communication channel182. Additionally or alternatively, in embodiments wherein it is instead determined that the communication channel182is congested, the congestion management module304may be configured to enable a network storage mode on the network device112for newly received packets corresponding to one or more new network traffic flows140being transmitted over the communication channel182established between the network device112and the upstream network device114. As discussed in more detail below, the congestion management module304may store the newly received packets corresponding to the one or more new network traffic flows140during periods that the communication channel182is congested and the network storage mode has been enabled. Additionally, during periods in which the network storage mode is enabled, the congestion management module304may also be configured to generate and transmit acknowledgement packets and/or keep-alive packets to one or more network devices110and/or computing devices further upstream or downstream from the network device112to preserve the one or more network traffic flows120.

In response to determining that the communication channel182is no longer congested, or that the amount of congestion (e.g., a saturation level, etc.) has been reduced, the congestion management module304may forward, replay, or otherwise transmit the stored packets corresponding to the one or more new network traffic flows140over the communication channel182to the upstream network device114. It should be appreciated that in embodiments wherein the congestion management module304stores network packets corresponding to new network traffic flows140during instances of congestion, network packets corresponding to one or more existing network traffic flows130(e.g., previously established traffic flows) may continue to be forwarded or otherwise transmitted over the communication channel182to the upstream network device114. In that way, the existing network traffic flows130may be maintained and new network traffic flows may be temporarily stored so as not to aggravate congestion levels on the communion channel182.

As discussed, the congestion management module304may enable a network storage mode during periods in which the communication channel182is determined to be congested. When enabled, the congestion management module304is configured to store network packets (e.g., the network traffic data210) corresponding to one or more new network traffic flows140in local storage (e.g., the data storage208) of the network device112. For example, in response to determining that the communication channel182is congested and that the network storage mode has been enabled, the congestion management module304may store a network packet associated with a new network traffic flow140in the data storage208of the network device112. As discussed above, the network packet associated with the new network traffic flow140may be received from the source computing device102and be destined for the destination computing device104(or vice versa). It should be appreciated that the congestion management module304may also be configured to store any number of network packets corresponding to the new network traffic flow140, in some embodiments. For example, the congestion management module304may be configured to store all or a portion of network packets corresponding to the new network traffic flow140during periods of congestion. It should also be appreciated that although the congestion management module304stores one or more network packets corresponding to the new network traffic flow140in the data storage208in the illustrative embodiment, the congestion management module304may also store network packets corresponding to more than one new network traffic flow140(e.g., two or more new network traffic flows140) in other embodiments.

During periods in which the network storage mode is enabled, the congestion management module304may also be configured to generate and transmit acknowledgement packets and/or keep-alive packets to one or more network devices110and/or computing devices further upstream or downstream from the network device112to preserve the one or more network traffic flows120. For example, because the source computing device102expects to receive an acknowledgment from the destination computing device104for each network packet transmitted, the congestion management module304may be configured to generate and transmit an acknowledgement packet to the source computing device102for each network packet stored for the new network traffic flow140. In doing so, the congestion management module304may spoof or otherwise impersonate the destination computing device104such that the source computing device102believes that the acknowledgement packets are originating from the destination computing device104rather than the congestion management module304(e.g., the network device112). It should be appreciated that the congestion management module304may spoof the source Internet Protocol (IP) address of the acknowledgment packets to facilitate impersonating the destination computing device104. Since the source computing device102receives the expected acknowledgments, the source computing device102may maintain the network connection (e.g., the new network traffic flow140) established between the source computing device102and the destination computing device104and/or continue to send network packets upstream to the network device112for subsequent transmission to the upstream network device114and/or directly to the destination computing device104.

In some embodiments, the congestion management module304of the network device112may also be configured to generate and transmit acknowledgement packets to one or more other network devices110and/or computing devices while the network storage mode is enabled. For example, for each network packet of the new network traffic flow140stored in the data storage208, the congestion management module304may generate and transmit a corresponding acknowledgement packet to the upstream network device114and/or directly to the destination computing device104. In some embodiments, one or more of the acknowledgement packets generated by the congestion management module304may be embodied as a keep-alive packet without a payload, but having an enabled acknowledgement flag (e.g., a packet with the acknowledgement flag turned on or otherwise set). Additionally, in some embodiments, the size of the acknowledgment packet (e.g., the keep-alive packet) generated by the congestion management module304may not exceed 60 bytes in size. It should be appreciated, however, that the size and/or contents of the acknowledgement packet may vary in other embodiments. In such embodiments, the keep-alive packet generated by the congestion management module304is configured to preserve the new network traffic flow140. In some embodiments, the congestion management module304may spoof or otherwise impersonate the source computing device102such that the destination computing device104believes that the keep-alive packets are originating from the source computing device102rather than the congestion management module304(e.g., the network device112). To do so, the congestion management module304may spoof the source Internet Protocol (IP) address of the acknowledgment packets to facilitate impersonating the source computing device102. Additionally, it should be appreciated that although the congestion management module304of the network device112generates and transmits one or more acknowledgement packets (e.g., keep-alive packets) to the upstream network device114and/or the destination computing device104in order to preserve the new network traffic flow140in the illustrative embodiment, the congestion management module304may also generate and transmit one or more acknowledgement packets (e.g., keep-alive packets) to other network devices110and/or computing devices further upstream and/or downstream from the network device112in order to preserve one or more other network traffic flows over different communication channels in other embodiments.

The congestion management module304of the network device112may be also configured to determine whether the communication channel182is no longer congested (e.g., no longer at capacity and/or saturated with existing network traffic). To do so, the congestion management module304may be configured to again analyze network packets corresponding to one or more existing network traffic flows130over the communication channel182and determine whether any such network packets includes information indicative of the communication channel182still being congested. As discussed above, the one or more existing network traffic flows130may be embodied as or otherwise correspond to one or more transmission control protocol connections over the communication channel182. As such, to determine whether the congestion of communication channel has been cleared or otherwise reduced, the congestion management module304may again analyze the header information of the corresponding network packets and determine whether any such header information includes a congestion widow size and/or an explicit congestion notification indicative of the communication channel182still being congested. The congestion management module304may also monitor the number and/or frequency of network packets being lost across the communication channel182. The congestion management module304may thereafter determine that the number and/or frequency of network packets being retransmitted over the communication channel182, or the number and/or frequency of duplicate acknowledgments being received over the communication channel182, still exceeds the reference amount or frequency. In such embodiments, the congestion management module304may determine that the communication channel182is still congested. In some embodiments, congestion management module304may instead determine that the number and/or frequency of network packets being retransmitted over the communication channel182, or the number and/or frequency of duplicate acknowledgments being received over the communication channel182, no longer exceeds the reference amount or frequency. In such embodiments, the congestion management module304may determine that the communication channel182is no longer congested. It should be appreciated that the congestion management module304may determine that the communication channel182is no longer congested sometime after the source computing device102has finished transmitting network packets to the network device112.

In embodiments wherein the congestion management module304determines that that communication channel182is no longer congested, the congestion management module304may be configured to retrieve the network packets corresponding to the new network traffic flow140stored in the data storage208of the network device112and forward or otherwise transmit those packets to the upstream network device114, which may in turn forward the packets to the destination computing device104or one or more other network devices110. For example, in some embodiments, the congestion management module304is configured to replay or retransmit the stored packets to the upstream network device114and/or the destination computing device104after determining that the communication channel182is no longer congested. In such embodiments, the congestion management module304may spoof or otherwise impersonate the source computing device102such that the upstream network device114and/or the destination computing device104believes the replayed network packets are originating from the source computing device102rather than the network device112. For example, in some embodiments, the congestion management module304may spoof the source IP address of the replayed network packets. It should be appreciated that upon receipt of the replayed and/or retransmitted network packets, the destination computing device104may generate and transmit corresponding acknowledgment packets. In embodiments wherein the congestion management module304spoofs the source IP address of the replayed network packets, the congestion management module304may receive or otherwise intercept the acknowledgement packets sent by the destination computing device104. In doing so, the congestion management module304may prevent the source computing device102from receiving duplicate acknowledgements for each of the stored network packets (e.g., receiving an acknowledgment from the network device112when a network packet is initially stored and receiving another acknowledgment when the stored network packet is finally received by the destination computing device104).

As discussed, in some embodiments, the network traffic data210stored in the data storage208of the network device112may also include information regarding one or more of the network traffic flows120. For example, in some embodiments, the network traffic data210may include information corresponding to the status (e.g., active, amount of time inactive, etc.) of one or more of the network traffic flows120. Such information may be stored in one or more tables, files, and/or in any other format suitable for storing traffic flow information. In some embodiments, the congestion management module304may be configured to determine whether an incoming acknowledgement packet from the destination computing device104corresponds to one or more of the replayed network packets. To do so, the congestion management module304may track or otherwise store transmission information (e.g., sequence numbers, unique identifiers, etc.) regarding each of the stored network packets that have been replayed (e.g., retransmitted) to the upstream network device114and/or directly to the destination computing device104. Subsequently, in response to receiving an acknowledgment packet from the destination computing device104, the congestion management module304may determine whether the received acknowledgment packet corresponds to one of the replayed network packets based at least in part on, or otherwise as a function of, the stored transmission information. In some embodiments, in response to determining that the received acknowledgment corresponds to one of the replayed network packets, the congestion management module304may be configured to discard or drop the acknowledgment packet to prevent it from being received by the source computing device102.

The congestion management module304may also be configured to disable the network storage mode for network packets subsequently received for the new network traffic flow140. For example, in some embodiments, the congestion management module304may disable the network storage mode in response to determining that the communication channel182is no longer congested. Additionally, in some embodiments, the congestion management module304may throttle or otherwise manage the rate in which the network packets are retrieved from the data storage208and released (e.g., transmitted, forwarded, replayed, etc.) to the upstream network device114and/or directly to the destination computing device104. In doing so, the congestion management module304may reduce the likelihood of the stored network packets causing a new congestion and/or aggravating an existing congestion of the communication channel182when released.

As discussed, the congestion management module304may store network packets corresponding to more than one new network traffic flow140in the data storage208of the network device112. For example, in some embodiments, the congestion management module304may store one or more network packets corresponding to the new network traffic flow140and one or more network packets corresponding to another new network traffic flow in the data storage208. In such embodiments, the congestion management module304may retrieve and subsequently transmit the network packets corresponding to the new network traffic flow140and the other new network traffic flow to the upstream network device114based at least in part on, or otherwise as a function of, the order in which the network packets were stored in the data storage208.

In embodiments wherein the congestion management module304instead determines that that communication channel182is still congested (e.g., still saturated and or at capacity), the congestion management module304may be configured to wait a reference amount of time before determining again whether the communication channel182is still congested. That is, the congestion management module304may be configured to re-determine whether the communication channel182is still congested in response to a reference time period lapsing.

Additionally or alternatively, in some embodiments, the congestion management module304may also be configured to determine whether the network device112has the capacity and/or availability to store network packets corresponding to one or more new network traffic flows140during periods that the communication channel182is determined to be congested. In such embodiments, the congestion management module304may determine that the network device112does not have the capacity and/or availability to store newly received network packets corresponding to one or more of the new network traffic flows140based one or more reference capacity and/or availability thresholds. For example, in some embodiments, the congestion management module304may monitor the amount of storage capacity remaining and/or used in the data storage208and, based at least in part on the amount of storage capacity remaining and/or used in the data storage208one of exceeding or falling below one or more of the reference capacity or availability thresholds, the congestion management module304may determine that the network device112does not have the capacity and/or availability to store newly received network packets corresponding to new network traffic flows. Additionally, or alternatively, in some embodiments, the congestion management module304may monitor performance metrics corresponding to the network device112(e.g., network interface controller availability, processor utilization, etc.) and, as a function of the monitored performance metrics one of exceeding or falling below one or more of the reference capacity or availability thresholds, the congestion management module304may determine that the network device112does not have the capacity and/or availability to store newly received network packets corresponding to new network traffic flows. In such embodiments, the newly received network packets corresponding the new network traffic flows may be forwarded to the upstream network device114and/or the destination computing device104unimpeded (e.g., processed normally).

In some embodiments, the congestion management module304may also be configured to determine whether to store received network packets corresponding to a new network traffic flow140during periods of congestion based at least in part on, or otherwise as a function of, the type of the new traffic flow140. For example, in some embodiments the congestion management module304may determine that received network packets corresponding to a new network traffic flow140should not be stored in response to determining that the new network traffic flow140corresponds to a real-time traffic flow (e.g., voice communications, video communications, streaming data, etc.). In such embodiments, the newly received network packets corresponding the new network traffic flows140may be forwarded to the upstream network device114unimpeded (e.g., processed normally).

Referring now toFIG. 4, in use, the network device112of the system100may execute a method for managing congestion of a communication channel182established with another network device110(e.g., the upstream network device114). The method400begins with block402in which the network device112receives network packets corresponding to one or more network traffic flows120established between the source computing device102and the destination computing device102over the communication channel182. The one or more network traffic flows120may correspond to one or more existing network traffic flows130, or they may correspond to one or more new network traffic flows140. As discussed, the network device112may receive network packets from the source computing device102that are to be forwarded over the communication channel182to the upstream network device114for further processing. For example, in some embodiments, the network device112may receive one or more network packets from the source computing device102that are to be forwarded to the upstream network device114, which may subsequently forward those packets to the destination computing device104. The network device112may also receive network packets from the upstream network device114that are to be forwarded to the source computing device102.

At block404, the network device112analyzes the network packets corresponding to the one or more network traffic flows120. To do so, the network device112may monitor the packet headers of network packets received from the upstream network device114over the communication channel182. As discussed above, the network device112may also monitor transmission and/or utilization metrics corresponding to the communication channel182and/or the network traffic flows120.

At block406, the network device112determines whether the communication channel182is congested. In some embodiments, the network device112determines that the communication channel182is congested based at least in part on, or otherwise as a function of, analyzing the one or more network traffic flows120. For example, in some embodiments, the network device112determines that the communication channel182is congested in response to determining that one or more network packets associated with one or more of the existing network traffic flows130includes a congestion widow size and/or an explicit congestion notification indicative of the communication channel182being congested. If, at block406, it is determined that the communication channel182is not congested, the method400advances to block408. If, however, it is instead determined at block406that the communication channel182is congested, the method400advances to block410.

At block408, the network device112transmits, to the upstream network device114, received network packets corresponding to the existing network traffic flows130as well as network packets corresponding to the new network traffic flows140. The method400then returns back to block402in which the network device112continues receiving network packets over the communication channel182that correspond to the one or more network traffic flows120established between the source computing device102and the destination computing device104.

At block410, the network device112enables, in some embodiments, a network storage mode for newly received packets corresponding to one or more new network traffic flows over the communication channel182established between the network device112and the upstream network device114. In such embodiments, the network device112temporarily stores network packets corresponding to the one or more new network traffic flows140during periods of time in which the communication channel182is congested. At block412, in some embodiments, the network device112may continue to forward network packets corresponding to the one or more existing network traffic flows130to the upstream network device114as discussed above.

Referring now toFIG. 5, in use, the network device112of the system100may execute a method500for storing network packets of a new network traffic flow140to manage the congestion of the communication channel182established with another network device110(e.g., the upstream network device114). The method500begins with block502in which the network device112determines whether the network storage mode has been enabled. As discussed above, the network device112may enable the network storage mode in response to determining that the communication channel182is congested. If, at block502, it is determined that the network storage mode has not been enabled, the method500returns to block502. If, however, it is determined instead that the network storage mode has been enabled, the method500advances to block504.

At block504, the network device112stores received network packets corresponding to one or more new network traffic flows140. As discussed, in some embodiments, the network packets corresponding to the one or more new network traffic flows140are stored as network traffic data210in the data storage208of the network device112. After storing the network packets corresponding to the one or more new network traffic flows140in the data storage208of the network device112, the method500advances to block506.

At block506, the network device112generates and transmits an acknowledgement packet to the source computing device102for each network packet stored in the data storage208. In some embodiments, the network device112spoofs a source IP address of the acknowledgement packets such that the source computing device102believes that the acknowledgement packets are originating from the destination computing device104rather than the network device112. In such embodiments, the acknowledgment packets are configured to facilitate preserving or otherwise maintaining the one or more new network traffic flows140established between the source computing device102and the destination computing device104. After generating and transmitting the acknowledgement packet(s) to the source computing device102, the method500advances to block508.

At block508, the network device112generates and transmits an acknowledgement packet to the upstream network device114and/or the destination computing device104for each network packet stored in the data storage208. In some embodiments, the acknowledgement packet generated by the network device112is embodied as a keep-alive packet without a payload, but having an acknowledgement flag enabled. In such embodiments, the keep-alive packet is configured to preserve or otherwise maintain the one or more new network traffic flows140established between the source computing device102and the destination computing device104. Additionally or alternatively, the network device112spoofs a source IP address of the keep-alive packets such that the destination computing device104believes that the keep-alive packets are originating from the source computing device102rather than the network device112. After generating and transmitting the keep-alive packet(s) to the upstream network device114and/or the destination computing device104, the method500advances to block510.

At block510, the network device112determines whether the communication channel182is still congested. As discussed above, the network device112determines whether the communication channel182is still congested based at least in part on, or otherwise as a function of, analyzing the one or more network traffic flows120. For example, in some embodiments, the network device112determines that the communication channel182is congested in response to determining that one or more network packets associated with the one or more existing network traffic flows130includes a congestion widow size and/or an explicit congestion notification indicative of the communication channel182still being congested. If, at block510, it is determined that the communication channel182is still congested, the method500returns to block504, in which the network device112continues to store network packets corresponding to the one or more new network traffic flows140. If, however, it is instead determined at block510that the communication channel182is no longer congested, the method500advances to block512.

At block512, the network device112transmits the stored network packets to the upstream network device114. For example, in some embodiments, the network device112may be configured to retrieve the network packets corresponding to the one or more new network traffic flows140stored in the data storage208of the network device112and forward or replay those packets to the upstream network device114, which may in turn forward the packets to a computing device (e.g., the destination computing device104) or one or more other network devices110. After transmitting the network packets stored in the data storage208of the network device112, the method500advances to block514.

At block514, the network device112intercepts acknowledgement packets from the destination computing device104for each of the replayed network packets. In some embodiments, the network device112determines whether a received acknowledgment packet corresponds to one or more network packets replayed to the upstream network device114and/or directly to the destination computing device104. To do so, the network device112compares information corresponding to the acknowledgment packets received from the destination computing device104against stored transmission information corresponding to the replayed network packets. In some embodiments, the network device112drops or otherwise discards one or more acknowledgments received from the destination computing device104based at least in part on, or otherwise as a function of, determining that one or more of the acknowledgement packets correspond to one of the replayed network packets. In that way, the network device112prevents the source computing device102from receiving duplicate acknowledgements for each of the stored network packets. After intercepting the acknowledgment packets from the destination computing device104, the method500advances to block516in which the network device112disables the network storage mode for subsequently received network packets corresponding to the one or more new network traffic flows140.

EXAMPLES

Example 1 includes a network device to manage congestion of a communication channel, the network device includes a communication module to receive a network packet from a computing device destined for another computing device, wherein the received network packet corresponds to a new network traffic flow of a plurality of network traffic flows over a communication channel established between the network device and an upstream network device; and a congestion management module to (i) analyze the plurality of network traffic flows over the communication channel established between the network device and the upstream network device, (ii) determine whether the communication channel is congested as a function of the plurality of network traffic flows, (iii) store the received network packet in a local storage in response to a determination that the communication channel is congested, and (iv) transmit an acknowledgment packet to the computing device in response to the storage of the received network packet in the local storage.

Example 2 includes the subject matter of Example 1, and wherein the congestion management module further to (i) determine whether the communication channel is no longer congested, and (ii) transmit the stored network packet to the upstream network device in response to a determination that the communication channel is no longer congested.

Example 3 includes the subject matter of any of Examples 1 and 2, and wherein the communication module further to receive another network packet, wherein the another network packet corresponds to an existing network traffic flow of the plurality of network traffic flows over the communication channel; and wherein the congestion management module further to transmit the another network packet to the upstream network device without storage of the another network packet in the local storage.

Example 4 includes the subject matter of any of Examples 1-3, and wherein to determine whether the communication channel is no longer congested includes to determine whether the communication channel is no longer congested in response to a lapse of a reference time period.

Example 5 includes the subject matter of any of Examples 1-4, and wherein the plurality of traffic flows includes a plurality of transmission control protocol connections over the communication channel.

Example 6 includes the subject matter of any of Examples 1-5, and wherein to analyze a plurality of network traffic flows over the communication channel established between the network device and the upstream network device includes to analyze at least one of (i) congestion window sizes or (ii) explicit congestion notifications that correspond to the plurality of transmission control protocol connections over the communication channel; wherein to determine whether the communication channel is congested as a function of the plurality of network traffic flows includes to determine whether the communication channel is congested as a function of at least one of the congestion window sizes or explicit congestion notifications that correspond to the plurality of transmission control protocol connections over the communication channel; and wherein to determine whether the communication channel is no longer congested includes to determine whether the communication channel is no longer congested as a function of at least one of the congestion window sizes or explicit congestion notifications that correspond to the plurality of transmission control protocol connections over the communication channel.

Example 7 includes the subject matter of any of Examples 1-6, and wherein to determine whether the communication channel is congested as a function of the plurality of network traffic flows includes to determine whether the communication channel is congested as a function of at least one of (i) a quantity of network packets retransmitted over the communication channel or (ii) a frequency of network packet retransmissions over the communication channel.

Example 8 includes the subject matter of any of Examples 1-7, and wherein to determine whether the communication channel is congested as a function of the plurality of network traffic flows includes to determine whether the communication channel is congested as a function of at least one of (i) a quantity of duplicate acknowledgement packets received over the communication channel or (ii) a frequency of receiving duplicate network packets over the communication channel.

Example 9 includes the subject matter of any of Examples 1-8, and wherein the communication module further to receive another network packet from the computing device destined for the another computing device, wherein the another network packet corresponds to another new network traffic flow of the plurality of network traffic flows over the communication channel; and wherein the congestion management module further to (i) store the received another network packet in the local storage in response to a determination that the communication channel is congested, (ii) transmit another acknowledgment packet to the upstream network device in response to the storage of the received another network packet in the local storage, and (iii) transmit the stored another network packet upstream to the computing device in response to a determination that the communication channel is no longer congested.

Example 10 includes the subject matter of any of Examples 1-9, and wherein to transmit the stored network packet and the stored another network packet to the upstream network device in response to a determination that the communication channel is no longer congested includes to transmit the stored network packet and the stored another network packet to the upstream network device as a function of an order in which the network packet and the another network packet are stored in the local storage.

Example 11 includes the subject matter of any of Examples 1-10, and wherein to transmit an acknowledgment packet to the computing device includes to transmit a first acknowledgment packet to the computing device; and wherein the congestion management module further to transmit a second acknowledgment packet to the upstream network device in response to the storage of the received network packet in the local storage.

Example 12 includes the subject matter of any of Examples 1-11, and wherein the second acknowledgement packet is a keep-alive packet including an enabled acknowledgement flag.

Example 13 includes the subject matter of any of Examples 1-12, and wherein the congestion management module further to receive a third acknowledgment packet from the another computing device in response to transmitting the stored network packet to the upstream network device.

Example 14 includes the subject matter of any of Examples 1-13, and wherein to receive a third acknowledgment packet from the another computing device includes to (i) intercept the third acknowledgment packet from the another computing device and (ii) prevent the computing device from receiving the third acknowledgment packet.

Example 15 includes the subject matter of any of Examples 1-14, and wherein to prevent the computing device from receiving the third acknowledgment packet includes to drop the third acknowledgment packet upon receipt from the another computing device.

Example 16 includes the subject matter of any of Examples 1-15, and wherein the congestion management module further to (i) spoof a source internet protocol address of the first acknowledgment packet transmitted to the computing device, (ii) spoof the source internet protocol address of the second acknowledgment packet transmitted to the upstream network device, and (iii) spoof the source internet protocol address of the stored network packet transmitted to the upstream network device.

Example 17 includes the subject matter of any of Examples 1-16, and wherein the local storage includes a solid-state storage device.

Example 18 includes a method for managing congestion of a communication channel, the method includes receiving, on a network device, a network packet from a computing device destined for another computing device, wherein the received network packet corresponds to a new network traffic flow of a plurality of network traffic flows over a communication channel established between the network device and an upstream network device; analyzing, on the network device, the plurality of network traffic flows over the communication channel established between the network device and the upstream network device; determining, on the network device, whether the communication channel is congested as a function of the plurality of network traffic flows; storing, on the network device, the received network packet in a local storage in response to determining that the communication channel is congested; and transmitting, on the network device, an acknowledgment packet to the computing device in response to storing the received network packet in the local storage.

Example 19 includes the subject matter of Example 18, and further includes determining, on the network device, whether the communication channel is no longer congested; and transmitting, on the network device, the stored network packet to the upstream network device in response to determining that the communication channel is no longer congested.

Example 20 includes the subject matter of any of Examples 18 and 19, and further includes receiving, on the network device, another network packet, wherein the another network packet corresponds to an existing network traffic flow of the plurality of network traffic flows over the communication channel; and transmitting, on the network device, the another network packet to the upstream network device without storing the another network packet in the local storage.

Example 21 includes the subject matter of any of Examples 18-20, and wherein determining whether the communication channel is no longer congested includes determining whether the communication channel is no longer congested in response to a lapse of a reference time period.

Example 22 includes the subject matter of any of Examples 18-21, and wherein the plurality of traffic flows includes a plurality of transmission control protocol connections over the communication channel.

Example 23 includes the subject matter of any of Examples 18-22, and wherein analyzing a plurality of network traffic flows over a communication channel established between the network device and an upstream network device includes analyzing at least one of (i) congestion window sizes or (ii) explicit congestion notifications corresponding to the plurality of transmission control protocol connections over the communication channel; wherein determining whether the communication channel is congested as a function of the network traffic flows includes determining whether the communication channel is congested as a function of at least one of the congestion window sizes or explicit congestion notifications corresponding to the plurality of transmission control protocol connections over the communication channel; and wherein determining whether the communication channel is no longer congested includes determining whether the communication channel is no longer congested as a function of at least one of the congestion window sizes or explicit congestion notifications corresponding to the plurality of transmission control protocol connections over the communication channel.

Example 24 includes the subject matter of any of Examples 18-23, and wherein determining whether the communication channel is congested as a function of the plurality of network traffic flows includes determining whether the communication channel is congested as a function of at least one of (i) a quantity of network packets retransmitted over the communication channel or (ii) a frequency of network packet retransmissions over the communication channel.

Example 25 includes the subject matter of any of Examples 18-24, and wherein determining whether the communication channel is congested as a function of the plurality of network traffic flows includes determining whether the communication channel is congested as a function of at least one of (i) a quantity of duplicate acknowledgement packets received over the communication channel or (ii) a frequency of receiving duplicate network packets over the communication channel.

Example 26 includes the subject matter of any of Examples 18-25, and further includes receiving, on the network device, another network packet from the computing device destined for the another computing device, wherein the another network packet corresponds to another new network traffic flow of the plurality of network traffic flows over the communication channel; storing, on the network device, the received another network packet in the local storage in response to determining that the communication channel is congested; transmitting, on the network device, another acknowledgment packet to the upstream network device in response to storing the received another network packet in the local storage; and transmitting, on the network device, the stored another network packet to the computing device in response to determining that the communication channel is no longer congested.

Example 27 includes the subject matter of any of Examples 18-26, and wherein transmitting the stored network packet and the stored another network packet to the upstream network device in response to determining that the communication channel is no longer congested includes transmitting the stored network packet and the stored another network packet to the upstream network device as a function of an order in which the network packet and the another network packet are stored in the local storage.

Example 28 includes the subject matter of any of Examples 18-27, and wherein transmitting an acknowledgment packet to the computing device includes transmitting a first acknowledgment packet to the computing device; and wherein the method further includes transmitting, on the network device, a second acknowledgment packet to the upstream network device in response to storing the received network packet in the local storage.

Example 29 includes the subject matter of any of Examples 18-28, and wherein the second acknowledgement packet is a keep-alive packet including an enabled acknowledgement flag.

Example 30 includes the subject matter of any of Examples 18-29, and further includes receiving, on the network device, a third acknowledgment packet from the another computing device in response to transmitting the stored network packet to the upstream network device.

Example 31 includes the subject matter of any of Examples 18-30, and wherein receiving a third acknowledgment packet from the another computing device includes (i) intercepting the third acknowledgment packet from the another computing device and (ii) preventing the computing device from receiving the third acknowledgment packet.

Example 32 includes the subject matter of any of Examples 18-31, and wherein preventing the computing device from receiving the third acknowledgment packet includes dropping the third acknowledgment packet upon receipt from the another computing device.

Example 33 includes the subject matter of any of Examples 18-32, and further includes spoofing, on the network device, a source internet protocol address of the first acknowledgment packet transmitted to the computing device; spoofing, on the network device, the source internet protocol address of the second acknowledgment packet transmitted to the upstream network device; and spoofing, on the network device, the source internet protocol address of the stored network packet transmitted to the upstream network device.

Example 34 includes the subject matter of any of Examples 18-33, and further includes generating, on the network device, the acknowledgment packet transmitted to the upstream network device.

Example 35 includes a network device to manage congestion of a communication channel, the network device includes a processor; and a memory having stored therein a plurality of instructions that when executed by the processor cause the network device to perform the method of any of Examples 18-34.

Example 36 includes one or more machine readable media including a plurality of instructions stored thereon that in response to being executed result in a network device performing the method of any of Examples 18-34.

Example 37 includes a network device to manage congestion of a communication channel, the network device includes means for receiving a network packet from a computing device destined for another computing device, wherein the received network packet corresponds to a new network traffic flow of a plurality of network traffic flows over a communication channel established between the network device and an upstream network device; means for analyzing the plurality of network traffic flows over the communication channel established between the network device and the upstream network device; means for determining whether the communication channel is congested as a function of the plurality of network traffic flows; means for storing the received network packet in a local storage in response to determining that the communication channel is congested; and means for transmitting an acknowledgment packet to the computing device in response to storing the received network packet in the local storage.

Example 38 includes the subject matter of Example 37, and further includes means for determining whether the communication channel is no longer congested; and means for transmitting the stored network packet to the upstream network device in response to determining that the communication channel is no longer congested.

Example 39 includes the subject matter of any of Examples 37 and 38, and further includes means for receiving another network packet, wherein the another network packet corresponds to an existing network traffic flow of the plurality of network traffic flows over the communication channel; and means for transmitting the another network packet to the upstream network device without storing the another network packet in the local storage.

Example 40 includes the subject matter of any of Examples 37-39, and wherein the means for determining whether the communication channel is no longer congested includes means for determining whether the communication channel is no longer congested in response to a lapse of a reference time period.

Example 41 includes the subject matter of any of Examples 37-40, and wherein the plurality of traffic flows includes a plurality of transmission control protocol connections over the communication channel.

Example 42 includes the subject matter of any of Examples 37-41, and wherein the means for analyzing a plurality of network traffic flows over a communication channel established between the network device and an upstream network device includes means for analyzing at least one of (i) congestion window sizes or (ii) explicit congestion notifications corresponding to the plurality of transmission control protocol connections over the communication channel; wherein the means for determining whether the communication channel is congested as a function of the network traffic flows includes means for determining whether the communication channel is congested as a function of at least one of the congestion window sizes or explicit congestion notifications corresponding to the plurality of transmission control protocol connections over the communication channel; and wherein the means for determining whether the communication channel is no longer congested includes means for determining whether the communication channel is no longer congested as a function of at least one of the congestion window sizes or explicit congestion notifications corresponding to the plurality of transmission control protocol connections over the communication channel.

Example 43 includes the subject matter of any of Examples 37-42, and wherein the means for determining whether the communication channel is congested as a function of the plurality of network traffic flows includes means for determining whether the communication channel is congested as a function of at least one of (i) a quantity of network packets retransmitted over the communication channel or (ii) a frequency of network packet retransmissions over the communication channel.

Example 44 includes the subject matter of any of Examples 37-43, and wherein the means for determining whether the communication channel is congested as a function of the plurality of network traffic flows includes means for determining whether the communication channel is congested as a function of at least one of (i) a quantity of duplicate acknowledgement packets received over the communication channel or (ii) a frequency of receiving duplicate network packets over the communication channel.

Example 45 includes the subject matter of any of Examples 37-44, and further includes means for receiving another network packet from the computing device destined for the another computing device, wherein the another network packet corresponds to another new network traffic flow of the plurality of network traffic flows over the communication channel; means for storing the received another network packet in the local storage in response to determining that the communication channel is congested; means for transmitting another acknowledgment packet to the upstream network device in response to storing the received another network packet in the local storage; and means for transmitting the stored another network packet to the computing device in response to determining that the communication channel is no longer congested.

Example 46 includes the subject matter of any of Examples 37-45, and wherein the means for transmitting the stored network packet and the stored another network packet to the upstream network device in response to determining that the communication channel is no longer congested includes means for transmitting the stored network packet and the stored another network packet to the upstream network device as a function of an order in which the network packet and the another network packet are stored in the local storage.

Example 47 includes the subject matter of any of Examples 37-46, and wherein the means for transmitting an acknowledgment packet to the computing device includes means for transmitting a first acknowledgment packet to the computing device; and wherein the network device further includes means for transmitting a second acknowledgment packet to the upstream network device in response to storing the received network packet in the local storage.

Example 48 includes the subject matter of any of Examples 37-47, and wherein the second acknowledgement packet is a keep-alive packet including an enabled acknowledgement flag.

Example 49 includes the subject matter of any of Examples 37-48, and further includes means for receiving a third acknowledgment packet from the another computing device in response to transmitting the stored network packet to the upstream network device.

Example 50 includes the subject matter of any of Examples 37-49, and wherein the means for receiving a third acknowledgment packet from the another computing device includes means for (i) intercepting the third acknowledgment packet from the another computing device and (ii) preventing the computing device from receiving the third acknowledgment packet.

Example 51 includes the subject matter of any of Examples 37-50, and wherein the means for preventing the computing device from receiving the third acknowledgment packet includes means for dropping the third acknowledgment packet upon receipt from the another computing device.

Example 52 includes the subject matter of any of Examples 37-51, and further includes means for spoofing a source internet protocol address of the first acknowledgment packet transmitted to the computing device; means for spoofing the source internet protocol address of the second acknowledgment packet transmitted to the upstream network device; and means for spoofing the source internet protocol address of the stored network packet transmitted to the upstream network device.

Example 53 includes the subject matter of any of Examples 37-52, and further includes means for generating the acknowledgment packet transmitted to the upstream network device.