[tcpm] 1323bis - PAWS check's problem with reodering on the reverse path
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[tcpm] 1323bis - PAWS check's problem with reodering on the reverse path



Hi David, hi TCPM Folks,

in the 1323bis draft the PAWS check has a problem (discarding ACKs) if reordering is present on the reverse path and no data is piggybacked. Actually, it's not the PAWS check itself, it's the modification
of section 3.4: "Which Timestamp to Echo".

The important parts of the RFC1323 and the draft (in this order) are

---
(2) If Last.ACK.sent falls within the range of sequence numbers
      of an incoming segment:

         SEG.SEQ <= Last.ACK.sent < SEG.SEQ + SEG.LEN

      then the TSval from the segment is copied to TS.Recent;
      otherwise, the TSval is ignored.

---

(2) If:

       SEG.TSval >= TS.recent and SEG.SEQ <= Last.ACK.sent

       then SEG.TSval is copied to TS.Recent; otherwise, it is
       ignored.
---

The addition of "SEG.TSval >= TS.recent" is not important for us at moment. As the appendix said,
this check is included for consistency with the PAWS test only.

The relevant paragraph is the change from "SEG.SEQ <= Last.ACK.sent < SEG.SEQ + SEG.LEN" to the reduced form "SEG.SEQ <= Last.ACK.sent". Again, the appendix said that this change was made since the original algorithm to control which timestamp is echoed was incorrect in two regards:

(1) It failed to update TSrecent for a retransmitted segment that resulted from a lost ACK.

(2) It failed if SEG.LEN = 0.

It's right that the 1323bis algo fix these two problems, however, it's introduced the new problem mentioned
already above.

Following situation:
- One-way flow from TCP A to TCP B
- Reordering on the reverse path

Consequence
- TCP A will discard all ACKs with were delayed
- Harmful in the case ABC (RFC 3465) is off, since we count ACKs for slow-start and congestion avoidance

Examples are attached.

Alex

PAWS Test 1323

time t		TCP A						TCP B

0		TS.Recent = 0					TS.Recent = 0
		Last.ACK.Sent = 0				Last.ACK.Sent = 0

1		->		| ACK=Y, SEQ=X, TSval=1 |	->
				(data X)

		TS.Recent = 0					TS.Recent = 0
		Last.ACK.Sent = Y				Last.ACK.Sent = 0

2		(delayed)	| ACK=X+1, SEQ=Y, TSval=102 |	<-
				 (ACK for data X)

		TS.Recent = 0					TS.Recent = 1
		Last.ACK.Sent = Y				Last.ACK.Sent = X+1

3		->		| ACK=Y, SEQ=X+1, TSval=3 |	->
				(data X+1)

		TS.Recent = 0					TS.Recent = 1
		Last.ACK.Sent = Y				Last.ACK.Sent = X+1

4		<-		| ACK=X+2, SEQ=Y, TSval=104 |	<-
				(ACK for data X+1)

		TS.Recent = 0 (!!!)				TS.Recent = 3
		Last.ACK.Sent = Y				Last.ACK.Sent = X+2

5		<-		| ACK=X, SEQ=Y, TSval=102 |	(reordered from t=2 arrives)
				(ACK for data X)
PAWS Test 1323bis-01

time t		TCP A						TCP B

0		TS.Recent = 0					TS.Recent = 0
		Last.ACK.Sent = 0				Last.ACK.Sent = 0

1		->		| ACK=Y, SEQ=X, TSval=1 |	->
				(data X)

		TS.Recent = 0					TS.Recent = 0
		Last.ACK.Sent = Y				Last.ACK.Sent = 0

2		(delayed)	| ACK=X+1, SEQ=Y, TSval=102 |	<-
				 (ACK for data X)

		TS.Recent = 0					TS.Recent = 1
		Last.ACK.Sent = Y				Last.ACK.Sent = X+1

3		->		| ACK=Y, SEQ=X+1, TSval=3 |	->
				(data X+1)

		TS.Recent = 0					TS.Recent = 1
		Last.ACK.Sent = Y				Last.ACK.Sent = X+1

4		<-		| ACK=X+2, SEQ=Y, TSval=104 |	<-
				(ACK for data X+1)

		TS.Recent = 104	(!!!)				TS.Recent = 3
		Last.ACK.Sent = Y				Last.ACK.Sent = X+2

5		<-		| ACK=X, SEQ=Y, TSval=102 |	(reordered from t=2 arrives)
				(ACK for data X)

		TS.Recent = 104 > TSval = 102 => ACK for data X is not acceptable

//
// Dipl.-Inform. Alexander Zimmermann
// Department of Computer Science, Informatik 4
// RWTH Aachen University
// Ahornstr. 55, 52056 Aachen, Germany
// phone: (49-241) 80-21422, fax: (49-241) 80-22220
// email: zimmermann at cs.rwth-aachen.de
// web: http://www.umic-mesh.net
//

Attachment: PGP.sig
Description: Signierter Teil der Nachricht


Note: Messages sent to this list are the opinions of the senders and do not imply endorsement by the IETF.