TCP (Transmission Control Unit) - Linux

Function: 
SummaryTCP is a transport layer protocol that garauntees reliable delivery of data. TCP is a connection oriented protocol that requires a handshake and tear down for each connection.  TCP can provide both congestion control and flow control to maximize throughput for all connections sharing a segment of the network.
Detailed Description

TCP is a complicated protocol.  Redefined in the late 80's by Van Jacobson, it is now the de-facto standard of internet communications.  TCP begins a connection with a 3-way handshake, SYN / SYN-ACK / ACK.  

Once the connection is established the sender limits the rate of transmission according to the receivers’ window.  The window is a sliding window.  Congestion control begins with the rate the sender sends traffic, starting in a slow start phase, which exponentially increases.  When the sender's window becomes larger than the network's window or experiences loss, the slow start phase transmissions into a congestion avoidance phase where the sender's window increments monotonically.  When multiple duplicate acknowledges are detected, the sender goes into fast retransmit phase rather than wait for a timer to expire.  Upon the multiple acknowledgements the window is decreased to the slow start threshold and the sender enters congestion avoidance again (this is called fast recovery).  This is how TCP Reno's congestion avoidance algorithm is used, however there are many flavors of TCP not all conform to this standard.

To tear down the connection the sender sends a FIN, receiver a FIN ACK, and the sender a FIN.

References