Congestion Control in networks

A network has a certain carrying capacity, denoted by the maximum number of
packets that it can hold at any point in time. When this limit is approached,
considerable delays are experienced in packet delivery, and the network is said to be
congested. Congestion can occur in all types of networks. Uncontrolled congestion
can lead to outright network failure.

At the node level, congestion manifests itself as packet buffers that have
approached their full capacity. This happens because the node is receiving more
packets than it is passing on to the next nodes, which in turn are presumably unable
to receive more packets due to their buffers being full. When this situation occurs, the
chances are that it will progressively get worse.

The best way to deal with congestion is to avoid it. This is facilitated by putting in
place measures that prevent buffer overflow. These measures include the following:

* Reducing the load on a node by disposing packets. As mentioned in earlier
sections, packet disposal can be guided by a lifetime indicator which is eroded
by the nodes that handle the packet. More blatant ways of disposing packets
may also be employed. For example, a node that receives a packet for which it
has almost no buffer space may destroy it immediately.

* Reducing the traffic destined for a heavily-utilized link. Nodes can monitor
the traffic on their outgoing links and ask the source host to reduce the
transmission rate when they feel that a link is approaching its capacity. The
request can be put to the source host using a special packet.

* Imposing a limit on the total number of packets in the network. This
approach requires some means of keeping a count of the packets in the network.
Furthermore, the nodes will have to communicate to ensure that the count is kept
up-to-date. Although, this approach ensures that the network cannot be
overloaded with too many packets, it does not prevent an individual node from
being overloaded.