[prev in list] [next in list] [prev in thread] [next in thread] 

List:       freebsd-net
Subject:    Re: Bad "bad" retransmit recovery in TCP
From:       Andre Oppermann <andre () freebsd ! org>
Date:       2004-01-25 22:49:14
Message-ID: 401447EA.716B266C () freebsd ! org
[Download RAW message or body]

Guohan Lu wrote:
> 
> hi,
>     I noticed in my TCP trace that there are many bad "bad" retransmit
> recoveries. That is the packet get lost, the timeout happens. However,
> when the lost packet are acknowledged, the cwnd of sender is not 2,
> but resumes the value before timeout. This kind of behavior happens when
> the RTT is very small, around several ms, no more than 10ms.
>     It seems to me that following code is run when the acknowledgement
> for the lost packet is received.
>   if (tp->t_rxtshift == 1 && ticks < tp->t_badrxtwin) {
>    tp->snd_cwnd = tp->snd_cwnd_prev;
>    tp->snd_ssthresh = tp->snd_ssthresh_prev;
>    tp->snd_nxt = tp->snd_max;
>    tp->t_badrxtwin = 0; /* XXX probably not required */
>   }
>    I wonder if t_badrxtwin is not correctly set in this situation? (when
> the rtt is very small)

What version of FreeBSD are you running?  A 'uname -a' would be
great of great help.

>From your description it sounds like the code which is supposed
to recover from the case when just a returning ACK is lost (not
the sent segment) is going in here.  For some reason it looks
like the code doesn't detect that a real retransmit of the segment
happend.

On the other hand it could be that you see fast recovery in action.
A packet trace of your case would be helpful too to narrow down the
problem.

-- 
Andre
_______________________________________________
freebsd-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org"
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic