Subject: [Tsvwg] How does TCP SACK traffic really run??

From: #TANG SEOW KIT# <[email-masked]>
Date: Wed, 11 Jul 2001 19:59:26 +0800

Hi, 

I have a few doubts about SACK after a retransmission timeout has occured. 

I am quite clear about how SACK works when no retransmission timeout has
happened before so a packet loss, it goes into Fast Retransmit and then Fast
Recovery and it exit the recovery phase when an advance ack covers all
outstanding data at the start of the FRFR.

A)But what I am puzzled is when a retransmission timeout has occur cutting
the cwnd to 1 MSS and snd_nxt = snd_una (note: snd_nxt < snd_max in this
case). And TCP retransmit the first segment with sequence snd_nxt so that
snd_nxt is greater than snd_una now

1)if the ack for the first retransmit segment comes back, making snd_una >=
snd_nxt, do we reset snd_nxt to snd_max and continue to transmit new data?

2)or do we set snd_nxt to snd_una and continue to retransmit old data until
snd_nxt or snd_una reaches snd_max? 

If the 2) is true, then what happened when in the middle of retransmitting
these old data (after a retransmission timeout) that TCP experience a Fast
Retransmit and go in Fast Recovery ?

i.e Let say after a retransmission timeout and TCP has retransmit a few RTT
of data causing snd_una < snd_nxt < snd_max (is this possible?). Then 3 dup
acks with ack_seq = snd_una comes in. So TCP goes into Fast Retransmit and
transmit segment with snd_una. Then it cut its cwnd to half and set up the
pipe.

B)Now what I am in doubt is that in this case what should we consider as the
outstanding data for this recovery phase? 

C)And when addition dup ack or partial ack comes in, should we retransmit
those unreceived blocks which are after snd_nxt, since data from snd_una to
snd_nxt has just been retransmitted. Or should we ignore snd_nxt at all when
doing Sack recovery?

D)Another thing is that when and advance ack (partial)comes in thus causing
snd_una = ack_seq. Then if the new snd_una causes the following inequalities
: snd_nxt < snd_una <snd_max and we are still in sack recovery. Do we set
snd_nxt to snd_max and carry on the sack recovery or do we just set snd_nxt
to snd_una?

Please kindly advance me in the above scenerios. ThanK you very much 

Yours Sincerely, 

Patrick Tang 

_______________________________________________
tsvwg mailing list
[email-masked]
http://www1.ietf.org/mailman/listinfo/tsvwg