This document summarizes Jennifer Rexford's Fall 2016 course on advanced computer networks at Princeton University, which covers TCP congestion control. It discusses how TCP and BGP work together to allocate bandwidth across the internet in a distributed manner. It then examines the problems of fair and efficient resource allocation for multiple users sharing a single resource. The concept of max-min fairness is introduced as an approach that protects users with lower allocation and fully utilizes bottlenecked resources. The document proceeds to discuss how network utility maximization can be used to model these resource allocation problems and how TCP congestion control algorithms like TCP Reno can be understood in this framework.