The transmission control protocol (TCP) is a network communication protocol designed to send data packets over the Internet. It is a transport layer protocol in the OSI model. It creates a connection between remote computers by transporting and ensuring the delivery of messages over supporting networks and the Internet.
When the application layer required sending a large amount of data, it sends the data to the transport layer for transmission control protocol (TCP) or User Datagram Protocol (UDP) to transport it across the network.
The transmission control protocol (TCP) first establish a connection between the source and the destination in a process called a three-way handshake. After connection establishment, it breaks the data into segments, adds a header to each segment and sends them to the Internet layer. The transmission control protocol (TCP) header is 20 to 24 bytes in size and the format is shown in Figure below.
When the Application layer sends data to the transport layer, TCP sends the data across using the following sequence:
Transmission Control Protocol (TCP) three-way handshake
TCP uses a method called three-way handshake to establish a connection between client and server. The three-way handshake has three steps to establish a connection. It uses the SYN and ACK flags in the Code Bits section of the header. This process is necessary to start the sequence and acknowledgement number fields. These fields are important for TCP. A three-way handshake is also known as a TCP handshake. The following figure illustrates the TCP three ways handshake.
As shown in the above figure, the source starts the three-way handshake by sending a TCP header to the destination with the SYN flag set. The destination responds back with the SYN and ACK flag sent. Examine-in the figure that destination uses the received sequence number plus 1 as the Acknowledgement number. This is because it is assumed that 1 byte of data was contained in the exchange. In the final step, the source responds back with only the ACK bit set. After this, the data flow can commence.
The size of data that can be transmitted across in a single Internet layer PDU is limited by the protocol used in that layer. This limit is called the maximum transmission unit (MTU). The application layer may send data much larger than this limit; hence TCP has to break down the data into smaller chunks called segments. Each segment is limited to the MTU in size. Sequence numbers are used to identify each byte of data. The sequence number in each header signifies the byte number of the first byte in that segment.
Flow control ensures the rate at which a sender is transmitting is in proportion with the receiver’s receiving capabilities. It manages the flow of data/packets among two different nodes, especially in cases where the sending device can send data much faster than the receiver can take in.
The TCP process initializes when the source starts sending data in groups of segments. The Window bit in the TCP header (Check-in TCP header Image) determines the number of segments that can be sent at a time. This is done to avoid irresistible the destination. At the start of the session the window in small size but it increases over time.
The destination host can also decrease the window to slow down the flow. Hence the window is called the sliding window. When the source has finished the number of segments allowed by the window, it cannot send any further segments until an acknowledgement is received from the destination.
The figure below illustrates how the window increases during the session. Notice the Destination host increasing the Window from 800 to 1000 simultaneously when it sends an ACK back to the source. This process is called windowing.
Reliable Delivery with Error recovery
When the destination receives the last segment in the agreed window, it has to send an acknowledgement to the source. It sets the ACK flag in the header and the acknowledgement number is set to the sequence number of the next byte expected. If the destination does not receive a segment, it does not send an acknowledgement back. This tells the source that some segments have been lost and it will re-transmit the segments.
The above figure illustrates how windowing and acknowledgement are used in the TCP process. Notice that when the source does not receive acknowledgement for the segment with sequence number 2000, it re-transmits the data. Once it receives the acknowledgement, it sends the next sequence according to the window size.
TCP transmits data in the order it is received from the application layer and uses the sequence number to mark the order. The data may be received at the destination in the wrong order due to network conditions. Thus TCP at the destination orders the data according to the sequence number before sending it to the application layer at its end. This order delivery is part of the benefit of TCP and one of the purposes of the Sequence Number.
When all data has been successfully transferred, the source initiates a four-way handshake to close the session. To close the session, the FIN and ACK flags are used. FIN and ACK will be discussed in coming articles.