[e2e] TCP ssthresh setting after retransmission timeouts

Agarwal, Anil Anil.Agarwal at viasat.com
Thu Jul 3 12:21:41 PDT 2003

If a TCP connection with cwnd = CWND segment experiences a retransmission
timeout, then 
	Rule 1: ssthresh is set to max(cwnd / 2, 2) segments and cwnd is set
to 1 segment or
	Rule 2: ssthresh is set to max(FlightSize / 2, 2) segments and cwnd
is set to 1 segment as specified in RFC2581.

Most implementations seem to follow rule 1, including FreeBSD and NetBSD.

Q1. What happens if there is a second retransmission timeout without snd.una
having advanced? Rule 1 implies that ssthresh is set to 2 segments. Under
rule 2, the value of ssthresh will depend on the definition of FightSize. Is
FlightSize in this example equal to 1 or CWND segments? Depending on the
definition, under rule 2, sshthresh will be set to 2 or CWND/2 on this and
any subsequent retransmission timeouts. Which one is it?

Q2. Many publications imply that the window size is "halved" on each such
retransmission timeout, which sounds reasonable. I guess that really is not

I will appreciate if someone knowledgeable can clarify this issue.

Anil Agarwal
ViaSat Inc

ViaSat Brings Your Network to Life

More information about the end2end-interest mailing list