1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
|
Network Working Group R. Stewart
Request for Comments: 3758 M. Ramalho
Category: Standards Track Cisco Systems, Inc.
Q. Xie
Motorola, Inc.
M. Tuexen
Univ. of Applied Sciences Muenster
P. Conrad
University of Delaware
May 2004
Stream Control Transmission Protocol (SCTP)
Partial Reliability Extension
Status of this Memo
This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
Copyright Notice
Copyright (C) The Internet Society (2004). All Rights Reserved.
Abstract
This memo describes an extension to the Stream Control Transmission
Protocol (SCTP) that allows an SCTP endpoint to signal to its peer
that it should move the cumulative ack point forward. When both
sides of an SCTP association support this extension, it can be used
by an SCTP implementation to provide partially reliable data
transmission service to an upper layer protocol. This memo describes
the protocol extensions, which consist of a new parameter for INIT
and INIT ACK, and a new FORWARD TSN chunk type, and provides one
example of a partially reliable service that can be provided to the
upper layer via this mechanism.
Stewart, et al. Standards Track [Page 1]
^L
RFC 3758 SCTP Partial Reliability Extension May 2004
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1. Overview of Protocol Extensions. . . . . . . . . . . . . 2
1.2. Overview of New Services Provided to the Upper Layer . . 3
1.3. Benefits of PR-SCTP . . . . . . . . . . . . . . . . . . 4
2. Conventions. . . . . . . . . . . . . . . . . . . . . . . . . . 5
3. Protocol Changes to support PR-SCTP . . . . . . . . . . . . . 5
3.1. Forward-TSN-Supported Parameter For INIT and INIT ACK. . 5
3.2. Forward Cumulative TSN Chunk Definition (FORWARD TSN). . 5
3.3. Negotiation of Forward-TSN-Supported parameter . . . . . 7
3.3.1. Sending Forward-TSN-Supported param in INIT . . . 7
3.3.2. Receipt of Forward-TSN-Supported parameter in
INIT or INIT-ACK. . . . . . . . . . . . . . . . . 7
3.3.3. Receipt of Op. Error for Forward-TSN-Supported
Param . . . . . . . . . . . . . . . . . . . . . . 8
3.4. Definition of "abandoned" in the context of PR-SCTP. . . 8
3.5. Sender Side Implementation of PR-SCTP. . . . . . . . . . 9
3.6. Receiver Side Implementation of PR-SCTP. . . . . . . . . 12
4. Services provided by PR-SCTP to the upper layer. . . . . . . . 14
4.1. PR-SCTP Service Definition for "timed reliability" . . . 15
4.2. PR-SCTP Association Establishment. . . . . . . . . . . . 16
4.3. Guidelines for defining other PR-SCTP Services . . . . . 17
4.4. Usage Notes. . . . . . . . . . . . . . . . . . . . . . . 19
5. Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . 19
6. Acknowledgments. . . . . . . . . . . . . . . . . . . . . . . . 19
7. Security Considerations. . . . . . . . . . . . . . . . . . . . 19
8. IANA Considerations. . . . . . . . . . . . . . . . . . . . . . 20
9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 20
9.1. Normative References . . . . . . . . . . . . . . . . . . 20
9.2. Informative References . . . . . . . . . . . . . . . . . 20
10. Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . 20
11. Full Copyright Statement . . . . . . . . . . . . . . . . . . .
1. Introduction
This memo describes an extension to the Stream Control Transmission
Protocol (SCTP) RFC 2960 [2] that allows an SCTP sender to signal to
its peer that it should no longer expect to receive one or more DATA
chunks.
1.1. Overview of Protocol Extensions
The protocol extension described in this document consists of two new
elements:
1. a single new parameter in the INIT/INIT-ACK exchange that
indicates whether the endpoint supports the extension
Stewart, et al. Standards Track [Page 2]
^L
RFC 3758 SCTP Partial Reliability Extension May 2004
2. a single new chunk type, FORWARD TSN, that indicates that the
receiver should move its cumulative ack point forward (possibly
skipping past one or more DATA chunks that may not yet have been
received and/or acknowledged.)
1.2. Overview of New Services Provided to the Upper Layer
When this extension is supported by both sides of an SCTP
association, it can be used to provide partially reliable transport
service over an SCTP association. We define partially reliable
transport service as a service that allows the user to specify, on a
per message basis, the rules governing how persistent the transport
service should be in attempting to send the message to the receiver.
One example of partially reliable service is specified in this
document, namely a "timed reliability" service. This service allows
the service user to indicate a limit on the duration of time that the
sender should try to transmit/retransmit the message (this is a
natural extension of the "lifetime" parameter already in the base
protocol).
In addition to this example, we will also show that defining the
semantics of a particular partially reliable service involves two
elements, namely:
1. how the service user indicates the level of reliability required
for a particular message, and
2. how the sender side implementation uses that reliability level to
determine when to give up on further retransmissions of that
message.
Note that other than the fact that the FORWARD-TSN chunk is required,
neither of these two elements impacts the "on-the-wire" protocol;
only the API and the sender side implementation are affected by the
way in which the service is defined to the upper layer. Therefore,
in principle, it is feasible to implement many varieties of partially
reliable services in a particular SCTP implementation without
changing the on-the-wire protocol. Also, the SCTP receiver does not
necessarily need to know which semantics of partially reliable
service are being used by the sender, since the receiver's only role
is to correctly interpret FORWARD TSN chunks, thereby skipping past
messages that the sender has decided to no longer transmit (or
retransmit).
Nevertheless, it is recommended that a limited number of standard
definitions of partially reliable services be standardized by the
IETF so that the designers of IETF application layer protocols can
Stewart, et al. Standards Track [Page 3]
^L
RFC 3758 SCTP Partial Reliability Extension May 2004
match the requirements of their upper layer protocols to standard
service definitions provided by a particular SCTP implementation.
One such definition, "timed reliability", is included in this
document. Given the extensions proposed in this document, other
definitions may be standardized as the need arises without further
changes to the on-the-wire protocol.
1.3. Benefits of PR-SCTP
Hereafter, we use the notation "Partial Reliable Stream Control
Transmission Protocol (PR-SCTP)" to refer to the SCTP protocol,
extended as defined in this document.
The following are some of the advantages for integrating partially
reliable data service into SCTP, i.e., benefits of PR-SCTP:
1. Some application layer protocols may benefit from being able to
use a single SCTP association to carry both reliable content, --
such as text pages, billing and accounting information, setup
signaling -- and unreliable content, e.g., state that is highly
sensitive to timeliness, where generating a new packet is more
advantageous than transmitting an old one [3].
2. Partially reliable data traffic carried by PR-SCTP will enjoy the
same communication failure detection and protection capabilities
as the normal reliable SCTP data traffic does. This includes the
ability to quickly detect a failed destination address, fail-over
to an alternate destination address, and be notified if the data
receiver becomes unreachable.
3. In addition to providing unordered, unreliable data transfer as
UDP does, PR-SCTP can provide ordered, unreliable data transfer
service.
4. PR-SCTP employs the same congestion control and congestion
avoidance for all data traffic, whether reliable or partially
reliable - this is very desirable since SCTP enforces TCP-
friendliness (unlike UDP.)
5. Because of the chunk bundling function of SCTP, reliable and
unreliable messages can be multiplexed over a single PR-SCTP
association. Therefore, the number of IP datagrams (and hence the
network overhead) can be reduced instead of having to send these
different types of data using separate protocols. Additionally,
this multiplexing allows for port savings versus using different
ports for reliable and unreliable connections.
Stewart, et al. Standards Track [Page 4]
^L
RFC 3758 SCTP Partial Reliability Extension May 2004
2. Conventions
The keywords MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD,
SHOULD NOT, RECOMMENDED, NOT RECOMMENDED, MAY, and OPTIONAL, when
they appear in this document, are to be interpreted as described in
BCP 14, RFC 2119 [1].
Comparisons and arithmetic on Transport Sequence Numbers (TSNs) are
governed by the rules in Section 1.6 of RFC 2960 [2].
3. Protocol Changes to support PR-SCTP
3.1. Forward-TSN-Supported Parameter For INIT and INIT ACK
The following new OPTIONAL parameter is added to the INIT and INIT
ACK chunks.
Parameter Name Status Type Value
-------------------------------------------------------------
Forward-TSN-Supported OPTIONAL 49152 (0xC000)
At the initialization of the association, the sender of the INIT or
INIT ACK chunk MAY include this OPTIONAL parameter to inform its peer
that it is able to support the Forward TSN chunk (see Section 3.3 for
further details). The format of this parameter is defined as
follows:
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Parameter Type = 49152 | Parameter Length = 4 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Type: 16 bit u_int
49152, indicating Forward-TSN-Supported parameter
Length: 16 bit u_int
Indicates the size of the parameter, i.e., 4.
3.2 Forward Cumulative TSN Chunk Definition (FORWARD TSN)
The following new chunk type is defined:
Chunk Type Chunk Name
------------------------------------------------------
192 (0xC0) Forward Cumulative TSN (FORWARD TSN)
Stewart, et al. Standards Track [Page 5]
^L
RFC 3758 SCTP Partial Reliability Extension May 2004
This chunk shall be used by the data sender to inform the data
receiver to adjust its cumulative received TSN point forward because
some missing TSNs are associated with data chunks that SHOULD NOT be
transmitted or retransmitted by the sender.
Forward Cumulative TSN chunk has the following format:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type = 192 | Flags = 0x00 | Length = Variable |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| New Cumulative TSN |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Stream-1 | Stream Sequence-1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
\ /
/ \
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Stream-N | Stream Sequence-N |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Chunk Flags:
Set to all zeros on transmit and ignored on receipt.
New Cumulative TSN: 32 bit u_int
This indicates the new cumulative TSN to the data receiver. Upon
the reception of this value, the data receiver MUST consider
any missing TSNs earlier than or equal to this value as received,
and stop reporting them as gaps in any subsequent SACKs.
Stream-N: 16 bit u_int
This field holds a stream number that was skipped by this
FWD-TSN.
Stream Sequence-N: 16 bit u_int
This field holds the sequence number associated with the stream
that was skipped. The stream sequence field holds the largest
stream sequence number in this stream being skipped. The receiver
of the FWD-TSN's can use the Stream-N and Stream Sequence-N fields
to enable delivery of any stranded TSN's that remain on the stream
re-ordering queues. This field MUST NOT report TSN's corresponding
to DATA chunks that are marked as unordered. For ordered DATA
chunks this field MUST be filled in.
Stewart, et al. Standards Track [Page 6]
^L
RFC 3758 SCTP Partial Reliability Extension May 2004
3.3. Negotiation of Forward-TSN-Supported parameter
3.3.1. Sending Forward-TSN-Supported param in INIT
If an SCTP endpoint supports the FORWARD TSN chunk, then any time it
sends an INIT during association establishment, it MAY include the
Forward-TSN-supported parameter in the INIT chunk to indicate this
fact to its peer.
Note that if the endpoint chooses NOT to include the parameter, then
at no time during the life of the association can it send or process
a FORWARD TSN. It MUST instead act as if it does NOT support the
FORWARD TSN chunk, returning an ERROR to the peer upon receipt of any
FORWARD TSN.
3.3.2. Receipt of Forward-TSN-Supported parameter in INIT or INIT-ACK
When a receiver of an INIT detects a Forward-TSN-Supported parameter
and does not support the Forward-TSN chunk type, the receiver MUST
follow the rules defined in Section 3.3.3 of RFC 2960 [2].
When a receiver of an INIT-ACK detects a Forward-TSN-Supported
parameter and it does not support the Forward-TSN chunk type, the
receiver MUST follow the rules defined in Section 3.3.3 of RFC 2960
[2].
When a receiver of an INIT detects a Forward-TSN-Supported parameter
and it does support the Forward-TSN chunk type, the receiver MAY
respond with a Forward-TSN-supported parameter in the INIT-ACK chunk.
Note that if the endpoint chooses NOT to include the parameter, then
at no time during the life of the association can it send or process
a FORWARD TSN. It MUST instead act as if it does NOT support the
FORWARD TSN chunk, returning an ERROR to the peer upon receipt of any
FORWARD TSN.
When an endpoint that supports the FORWARD TSN chunk receives an INIT
that does not contain the Forward-TSN-Supported Parameter, that
endpoint:
o MAY include the Forward-TSN-Supported parameter in the INIT-ACK,
o SHOULD record the fact that the peer does not support the FORWARD
TSN chunk,
o MUST NOT send a FORWARD TSN chunk at any time during the
associations life,
o SHOULD inform the upper layer if the upper layer has requested
such notification.
Stewart, et al. Standards Track [Page 7]
^L
RFC 3758 SCTP Partial Reliability Extension May 2004
3.3.3. Receipt of Op. Error for Forward-TSN-Supported Param
When an SCTP endpoint that desires to use the FORWARD TSN chunk
feature for partially reliable data transfer receives an operational
error from the remote endpoint (either bundled with the COOKIE or as
an unrecognized parameter in the INIT-ACK), indicating that the
remote endpoint does not recognize the Forward-TSN-Supported
parameter, the local endpoint SHOULD inform its upper layer of the
remote endpoint's inability to support partially reliable data
transfer.
The local endpoint may then choose to either:
1) end the initiation process (in cases where the initiation process
has already ended, the endpoint may need to send an ABORT) in
consideration of the peer's inability to supply the requested
features for the new association, or
2) continue the initiation process (in cases where the initiation
process has already completed, the endpoint MUST just mark the
association as not supporting partial reliability), but with the
understanding that partially reliable data transmission is not
supported. In this case, the endpoint receiving the operational
error SHOULD note that the FORWARD TSN chunk is not supported, and
MUST NOT transmit a FORWARD TSN chunk at any time during the life
of the association.
3.4. Definition of "abandoned" in the context of PR-SCTP
At some point, a sending PR-SCTP implementation MAY determine that a
particular data chunk SHOULD NOT be transmitted or retransmitted
further, in accordance with the rules governing some particular PR-
SCTP service definition (such as the definition of "timed
reliability" in Section 4.1.) For purposes of this document, we
define the term "abandoned" to refer to any data chunk about which
the SCTP sender has made this determination.
Each PR-SCTP service defines the rules for determining when a TSN is
"abandoned", and accordingly, the rules that govern how, whether, and
when to "abandon" a TSN may vary from one service definition to
another. However, the rules governing the actions taken when a TSN
is "abandoned" do NOT vary between service definitions; these rules
are included in Section 3.5.
Stewart, et al. Standards Track [Page 8]
^L
RFC 3758 SCTP Partial Reliability Extension May 2004
3.5. Sender Side Implementation of PR-SCTP
The sender side implementation of PR-SCTP is identical to that of the
base SCTP protocol, except for:
o actions a sending side PR-SCTP implementation must take when a TSN
is "abandoned" (as per the rules of whatever PR-SCTP service
definition is in effect)
o special actions that a PR-SCTP implementation must take upon
receipt of SACK
o rules governing the generation of FORWARD TSN chunks.
In detail, these exceptions are as follows:
A1) The sender maintains an "Advanced.Peer.Ack.Point" for each peer
to track a theoretical cumulative TSN point of the peer (Note,
this is a _new_ protocol variable and its value is NOT
necessarily the same as the SCTP "Cumulative TSN Ack Point" as
defined in Section 1.4 of RFC 2960 [2], and as discussed
throughout that document.)
A2) From time to time, as governed by the rules of a particular PR-
SCTP service definition (see Section 4), the SCTP data sender may
make a determination that a particular data chunk that has
already been assigned a TSN SHOULD be "abandoned".
When a data chunk is "abandoned", the sender MUST treat the data
chunk as being finally acked and no longer outstanding.
The sender MUST NOT credit an "abandoned" data chunk to the
partial_bytes_acked as defined in Section 7.2.2 of RFC 2960 [2],
and MUST NOT advance the cwnd based on this "abandoned" data
chunk.
A3) When a TSN is "abandoned", if it is part of a fragmented message,
all other TSN's within that fragmented message MUST be abandoned
at the same time.
A4) Whenever the data sender receives a SACK from the data receiver,
it MUST first process the SACK using the normal procedures as
defined in Section 6.2.1 of RFC 2960 [2].
Stewart, et al. Standards Track [Page 9]
^L
RFC 3758 SCTP Partial Reliability Extension May 2004
The data sender MUST then perform the following additional steps:
C1) Let SackCumAck be the Cumulative TSN ACK carried in the
received SACK.
If (Advanced.Peer.Ack.Point < SackCumAck), then update
Advanced.Peer.Ack.Point to be equal to SackCumAck.
C2) Try to further advance the "Advanced.Peer.Ack.Point" locally,
that is, to move "Advanced.Peer.Ack.Point" up as long as the
chunk next in the out-queue space is marked as "abandoned",
as shown in the following example:
Assuming that a SACK arrived with the Cumulative TSN ACK =
102 and the Advanced.Peer.Ack.Point is updated to this
value:
out-queue at the end of ==> out-queue after Adv.Ack.Point
normal SACK processing local advancement
... ...
Adv.Ack.Pt-> 102 acked 102 acked
103 abandoned 103 abandoned
104 abandoned Adv.Ack.P-> 104 abandoned
105 105
106 acked 106 acked
... ...
In this example, the data sender successfully advanced the
"Advanced.Peer.Ack.Point" from 102 to 104 locally.
C3) If, after step C1 and C2, the "Advanced.Peer.Ack.Point" is
greater than the Cumulative TSN ACK carried in the received
SACK, the data sender MUST send the data receiver a FORWARD
TSN chunk containing the latest value of the
"Advanced.Peer.Ack.Point". Note that the sender MAY delay
the sending of a FORWARD TSN as defined in rule F2 below.
IMPLEMENTATION NOTE: It is an implementation decision as to
which destination address it is to be sent to, the only
restriction being that the address MUST be one that is
CONFIRMED.
C4) For each "abandoned" TSN, the sender of the FORWARD TSN MUST
determine if the chunk has a valid stream and sequence number
(i.e., it was ordered). If the chunk has a valid stream and
sequence number, the sender MUST include the stream and
sequence number in the FORWARD TSN. This information will
enable the receiver to easily find any stranded TSN's waiting
Stewart, et al. Standards Track [Page 10]
^L
RFC 3758 SCTP Partial Reliability Extension May 2004
on stream reorder queues. Each stream SHOULD only be
reported once; this means that if multiple abandoned messages
occur in the same stream, then only the highest abandoned
stream sequence number is reported. If the total size of the
FORWARD TSN does NOT fit in a single MTU, then the sender of
the FORWARD TSN SHOULD lower the Advanced.Peer.Ack.Point to
the last TSN that will fit in a single MTU.
C5) If a FORWARD TSN is sent, the sender MUST assure that at
least one T3-rtx timer is running. IMPLEMENTATION NOTE: Any
destination's timer may be used for the purposes of rule C5.
A5) Any time the T3-rtx timer expires, on any destination, the sender
SHOULD try to advance the "Advanced.Peer.Ack.Point" by following
the procedures outlined in C2 - C5.
The following additional rules govern the generation of FORWARD TSN
chunks:
F1) An endpoint MUST NOT use the FORWARD TSN for any purposes other
than circumstances described in this document.
F2) The data sender SHOULD always attempt to bundle an outgoing
FORWARD TSN with outbound DATA chunks for efficiency.
A sender MAY even choose to delay the sending of the FORWARD TSN
in the hope of bundling it with an outbound DATA chunk.
IMPLEMENTATION NOTE: An implementation may wish to limit the
number of duplicate FORWARD TSN chunks it sends by either only
sending a duplicate FORWARD TSN every other SACK or waiting a
full RTT before sending a duplicate FORWARD TSN.
IMPLEMENTATION NOTE: An implementation may allow the maximum
delay for generating a FORWARD TSN to be configured either
statically or dynamically in order to meet the specific timing
requirements of the protocol being carried, but see the next
rule:
F3) Any delay applied to the sending of FORWARD TSN chunk SHOULD NOT
exceed 200ms and MUST NOT exceed 500ms. In other words, an
implementation MAY lower this value below 500ms but MUST NOT
raise it above 500ms.
NOTE: Delaying the sending of FORWARD TSN chunks may cause delays
in the receiver's ability to deliver other data being held at the
receiver for re-ordering. The values of 200ms and 500ms match
Stewart, et al. Standards Track [Page 11]
^L
RFC 3758 SCTP Partial Reliability Extension May 2004
the required values for the delayed acknowledgement in RFC 2960
[2] since delaying a FORWARD TSN has the same consequences but in
the reverse direction.
F4) The detection criterion for out-of-order SACKs MUST remain the
same as stated in RFC 2960, that is, a SACK is only considered
out-of-order if the Cumulative TSN ACK carried in the SACK is
earlier than that of the previous received SACK (i.e., the
comparison MUST NOT be made against "Advanced.Peer.Ack.Point").
F5) If the decision to "abandon" a chunk is made, no matter how such
a decision is made, the appropriate congestion adjustment MUST be
made as specified in RFC 2960 if the chunk would have been marked
for retransmission later (e.g., either by T3-Timeout or by Fast
Retransmit).
3.6. Receiver Side Implementation of PR-SCTP
The receiver side implementation of PR-SCTP at an SCTP endpoint A is
capable of supporting any PR-SCTP service definition used by the
sender at endpoint B, even if that service definition is not
supported by the sending side functionality of host A. All that is
necessary is that the receiving side correctly handle the Forward-
TSN-Supported parameter as specified in Section 3.3, and correctly
handle the receipt of FORWARD TSN chunks as specified below.
DATA chunk arrival at a PR-SCTP receiver proceeds exactly as for DATA
chunk arrival at a base protocol SCTP receiver---that is, the
receiver MUST perform the same TSN handling, including duplicate
detection, gap detection, SACK generation, cumulative TSN
advancement, etc. as defined in RFC 2960 [2]---with the following
exceptions and additions.
When a FORWARD TSN chunk arrives, the data receiver MUST first update
its cumulative TSN point to the value carried in the FORWARD TSN
chunk, and then MUST further advance its cumulative TSN point locally
if possible, as shown by the following example:
Assuming that the new cumulative TSN carried in the arrived
FORWARD TSN is 103:
in-queue before processing in-queue after processing
the FORWARD TSN ==> the FORWARD TSN and further
advancement
Stewart, et al. Standards Track [Page 12]
^L
RFC 3758 SCTP Partial Reliability Extension May 2004
cum.TSN.Pt-> 102 received 102 --
103 missing 103 --
104 received 104 --
105 received cum.TSN.Pt-> 105 received
106 missing 106 missing
107 received 107 received
... ...
In this example, the receiver's cumulative TSN point is first
updated to 103 and then further advanced to 105.
After the above processing, the data receiver MUST stop reporting any
missing TSNs earlier than or equal to the new cumulative TSN point.
Note, if the "New Cumulative TSN" value carried in the arrived
FORWARD TSN chunk is found to be behind or at the current cumulative
TSN point, the data receiver MUST treat this FORWARD TSN as out-of-
date and MUST NOT update its Cumulative TSN. The receiver SHOULD
send a SACK to its peer (the sender of the FORWARD TSN) since such a
duplicate may indicate the previous SACK was lost in the network.
Any time a FORWARD TSN chunk arrives, for the purposes of sending a
SACK, the receiver MUST follow the same rules as if a DATA chunk had
been received (i.e., follow the delayed sack rules specified in RFC
2960 [2] section 6.2).
Whenever a DATA chunk arrives with the 'U' bit set to '0' (indicating
ordered delivery) and is out of order, the receiver must hold the
chunk for reordering. Since it is possible with PR-SCTP that a DATA
chunk being waited upon will not be retransmitted, special actions
will need to be taken upon the arrival of a FORWARD TSN.
In particular, during processing of a FORWARD TSN, the receiver MUST
use the stream sequence information to examine all of the listed
stream reordering queues, and immediately make available for delivery
stream sequence numbers earlier than or equal to the stream sequence
number listed inside the FORWARD TSN. Any such stranded data SHOULD
be made immediately available to the upper layer application.
An application using PR-SCTP receiving data should be aware of
possible missing messages. The stream sequence number can be used,
in such a case, to determine that an intervening message has been
skipped. When intervening messages are missing, it is an application
decision to process the messages or to take some other corrective
action.
Stewart, et al. Standards Track [Page 13]
^L
RFC 3758 SCTP Partial Reliability Extension May 2004
After receiving and processing a FORWARD TSN, the data receiver MUST
take cautions in updating its re-assembly queue. The receiver MUST
remove any partially reassembled message, which is still missing one
or more TSNs earlier than or equal to the new cumulative TSN point.
In the event that the receiver has invoked the partial delivery API,
a notification SHOULD also be generated to inform the upper layer API
that the message being partially delivered will NOT be completed.
Note that after receiving a FORWARD TSN and updating the cumulative
acknowledgement point, if a TSN that was skipped does arrive (i.e.,
due to network reordering), then the receiver will follow the normal
rules defined in RFC 2960 [2] for handling duplicate data. This
implies that the receiver will drop the chunk and report it as a
duplicate in the next outbound SACK chunk.
4. Services provided by PR-SCTP to the upper layer
As described in Section 1.2, it is feasible to implement a variety of
partially reliable transport services using the new protocol
mechanisms introduced in Section 3; introducing these new services
requires making changes only at the sending side API, and the sending
side protocol implementation. Thus, there may be a temptation to
standardize only the protocol, and leave the service definition as
"implementation specific" or leave it to be defined in
"informational" documents.
However, for those who may wish to write IETF standards for upper
layer protocols implemented over PR-SCTP, it is important to be able
to refer to a standard definition of services provided. Therefore,
this section provides example definitions of one such service, while
also providing guidelines for the definition of additional services
as required. Each such service may be proposed as a separate new
RFC.
Section 4 is organized as follows:
o Section 4.1 provides the definition of one specific PR-SCTP
service: timed reliability.
o Section 4.2 describes how a particular PR-SCTP service definition
is requested by the upper layer during association establishment,
and how the upper layer is notified if that request cannot be
satisfied.
o Section 4.3 then provides guidelines for the specification of PR-
SCTP services other then the one defined in this memo.
Stewart, et al. Standards Track [Page 14]
^L
RFC 3758 SCTP Partial Reliability Extension May 2004
o Finally, Section 4.4 describes some additional usage notes that
upper layer protocol designers and implementors may find helpful.
4.1. PR-SCTP Service Definition for "timed reliability"
The "timed reliability" service is a natural extension of the
"lifetime" concept already present in the base SCTP protocol.
When this service is requested for an SCTP association, it changes
the meaning of the lifetime parameter specified in the SEND primitive
(see Section 10.1, part (E) of RFC 2960 [2]; note that the parameter
is spelled "life time" in that document.)
In the base SCTP protocol, the lifetime parameter is used to avoid
sending stale data. When a lifetime value is indicated for a
particular message and that lifetime expires, SCTP cancels the
sending of this message, and notifies the ULP if the first
transmission of the data does not take place (because of rwnd or cwnd
limitations, or for any other reason). However, in the base
protocol, if SCTP has sent the first transmission before the lifetime
expires, then the message MUST be sent as a normal reliable message.
During episodes of congestion this is particularly unfortunate, as
retransmission wastes bandwidth that could have been used for other
(non-lifetime expired) messages.
When the "timed reliability" service is invoked, this latter
restriction is removed. Specifically, when the "timed reliability"
service is in effect, the following rules govern all messages that
are sent with a lifetime parameter:
TR1) If the lifetime parameter of a message is SCTP_LIFETIME_RELIABLE
(or unspecified see Section 5), that message is treated as a
normal reliable SCTP message, just as in the base SCTP protocol.
TR2) If the lifetime parameter is not SCTP_LIFETIME_RELIABLE (see
Section 5), then the SCTP sender MUST treat the message just as
if it were a normal reliable SCTP message, as long as the
lifetime has not yet expired.
TR3) Before assigning a TSN to any message, the SCTP sender MUST
evaluate the lifetime of that message. If it is expired, the
SCTP sender MUST NOT assign a TSN to that message, but instead,
SHOULD issue a notification to the upper layer and abandon the
message.
TR4) Before transmitting or retransmitting a message for which a TSN
is already assigned, the SCTP sender MUST evaluate the lifetime
of the message. If the lifetime of the message is expired, the
Stewart, et al. Standards Track [Page 15]
^L
RFC 3758 SCTP Partial Reliability Extension May 2004
SCTP sender MUST "abandon" the message, as per the rules
specified in Section 3.5 marking that TSN as eligible for
forward TSN. Note that this meets the requirement G1 defined in
Section 4.3. IMPLEMENTATION NOTE: An implementation SHOULD
delay TSN assignment as mentioned in RFC 2960 [2] Section 10.1.
In such a case, the lifetime parameter should be checked BEFORE
assigning a TSN, thus allowing a message to be abandoned without
the need to send a FORWARD TSN.
TR5) The sending SCTP MAY evaluate the lifetime of messages at
anytime. Expired messages that have not been assigned a TSN MAY
be handled as per rule TR3. Expired messages that HAVE been
assigned a TSN MAY be handled as per rule TR4.
TR6) The sending application MUST NOT change the lifetime parameter
once the message is passed to the sending SCTP.
Implementation Note: Rules TR1 through TR4 are designed in such a way
as to avoid requiring the implementer to maintain a separate timer
for each message; instead, the lifetime need only be evaluated at
points in the life of the message where actions are already being
taken, such as TSN assignment, transmission, or expiration of a
retransmission timeout. Rule TR5 is intended to give the SCTP
implementor flexibility to evaluate lifetime at any other convenient
opportunity, WITHOUT requiring that lifetime be evaluated immediately
at the point in time where it expires.
4.2. PR-SCTP Association Establishment
An upper layer protocol (ULP) that uses PR-SCTP may need to know
whether PR-SCTP can be supported on a given association. Therefore,
the ULP needs to have some indication of whether the FORWARD-TSN
chunk is supported by its peer.
Section 10.1 of RFC 2960 [2] describes abstract primitives for the
ULP-to-SCTP interface, while noting that "individual implementations
must define their own exact format, and may provide combinations or
subsets of the basic functions in single calls."
In this section, we describe one additional return value that may be
added to the ASSOCIATE primitive to allow an SCTP service user to
indicate whether the FORWARD-TSN chunk is supported by its peer.
RFC 2960 indicates that the ASSOCIATE primitive "allows the upper
layer to initiate an association to a specific peer endpoint". It is
structured as follows:
Stewart, et al. Standards Track [Page 16]
^L
RFC 3758 SCTP Partial Reliability Extension May 2004
Format: ASSOCIATE(local SCTP instance name, destination transport
addr, outbound stream count)
-> association id [,destination transport addr list]
[,outbound stream count]
This extension adds one new OPTIONAL return value, such that the new
primitive reads as follows:
Format: ASSOCIATE(local SCTP instance name, destination transport
addr, outbound stream count )
-> association id [,destination transport addr list]
[,outbound stream count] [,forward tsn supported]
NOTE: As per RFC 2960, if the ASSOCIATE primitive is implemented as a
non-blocking call, the new OPTIONAL return value shall be passed with
the association parameters using the COMMUNICATION UP notification.
The new OPTIONAL parameter "forward tsn supported" is a boolean flag:
(0) false [default] indicates that FORWARD TSN is not enabled by both
endpoints.
(1) true indicates that FORWARD TSN is enabled on both endpoints.
We also add a new primitive to allow the user application to enable/
disable the PR-SCTP service on its endpoint before an association is
established.
Format: ENABLE_PRSCTP(local SCTP instance name, boolean enable)
The boolean parameter enable, if set to true, will enable PR-SCTP
upon future endpoint associations. If the boolean parameter is set
to false, then the local endpoint will not advertise support of PR-
SCTP and thus disable the feature on future associations. It is
recommended that this option be disabled by default, i.e., in order
to enable PR-SCTP, the user will need to call this API option with
the enable flag set to "true".
4.3. Guidelines for defining other PR-SCTP Services
Other PR-SCTP services may be defined and implemented as dictated by
the needs of upper layer protocols. If such upper layer protocols
are to be standardized and require some particular PR-SCTP service
other than the one defined in this document (i.e., "timed
reliability"), then those additional PR-SCTP services should also be
specified and standardized in a new RFC.
Stewart, et al. Standards Track [Page 17]
^L
RFC 3758 SCTP Partial Reliability Extension May 2004
It is suggested that any such additional service definitions be
modeled after the contents of Section 4.1. In particular, the
service definition should provide:
1. A description of how the service user specifies any parameters
that need to be associated with a particular message (and/or any
other communication that takes place between the application and
the SCTP transport sender) that provides the SCTP transport sender
with the information needed to determine when to give up on
transmission of a particular message.
Preferably, this description should reference the primitives in
the abstract API provided in Section 10 of RFC 2960 [2],
indicating any:
* changes to the interpretation of the existing parameters of
existing primitives,
* additional parameters to be added to existing primitives (these
should be OPTIONAL, and default values should be indicated),
* additional primitives that may be needed.
2. A description of the rules used by the sender side implementation
to determine when to give up on messages that have not yet been
assigned a TSN. This description should also indicate what
protocol events trigger the evaluation, and what actions to take
(e.g., notifications.)
3. A description of the rules used by the sender side implementation
to determine when to give up on the transmission or retransmission
of messages that have already been assigned a TSN, and may have
been transmitted and possibly retransmitted zero or more times.
Items (2) and (3) in the list above should also indicate what
protocol events trigger the evaluation, and what actions to take if
the determination is made that the sender should give up on
transmitting the message (e.g., notifications to the ULP.)
Note that in any PR-SCTP service, the following rule MUST be
specified to avoid a protocol deadlock:
(G1) When the sender side implementation gives up on transmitting a
message that has been assigned a TSN (i.e., when that message is
"abandoned", as defined in Section 3.4), the sender side MUST
mark that TSN as eligible for forward TSN, and the rules in
Section 3.4 regarding the sending of FORWARD TSN chunks MUST be
followed.
Stewart, et al. Standards Track [Page 18]
^L
RFC 3758 SCTP Partial Reliability Extension May 2004
Finally, a PR-SCTP service definition should specify a "canonical
service name" to uniquely identify the service, and distinguish it
from other PR-SCTP services. This name can then be used in upper
layer protocol standards to indicate which PR-SCTP service definition
is required by that upper layer protocol. It can also be used in the
documentation of APIs of PR-SCTP implementations to indicate how an
upper layer indicates which definition of PR-SCTP service should
apply. The canonical service name for the PR-SCTP service defined in
Section 4.1 is "timed reliability".
4.4. Usage Notes
Detecting missing data in a PR-SCTP stream is useful for some
applications (e.g., Fibre channel or SCSI over IP). With PR-SCTP,
this becomes possible - the upper layer simply needs to examine the
stream sequence number of the arrived user messages of that stream to
detect any missing data. Note, this detection only works when all
the messages on that stream are sent in order, i.e., the "U" bit is
not set.
5. Variables
This section defines variables used throughout this document:
SCTP_LIFETIME_RELIABLE - A user interface indication defined by an
implementation and used to indicate when a message is to be
considered fully reliable.
6. Acknowledgments
The authors would like to thank Brian Bidulock, Scott Bradner, Jon
Berger, Armando L. Caro Jr., John Loughney, Jon Peterson, Ivan Arias
Rodriguez, Ian Rytina, Chip Sharp, and others for their comments.
7. Security Considerations
This document does not introduce any new security concerns to SCTP
other than the ones already documented in RFC 2960 [2]. In
particular, this document shares the same security issues as
unordered data within RFC 2960 [2] identified by RFC 3436 [4]. An
application using the PR-SCTP extension should not use transport
layer security; further details can be found in RFC 3436 [4].
Note that the ability to cause a message to be skipped (i.e, the
FORWARD TSN chunk) does not provide any new attack for a Man-In-the-
Middle (MIM), since the MIM already is capable of changing and/or
withholding data, thus effectively skipping messages. However, the
FORWARD TSN chunk does provide a mechanism to make it easier for a
Stewart, et al. Standards Track [Page 19]
^L
RFC 3758 SCTP Partial Reliability Extension May 2004
MIM to skip selective messages when the application has this feature
enabled since the MIM would have less state to maintain.
8. IANA Considerations
IANA has assigned 192 as a new chunk type to SCTP.
IANA has assigned 49152 as a new parameter type code to SCTP.
9. References
9.1. Normative References
[1] Bradner, S., "Key words for use in RFCs to Indicate Requirement
Levels", BCP 14, RFC 2119, March 1997.
[2] Stewart, R., Xie, Q., Morneault, K., Sharp, C., Schwarzbauer,
H., Taylor, T., Rytina, I., Kalla, M., Zhang, L. and V. Paxson,
"Stream Control Transmission Protocol", RFC 2960, October 2000.
9.2. Informative References
[3] Clark, D. and D. Tennenhouse, "Architectural Considerations for
a New Generation of Protocols", SIGCOMM 1990 pp. 200-208,
September 1990.
[4] Jungmaier, A., Rescorla, E. and M. Tuexen, "Transport Layer
Security over Stream Control Transmission Protocol", RFC 3436,
December 2002.
10. Authors' Addresses
Randall R. Stewart
Cisco Systems, Inc.
8725 West Higgins Road
Suite 300
Chicago, IL 60631
USA
Phone: +1-815-477-2127
EMail: rrs@cisco.com
Stewart, et al. Standards Track [Page 20]
^L
RFC 3758 SCTP Partial Reliability Extension May 2004
Michael A. Ramalho
Cisco Systems, Inc.
1802 Rue de la Porte
Wall Township, NJ 07719-3784
USA
Phone: +1.732.449.5762
EMail: mramalho@cisco.com
Qiaobing Xie
Motorola, Inc.
1501 W. Shure Drive, #2309
Arlington Heights, IL 60004
USA
Phone: +1-847-632-3028
EMail: qxie1@email.mot.com
Michael Tuexen
Univ. of Applied Sciences Muenster
Stegerwaldstr. 39
48565 Steinfurt
Germany
EMail: tuexen@fh-muenster.de
Phillip T. Conrad
University of Delaware
Department of Computer and Information Sciences
Newark, DE 19716
USA
Phone: +1 302 831 8622
EMail: conrad@acm.org
URI: http://www.cis.udel.edu/~pconrad
Stewart, et al. Standards Track [Page 21]
^L
RFC 3758 SCTP Partial Reliability Extension May 2004
11. Full Copyright Statement
Copyright (C) The Internet Society (2004). This document is subject
to the rights, licenses and restrictions contained in BCP 78, and
except as set forth therein, the authors retain all their rights.
This document and the information contained herein are provided on an
"AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
Intellectual Property
The IETF takes no position regarding the validity or scope of any
Intellectual Property Rights or other rights that might be claimed to
pertain to the implementation or use of the technology described in
this document or the extent to which any license under such rights
might or might not be available; nor does it represent that it has
made any independent effort to identify any such rights. Information
on the procedures with respect to rights in RFC documents can be
found in BCP 78 and BCP 79.
Copies of IPR disclosures made to the IETF Secretariat and any
assurances of licenses to be made available, or the result of an
attempt made to obtain a general license or permission for the use of
such proprietary rights by implementers or users of this
specification can be obtained from the IETF on-line IPR repository at
http://www.ietf.org/ipr.
The IETF invites any interested party to bring to its attention any
copyrights, patents or patent applications, or other proprietary
rights that may cover technology that may be required to implement
this standard. Please address the information to the IETF at ietf-
ipr@ietf.org.
Acknowledgement
Funding for the RFC Editor function is currently provided by the
Internet Society.
Stewart, et al. Standards Track [Page 22]
^L
|