In a network environment, network congestion can occur when a link or a network node (e.g., a router) is overloaded with a large number of data packets, which can lead to significant transmission delay. Moreover, significant data packet loss can result, as the network node is unable to process the data packets and is forced to drop them. All these can lead to significant deterioration in network performance.
There are various schemes available to avoid overloading the network and to improve network performance. For example, transport communication protocol (TCP) provides a number of congestion control mechanisms, which include the use of a congestion window to control the amount of data sent into a network. A congestion window can define the maximum size of data that can be transmitted into the network within one network round trip time (RTT). RTT can be measured based on the time elapsed between when a sending device transmits a data packet and when the sending device receives, from the receiving device, an acknowledgment for the transmitted data packet. The congestion window can be increased to allow more data to be sent into the network, based on an indication that the network has capacity to transmit more data packets (e.g., a successful prior transmission of data packets through the network, which can be indicated by reception of acknowledgments that correspond to the transmitted data packets). The congestion window can also be decreased to allow less data to be sent into the network, based on an indication that that network is congested. Such an indication can be based on a detection of packet loss based on, for example, reception of certain number of duplicate acknowledgments, selective acknowledgments (SACK), when a timer that reflects an estimation of RTT expires before reception of acknowledgment, etc. The TCP congestion control mechanism also includes a retransmission algorithm, in which data packets are retransmitted when there is an indication that the data packets are lost. Moreover, TCP also allows delayed acknowledgment, in which several acknowledgments (in response to reception of several data packets) can be combined into a single acknowledgment, to reduce protocol overhead.
The aforementioned TCP congestion control mechanisms operate based on a number of assumptions. Such assumptions can include, for example: 1) the bandwidth of the bottleneck node (e.g., a router) remains the same; 2) changes in connection latency indicate packets being queued at the bottleneck node which indicates network congestion; 3) packet loss is typically an indication of, and is attributed to, network congestion; 4) packet reordering, which can also lead to duplicate acknowledgments, is a rare event and can be detected within a few packets; and 5) delayed acknowledgements are observed only when the delayed acknowledgement algorithm is active and are limited to one acknowledgement for a maximum of two packets.
Most, if not all, of the aforementioned assumptions can be inaccurate over some types of networks, such as a wireless network (e.g., WiFi, LTE, etc.). For example, in an LTE network, bandwidth can vary due to the channel/carrier aggregation techniques deployed at the lower layers. Also, there can be continuous latency variation, due to the retransmission mechanisms at media access control (MAC) and radio link control (RLC) layers. It has also been observed that at times of channel and carrier aggregation/de-aggregation, latency spikes to multitudes of the regular path latency. Moreover, high amounts of out-of-order packets, based on MAC and RLC configuration, may be observed. Furthermore, random data packet loss, which is not necessarily attributed to a network node's failure to process data packets due to congestion, occurs frequently in wireless network. Therefore, random data packet loss is typically not a reliable indicator of network congestion in such networks.
All these inaccurate assumptions can lead to incorrect determination of packet loss and/or incorrect determination of network congestion. For example, random data packet loss can be incorrectly interpreted to indicate network congestion. Also, under some wireless standards (e.g., 4G), a receiving device can send stretch acknowledgements, which can cover as much as a full RTT worth of data, but do not arrive within one RTT of the sending of the data. The delayed reception of stretch acknowledgments can affect the operation of TCP congestion control mechanisms in a number of ways. First, under TCP congestion control mechanisms, both the adjustment of the congestion window and the transmission of the next set of data packets are triggered by the reception of acknowledgments of previously-transmitted data packets, and can be postponed by the delayed reception of stretch acknowledgments that correspond to those previously-transmitted data packets, leading to underutilization of network resources. Second, in a case where an incorrect determination of congestion-related packet loss results when, for example, a stretch acknowledgment arrives later than the expected RTT due to the accumulation of data for the generation of the stretch acknowledgment, rather than due to network congestion, unnecessary reduction of congestion window size and retransmission of data packets can result. Network performance can deteriorate as a result.