TSN Status - University of Delaware

advertisement
Stream Control Transmission
Protocol Partial Reliability Extension
(PR-SCTP)
Course: CISC 856: TCP/IP and Upper Layer
Protocols
Presented by Nasif Ekiz
Computer & Information Sciences
University of Delaware
Thanks to Prof. Paul Amer, Ethan M Giordano
Outline
•
•
•
•
•
•
•
•
Motivation
Introduction
Partially Reliable Service
Negotiation between end-points
Sender side implementation
Receiver side implementation
Examples
Questions
Motivation
• TCP
(Reliable)
• UDP
(Unreliable)
• PR-SCTP
Reliable)
(Partially
Motivation
Introduction
• PR-SCTP is an extension to the Stream Control
Transmission Protocol (SCTP) that allows an
SCTP endpoint to signal its peer to move the
cumulative ACK point forward.
• RFC 3758
• Implemented Technology:
– FreeBSD
– Linux
– Solaris
Reliability Comparison of Transport
Layer Protocols
Reliable
Partially Reliable
Unreliable
TCP, SCTP*
PR-SCTP
UDP
No loss
Controlled loss
Loss is possible
In order/unordered* data
delivery
In order/unordered data
delivery
Unordered data delivery
No duplicates
No duplicates
Duplicates are possible
Data integrity
Data integrity
Data integrity (optional)
Flow control
Flow control
No flow control
Congestion control
Congestion control
No congestion control
Partial Reliability Extension
• is achieved through two new elements:
1. A parameter (Forward-TSN-Supported) in the
INIT/INIT-ACK indicates whether the
endpoint supports the extension.
2. A chunk type (FORWARD TSN) indicates the
receiver should move its cumulative ACK
point forward.
Negotiation of Partial Reliability
Forward-TSN-Supported Parameter
• in INIT chunk
Common fields of INIT chunk
Chunk Type
0x01 (1)
Flags = 0
Length = 0x18 (24)
Initiation Tag
Receiver Window
Outbound Streams
Maximum Inbound Streams
Initial Transmission Sequence Number (TSN)
Parameter type 0xC000
(49152)
Parameter Length = 0x0004
(4)
Optional Forward-TSN-Supported parameter
Definition of “abandoned” chunk
• A PR-SCTP data sender MAY determine that a
particular data chunk SHOULD NOT be
transmitted or retransmitted further. Such a
data chunk is referred as “abandoned”.
• When a data chunk is “abandoned”:
– The sender MUST treat the data chunk as ACK’ed
and no longer outstanding.
– The sender MUST NOT advance the cwnd based
on the “abandoned” data chunk.
Generating a Forward TSN
• The data sender maintains a variable called “Advanced
Peer Ack Point”.
• Data sender MUST process the SACK
• When a SACK is received:
– If (adv.peer.ack.point < SACKCumAckPoint)
• adv.peer.ack.point = SACKCumAckPoint;
– Try to further advance adv.peer.ack.point
• When a data chunk is marked “abandoned”
– Try to advance adv.peer.ack.point
• If adv.peer.ack.point > SACKCumAckPoint
– Data sender MUST send data receiver a Forward TSN
chunk containing the latest value of adv.peer.ack.point.
Advancing adv.peer.ack.point with
SACK information
• A SACK with cum. ack. = 102 arrives
Sender’s Out Queue
TSN
Status
…
adv.peer.ack.pnt 
102
acked
adv.peer.ack.pnt 
103
abandoned
adv.peer.ack.pnt 
104
abandoned
105
106
acked
…
• A Forward TSN with New Cum. TSN = 104 is sent!
a.p.a.p. = 0
a.p.a.p. = 1
Receiver Buffer
c.a. = 1
1
c.a. = 2
1 2
c.a. = 2
1 2
6
c.a. = 2
1 2
6 7
c.a. = 3
1 2 3
6 7
c.a. = 3
1 2 3
6 7
c.a. = 4
1 2 3 4
6 7
c.a. = 7
1 2 3 4 5 6 7
a.p.a.p. = 2
a.p.a.p. = 2
a.p.a.p. = 2
a.p.a.p. = 3
a.p.a.p. = 4
a.p.a.p. = 5
a.p.a.p. = Advanced Peer Ack Point
c.a. = Cumulative ACK
Forward Cumulative TSN chunk format
• Generated
Chunk Type
0xC0 (192)
only by data sender
Flags 0x00 (0)
Length = Variable
New Cumulative TSN
Stream-1
Streams Sequence-1
…
Stream-N
Streams Sequence-N
Forward Cumulative TSN chunk
construction
• For each “abandoned” TSN, if chunk has valid
stream and sequence number (ordered
delivery), the data sender MUST include those
numbers.
• Each stream SHOULD be reported once.
• If a Forward TSN is sent, the data sender
MUST assure that at least one T3-rtx timer is
running.
Generating a FORWARD TSN Example
• A SACK with cum. ack. = 102 arrives
Sender’s Out Queue
TSN
STR
SSN
…
…
…
adv.peer.ack.pnt

Chunk Type
0xC0 (192)
adv.peer.ack.pnt

102
1
54
103
1
55
adv.peer.ack.pnt 
104New Cumulative
2
32 TSN
abandoned
= 105
105
1
56
abandoned
adv.peer.ack.pnt 
Flags 0x00 (0)
1
106
2…
2
33
Status
acked
abandoned
Length = Variable
56
32
Receiver Side Implementation of PRSCTP
• When a FORWARD TSN chunk arrives, receiver
MUST update its cumulative TSN point
• Try to further advance cumulative TSN point
• Process FORWARD TSN chunk using stream
and stream sequence numbers
Advancing Cumulative TSN Point
• A FORWARD TSN with new cum. tsn = 103 arrives
Receiver’s In Queue
TSN
Status
…
cum.TSN.pnt 
102
received
cum.TSN.pnt 
103
missing
cum.TSN.pnt 
104
received
cum.TSN.pnt 
105
received
106
missing
107
received
…
• The new Cum. TSN point = 105!
a.p.a.p. = 0
c.a. = 1
c.a. = 2
c.a. = 2
a.p.a.p. = 1
c.a. = 2
a.p.a.p. = 2
Stream Reorder
Queues
Stream 1
1 3
Stream 2
a.p.a.p. = 2
a.p.a.p. = 2
2 7
Stream 3
c.a. = 3
a.p.a.p. = 3
a.p.a.p. = 4
a.p.a.p. = 5
c.a. = 3
c.a. = 4
c.a. = 7
4 5 6
Special Cases
• A FORWARD TSN is lost!
– SACK’s from the receiver will generate FORWARDTSN’s
– If T3-rtx timer expires, a new FORWARD TSN will
be generated
• A SACK for a FORWARD TSN is lost!
– New SACKs from the receiver can inform data
sender that the FORWARD TSN is received
– If T3-rtx timer expires, a new FORWARD TSN will
be generated
Special Cases
• A FORWARD TSN with new cum ack <= cum
TSN pnt arrives at data receiver
– Out of date
– Send a SACK ( may indicate prev. SACK is lost!)
• A FORWARD TSN updates the cum TSN point
and a TSN that was skipped (abandoned)
arrives
– Drop the data chunk
– Report the data chunk in SACK as duplicate
QUESTIONS?
THANK YOU!
Download