The Transmission Control Protocol (TCP) was designed to be courteous to the different traffic uses on a network. This notion is at the heart of what makes TCP so reliable, even in the face of competing demands for resources on the poorest of networks.
What makes TCP so reliable? Under the hood, TCP implements a concept called the congestion window. The congrstion window is the number of packets the sender can transmit over the wire until it receives an acknowledgment from the receiver. For example, if we set the congestion window to 1, the sender could send 1 packet to the reciever, then it would have to wait to recieve an acknowledgment. Only then could it send a second packet.
SET congestion_window 1
SEND packet_one TO receiver FROM sender
waiting...
waiting...
waiting...
RECV ack_one TO sender FROM receiver
SEND packet_two TO receiver FROM sender
Since sending one packet at a time is not efficient, TCP has a concept called Slow Start to determine what the correct congestion window should be for the current connection. It allows a new connection to assess the network conditions and avoid making an already congested network worse.
Slow Start allows a new connection to send an additional packet for every acknowledgment it receives. This means that on a new connection after the first acknowledgment, it could send two packets, and when those two are acknowledged, it could send four, and so on.
The effective maximum payload we can put in a TCP frame is 1460 bytes. So, if we needed to download a file that was 14,600 bytes, that file would be broken up into 10 packets.