1. For each of the following TCP algorithms, write one sentence explaining how it works, and another sentence describing what it is for: (a) delayed acknowledgements (b) Nagle algorithm (c) slow start (d) fast retransmit (e) congestion avoidance (fast recovery) (f) Karn's algorithm 2. What are the benefits and drawbacks of keepalives? Why does the original TCP specification not include keepalives? 3. Why does a host running TCP include an ackowledgement with every packet it sends, even if it has not received any new data? 4. What is the difference between the receive window and the congestion window in TCP? 5. Give two reasons why it is a good idea for a host to piggyback acknowledgements for received data along with the data it sends.