The TCP handles the data between the two points. In accomplishing this, constraints such as varying speeds of the devices communicating can result in issues along the communication line. Flow control is the method of assessing how much data to send based on the rate at which the receiver accepts the data. To accomplish this, TCP makes use of a sliding window algorithm. For example, if the receiver sends an acknowledgment message, the next packet size has to be of a size that will allow for a new packet to be sent. However, had the receiver sent a negative acknowledgment message, the next packet should accommodate the data to be resent and any additional data. TCP handles this process of reevaluation.
TCP also handles congestion and provides algorithms to prevent congestion from taking place. Congestion occurs when too much data is sent over the network, and the capacity of the network falls below the amount of data being received. The likely result is long queues of unprocessed data jamming the line. This is among the main causes of loss of data packets at routers and, as such, has a high priority with regards to the transportation of data. This position suggests measuring the optimum transmission rates.
This is accomplished using methods such as slow start (SS), whereupon the initiation, the transmission begins at a rate much lower than the capacity of the line. As transmission continues, this rate is increased exponentially till the first loss occurs. After the loss, the transmission rate is cut in half. When the speed is increased exponentially, the window size for data also grows exponentially. Once a threshold has been established, each time the transmission speed exceeds the threshold, the window size grows linearly, to avoid the occurrence of congestion. This algorithm is used for congestion avoidance (CA). This algorithm is also used to manage the size of the sliding window based on the performance before and after loss.