# COALA: A Protocol for the Avoidance and Alleviation of Congestion in Wireless Sensor Networks
## 2 Related Work  
Congestion is a phenomenon that comes along either interference in the communication medium, which is caused by the concurrent transmission of many nodes, or buffer overflow, which is caused by the fact that incoming traffic load in a node exceeds its buffer capacity. The confrontation of congestion is the subject of numerous scientific research works [1; 2; 3; 4; 5; 6; 7]. Some of them, introduce _congestion avoidance protocols_, which propose proactive tasks in order to prevent congestion occurrence. These protocols normally involve MAC and network layer operations. Some other research works propose _congestion control protocols_ that act reactively to the existence of congestion in order to mitigate it. Protocols of this kind normally involve MAC and network layer operations, and in some cases they also use transport layer actions. Additionally, cross layer interaction between transport and underlying layers is an efficient way of congestion control while MAC layer provides channel status that can be incorporated in congestion control mechanisms [1]. The detection of congestion can be performed by taking into consideration one or a combination of specific performance metrics. The most popular of them are: packet loss, buffer occupancy, delay, packet service time and packet inter-arrival time [2; 3]. The notification of congestion occurrence can be either _explicit_, where relative informing messages are sent by congested nodes to other nodes, or _implicit_, where the notifying information is incorporated in data packet headers or in ACK packets that are piggybacked. Explicit notification is unfavorable because it adds substantial traffic load to the already jammed network [4; 5]. The mitigation of congestion can be pursued by either traffic control or resource control or a combination of them. When _traffic control_ is applied, the quantity of the packets injected into the network is suitably decreased in order to alleviate both traffic load and congestion. However, traffic control is not efficient in event-based applications where any restriction in the transmission of data is inacceptable. When _resource control_ is applied, data packets are routed through alternative paths that are not congested. Yet, in this way extra delays or even routing loops may be caused [6; 7]. CODA, proposed by [PERSON] et al. [8], is one of the most well -known protocols, which aims at the achievement of congestion avoidance and control. Its operation is based on flow control. It introduces the idea of a control mechanism by which every node that detects the occurrence of congestion, sends backpressure messages to its data source nodes. Every source node that receives backpressure signals either throttles its sending rates or drops packets based on the local congestion policy adopted. Additionally, source nodes start throttling their sending rates as soon as they do not receive, at predefined time, feedback messages sent to them by sink. [PERSON] and [PERSON] [9] proposed an alternative path routing protocol which uses the ratio of the numbers of downstream to upstream nodes along with the queue sizes of the downstream nodes in order to detect congestion and reallocate traffic through alternate routes. PACA, proposed by [PERSON] et al. [10], pursuits congestion avoidance by circumventing nodes that are either located close to the sink, or have more downstream than upstream neighbors or have very frequent data transmissions. In [11] [PERSON] et al. introduce two very promising lightweight schemes for congestion avoidance and control. In the first of them, named DAIPaS Hard, data flows are forced to change their path in order not to congest the receiving node based on a multivariable utility function. In the second of them, named DAIPaS, each node attempts to serve just one flow and if this is unavoidable the DAIPaS Hard algorithm is executed. [PERSON] et al. proposed TALONet [12], which uses both traffic control and resource control to avoid congestion.