Computer Networking: A Top-Down Approach, Sixth Edition by James F. Kurose and Keith W. Ross.