TCP (Transmission Control Protocol) is a standard that defines how to establish and maintain a network conversation through which application programs can exchange data. TCP works with the Internet Protocol (IP), which defines how computers send packets of data to each other. Together, TCP and IP are the basic rules defining the Internet. The Internet Engineering Task Force (IETF) defines TCP in the Request for Comment (RFC) standards document number 793.
How Transmission Control Protocol works
TCP is a connection-oriented protocol, which means a connection is established and maintained until the application programs at each end have finished exchanging messages. It determines how to break application data into packets that networks can deliver, sends packets to and accepts packets from the network layer, manages flow control and -- because it is meant to provide error-free data transmission -- handles retransmission of dropped or garbled packets and acknowledges all packets that arrive. In the Open Systems Interconnection (OSI) communication model, TCP covers parts of Layer 4, the transport layer, and parts of Layer 5, the session layer.
For example, when a web server sends an HTML file to a client, it uses the hypertext transfer protocol (HTTP) to do so. The HTTP program layer asks the TCP layer to set up the connection and send the file. The TCP stack divides the file into data packets, numbers them and then forwards them individually to the IP layer for delivery. Although each packet in the transmission has the same source and destination IP address, packets may be sent along multiple routes. The TCP program layer in the client computer waits until all the packets have arrived, then acknowledges those it receives and asks for the re-transmission of any it does not -- based on missing packet numbers. The TCP layer then assembles the packets into a file and delivers the file to the receiving application.
This process of error detection -- making retransmissions and reordering packets after they arrive -- can introduce latency in a TCP stream. Highly time-sensitive applications such as voice over IP (VoIP), streaming video and gaming generally rely on a transport process such as User Datagram Protocol (UDP) because it reduces latency and jitter -- variation in latency -- by not worrying about reordering packets or getting missing data re-transmitted.
UDP is classified as a datagram protocol, or connectionless protocol, because it has no way of detecting whether or not both applications have finished their back-and-forth communication. Instead of correcting invalid data packets, as TCP does, UDP simply discards those packets and defers to the application layer for more detailed error detection.
What TCP is used for
TCP is used for organizing data in a way that ensures the secure transmission between the server and client. It guarantees the integrity of data sent over the network, regardless of the amount. For this reason, it is used to transmit data from other higher-level protocols that require all transmitted data to arrive. Examples include:
- Secure Shell (SSH), File Transfer Protocol (FTP), Telnet: For peer-to-peer file sharing, and, in Telnet's case, logging into another user's computer to access a file.
- Simple Mail Transfer Protocol (SMTP), Post Office Protocol (POP), Internet Message Access Protocol (IMAP): For sending and receiving email
- HTTP: For web access
These examples all exist at the application layer of the TCP/IP stack and send data downwards to TCP on the transport layer.
Why TCP is important
TCP is important because it establishes the rules and standard procedures for the way information is communicated over the internet. It is the foundation for the internet as it exists today and ensures that data transmission is carried out uniformly, regardless of the location, hardware or software involved. For this reason, it is flexible and highly scalable, meaning new protocols can be introduced to it and it will accommodate them. It is also nonproprietary, meaning no one person or company owns it.
Location in the TCP/IP stack
The TCP/IP stack is a model that represents how data is organized and exchanged over networks using the TCP/IP protocol. It depicts a series of layers that represent the way data is handled and packaged by a series of protocols as it makes its way from client to server and vice versa.
Like the OSI model, the stack is a conceptual model for data exchange standards, with data being repackaged at each layer based on its functionality and transport protocols.
The difference between the two models is the level of specificity. The OSI model is a more abstract representation of the way data is exchanged, and not specific to any protocol. It is a framework for general networking systems. The TCP/IP stack is more specific and is comprised of the dominant set of protocols used to exchange data. The OSI is abstract and more functionality based, while the TCP/IP stack is concrete and protocol based. The OSI model has seven layers, whereas the TCP/IP model only has four.
Requests come down to the server through the stack, starting at the application layer as data. From there, the information is broken into packets of different types at each layer. The data moves:
- from the application to the transport layer where it is sorted into TCP segments;
- to the internet layer where it becomes a datagram;
- to the network interface layer where it breaks apart again into bits and frames; and
- finally, the server responds, and information travels up through the stack to arrive at the application layer as data.
TCP exists in the transport layer with other protocols such as UDP. Protocols in this layer ensure the error free transmission of data to the source, except for UDP because it has more limited error checking capability. The header of a UDP datagram contains far less information than a TCP segment header and goes through much less processing at the transport layer in the interest of reduced latency.