- send window updates: even if you don't have any new data you can still
spontaneously send ACKs and window updates.
- do fast restarts: adjust the window downwards on an error, but make sure to
resend enough to keep the (estimated) pipe full.
- use a persist timeout: if the window has been too small for too long, you
probably lost an ACK. Be willing to send window probes.
- consider selective ACK: a single packet error doesn't mean the rest of the
receive window is bad. Go ahead and ACK the successful sequences.