230 likes | 405 Views
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
E N D
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 (Partially Reliable)
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
Partial Reliability Extension • is achieved through two new elements: • A parameter (Forward-TSN-Supported) in the INIT/INIT-ACK indicates whether the endpoint supports the extension. • A chunk type (FORWARD TSN) indicates the receiver should move its cumulative ACK point forward.
Negotiation of Partial Reliability INIT with Forward-TSN-Supported parameter INIT–ACK with Forward-TSN-Supported parameter COOKIE–ECHO COOKIE–ACK data
Forward-TSN-Supported Parameter • in INIT chunk Common fields of INIT chunk 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 adv.peer.ack.pnt acked adv.peer.ack.pnt adv.peer.ack.pnt • A Forward TSN with New Cum. TSN = 104 is sent!
tsn = 1 a.p.a.p. = 0 Receiver Buffer tsn = 2 tsn = 3 c.a. = 1 tsn = 4 c.a. = 2 tsn = 5 tsn = 6 tsn = 7 c.a. = 2 a.p.a.p. = 1 c.a. = 2 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 4 4 4 5 5 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 a.p.a.p. = 2 a.p.a.p. = 2 a.p.a.p. = 2 tsn = 3 tsn = 4 tsn = 5 c.a. = 3 a.p.a.p. = 3 fwd tsn = 3 a.p.a.p. = 4 fwd tsn = 4 c.a. = 3 a.p.a.p. = 5 fwd tsn = 5 c.a. = 4 c.a. = 7 a.p.a.p. = Advanced Peer Ack Point c.a. = Cumulative ACK
Forward Cumulative TSN chunk format • Generated only by data sender
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 adv.peer.ack.pnt acked adv.peer.ack.pnt adv.peer.ack.pnt adv.peer.ack.pnt
Receiver Side Implementation of PR-SCTP • 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 cum.TSN.pnt cum.TSN.pnt cum.TSN.pnt cum.TSN.pnt • The new Cum. TSN point = 105!
a.p.a.p. = 0 tsn = 1 str = 1 seq = 1 tsn = 2 str = 2 seq = 1 c.a. = 1 tsn = 3 str = 1 seq = 2 tsn = 4 str = 3 seq = 1 c.a. = 2 tsn = 5 str = 3 seq = 2 tsn = 6 str = 3 seq = 3 Stream Reorder Queues tsn = 7 str = 2 seq = 2 c.a. = 2 a.p.a.p. = 1 c.a. = 2 Stream 1 2 2 2 2 1 1 1 1 4 4 4 3 3 5 7 7 5 6 6 6 6 a.p.a.p. = 2 Stream 2 a.p.a.p. = 2 a.p.a.p. = 2 tsn = 3 str = 1 seq = 2 Stream 3 tsn = 4 str = 3 seq = 1 c.a. = 3 tsn = 5 str = 3 seq = 2 a.p.a.p. = 3 fwd tsn = 3 str = 1 seq = 2 a.p.a.p. = 4 c.a. = 3 fwd tsn = 4 str = 3 seq = 1, str = 1 seq = 2 a.p.a.p. = 5 c.a. = 4 fwd tsn = 5 str = 3 seq = 2, str = 1 seq = 2 c.a. = 7
Special Cases • A FORWARD TSN is lost! • SACK’s from the receiver will generate FORWARD-TSN’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!