summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc6363.txt
blob: 5f18fb29dc87b86dd5c6a0ef5ece686450c889eb (plain) (blame)
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
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
Internet Engineering Task Force (IETF)                         M. Watson
Request for Comments: 6363                                 Netflix, Inc.
Category: Standards Track                                       A. Begen
ISSN: 2070-1721                                                    Cisco
                                                                 V. Roca
                                                                   INRIA
                                                            October 2011


                Forward Error Correction (FEC) Framework

Abstract

   This document describes a framework for using Forward Error
   Correction (FEC) codes with applications in public and private IP
   networks to provide protection against packet loss.  The framework
   supports applying FEC to arbitrary packet flows over unreliable
   transport and is primarily intended for real-time, or streaming,
   media.  This framework can be used to define Content Delivery
   Protocols that provide FEC for streaming media delivery or other
   packet flows.  Content Delivery Protocols defined using this
   framework can support any FEC scheme (and associated FEC codes) that
   is compliant with various requirements defined in this document.
   Thus, Content Delivery Protocols can be defined that are not specific
   to a particular FEC scheme, and FEC schemes can be defined that are
   not specific to a particular Content Delivery Protocol.

Status of This Memo

   This is an Internet Standards Track document.

   This document is a product of the Internet Engineering Task Force
   (IETF).  It represents the consensus of the IETF community.  It has
   received public review and has been approved for publication by the
   Internet Engineering Steering Group (IESG).  Further information on
   Internet Standards is available in Section 2 of RFC 5741.

   Information about the current status of this document, any errata,
   and how to provide feedback on it may be obtained at
   http://www.rfc-editor.org/info/rfc6363.











Watson, et al.               Standards Track                    [Page 1]
^L
RFC 6363                      FEC Framework                 October 2011


Copyright Notice

   Copyright (c) 2011 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (http://trustee.ietf.org/license-info) in effect on the date of
   publication of this document.  Please review these documents
   carefully, as they describe your rights and restrictions with respect
   to this document.  Code Components extracted from this document must
   include Simplified BSD License text as described in Section 4.e of
   the Trust Legal Provisions and are provided without warranty as
   described in the Simplified BSD License.

   This document may contain material from IETF Documents or IETF
   Contributions published or made publicly available before November
   10, 2008.  The person(s) controlling the copyright in some of this
   material may not have granted the IETF Trust the right to allow
   modifications of such material outside the IETF Standards Process.
   Without obtaining an adequate license from the person(s) controlling
   the copyright in such materials, this document may not be modified
   outside the IETF Standards Process, and derivative works of it may
   not be created outside the IETF Standards Process, except to format
   it for publication as an RFC or to translate it into languages other
   than English.

























Watson, et al.               Standards Track                    [Page 2]
^L
RFC 6363                      FEC Framework                 October 2011


Table of Contents

   1. Introduction ....................................................3
   2. Definitions and Abbreviations ...................................5
   3. Architecture Overview ...........................................7
   4. Procedural Overview ............................................11
      4.1. General ...................................................11
      4.2. Sender Operation ..........................................13
      4.3. Receiver Operation ........................................15
   5. Protocol Specification .........................................19
      5.1. General ...................................................19
      5.2. Structure of the Source Block .............................19
      5.3. Packet Format for FEC Source Packets ......................19
           5.3.1. Generic Explicit Source FEC Payload ID .............21
      5.4. Packet Format for FEC Repair Packets ......................21
           5.4.1. Packet Format for FEC Repair Packets over RTP ......22
      5.5. FEC Framework Configuration Information ...................22
      5.6. FEC Scheme Requirements ...................................24
   6. Feedback .......................................................26
   7. Transport Protocols ............................................27
   8. Congestion Control .............................................27
      8.1. Motivation ................................................27
      8.2. Normative Requirements ....................................29
   9. Security Considerations ........................................29
      9.1. Problem Statement .........................................29
      9.2. Attacks against the Data Flows ............................31
           9.2.1. Access to Confidential Content .....................31
           9.2.2. Content Corruption .................................32
      9.3. Attacks against the FEC Parameters ........................33
      9.4. When Several Source Flows Are to Be Protected Together ....33
      9.5. Baseline Secure FEC Framework Operation ...................34
   10. Operations and Management Considerations ......................35
      10.1. What Are the Key Aspects to Consider? ....................35
      10.2. Operational and Management Recommendations ...............36
   11. IANA Considerations ...........................................39
   12. Acknowledgments ...............................................39
   13. References ....................................................40
      13.1. Normative References .....................................40
      13.2. Informative References ...................................40

1.  Introduction

   Many applications have a requirement to transport a continuous stream
   of packetized data from a source (sender) to one or more destinations
   (receivers) over networks that do not provide guaranteed packet
   delivery.  Primary examples are real-time, or streaming, media
   applications such as broadcast, multicast, or on-demand forms of
   audio, video, or multimedia.



Watson, et al.               Standards Track                    [Page 3]
^L
RFC 6363                      FEC Framework                 October 2011


   Forward Error Correction (FEC) is a well-known technique for
   improving the reliability of packet transmission over networks that
   do not provide guaranteed packet delivery, especially in multicast
   and broadcast applications.  The FEC Building Block, defined in
   [RFC5052], provides a framework for the definition of Content
   Delivery Protocols (CDPs) for object delivery (including, primarily,
   file delivery) that make use of separately defined FEC schemes.  Any
   CDP defined according to the requirements of the FEC Building Block
   can then easily be used with any FEC scheme that is also defined
   according to the requirements of the FEC Building Block.

   Note that the term "Forward Erasure Correction" is sometimes used,
   erasures being a type of error in which data is lost and this loss
   can be detected, rather than being received in corrupted form.  The
   focus of this document is strictly on erasures, and the term "Forward
   Error Correction" is more widely used.

   This document defines a framework for the definition of CDPs that
   provide for FEC protection for arbitrary packet flows over unreliable
   transports such as UDP.  As such, this document complements the FEC
   Building Block of [RFC5052], by providing for the case of arbitrary
   packet flows over unreliable transport, the same kind of framework as
   that document provides for object delivery.  This document does not
   define a complete CDP; rather, it defines only those aspects that are
   expected to be common to all CDPs based on this framework.

   This framework does not define how the flows to be protected are
   determined, nor does it define how the details of the protected flows
   and the FEC streams that protect them are communicated from sender to
   receiver.  It is expected that any complete CDP specification that
   makes use of this framework will address these signaling
   requirements.  However, this document does specify the information
   that is required by the FEC Framework at the sender and receiver,
   e.g., details of the flows to be FEC protected, the flow(s) that will
   carry the FEC protection data, and an opaque container for
   FEC-Scheme-Specific Information.

   FEC schemes designed for use with this framework must fulfill a
   number of requirements defined in this document.  These requirements
   are different from those defined in [RFC5052] for FEC schemes for
   object delivery.  However, there is a great deal of commonality, and
   FEC schemes defined for object delivery may be easily adapted for use
   with the framework defined in this document.








Watson, et al.               Standards Track                    [Page 4]
^L
RFC 6363                      FEC Framework                 October 2011


   Since RTP [RFC3550] is (often) used over UDP, this framework can be
   applied to RTP flows as well.  FEC repair packets may be sent
   directly over UDP or RTP.  The latter approach has the advantage that
   RTP instrumentation, based on the RTP Control Protocol (RTCP), can be
   used for the repair flow.  Additionally, the post-repair RTCP
   extended reports [RFC5725] may be used to obtain information about
   the loss rate after FEC recovery.

   The use of RTP for repair flows is defined for each FEC scheme by
   defining an RTP payload format for that particular FEC scheme
   (possibly in the same document).

2.  Definitions and Abbreviations

   Application Data Unit (ADU): The unit of source data provided as
      payload to the transport layer.

   ADU Flow: A sequence of ADUs associated with a transport-layer flow
      identifier (such as the standard 5-tuple {source IP address,
      source port, destination IP address, destination port, transport
      protocol}).

   AL-FEC: Application-layer Forward Error Correction.

   Application Protocol: Control protocol used to establish and control
      the source flow being protected, e.g., the Real-Time Streaming
      Protocol (RTSP).

   Content Delivery Protocol (CDP): A complete application protocol
      specification that, through the use of the framework defined in
      this document, is able to make use of FEC schemes to provide FEC
      capabilities.

   FEC Code: An algorithm for encoding data such that the encoded data
      flow is resilient to data loss.  Note that, in general, FEC codes
      may also be used to make a data flow resilient to corruption, but
      that is not considered in this document.

   FEC Framework: A protocol framework for the definition of Content
      Delivery Protocols using FEC, such as the framework defined in
      this document.

   FEC Framework Configuration Information: Information that controls
      the operation of the FEC Framework.

   FEC Payload ID: Information that identifies the contents of a packet
      with respect to the FEC scheme.




Watson, et al.               Standards Track                    [Page 5]
^L
RFC 6363                      FEC Framework                 October 2011


   FEC Repair Packet: At a sender (respectively, at a receiver), a
      payload submitted to (respectively, received from) the transport
      protocol containing one or more repair symbols along with a Repair
      FEC Payload ID and possibly an RTP header.

   FEC Scheme: A specification that defines the additional protocol
      aspects required to use a particular FEC code with the FEC
      Framework.

   FEC Source Packet: At a sender (respectively, at a receiver), a
      payload submitted to (respectively, received from) the transport
      protocol containing an ADU along with an optional Explicit Source
      FEC Payload ID.

   Protection Amount: The relative increase in data sent due to the use
      of FEC.

   Repair Flow: The packet flow carrying FEC data.

   Repair FEC Payload ID: A FEC Payload ID specifically for use with
      repair packets.

   Source Flow: The packet flow to which FEC protection is to be
      applied.  A source flow consists of ADUs.

   Source FEC Payload ID: A FEC Payload ID specifically for use with
      source packets.

   Source Protocol: A protocol used for the source flow being protected,
      e.g., RTP.

   Transport Protocol: The protocol used for the transport of the source
      and repair flows, e.g., UDP and the Datagram Congestion Control
      Protocol (DCCP).

   The following definitions are aligned with [RFC5052]:

   Code Rate: The ratio between the number of source symbols and the
      number of encoding symbols.  By definition, the code rate is such
      that 0 < code rate <= 1.  A code rate close to 1 indicates that a
      small number of repair symbols have been produced during the
      encoding process.

   Encoding Symbol: Unit of data generated by the encoding process.
      With systematic codes, source symbols are part of the encoding
      symbols.





Watson, et al.               Standards Track                    [Page 6]
^L
RFC 6363                      FEC Framework                 October 2011


   Packet Erasure Channel: A communication path where packets are either
      dropped (e.g., by a congested router, or because the number of
      transmission errors exceeds the correction capabilities of the
      physical-layer codes) or received.  When a packet is received, it
      is assumed that this packet is not corrupted.

   Repair Symbol: Encoding symbol that is not a source symbol.

   Source Block: Group of ADUs that are to be FEC protected as a single
      block.

   Source Symbol: Unit of data used during the encoding process.

   Systematic Code: FEC code in which the source symbols are part of the
      encoding symbols.

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
   document are to be interpreted as described in [RFC2119].

3.  Architecture Overview

   The FEC Framework is described in terms of an additional layer
   between the transport layer (e.g., UDP or DCCP) and protocols running
   over this transport layer.  As such, the data path interface between
   the FEC Framework and both underlying and overlying layers can be
   thought of as being the same as the standard interface to the
   transport layer; i.e., the data exchanged consists of datagram
   payloads each associated with a single ADU flow identified by the
   standard 5-tuple {source IP address, source port, destination IP
   address, destination port, transport protocol}.  In the case that RTP
   is used for the repair flows, the source and repair data can be
   multiplexed using RTP onto a single UDP flow and needs to be
   consequently demultiplexed at the receiver.  There are various ways
   in which this multiplexing can be done (for example, as described in
   [RFC4588]).

   It is important to understand that the main purpose of the FEC
   Framework architecture is to allocate functional responsibilities to
   separately documented components in such a way that specific
   instances of the components can be combined in different ways to
   describe different protocols.

   The FEC Framework makes use of a FEC scheme, in a similar sense to
   that defined in [RFC5052], and uses the terminology of that document.
   The FEC scheme defines the FEC encoding and decoding, and it defines
   the protocol fields and procedures used to identify packet payload
   data in the context of the FEC scheme.  The interface between the FEC



Watson, et al.               Standards Track                    [Page 7]
^L
RFC 6363                      FEC Framework                 October 2011


   Framework and a FEC scheme, which is described in this document, is a
   logical one that exists for specification purposes only.  At an
   encoder, the FEC Framework passes ADUs to the FEC scheme for FEC
   encoding.  The FEC scheme returns repair symbols with their
   associated Repair FEC Payload IDs and, in some cases, Source FEC
   Payload IDs, depending on the FEC scheme.  At a decoder, the FEC
   Framework passes transport packet payloads (source and repair) to the
   FEC scheme, and the FEC scheme returns additional recovered source
   packet payloads.

   This document defines certain FEC Framework Configuration Information
   that MUST be available to both sender and receiver(s).  For example,
   this information includes the specification of the ADU flows that are
   to be FEC protected, specification of the ADU flow(s) that will carry
   the FEC protection (repair) data, and the relationship(s) between
   these source and repair flows (i.e., which source flow(s) are
   protected by repair flow(s)).  The FEC Framework Configuration
   Information also includes information fields that are specific to the
   FEC scheme.  This information is analogous to the FEC Object
   Transmission Information defined in [RFC5052].

   The FEC Framework does not define how the FEC Framework Configuration
   Information for the stream is communicated from sender to receiver.
   This has to be defined by any CDP specification, as described in the
   following sections.

   In this architecture, we assume that the interface to the transport
   layer supports the concepts of data units (referred to here as
   Application Data Units (ADUs)) to be transported and identification
   of ADU flows on which those data units are transported.  Since this
   is an interface internal to the architecture, we do not specify this
   interface explicitly.  We do require that ADU flows that are distinct
   from the transport layer point of view (for example, distinct UDP
   flows as identified by the UDP source/destination addresses/ports)
   are also distinct on the interface between the transport layer and
   the FEC Framework.

   As noted above, RTP flows are a specific example of ADU flows that
   might be protected by the FEC Framework.  From the FEC Framework
   point of view, RTP source flows are ADU flows like any other, with
   the RTP header included within the ADU.

   Depending on the FEC scheme, RTP can also be used as a transport for
   repair packet flows.  In this case, a FEC scheme has to define an RTP
   payload format for the repair data.






Watson, et al.               Standards Track                    [Page 8]
^L
RFC 6363                      FEC Framework                 October 2011


   The architecture outlined above is illustrated in Figure 1.  In this
   architecture, two (optional) RTP instances are shown, for the source
   and repair data, respectively.  This is because the use of RTP for
   the source data is separate from, and independent of, the use of RTP
   for the repair data.  The appearance of two RTP instances is more
   natural when one considers that in many FEC codes, the repair payload
   contains repair data calculated across the RTP headers of the source
   packets.  Thus, a repair packet carried over RTP starts with an RTP
   header of its own, which is followed (after the Repair Payload ID) by
   repair data containing bytes that protect the source RTP headers (as
   well as repair data for the source RTP payloads).








































Watson, et al.               Standards Track                    [Page 9]
^L
RFC 6363                      FEC Framework                 October 2011


      +--------------------------------------------+
      |                 Application                |
      +--------------------------------------------+
                             |
                             |
                             |
    + - - - - - - - - - - - - - - - - - - - - - - - -+
    | +--------------------------------------------+ |
      |            Application Layer               |
    | +--------------------------------------------+ |
                             |                |
    | + -- -- -- -- -- -- -- -- -- -- --+     |      |
      |            RTP (Optional)       |     |
    | |                                 |     |- Configuration/
      +- -- -- -- -- -- -- -- -- -- -- -+     |  Coordination
    |                    |                    |      |
                         | ADU flows          |
    |                    |                    v      |
      +--------------------------------------------+     +------------+
    | |      FEC Framework (This document)         |<--->| FEC Scheme |
      +--------------------------------------------+     +------------+
    |                |               |               |
              Source |        Repair |
    |                |               |               |
      +-- -- -- -- --|-- --+ -- -- -- -- -- + -- --+
    | | RTP Layer    |     | RTP Processing |      | |
      | (Optional)   |     +-- -- -- |- -- -+      |
    | |        +-- -- -- -- -- -- -- |--+          | |
      |        |  RTP (De)multiplexing  |          |
    | +-- -- -- --- -- -- -- -- -- -- -- -- -- -- -+ |
                             |
    | +--------------------------------------------+ |
      |          Transport Layer (e.g., UDP)       |
    | +--------------------------------------------+ |
                             |
    | +--------------------------------------------+ |
      |                     IP                     |
    | +--------------------------------------------+ |

    | Content Delivery Protocol                      |
    + - - - - - - - - - - - - - - -  - - - - - - - - +

                   Figure 1: FEC Framework Architecture








Watson, et al.               Standards Track                   [Page 10]
^L
RFC 6363                      FEC Framework                 October 2011


   The content of the transport payload for repair packets is fully
   defined by the FEC scheme.  For a specific FEC scheme, a means MAY be
   defined for repair data to be carried over RTP, in which case, the
   repair packet payload format starts with the RTP header.  This
   corresponds to defining an RTP payload format for the specific FEC
   scheme.

   The use of RTP for repair packets is independent of the protocols
   used for source packets: if RTP is used for source packets, repair
   packets may or may not use RTP and vice versa (although it is
   unlikely that there are useful scenarios where non-RTP source flows
   are protected by RTP repair flows).  FEC schemes are expected to
   recover entire transport payloads for recovered source packets in all
   cases.  For example, if RTP is used for source flows, the FEC scheme
   is expected to recover the entire UDP payload, including the RTP
   header.

4.  Procedural Overview

4.1.  General

   The mechanism defined in this document does not place any
   restrictions on the ADUs that can be protected together, except that
   the ADU be carried over a supported transport protocol (see
   Section 7).  The data can be from multiple source flows that are
   protected jointly.  The FEC Framework handles the source flows as a
   sequence of source blocks each consisting of a set of ADUs, possibly
   from multiple source flows that are to be protected together.  For
   example, each source block can be constructed from those ADUs related
   to a particular segment in time of the flow.

   At the sender, the FEC Framework passes the payloads for a given
   block to the FEC scheme for FEC encoding.  The FEC scheme performs
   the FEC encoding operation and returns the following information:

   o  Optionally, FEC Payload IDs for each of the source payloads
      (encoded according to a FEC-Scheme-Specific format).

   o  One or more FEC repair packet payloads.

   o  FEC Payload IDs for each of the repair packet payloads (encoded
      according to a FEC-Scheme-Specific format).









Watson, et al.               Standards Track                   [Page 11]
^L
RFC 6363                      FEC Framework                 October 2011


   The FEC Framework then performs two operations.  First, it appends
   the Source FEC Payload IDs, if provided, to each of the ADUs, and
   sends the resulting packets, known as "FEC source packets", to the
   receiver.  Second, it places the provided FEC repair packet payloads
   and corresponding Repair FEC Payload IDs appropriately to construct
   FEC repair packets and send them to the receiver.

   This document does not define how the sender determines which ADUs
   are included in which source blocks or the sending order and timing
   of FEC source and repair packets.  A specific CDP MAY define this
   mapping, or it MAY be left as implementation dependent at the sender.
   However, a CDP specification MUST define how a receiver determines a
   minimum length of time that it needs to wait to receive FEC repair
   packets for any given source block.  FEC schemes MAY define
   limitations on this mapping, such as maximum size of source blocks,
   but they SHOULD NOT attempt to define specific mappings.  The
   sequence of operations at the sender is described in more detail in
   Section 4.2.

   At the receiver, original ADUs are recovered by the FEC Framework
   directly from any FEC source packets received simply by removing the
   Source FEC Payload ID, if present.  The receiver also passes the
   contents of the received ADUs, plus their FEC Payload IDs, to the FEC
   scheme for possible decoding.

   If any ADUs related to a given source block have been lost, then the
   FEC scheme can perform FEC decoding to recover the missing ADUs
   (assuming sufficient FEC source and repair packets related to that
   source block have been received).

   Note that the receiver might need to buffer received source packets
   to allow time for the FEC repair packets to arrive and FEC decoding
   to be performed before some or all of the received or recovered
   packets are passed to the application.  If such a buffer is not
   provided, then the application has to be able to deal with the severe
   re-ordering of packets that can occur.  However, such buffering is
   CDP- and/or implementation-specific and is not specified here.  The
   receiver operation is described in more detail in Section 4.3.

   The FEC source packets MUST contain information that identifies the
   source block and the position within the source block (in terms
   specific to the FEC scheme) occupied by the ADU.  This information is
   known as the Source FEC Payload ID.  The FEC scheme is responsible
   for defining and interpreting this information.  This information MAY
   be encoded into a specific field within the FEC source packet format
   defined in this specification, called the Explicit Source FEC Payload
   ID field.  The exact contents and format of the Explicit Source FEC
   Payload ID field are defined by the FEC schemes.  Alternatively, the



Watson, et al.               Standards Track                   [Page 12]
^L
RFC 6363                      FEC Framework                 October 2011


   FEC scheme MAY define how the Source FEC Payload ID is derived from
   other fields within the source packets.  This document defines the
   way that the Explicit Source FEC Payload ID field is appended to
   source packets to form FEC source packets.

   The FEC repair packets MUST contain information that identifies the
   source block and the relationship between the contained repair
   payloads and the original source block.  This is known as the Repair
   FEC Payload ID.  This information MUST be encoded into a specific
   field, the Repair FEC Payload ID field, the contents and format of
   which are defined by the FEC schemes.

   The FEC scheme MAY use different FEC Payload ID field formats for
   source and repair packets.

4.2.  Sender Operation

   It is assumed that the sender has constructed or received original
   data packets for the session.  These could be carrying any type of
   data.  The following operations, illustrated in Figure 2 for the case
   of UDP repair flows and in Figure 3 for the case of RTP repair flows,
   describe a possible way to generate compliant source and repair
   flows:

   1.  ADUs are provided by the application.

   2.  A source block is constructed as specified in Section 5.2.

   3.  The source block is passed to the FEC scheme for FEC encoding.
       The Source FEC Payload ID information of each source packet is
       determined by the FEC scheme.  If required by the FEC scheme, the
       Source FEC Payload ID is encoded into the Explicit Source FEC
       Payload ID field.

   4.  The FEC scheme performs FEC encoding, generating repair packet
       payloads from a source block and a Repair FEC Payload ID field
       for each repair payload.

   5.  The Explicit Source FEC Payload IDs (if used), Repair FEC Payload
       IDs, and repair packet payloads are provided back from the FEC
       scheme to the FEC Framework.

   6.  The FEC Framework constructs FEC source packets according to
       Section 5.3, and FEC repair packets according to Section 5.4,
       using the FEC Payload IDs and repair packet payloads provided by
       the FEC scheme.





Watson, et al.               Standards Track                   [Page 13]
^L
RFC 6363                      FEC Framework                 October 2011


   7.  The FEC source and repair packets are sent using normal
       transport-layer procedures.  The port(s) and multicast group(s)
       to be used for FEC repair packets are defined in the FEC
       Framework Configuration Information.  The FEC source packets are
       sent using the same ADU flow identification information as would
       have been used for the original source packets if the FEC
       Framework were not present (for example, in the UDP case, the UDP
       source and destination addresses and ports on the IP datagram
       carrying the source packet will be the same whether or not the
       FEC Framework is applied).

   +----------------------+
   |     Application      |
   +----------------------+
              |
              |(1) ADUs
              |
              v
   +----------------------+                           +----------------+
   |    FEC Framework     |                           |                |
   |                      |-------------------------->|   FEC Scheme   |
   |(2) Construct source  |(3) Source Block           |                |
   |    blocks            |                           |(4) FEC Encoding|
   |(6) Construct FEC     |<--------------------------|                |
   |    source and repair |                           |                |
   |    packets           |(5) Explicit Source FEC    |                |
   +----------------------+    Payload IDs            +----------------+
              |                Repair FEC Payload IDs
              |                Repair symbols
              |
              |(7) FEC source and repair packets
              v
   +----------------------+
   |   Transport Layer    |
   |     (e.g., UDP)      |
   +----------------------+

                        Figure 2: Sender Operation













Watson, et al.               Standards Track                   [Page 14]
^L
RFC 6363                      FEC Framework                 October 2011


   +----------------------+
   |     Application      |
   +----------------------+
              |
              |(1) ADUs
              |
              v
   +----------------------+                           +----------------+
   |    FEC Framework     |                           |                |
   |                      |-------------------------->|   FEC Scheme   |
   |(2) Construct source  |(3) Source Block           |                |
   |    blocks            |                           |(4) FEC Encoding|
   |(6) Construct FEC     |<--------------------------|                |
   |    source packets and|                           |                |
   |    repair payloads   |(5) Explicit Source FEC    |                |
   +----------------------+    Payload IDs            +----------------+
       |             |         Repair FEC Payload IDs
       |             |         Repair symbols
       |             |
       |(7) Source   |(7') Repair payloads
       |    packets  |
       |             |
       |      + -- -- -- -- -+
       |      |     RTP      |
       |      +-- -- -- -- --+
       v             v
   +----------------------+
   |   Transport Layer    |
   |     (e.g., UDP)      |
   +----------------------+

             Figure 3: Sender Operation with RTP Repair Flows

4.3.  Receiver Operation

   The following describes a possible receiver algorithm, illustrated in
   Figures 4 and 5 for the case of UDP and RTP repair flows,
   respectively, when receiving a FEC source or repair packet:

   1.  FEC source packets and FEC repair packets are received and passed
       to the FEC Framework.  The type of packet (source or repair) and
       the source flow to which it belongs (in the case of source
       packets) are indicated by the ADU flow information, which
       identifies the flow at the transport layer.

       In the special case that RTP is used for repair packets, and
       source and repair packets are multiplexed onto the same UDP flow,
       then RTP demultiplexing is required to demultiplex source and



Watson, et al.               Standards Track                   [Page 15]
^L
RFC 6363                      FEC Framework                 October 2011


       repair flows.  However, RTP processing is applied only to the
       repair packets at this stage; source packets continue to be
       handled as UDP payloads (i.e., including their RTP headers).

   2.  The FEC Framework extracts the Explicit Source FEC Payload ID
       field (if present) from the source packets and the Repair FEC
       Payload ID from the repair packets.

   3.  The Explicit Source FEC Payload IDs (if present), Repair FEC
       Payload IDs, and FEC source and repair payloads are passed to the
       FEC scheme.

   4.  The FEC scheme uses the received FEC Payload IDs (and derived FEC
       Source Payload IDs in the case that the Explicit Source FEC
       Payload ID field is not used) to group source and repair packets
       into source blocks.  If at least one source packet is missing
       from a source block, and at least one repair packet has been
       received for the same source block, then FEC decoding can be
       performed in order to recover missing source payloads.  The FEC
       scheme determines whether source packets have been lost and
       whether enough data for decoding of any or all of the missing
       source payloads in the source block has been received.

   5.  The FEC scheme returns the ADUs to the FEC Framework in the form
       of source blocks containing received and decoded ADUs and
       indications of any ADUs that were missing and could not be
       decoded.

   6.  The FEC Framework passes the received and recovered ADUs to the
       application.

   The description above defines functionality responsibilities but does
   not imply a specific set of timing relationships.  Source packets
   that are correctly received and those that are reconstructed MAY be
   delivered to the application out of order and in a different order
   from the order of arrival at the receiver.  Alternatively, buffering
   and packet re-ordering MAY be applied to re-order received and
   reconstructed source packets into the order they were placed into the
   source block, if that is necessary according to the application.












Watson, et al.               Standards Track                   [Page 16]
^L
RFC 6363                      FEC Framework                 October 2011


   +----------------------+
   |     Application      |
   +----------------------+
              ^
              |
              |(6) ADUs
              |
   +----------------------+                           +----------------+
   |    FEC Framework     |                           |                |
   |                      |<--------------------------|   FEC Scheme   |
   |(2)Extract FEC Payload|(5) ADUs                   |                |
   |   IDs and pass IDs & |                           |(4) FEC Decoding|
   |   payloads to FEC    |-------------------------->|                |
   |   scheme             |(3) Explicit Source FEC    |                |
   +----------------------+    Payload IDs            +----------------+
              ^                Repair FEC Payload IDs
              |                Source payloads
              |                Repair payloads
              |
              |(1) FEC source and repair packets
              |
   +----------------------+
   |   Transport Layer    |
   |     (e.g., UDP)      |
   +----------------------+

                       Figure 4: Receiver Operation
























Watson, et al.               Standards Track                   [Page 17]
^L
RFC 6363                      FEC Framework                 October 2011


   +----------------------+
   |     Application      |
   +----------------------+
              ^
              |
              |(6) ADUs
              |
   +----------------------+                           +----------------+
   |    FEC Framework     |                           |                |
   |                      |<--------------------------|   FEC Scheme   |
   |(2)Extract FEC Payload|(5) ADUs                   |                |
   |   IDs and pass IDs & |                           |(4) FEC Decoding|
   |   payloads to FEC    |-------------------------->|                |
   |   scheme             |(3) Explicit Source FEC    |                |
   +----------------------+    Payload IDs            +----------------+
       ^             ^         Repair FEC Payload IDs
       |             |         Source payloads
       |             |         Repair payloads
       |             |
       |Source       |Repair payloads
       |packets      |
       |             |
   +-- |- -- -- -- -- -- -+
   |RTP| | RTP Processing |
   |   | +-- -- -- --|-- -+
   | +-- -- -- -- -- |--+ |
   | | RTP Demux        | |
   +-- -- -- -- -- -- -- -+
              ^
              |(1) FEC source and repair packets
              |
   +----------------------+
   |   Transport Layer    |
   |     (e.g., UDP)      |
   +----------------------+

            Figure 5: Receiver Operation with RTP Repair Flows

   Note that the above procedure might result in a situation in which
   not all ADUs are recovered.











Watson, et al.               Standards Track                   [Page 18]
^L
RFC 6363                      FEC Framework                 October 2011


5.  Protocol Specification

5.1.  General

   This section specifies the protocol elements for the FEC Framework.
   Three components of the protocol are defined in this document and are
   described in the following sections:

   1.  Construction of a source block from ADUs.  The FEC code will be
       applied to this source block to produce the repair payloads.

   2.  A format for packets containing source data.

   3.  A format for packets containing repair data.

   The operation of the FEC Framework is governed by certain FEC
   Framework Configuration Information, which is defined in this
   section.  A complete protocol specification that uses this framework
   MUST specify the means to determine and communicate this information
   between sender and receiver.

5.2.  Structure of the Source Block

   The FEC Framework and FEC scheme exchange ADUs in the form of source
   blocks.  A source block is generated by the FEC Framework from an
   ordered sequence of ADUs.  The allocation of ADUs to blocks is
   dependent on the application.  Note that some ADUs may not be
   included in any block.  Each source block provided to the FEC scheme
   consists of an ordered sequence of ADUs where the following
   information is provided for each ADU:

   o  A description of the source flow with which the ADU is associated.

   o  The ADU itself.

   o  The length of the ADU.

5.3.  Packet Format for FEC Source Packets

   The packet format for FEC source packets MUST be used to transport
   the payload of an original source packet.  As depicted in Figure 6,
   it consists of the original packet, optionally followed by the
   Explicit Source FEC Payload ID field.  The FEC scheme determines
   whether the Explicit Source FEC Payload ID field is required.  This
   determination is specific to each ADU flow.






Watson, et al.               Standards Track                   [Page 19]
^L
RFC 6363                      FEC Framework                 October 2011


                   +------------------------------------+
                   |             IP Header              |
                   +------------------------------------+
                   |          Transport Header          |
                   +------------------------------------+
                   |        Application Data Unit       |
                   +------------------------------------+
                   |   Explicit Source FEC Payload ID   |
                   +------------------------------------+

    Figure 6: Structure of the FEC Packet Format for FEC Source Packets

   The FEC source packets MUST be sent using the same ADU flow as would
   have been used for the original source packets if the FEC Framework
   were not present.  The transport payload of the FEC source packet
   MUST consist of the ADU followed by the Explicit Source FEC Payload
   ID field, if required.

   The Explicit Source FEC Payload ID field contains information
   required to associate the source packet with a source block and for
   the operation of the FEC algorithm, and is defined by the FEC scheme.
   The format of the Source FEC Payload ID field is defined by the FEC
   scheme.  In the case that the FEC scheme or CDP defines a means to
   derive the Source FEC Payload ID from other information in the packet
   (for example, a sequence number used by the application protocol),
   then the Source FEC Payload ID field is not included in the packet.
   In this case, the original source packet and FEC source packet are
   identical.

   In applications where avoidance of IP packet fragmentation is a goal,
   CDPs SHOULD consider the Explicit Source FEC Payload ID size when
   determining the size of ADUs that will be delivered using the FEC
   Framework.  This is because the addition of the Explicit Source FEC
   Payload ID increases the packet length.

   The Explicit Source FEC Payload ID is placed at the end of the
   packet, so that in the case that Robust Header Compression (ROHC)
   [RFC3095] or other header compression mechanisms are used, and in the
   case that a ROHC profile is defined for the protocol carried within
   the transport payload (for example, RTP), then ROHC will still be
   applied for the FEC source packets.  Applications that are used with
   this framework need to consider that FEC schemes can add this
   Explicit Source FEC Payload ID and thereby increase the packet size.

   In many applications, support for FEC is added to a pre-existing
   protocol, and in this case, use of the Explicit Source FEC Payload ID
   can break backward compatibility, since source packets are modified.




Watson, et al.               Standards Track                   [Page 20]
^L
RFC 6363                      FEC Framework                 October 2011


5.3.1.  Generic Explicit Source FEC Payload ID

   In order to apply FEC protection using multiple FEC schemes to a
   single source flow, all schemes have to use the same Explicit Source
   FEC Payload ID format.  In order to enable this, it is RECOMMENDED
   that FEC schemes support the Generic Explicit Source FEC Payload ID
   format described below.

   The Generic Explicit Source FEC Payload ID has a length of two octets
   and consists of an unsigned packet sequence number in network-byte
   order.  The allocation of sequence numbers to packets is independent
   of any FEC scheme and of the source block construction, except that
   the use of this sequence number places a constraint on source block
   construction.  Source packets within a given source block MUST have
   consecutive sequence numbers (where consecutive includes wrap-around
   from the maximum value that can be represented in two octets (65535)
   to 0).  Sequence numbers SHOULD NOT be reused until all values in the
   sequence number space have been used.

   Note that if the original packets of the source flow are already
   carrying a packet sequence number that is at least two bytes long,
   there is no need to add the generic Explicit Source FEC Payload ID
   and modify the packets.

5.4.  Packet Format for FEC Repair Packets

   The packet format for FEC repair packets is shown in Figure 7.  The
   transport payload consists of a Repair FEC Payload ID field followed
   by repair data generated in the FEC encoding process.

                   +------------------------------------+
                   |             IP Header              |
                   +------------------------------------+
                   |          Transport Header          |
                   +------------------------------------+
                   |        Repair FEC Payload ID       |
                   +------------------------------------+
                   |           Repair Symbols           |
                   +------------------------------------+

              Figure 7: Packet Format for FEC Repair Packets

   The Repair FEC Payload ID field contains information required for the
   operation of the FEC algorithm at the receiver.  This information is
   defined by the FEC scheme.  The format of the Repair FEC Payload ID
   field is defined by the FEC scheme.





Watson, et al.               Standards Track                   [Page 21]
^L
RFC 6363                      FEC Framework                 October 2011


5.4.1.  Packet Format for FEC Repair Packets over RTP

   For FEC schemes that specify the use of RTP for repair packets, the
   packet format for repair packets includes an RTP header as shown in
   Figure 8.

                   +------------------------------------+
                   |             IP Header              |
                   +------------------------------------+
                   |      Transport Header (UDP)        |
                   +------------------------------------+
                   |             RTP Header             |
                   +------------------------------------+
                   |       Repair FEC Payload ID        |
                   +------------------------------------+
                   |          Repair Symbols            |
                   +------------------------------------+

          Figure 8: Packet Format for FEC Repair Packets over RTP

5.5.  FEC Framework Configuration Information

   The FEC Framework Configuration Information is information that the
   FEC Framework needs in order to apply FEC protection to the ADU
   flows.  A complete CDP specification that uses the framework
   specified here MUST include details of how this information is
   derived and communicated between sender and receiver.

   The FEC Framework Configuration Information includes identification
   of the set of source flows.  For example, in the case of UDP, each
   source flow is uniquely identified by a tuple {source IP address,
   source UDP port, destination IP address, destination UDP port}.  In
   some applications, some of these fields can contain wildcards, so
   that the flow is identified by a subset of the fields.  In
   particular, in many applications the limited tuple {destination IP
   address, destination UDP port} is sufficient.

   A single instance of the FEC Framework provides FEC protection for
   packets of the specified set of source flows, by means of one or more
   packet flows consisting of repair packets.  The FEC Framework
   Configuration Information includes, for each instance of the FEC
   Framework:









Watson, et al.               Standards Track                   [Page 22]
^L
RFC 6363                      FEC Framework                 October 2011


   1.  Identification of the repair flows.

   2.  For each source flow protected by the repair flow(s):

       A.  Definition of the source flow.

       B.  An integer identifier for this flow definition (i.e., tuple).
           This identifier MUST be unique among all source flows that
           are protected by the same FEC repair flow.  Integer
           identifiers can be allocated starting from zero and
           increasing by one for each flow.  However, any random (but
           still unique) allocation is also possible.  A source flow
           identifier need not be carried in source packets, since
           source packets are directly associated with a flow by virtue
           of their packet headers.

   3.  The FEC Encoding ID, identifying the FEC scheme.

   4.  The length of the Explicit Source FEC Payload ID (in octets).

   5.  Zero or more FEC-Scheme-Specific Information (FSSI) elements,
       each consisting of a name and a value where the valid element
       names and value ranges are defined by the FEC scheme.

   Multiple instances of the FEC Framework, with separate and
   independent FEC Framework Configuration Information, can be present
   at a sender or receiver.  A single instance of the FEC Framework
   protects packets of the source flows identified in (2) above; i.e.,
   all packets sent on those flows MUST be FEC source packets as defined
   in Section 5.3.  A single source flow can be protected by multiple
   instances of the FEC Framework.

   The integer flow identifier identified in (2B) above is a shorthand
   to identify source flows between the FEC Framework and the FEC
   scheme.  The reason for defining this as an integer, and including it
   in the FEC Framework Configuration Information, is so that the FEC
   scheme at the sender and receiver can use it to identify the source
   flow with which a recovered packet is associated.  The integer flow
   identifier can therefore take the place of the complete flow
   description (e.g., UDP 4-tuple).

   Whether and how this flow identifier is used is defined by the FEC
   scheme.  Since repair packets can provide protection for multiple
   source flows, repair packets either would not carry the identifier at
   all or can carry multiple identifiers.  However, in any case, the
   flow identifier associated with a particular source packet can be
   recovered from the repair packets as part of a FEC decoding
   operation.



Watson, et al.               Standards Track                   [Page 23]
^L
RFC 6363                      FEC Framework                 October 2011


   A single FEC repair flow provides repair packets for a single
   instance of the FEC Framework.  Other packets MUST NOT be sent within
   this flow; i.e., all packets in the FEC repair flow MUST be FEC
   repair packets as defined in Section 5.4 and MUST relate to the same
   FEC Framework instance.

   In the case that RTP is used for repair packets, the identification
   of the repair packet flow can also include the RTP payload type to be
   used for repair packets.

   FSSI includes the information that is specific to the FEC scheme used
   by the CDP.  FSSI is used to communicate the information that cannot
   be adequately represented otherwise and is essential for proper FEC
   encoding and decoding operations.  The motivation behind separating
   the FSSI required only by the sender (which is carried in a Sender-
   Side FEC-Scheme-Specific Information (SS-FSSI) container) from the
   rest of the FSSI is to provide the receiver or the third-party
   entities a means of controlling the FEC operations at the sender.
   Any FSSI other than the one solely required by the sender MUST be
   communicated via the FSSI container.

   The variable-length SS-FSSI and FSSI containers transmit the
   information in textual representation and contain zero or more
   distinct elements, whose descriptions are provided by the fully
   specified FEC schemes.

   For the CDPs that choose the Session Description Protocol (SDP)
   [RFC4566] for their multimedia sessions, the ABNF [RFC5234] syntax
   for the SS-FSSI and FSSI containers is provided in Section 4.5 of
   [RFC6364].

5.6.  FEC Scheme Requirements

   In order to be used with this framework, a FEC scheme MUST be capable
   of processing data arranged into blocks of ADUs (source blocks).

   A specification for a new FEC scheme MUST include the following:

   1.  The FEC Encoding ID value that uniquely identifies the FEC
       scheme.  This value MUST be registered with IANA, as described in
       Section 11.

   2.  The type, semantics, and encoding format of the Repair FEC
       Payload ID.

   3.  The name, type, semantics, and text value encoding rules for zero
       or more FEC-Scheme-Specific Information elements.




Watson, et al.               Standards Track                   [Page 24]
^L
RFC 6363                      FEC Framework                 October 2011


   4.  A full specification of the FEC code.

       This specification MUST precisely define the valid FEC-Scheme-
       Specific Information values, the valid FEC Payload ID values, and
       the valid packet payload sizes (where packet payload refers to
       the space within a packet dedicated to carrying encoding
       symbols).

       Furthermore, given a source block as defined in Section 5.2,
       valid values of the FEC-Scheme-Specific Information, a valid
       Repair FEC Payload ID value, and a valid packet payload size, the
       specification MUST uniquely define the values of the encoding
       symbols to be included in the repair packet payload of a packet
       with the given Repair FEC Payload ID value.

       A common and simple way to specify the FEC code to the required
       level of detail is to provide a precise specification of an
       encoding algorithm that -- given a source block, valid values of
       the FEC-Scheme-Specific Information, a valid Repair FEC Payload
       ID value, and a valid packet payload size as input -- produces
       the exact value of the encoding symbols as output.

   5.  A description of practical encoding and decoding algorithms.

       This description need not be to the same level of detail as for
       the encoding above; however, it has to be sufficient to
       demonstrate that encoding and decoding of the code are both
       possible and practical.

   FEC scheme specifications MAY additionally define the following:

      Type, semantics, and encoding format of an Explicit Source FEC
      Payload ID.

   Whenever a FEC scheme specification defines an 'encoding format' for
   an element, this has to be defined in terms of a sequence of bytes
   that can be embedded within a protocol.  The length of the encoding
   format either MUST be fixed or it MUST be possible to derive the
   length from examining the encoded bytes themselves.  For example, the
   initial bytes can include some kind of length indication.











Watson, et al.               Standards Track                   [Page 25]
^L
RFC 6363                      FEC Framework                 October 2011


   FEC scheme specifications SHOULD use the terminology defined in this
   document and SHOULD follow the following format:

   1.  Introduction  <Describe the use cases addressed by this FEC
       scheme>

   2.  Formats and Codes

       2.1.  Source FEC Payload ID(s)  <Either define the type and
             format of the Explicit Source FEC Payload ID or define how
             Source FEC Payload ID information is derived from source
             packets>

       2.2.  Repair FEC Payload ID  <Define the type and format of the
             Repair FEC Payload ID>

       2.3.  FEC Framework Configuration Information  <Define the names,
             types, and text value encoding formats of the FEC-Scheme-
             Specific Information elements>

   3.  Procedures  <Describe any procedures that are specific to this
       FEC scheme, in particular derivation and interpretation of the
       fields in the FEC Payload IDs and FEC-Scheme-Specific
       Information>

   4.  FEC Code Specification  <Provide a complete specification of the
       FEC Code>

   Specifications can include additional sections including examples.

   Each FEC scheme MUST be specified independently of all other FEC
   schemes, for example, in a separate specification or a completely
   independent section of a larger specification (except, of course, a
   specification of one FEC scheme can include portions of another by
   reference).  Where an RTP payload format is defined for repair data
   for a specific FEC scheme, the RTP payload format and the FEC scheme
   can be specified within the same document.

6.  Feedback

   Many applications require some kind of feedback on transport
   performance, e.g., how much data arrived at the receiver, at what
   rate, and when?  When FEC is added to such applications, feedback
   mechanisms may also need to be enhanced to report on the performance
   of the FEC, e.g., how much lost data was recovered by the FEC?






Watson, et al.               Standards Track                   [Page 26]
^L
RFC 6363                      FEC Framework                 October 2011


   When used to provide instrumentation for engineering purposes, it is
   important to remember that FEC is generally applied to relatively
   small blocks of data (in the sense that each block is transmitted
   over a relatively small period of time).  Thus, feedback information
   that is averaged over longer periods of time will likely not provide
   sufficient information for engineering purposes.  More detailed
   feedback over shorter time scales might be preferred.  For example,
   for applications using RTP transport, see [RFC5725].

   Applications that use feedback for congestion control purposes MUST
   calculate such feedback on the basis of packets received before FEC
   recovery is applied.  If this requirement conflicts with other uses
   of the feedback information, then the application MUST be enhanced to
   support information calculated both pre- and post-FEC recovery.  This
   is to ensure that congestion control mechanisms operate correctly
   based on congestion indications received from the network, rather
   than on post-FEC recovery information that would give an inaccurate
   picture of congestion conditions.

   New applications that require such feedback SHOULD use RTP/RTCP
   [RFC3550].

7.  Transport Protocols

   This framework is intended to be used to define CDPs that operate
   over transport protocols providing an unreliable datagram service,
   including in particular the User Datagram Protocol (UDP) and the
   Datagram Congestion Control Protocol (DCCP).

8.  Congestion Control

   This section starts with some informative background on the
   motivation of the normative requirements for congestion control,
   which are spelled out in Section 8.2.

8.1.  Motivation

   o  The enforcement of congestion control principles has gained a lot
      of momentum in the IETF over recent years.  While the need for
      congestion control over the open Internet is unquestioned, and the
      goal of TCP friendliness is generally agreed upon for most (but
      not all) applications, the problem of congestion detection and
      measurement in heterogeneous networks can hardly be considered
      solved.  Most congestion control algorithms detect and measure
      congestion by taking (primarily or exclusively) the packet loss
      rate into account.  This appears to be inappropriate in
      environments where a large percentage of the packet losses are the
      result of link-layer errors and independent of the network load.



Watson, et al.               Standards Track                   [Page 27]
^L
RFC 6363                      FEC Framework                 October 2011


   o  The authors of this document are primarily interested in
      applications where the application reliability requirements and
      end-to-end reliability of the network differ, such that it
      warrants higher-layer protection of the packet stream, e.g., due
      to the presence of unreliable links in the end-to-end path and
      where real-time, scalability, or other constraints prohibit the
      use of higher-layer (transport or application) feedback.  A
      typical example for such applications is multicast and broadcast
      streaming or multimedia transmission over heterogeneous networks.
      In other cases, application reliability requirements can be so
      high that the required end-to-end reliability will be difficult to
      achieve.  Furthermore, the end-to-end network reliability is not
      necessarily known in advance.

   o  This FEC Framework is not defined as, nor is it intended to be, a
      quality-of-service (QoS) enhancement tool to combat losses
      resulting from highly congested networks.  It should not be used
      for such purposes.

   o  In order to prevent such misuse, one approach is to leave
      standardization to bodies most concerned with the problem
      described above.  However, the IETF defines base standards used by
      several bodies, including the Digital Video Broadcasting (DVB)
      Project, the Third Generation Partnership Project (3GPP), and
      3GPP2, all of which appear to share the environment and the
      problem described.

   o  Another approach is to write a clear applicability statement.  For
      example, one could restrict the use of this framework to networks
      with certain loss characteristics (e.g., wireless links).
      However, there can be applications where the use of FEC is
      justified to combat congestion-induced packet losses --
      particularly in lightly loaded networks, where congestion is the
      result of relatively rare random peaks in instantaneous traffic
      load -- thereby intentionally violating congestion control
      principles.  One possible example for such an application could be
      a no-matter-what, brute-force FEC protection of traffic generated
      as an emergency signal.

   o  A third approach is to require, at a minimum, that the use of this
      framework with any given application, in any given environment,
      does not cause congestion issues that the application alone would
      not itself cause; i.e., the use of this framework must not make
      things worse.







Watson, et al.               Standards Track                   [Page 28]
^L
RFC 6363                      FEC Framework                 October 2011


   o  Taking the above considerations into account, Section 8.2
      specifies a small set of constraints for FEC; these constraints
      are mandatory for all senders compliant with this FEC Framework.
      Further restrictions can be imposed by certain CDPs.

8.2.  Normative Requirements

   o  The bandwidth of FEC repair data MUST NOT exceed the bandwidth of
      the original source data being protected (without the possible
      addition of an Explicit Source FEC Payload ID).  This disallows
      the (static or dynamic) use of excessively strong FEC to combat
      high packet loss rates, which can otherwise be chosen by naively
      implemented dynamic FEC-strength selection mechanisms.  We
      acknowledge that there are a few exotic applications, e.g., IP
      traffic from space-based senders, or senders in certain hardened
      military devices, that could warrant a higher FEC strength.
      However, in this specification, we give preference to the overall
      stability and network friendliness of average applications.

   o  Whenever the source data rate is adapted due to the operation of
      congestion control mechanisms, the FEC repair data rate MUST be
      similarly adapted.

9.  Security Considerations

   First of all, it must be clear that the application of FEC protection
   to a stream does not provide any kind of security.  On the contrary,
   the FEC Framework itself could be subject to attacks or could pose
   new security risks.  The goals of this section are to state the
   problem, discuss the risks, and identify solutions when feasible.  It
   also defines a mandatory-to-implement (but not mandatory-to-use)
   security scheme.

9.1.  Problem Statement

   A content delivery system is potentially subject to many attacks.
   Attacks can target the content, the CDP, or the network itself, with
   completely different consequences, particularly in terms of the
   number of impacted nodes.

   Attacks can have several goals:

   o  They can try to give access to confidential content (e.g., in the
      case of non-free content).

   o  They can try to corrupt the source flows (e.g., to prevent a
      receiver from using them), which is a form of denial-of-service
      (DoS) attack.



Watson, et al.               Standards Track                   [Page 29]
^L
RFC 6363                      FEC Framework                 October 2011


   o  They can try to compromise the receiver's behavior (e.g., by
      making the decoding of an object computationally expensive), which
      is another form of DoS attack.

   o  They can try to compromise the network's behavior (e.g., by
      causing congestion within the network), which potentially impacts
      a large number of nodes.

   These attacks can be launched either against the source and/or repair
   flows (e.g., by sending fake FEC source and/or repair packets) or
   against the FEC parameters that are sent either in-band (e.g., in the
   Repair FEC Payload ID or in the Explicit Source FEC Payload ID) or
   out-of-band (e.g., in the FEC Framework Configuration Information).

   Several dimensions to the problem need to be considered.  The first
   one is the way the FEC Framework is used.  The FEC Framework can be
   used end-to-end, i.e., it can be included in the final end-device
   where the upper application runs, or the FEC Framework can be used in
   middleboxes, for instance, to globally protect several source flows
   exchanged between two or more distant sites.

   A second dimension is the threat model.  When the FEC Framework
   operates in the end-device, this device (e.g., a personal computer)
   might be subject to attacks.  Here, the attacker is either the end-
   user (who might want to access confidential content) or somebody
   else.  In all cases, the attacker has access to the end-device but
   does not necessarily fully control this end-device (a secure domain
   can exist).  Similarly, when the FEC Framework operates in a
   middlebox, this middlebox can be subject to attacks or the attacker
   can gain access to it.  The threats can also concern the end-to-end
   transport (e.g., through the Internet).  Here, examples of threats
   include the transmission of fake FEC source or repair packets; the
   replay of valid packets; the drop, delay, or misordering of packets;
   and, of course, traffic eavesdropping.

   The third dimension consists in the desired security services.  Among
   them, the content integrity and sender authentication services are
   probably the most important features.  We can also mention DoS
   mitigation, anti-replay protection, or content confidentiality.

   Finally, the fourth dimension consists in the security tools
   available.  This is the case of the various Digital Rights Management
   (DRM) systems, defined outside of the context of the IETF, that can
   be proprietary solutions.  Otherwise, the Secure Real-Time Transport
   Protocol (SRTP) [RFC3711] and IPsec/Encapsulating Security Payload
   (IPsec/ESP) [RFC4303] are two tools that can turn out to be useful in
   the context of the FEC Framework.  Note that using SRTP requires that
   the application generate RTP source flows and, when applied below the



Watson, et al.               Standards Track                   [Page 30]
^L
RFC 6363                      FEC Framework                 October 2011


   FEC Framework, that both the FEC source and repair packets be regular
   RTP packets.  Therefore, SRTP is not considered to be a universal
   solution applicable in all use cases.

   In the following sections, we further discuss security aspects
   related to the use of the FEC Framework.

9.2.  Attacks against the Data Flows

9.2.1.  Access to Confidential Content

   Access control to the source flow being transmitted is typically
   provided by means of encryption.  This encryption can be done by the
   content provider itself, or within the application (for instance, by
   using SRTP [RFC3711]), or at the network layer on a per-packet basis
   when IPsec/ESP is used [RFC4303].  If confidentiality is a concern,
   it is RECOMMENDED that one of these solutions be used.  Even if we
   mention these attacks here, they are neither related to nor
   facilitated by the use of FEC.

   Note that when encryption is applied, this encryption MUST be applied
   either on the source data before the FEC protection or, if done after
   the FEC protection, on both the FEC source packets and repair packets
   (and an encryption at least as cryptographically secure as the
   encryption applied on the FEC source packets MUST be used for the FEC
   repair packets).  Otherwise, if encryption were to be performed only
   on the FEC source packets after FEC encoding, a non-authorized
   receiver could be able to recover the source data after decoding the
   FEC repair packets, provided that a sufficient number of such packets
   were available.

   The following considerations apply when choosing where to apply
   encryption (and more generally where to apply security services
   beyond encryption).  Once decryption has taken place, the source data
   is in plaintext.  The full path between the output of the deciphering
   module and the final destination (e.g., the TV display in the case of
   a video) MUST be secured, in order to prevent any unauthorized access
   to the source data.

   When the FEC Framework endpoint is the end-system (i.e., where the
   upper application runs) and if the threat model includes the
   possibility that an attacker has access to this end-system, then the
   end-system architecture is very important.  More precisely, in order
   to prevent an attacker from getting hold of the plaintext, all
   processing, once deciphering has taken place, MUST occur in a
   protected environment.  If encryption is applied after FEC protection





Watson, et al.               Standards Track                   [Page 31]
^L
RFC 6363                      FEC Framework                 October 2011


   at the sending side (i.e., below the FEC Framework), it means that
   FEC decoding MUST take place in the protected environment.  With
   certain use cases, this MAY be complicated or even impossible.  In
   such cases, applying encryption before FEC protection is preferred.

   When the FEC Framework endpoint is a middlebox, the recovered source
   flow, after FEC decoding, SHOULD NOT be sent in plaintext to the
   final destination(s) if the threat model includes the possibility
   that an attacker eavesdrops on the traffic.  In that case, it is
   preferable to apply encryption before FEC protection.

   In some cases, encryption could be applied both before and after the
   FEC protection.  The considerations described above still apply in
   such cases.

9.2.2.  Content Corruption

   Protection against corruptions (e.g., against forged FEC source/
   repair packets) is achieved by means of a content integrity
   verification/source authentication scheme.  This service is usually
   provided at the packet level.  In this case, after removing all the
   forged packets, the source flow might sometimes be recovered.
   Several techniques can provide this content integrity/source
   authentication service:

   o  At the application layer, SRTP [RFC3711] provides several
      solutions to check the integrity and authenticate the source of
      RTP and RTCP messages, among other services.  For instance, when
      associated with the Timed Efficient Stream Loss-Tolerant
      Authentication (TESLA) [RFC4383], SRTP is an attractive solution
      that is robust to losses, provides a true authentication/integrity
      service, and does not create any prohibitive processing load or
      transmission overhead.  Yet, with TESLA, checking a packet
      requires a small delay (a second or more) after its reception.
      Whether or not this extra delay, both in terms of startup delay at
      the client and end-to-end delay, is appropriate depends on the
      target use case.  In some situations, this might degrade the user
      experience.  In other situations, this will not be an issue.
      Other building blocks can be used within SRTP to provide content
      integrity/authentication services.

   o  At the network layer, IPsec/ESP [RFC4303] offers (among other
      services) an integrity verification mechanism that can be used to
      provide authentication/content integrity services.







Watson, et al.               Standards Track                   [Page 32]
^L
RFC 6363                      FEC Framework                 October 2011


   It is up to the developer and the person in charge of deployment, who
   know the security requirements and features of the target application
   area, to define which solution is the most appropriate.  Nonetheless,
   it is RECOMMENDED that at least one of these techniques be used.

   Note that when integrity protection is applied, it is RECOMMENDED
   that it take place on both FEC source and repair packets.  The
   motivation is to keep corrupted packets from being considered during
   decoding, as such packets would often lead to a decoding failure or
   result in a corrupted decoded source flow.

9.3.  Attacks against the FEC Parameters

   Attacks on these FEC parameters can prevent the decoding of the
   associated object.  For instance, modifying the finite field size of
   a Reed-Solomon FEC scheme (when applicable) will lead a receiver to
   consider a different FEC code.

   Therefore, it is RECOMMENDED that security measures be taken to
   guarantee the integrity of the FEC Framework Configuration
   Information.  Since the FEC Framework does not define how the FEC
   Framework Configuration Information is communicated from sender to
   receiver, we cannot provide further recommendations on how to
   guarantee its integrity.  However, any complete CDP specification
   MUST give recommendations on how to achieve it.  When the FEC
   Framework Configuration Information is sent out-of-band, e.g., in a
   session description, it SHOULD be protected, for instance, by
   digitally signing it.

   Attacks are also possible against some FEC parameters included in the
   Explicit Source FEC Payload ID and Repair FEC Payload ID.  For
   instance, modifying the Source Block Number of a FEC source or repair
   packet will lead a receiver to assign this packet to a wrong block.

   Therefore, it is RECOMMENDED that security measures be taken to
   guarantee the integrity of the Explicit Source FEC Payload ID and
   Repair FEC Payload ID.  To that purpose, one of the packet-level
   source authentication/content integrity techniques described in
   Section 9.2.2 can be used.

9.4.  When Several Source Flows Are to Be Protected Together

   When several source flows, with different security requirements, need
   to be FEC protected jointly, within a single FEC Framework instance,
   then each flow MAY be processed appropriately, before the protection.
   For instance, source flows that require access control MAY be
   encrypted before they are FEC protected.




Watson, et al.               Standards Track                   [Page 33]
^L
RFC 6363                      FEC Framework                 October 2011


   There are also situations where the only insecure domain is the one
   over which the FEC Framework operates.  In that case, this situation
   MAY be addressed at the network layer, using IPsec/ESP (see
   Section 9.5), even if only a subset of the source flows has strict
   security requirements.

   Since the use of the FEC Framework should not add any additional
   threat, it is RECOMMENDED that the FEC Framework aggregate flow be in
   line with the maximum security requirements of the individual source
   flows.  For instance, if denial-of-service (DoS) protection is
   required, an integrity protection SHOULD be provided below the FEC
   Framework, using, for instance, IPsec/ESP.

   Generally speaking, whenever feasible, it is RECOMMENDED that FEC
   protecting flows with totally different security requirements be
   avoided.  Otherwise, significant processing overhead would be added
   to protect source flows that do not need it.

9.5.  Baseline Secure FEC Framework Operation

   The FEC Framework has been defined in such a way to be independent
   from the application that generates source flows.  Some applications
   might use purely unidirectional flows, while other applications might
   also use unicast feedback from the receivers.  For instance, this is
   the case when considering RTP/RTCP-based source flows.

   This section describes a baseline mode of secure FEC Framework
   operation based on the application of the IPsec protocol, which is
   one possible solution to solve or mitigate the security threats
   introduced by the use of the FEC Framework.

   Two related documents are of interest.  First, Section 5.1 of
   [RFC5775] defines a baseline secure Asynchronous Layered Coding (ALC)
   operation for sender-to-group transmissions, assuming the presence of
   a single sender and a source-specific multicast (SSM) or SSM-like
   operation.  The proposed solution, based on IPsec/ESP, can be used to
   provide a baseline FEC Framework secure operation, for the downstream
   source flow.

   Second, Section 7.1 of [RFC5740] defines a baseline secure NACK-
   Oriented Reliable Multicast (NORM) operation, for sender-to-group
   transmissions as well as unicast feedback from receivers.  Here, it
   is also assumed there is a single sender.  The proposed solution is
   also based on IPsec/ESP.  However, the difference with respect to
   [RFC5775] relies on the management of IPsec Security Associations
   (SAs) and corresponding Security Policy Database (SPD) entries, since
   NORM requires a second set of SAs and SPD entries to be defined to
   protect unicast feedback from receivers.



Watson, et al.               Standards Track                   [Page 34]
^L
RFC 6363                      FEC Framework                 October 2011


   Note that the IPsec/ESP requirement profiles outlined in [RFC5775]
   and [RFC5740] are commonly available on many potential hosts.  They
   can form the basis of a secure mode of operation.  Configuration and
   operation of IPsec typically require privileged user authorization.
   Automated key management implementations are typically configured
   with the privileges necessary to allow the needed system IPsec
   configuration.

10.  Operations and Management Considerations

   The question of operating and managing the FEC Framework and the
   associated FEC scheme(s) is of high practical importance.  The goals
   of this section are to discuss aspects and recommendations related to
   specific deployments and solutions.

   In particular, this section discusses the questions of
   interoperability across vendors/use cases and whether defining
   mandatory-to-implement (but not mandatory-to-use) solutions is
   beneficial.

10.1.  What Are the Key Aspects to Consider?

   Several aspects need to be considered, since they will directly
   impact the way the FEC Framework and the associated FEC schemes can
   be operated and managed.

   This section lists them as follows:

   1.  A Single Small Generic Component within a Larger (and Often
       Legacy) Solution: The FEC Framework is one component within a
       larger solution that includes one or several upper-layer
       applications (that generate one or several ADU flows) and an
       underlying protocol stack.  A key design principle is that the
       FEC Framework should be able to work without making any
       assumption with respect to either the upper-layer application(s)
       or the underlying protocol stack, even if there are special cases
       where assumptions are made.

   2.  One-to-One with Feedback vs. One-to-Many with Feedback vs. One-
       to-Many without Feedback Scenarios: The FEC Framework can be used
       in use cases that completely differ from one another.  Some use
       cases are one-way (e.g., in broadcast networks), with either a
       one-to-one, one-to-many, or many-to-many transmission model, and
       the receiver(s) cannot send any feedback to the sender(s).  Other
       use cases follow a bidirectional one-to-one, one-to-many, or
       many-to-many scenario, and the receiver(s) can send feedback to
       the sender(s).




Watson, et al.               Standards Track                   [Page 35]
^L
RFC 6363                      FEC Framework                 October 2011


   3.  Non-FEC Framework Capable Receivers: With the one-to-many and
       many-to-many use cases, the receiver population might have
       different capabilities with respect to the FEC Framework itself
       and the supported FEC schemes.  Some receivers might not be
       capable of decoding the repair packets belonging to a particular
       FEC scheme, while some other receivers might not support the FEC
       Framework at all.

   4.  Internet vs. Non-Internet Networks: The FEC Framework can be
       useful in many use cases that use a transport network that is not
       the public Internet (e.g., with IPTV or Mobile TV).  In such
       networks, the operational and management considerations can be
       achieved through an open or proprietary solution, which is
       specified outside of the IETF.

   5.  Congestion Control Considerations: See Section 8 for a discussion
       on whether or not congestion control is needed, and its
       relationships with the FEC Framework.

   6.  Within End-Systems vs. within Middleboxes: The FEC Framework can
       be used within end-systems, very close to the upper-layer
       application, or within dedicated middleboxes (for instance, when
       it is desired to protect one or several flows while they cross a
       lossy channel between two or more remote sites).

   7.  Protecting a Single Flow vs. Several Flows Globally: The FEC
       Framework can be used to protect a single flow or several flows
       globally.

10.2.  Operational and Management Recommendations

   Overall, from the discussion in Section 10.1, it is clear that the
   CDPs and FEC schemes compatible with the FEC Framework differ widely
   in their capabilities, application, and deployment scenarios such
   that a common operation and management method or protocol that works
   well for all of them would be too complex to define.  Thus, as a
   design choice, the FEC Framework does not dictate the use of any
   particular technology or protocol for transporting FEC data, managing
   the hosts, signaling the configuration information, or encoding the
   configuration information.  This provides flexibility and is one of
   the main goals of the FEC Framework.  However, this section gives
   some RECOMMENDED guidelines.









Watson, et al.               Standards Track                   [Page 36]
^L
RFC 6363                      FEC Framework                 October 2011


   1.  A Single Small Generic Component within a Larger (and Often
       Legacy) Solution: It is anticipated that the FEC Framework will
       often be used to protect one or several RTP streams.  Therefore,
       implementations SHOULD make feedback information accessible via
       RTCP to enable users to take advantage of the tools using (or
       used by) RTCP to operate and manage the FEC Framework instance
       along with the associated FEC schemes.

   2.  One-to-One with Feedback vs. One-to-Many with Feedback vs. One-
       to-Many without Feedback Scenarios: With use cases that are
       one-way, the FEC Framework sender does not have any way to gather
       feedback from receivers.  With use cases that are bidirectional,
       the FEC Framework sender can collect detailed feedback (e.g., in
       the case of a one-to-one scenario) or at least occasional
       feedback (e.g., in the case of a multicast, one-to-many
       scenario).  All these applications have naturally different
       operational and management aspects.  They also have different
       requirements or features, if any, for collecting feedback,
       processing it, and acting on it.  The data structures for
       carrying the feedback also vary.

       Implementers SHOULD make feedback available using either an
       in-band or out-of-band asynchronous reporting mechanism.  When an
       out-of-band solution is preferred, a standardized reporting
       mechanism, such as Syslog [RFC5424] or Simple Network Management
       Protocol (SNMP) notifications [RFC3411], is RECOMMENDED.  When
       required, a mapping mechanism between the Syslog and SNMP
       reporting mechanisms could be used, as described in [RFC5675] and
       [RFC5676].

   3.  Non-FEC Framework Capable Receivers: Section 5.3 gives
       recommendations on how to provide backward compatibility in the
       presence of receivers that cannot support the FEC scheme being
       used or the FEC Framework itself: basically, the use of Explicit
       Source FEC Payload ID is banned.  Additionally, a non-FEC
       Framework capable receiver MUST also have a means not to receive
       the repair packets that it will not be able to decode in the
       first place or a means to identify and discard them appropriately
       upon receiving them.  This SHOULD be achieved by sending repair
       packets on a different transport-layer flow.  In the case of RTP
       transport, and if both source and repair packets will be sent on
       the same transport-layer flow, this SHOULD be achieved by using
       an RTP framing for FEC repair packets with a different payload
       type.  It is the responsibility of the sender to select the
       appropriate mechanism when needed.






Watson, et al.               Standards Track                   [Page 37]
^L
RFC 6363                      FEC Framework                 October 2011


   4.  Within End-Systems vs. within Middleboxes: When the FEC Framework
       is used within middleboxes, it is RECOMMENDED that the paths
       between the hosts where the sending applications run and the
       middlebox that performs FEC encoding be as reliable as possible,
       i.e., not be prone to packet loss, packet reordering, or varying
       delays in delivering packets.

       Similarly, when the FEC Framework is used within middleboxes, it
       is RECOMMENDED that the paths be as reliable as possible between
       the middleboxes that perform FEC decoding and the end-systems
       where the receiving applications operate.

   5.  Management of Communication Issues before Reaching the Sending
       FECFRAME Instance: Let us consider situations where the FEC
       Framework is used within middleboxes.  At the sending side, the
       general reliability recommendation for the path between the
       sending applications and the middlebox is important, but it may
       not guarantee that a loss, reordering, or long delivery delay
       cannot happen, for whatever reason.  If such a rare event
       happens, this event SHOULD NOT compromise the operation of the
       FECFRAME instances, at either the sending side or the receiving
       side.  This is particularly important with FEC schemes that do
       not modify the ADU for backward-compatibility purposes (i.e., do
       not use any Explicit Source FEC Payload ID) and rely on, for
       instance, the RTP sequence number field to identify FEC source
       packets within their source block.  In this case, packet loss or
       packet reordering leads to a gap in the RTP sequence number space
       seen by the FECFRAME instance.  Similarly, varying delay in
       delivering packets over this path can lead to significant timing
       issues.  With FEC schemes that indicate in the Repair FEC Payload
       ID, for each source block, the base RTP sequence number and
       number of consecutive RTP packets that belong to this source
       block, a missing ADU or an ADU delivered out of order could cause
       the FECFRAME sender to switch to a new source block.  However,
       some FEC schemes and/or receivers may not necessarily handle such
       varying source block sizes.  In this case, one could consider
       duplicating the last ADU received before the loss, or inserting
       zeroed ADU(s), depending on the nature of the ADU flow.
       Implementers SHOULD consider the consequences of such alternative
       approaches, based on their use cases.

   6.  Protecting a Single Flow vs. Several Flows Globally: In the
       general case, the various ADU flows that are globally protected
       can have different features, and in particular different real-
       time requirements (in the case of real-time flows).  The process
       of globally protecting these flows SHOULD take into account the
       requirements of each individual flow.  In particular, it would be
       counterproductive to add repair traffic to a real-time flow for



Watson, et al.               Standards Track                   [Page 38]
^L
RFC 6363                      FEC Framework                 October 2011


       which the FEC decoding delay at a receiver makes decoded ADUs for
       this flow useless because they do not satisfy the associated
       real-time constraints.  From a practical point of view, this
       means that the source block creation process at the sending FEC
       Framework instance SHOULD consider the most stringent real-time
       requirements of the ADU flows being globally protected.

   7.  ADU Flow Bundle Definition and Flow Delivery: By design, a repair
       flow might enable a receiver to recover the ADU flow(s) that it
       protects even if none of the associated FEC source packets are
       received.  Therefore, when defining the bundle of ADU flows that
       are globally protected and when defining which receiver receives
       which flow, the sender SHOULD make sure that the ADU flow(s) and
       repair flow(s) of that bundle will only be received by receivers
       that are authorized to receive all the ADU flows of that bundle.
       See Section 9.4 for additional recommendations for situations
       where strict access control for ADU flows is needed.

       Additionally, when multiple ADU flows are globally protected, a
       receiver that wants to benefit from FECFRAME loss protection
       SHOULD receive all the ADU flows of the bundle.  Otherwise, the
       missing FEC source packets would be considered lost, which might
       significantly reduce the efficiency of the FEC scheme.

11.  IANA Considerations

   FEC schemes for use with this framework are identified in protocols
   using FEC Encoding IDs.  Values of FEC Encoding IDs are subject to
   IANA registration.  For this purpose, this document creates a new
   registry called the "FEC Framework (FECFRAME) FEC Encoding IDs".

   The values that can be assigned within the "FEC Framework (FECFRAME)
   FEC Encoding IDs" registry are numeric indexes in the range (0, 255).
   Values of 0 and 255 are reserved.  Assignment requests are granted on
   an IETF Review basis as defined in [RFC5226].  Section 5.6 defines
   explicit requirements that documents defining new FEC Encoding IDs
   should meet.

12.  Acknowledgments

   This document is based in part on [FEC-SF], and so thanks are due to
   the additional authors of that document: Mike Luby, Magnus
   Westerlund, and Stephan Wenger.  That document was in turn based on
   the FEC Streaming Protocol defined by 3GPP in [MBMSTS], and thus,
   thanks are also due to the participants in 3GPP SA Working Group 4.
   Further thanks are due to the members of the FECFRAME Working Group
   for their comments and reviews.




Watson, et al.               Standards Track                   [Page 39]
^L
RFC 6363                      FEC Framework                 October 2011


13.  References

13.1.  Normative References

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119, March 1997.

   [RFC3411]  Harrington, D., Presuhn, R., and B. Wijnen, "An
              Architecture for Describing Simple Network Management
              Protocol (SNMP) Management Frameworks", STD 62, RFC 3411,
              December 2002.

   [RFC5052]  Watson, M., Luby, M., and L. Vicisano, "Forward Error
              Correction (FEC) Building Block", RFC 5052, August 2007.

   [RFC5226]  Narten, T. and H. Alvestrand, "Guidelines for Writing an
              IANA Considerations Section in RFCs", BCP 26, RFC 5226,
              May 2008.

   [RFC5234]  Crocker, D., Ed., and P. Overell, "Augmented BNF for
              Syntax Specifications: ABNF", STD 68, RFC 5234,
              January 2008.

   [RFC5424]  Gerhards, R., "The Syslog Protocol", RFC 5424, March 2009.

13.2.  Informative References

   [FEC-SF]   Watson, M., Luby, M., Westerlund, M., and S. Wenger,
              "Forward Error Correction (FEC) Streaming Framework", Work
              in Progress, July 2005.

   [MBMSTS]   3GPP, "Multimedia Broadcast/Multicast Service (MBMS);
              Protocols and codecs", 3GPP TS 26.346, March 2009,
              <http://ftp.3gpp.org/specs/html-info/26346.htm>.

   [RFC3095]  Bormann, C., Burmeister, C., Degermark, M., Fukushima, H.,
              Hannu, H., Jonsson, L-E., Hakenberg, R., Koren, T., Le,
              K., Liu, Z., Martensson, A., Miyazaki, A., Svanbro, K.,
              Wiebke, T., Yoshimura, T., and H. Zheng, "RObust Header
              Compression (ROHC): Framework and four profiles: RTP, UDP,
              ESP, and uncompressed", RFC 3095, July 2001.

   [RFC3550]  Schulzrinne, H., Casner, S., Frederick, R., and V.
              Jacobson, "RTP: A Transport Protocol for Real-Time
              Applications", STD 64, RFC 3550, July 2003.






Watson, et al.               Standards Track                   [Page 40]
^L
RFC 6363                      FEC Framework                 October 2011


   [RFC3711]  Baugher, M., McGrew, D., Naslund, M., Carrara, E., and K.
              Norrman, "The Secure Real-time Transport Protocol (SRTP)",
              RFC 3711, March 2004.

   [RFC4303]  Kent, S., "IP Encapsulating Security Payload (ESP)",
              RFC 4303, December 2005.

   [RFC4383]  Baugher, M. and E. Carrara, "The Use of Timed Efficient
              Stream Loss-Tolerant Authentication (TESLA) in the Secure
              Real-time Transport Protocol (SRTP)", RFC 4383,
              February 2006.

   [RFC4566]  Handley, M., Jacobson, V., and C. Perkins, "SDP: Session
              Description Protocol", RFC 4566, July 2006.

   [RFC4588]  Rey, J., Leon, D., Miyazaki, A., Varsa, V., and R.
              Hakenberg, "RTP Retransmission Payload Format", RFC 4588,
              July 2006.

   [RFC5675]  Marinov, V. and J. Schoenwaelder, "Mapping Simple Network
              Management Protocol (SNMP) Notifications to SYSLOG
              Messages", RFC 5675, October 2009.

   [RFC5676]  Schoenwaelder, J., Clemm, A., and A. Karmakar,
              "Definitions of Managed Objects for Mapping SYSLOG
              Messages to Simple Network Management Protocol (SNMP)
              Notifications", RFC 5676, October 2009.

   [RFC5725]  Begen, A., Hsu, D., and M. Lague, "Post-Repair Loss RLE
              Report Block Type for RTP Control Protocol (RTCP) Extended
              Reports (XRs)", RFC 5725, February 2010.

   [RFC5740]  Adamson, B., Bormann, C., Handley, M., and J. Macker,
              "NACK-Oriented Reliable Multicast (NORM) Transport
              Protocol", RFC 5740, November 2009.

   [RFC5775]  Luby, M., Watson, M., and L. Vicisano, "Asynchronous
              Layered Coding (ALC) Protocol Instantiation", RFC 5775,
              April 2010.

   [RFC6364]  Begen, A., "Session Description Protocol Elements for FEC
              Framework", RFC 6364, October 2011.









Watson, et al.               Standards Track                   [Page 41]
^L
RFC 6363                      FEC Framework                 October 2011


Authors' Addresses

   Mark Watson
   Netflix, Inc.
   100 Winchester Circle
   Los Gatos, CA  95032
   USA

   EMail: watsonm@netflix.com


   Ali Begen
   Cisco
   181 Bay Street
   Toronto, ON  M5J 2T3
   Canada

   EMail: abegen@cisco.com


   Vincent Roca
   INRIA
   655, av. de l'Europe
   Inovallee; Montbonnot
   ST ISMIER cedex  38334
   France

   EMail: vincent.roca@inria.fr
   URI:   http://planete.inrialpes.fr/people/roca/






















Watson, et al.               Standards Track                   [Page 42]
^L