kuznet@xxxxxxxxxxxxx wrote:
>> This is precisely what NewReno does. If you lose anything within
>> that cwnd, recovery is extended.
>
> Werner, where did you get this information? In that case recovery
> will not finish. :-)
Maybe I used the wrong word. The sequence number we're waiting
for (high_seq) doesn't change, of course. But the recovery
takes longer than just one RTT, because it takes longer for
snd_una to reach high_seq - due to the second loss.
And because recovery takes longer than one RTT, we decrement
cwnd too much.
>> 100: we've recovered our initial loss, but snd_una is still
>> below high_seq, because of all the other losses in that
>> cwnd
>
> This must not happen. I did not mean this in code and cannot see
> how it can happen. high_seq is set once while single recovery cycle.
> Something is buggy.
Yes, high_seq is set only once. That's okay. It's snd_una that
(correctly) takes more than one RTT to reach high_seq.
1) tcp_enter_loss sets high_seq = snd_nxt. At that time (t = 0),
snd_una is 0, snd_nxt is 100.
2) tcp_fastretrans_alert tries to exit recovery only if snd_una
reaches high_seq
Am I reading this right ?
- Werner
--
_________________________________________________________________________
/ Werner Almesberger, Buenos Aires, Argentina wa@xxxxxxxxxxxxxxx /
/_http://www.almesberger.net/____________________________________________/
|