Transmission Control Protocol (TCP) and various queue management algorithms such as tail drop and random early detection (RED), etc. are intimately related topics. Historically, the two evolved together and have had a symbiotic relationship. However, a poor understanding of the relationship between TCP and queue-management algorithms is at the root of why measured performance in routers is dramatically different from the actual performance of live networks, leading to a need for massive over-provisioning. Explanations of how the various components of TCP work, and the effect various queuing schemes have on TCP, tends to be isolated on specific topics and scattered. This paper attempts to bring the key concepts together in one place with the objective of improving understanding of these two critically linked topics.