The TCP protocol is used by the majority of the network applica-tions on the Internet. TCP performance is strongly influenced by its congestion control algorithms that limit the amount of transmitted traffic based on the estimated network capacity and utilization. Be-cause the freely available Linux operating system has gained pop-ularity especially in the network servers, its TCP implementation affects many of the network interactions carried out today. This paper describes the fundamentals of the Linux TCP design, con-centrating on the congestion control algorithms. The Linux TCP implementation supports SACK, TCP timestamps, Explicit Con-gestion Notification, and techniques to undo congestion window adjustments after incorrect congestion notifications. This paper describes the basic concepts in Linux TCP and its con-gestion control engine. In addition to features specified by IETF, Linux has implementation details beyond the specifications aimed to further improve its performance. The paper presents how Linux TCP differs from the traditional TCP. Finally, we discuss whether it would be reasonable to implement TCP as a kernel module or as a user library.