summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc9442.txt
blob: 18610210be039ab22a8944560efc6ad27101b5d6 (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
Internet Engineering Task Force (IETF)                        JC. Zúñiga
Request for Comments: 9442                                              
Category: Standards Track                                       C. Gomez
ISSN: 2070-1721                                               S. Aguilar
                                    Universitat Politècnica de Catalunya
                                                              L. Toutain
                                                          IMT-Atlantique
                                                             S. Céspedes
                                                    Concordia University
                                                              D. Wistuba
                                          NIC Labs, Universidad de Chile
                                                                J. Boite
                                                         Unabiz (Sigfox)
                                                               July 2023


Static Context Header Compression (SCHC) over Sigfox Low-Power Wide Area
                            Network (LPWAN)

Abstract

   The Static Context Header Compression (SCHC) and fragmentation
   specification (RFC 8724) describes a generic framework for
   application header compression and fragmentation modes designed for
   Low-Power Wide Area Network (LPWAN) technologies.  This document
   defines a profile of SCHC over Sigfox LPWAN and provides optimal
   parameter values and modes of operation.

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 7841.

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

Copyright Notice

   Copyright (c) 2023 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
   (https://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 Revised BSD License text as described in Section 4.e of the
   Trust Legal Provisions and are provided without warranty as described
   in the Revised BSD License.

Table of Contents

   1.  Introduction
   2.  Terminology
   3.  SCHC over Sigfox
     3.1.  Network Architecture
     3.2.  Uplink
     3.3.  Downlink
       3.3.1.  SCHC ACK on Downlink
     3.4.  SCHC Rules
     3.5.  Fragmentation
       3.5.1.  Uplink Fragmentation
       3.5.2.  Downlink Fragmentation
     3.6.  SCHC over Sigfox F/R Message Formats
       3.6.1.  Uplink No-ACK Mode: Single-Byte SCHC Header
       3.6.2.  Uplink ACK-on-Error Mode: Single-Byte SCHC Header
       3.6.3.  Uplink ACK-on-Error Mode: Two-Byte SCHC Header Option 1
       3.6.4.  Uplink ACK-on-Error Mode: Two-Byte SCHC Header Option 2
       3.6.5.  Downlink ACK-Always Mode: Single-Byte SCHC Header
     3.7.  Padding
   4.  Fragmentation Rules Examples
     4.1.  Uplink Fragmentation Rules Examples
     4.2.  Downlink Fragmentation Rules Example
   5.  Fragmentation Sequence Examples
     5.1.  Uplink No-ACK Examples
     5.2.  Uplink ACK-on-Error Examples: Single-Byte SCHC Header
     5.3.  SCHC Abort Examples
   6.  Security Considerations
   7.  IANA Considerations
   8.  References
     8.1.  Normative References
     8.2.  Informative References
   Acknowledgements
   Authors' Addresses

1.  Introduction

   The Generic Framework for Static Context Header Compression (SCHC)
   and Fragmentation specification [RFC8724] can be used in conjunction
   with any of the four LPWAN technologies described in [RFC8376].
   These LPWANs have similar characteristics, such as star-oriented
   topologies, network architecture, connected devices with built-in
   applications, etc.

   SCHC offers a considerable degree of flexibility to accommodate all
   these LPWAN technologies.  Even though there are a great number of
   similarities between them, some differences exist with respect to the
   transmission characteristics, payload sizes, etc.  Hence, there are
   optimal parameters and modes of operation that can be used when SCHC
   is used in conjunction with a specific LPWAN technology.

   Sigfox is an LPWAN technology that offers energy-efficient
   connectivity for devices at a very low cost.  Complete Sigfox
   documentation can be found in [sigfox-docs].  Sigfox aims to provide
   a very wide area network composed of Base Stations that receive short
   Uplink messages (up to 12 bytes in size) sent by devices over the
   long-range Sigfox radio protocol, as described in [RFC8376].  Base
   Stations then forward messages to the Sigfox Cloud infrastructure for
   further processing (e.g., to offer geolocation services) and final
   delivery to the customer.  Base Stations also relay Downlink messages
   (with a fixed 8-byte size) sent by the Sigfox Cloud to the devices,
   i.e., Downlink messages are being generated when devices explicitly
   request these messages with a flag in an Uplink message.  With SCHC
   functionalities, the Sigfox network offers more reliable
   communications (including recovery of lost messages) and is able to
   convey extended-size payloads (allowing for fragmentation/reassembly
   of messages) [sigfox-spec].

   This document describes the parameters, settings, and modes of
   operation to be used when SCHC is implemented over a Sigfox LPWAN.
   The set of parameters forms a "SCHC over Sigfox Profile".  The SCHC
   over Sigfox Profile is applicable to the Sigfox Radio specification
   versions up to v1.6/March 2022 [sigfox-spec] (support for future
   versions would have to be assessed).

2.  Terminology

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
   "OPTIONAL" in this document are to be interpreted as described in
   BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
   capitals, as shown here.

   It is assumed that the reader is familiar with the terms and
   mechanisms defined in [RFC8376] and [RFC8724].  Also, it is assumed
   that the reader is familiar with Sigfox terminology [sigfox-spec].

3.  SCHC over Sigfox

   The Generic SCHC Framework described in [RFC8724] takes advantage of
   previous knowledge of traffic flows existing in LPWAN applications to
   avoid context synchronization.

   Contexts need to be stored and pre-configured on both ends.  This can
   be done either by using a provisioning protocol, by out-of-band
   means, or by pre-provisioning them (e.g., at manufacturing time).
   For example, the context exchange can be done by using the Network
   Configuration Protocol (NETCONF) [RFC6241] with Secure Shell (SSH),
   RESTCONF [RFC8040] with secure HTTP methods, and CoAP Management
   Interface (CORECONF) [CORE-COMI] with the Constrained Application
   Protocol (CoAP) [RFC7252] as provisioning protocols.  The contexts
   can be encoded in XML under NETCONF, in JSON [RFC8259] under
   RESTCONF, and in Concise Binary Object Representation (CBOR)
   [RFC8949] under CORECONF.  The way contexts are configured and stored
   on both ends is out of the scope of this document.

3.1.  Network Architecture

   Figure 1 represents the architecture for Compression/Decompression
   (C/D) and Fragmentation/Reassembly (F/R) based on the terminology
   defined in [RFC8376], where the Radio Gateway (RGW) is a Sigfox Base
   Station and the Network Gateway (NGW) is the Sigfox cloud-based
   Network.

   Sigfox Device                                           Application
 +----------------+                                     +--------------+
 | APP1 APP2 APP3 |                                     |APP1 APP2 APP3|
 +----------------+                                     +--------------+
 |   UDP  |       |                                     |     |  UDP   |
 |  IPv6  |       |                                     |     | IPv6   |
 +--------+       |                                     |     +--------+
 | SCHC C/D & F/R |                                     |              |
 |                |                                     |              |
 +-------+--------+                                     +--------+-----+
         $                                                       .
         $   +---------+     +--------------+     +---------+    .
         $   |         |     |   Network    |     | Network |    .
         +~~ |Sigfox BS|     |   Gateway    |     |  SCHC   |    .
             |  (RGW)  | === |    (NGW)     | ... |C/D & F/R|.....
             |         |     | Sigfox Cloud |     |         |   IP-based
             +---------+     +--------------+     +---------+   Network
 ------- Uplink message ------>
                                        <------- Downlink message ------
 Legend:
 $, ~ : Radio link
 = : Internal Sigfox Network
 . : External IP-based Network

                     Figure 1: Network Architecture

   In the case of the global Sigfox network, RGWs (or Base Stations) are
   distributed over multiple countries wherever the Sigfox LPWAN service
   is provided.  The NGW (or cloud-based Sigfox Core Network) is a
   single entity that connects to all RGWs (Sigfox Base Stations) in the
   world, hence providing a global single star Network topology.

   The Sigfox Device sends application packets that are compressed and/
   or fragmented by a SCHC C/D + F/R to reduce header size and/or
   fragment the packet.  The resulting SCHC message is sent over a layer
   two (L2) Sigfox frame to the Sigfox Base Stations, which then forward
   the SCHC message to the NGW.  The NGW then delivers the SCHC message
   and associated gathered metadata to the Network SCHC C/D + F/R.

   The Sigfox cloud-based Network communicates with the Network SCHC C/D
   + F/R for compression/decompression and/or for fragmentation/
   reassembly.  The Network SCHC C/D + F/R shares the same set of Rules
   as the device SCHC C/D + F/R.  The Network SCHC C/D + F/R can be
   collocated with the NGW or it could be located in a different place,
   as long as a tunnel or secured communication is established between
   the NGW and the SCHC C/D + F/R functions.  After decompression and/or
   reassembly, the packet can be forwarded over the Internet to one (or
   several) LPWAN Application Server(s) (App(s)).

   The SCHC C/D + F/R processes are bidirectional, so the same
   principles are applicable on both Uplink (UL) and Downlink (DL).

3.2.  Uplink

   Uplink Sigfox transmissions occur in repetitions over different times
   and frequencies.  Besides time and frequency diversities, the Sigfox
   network also provides spatial diversity, as potentially an Uplink
   message will be received by several Base Stations.  The Uplink
   message application payload size can be up to 12 bytes.

   Since all messages are self-contained and Base Stations forward all
   these messages back to the same Sigfox network, multiple input copies
   can be combined at the NGW, providing for extra reliability based on
   the triple diversity (i.e., time, space, and frequency).

   A detailed description of the Sigfox radio protocol can be found in
   [sigfox-spec].

   Messages sent from the device to the Network are delivered by the
   Sigfox cloud-based Network to the Network SCHC C/D + F/R through a
   callback/API with the following information:

   *  Device ID

   *  Message Sequence Number

   *  Message Payload

   *  Message Timestamp

   *  Device Geolocation (optional)

   *  Received Signal Strength Indicator (RSSI) (optional)

   *  Device Temperature (optional)

   *  Device Battery Voltage (optional)

   The Device ID is a globally unique identifier assigned to the device,
   which is included in the Sigfox header of every message.  The Message
   Sequence Number is a monotonically increasing number identifying the
   specific transmission of this Uplink message, and it is also part of
   the Sigfox header.  The Message Payload corresponds to the payload
   that the device has sent in the Uplink transmission.  Battery
   Voltage, Device Temperature, and RSSI values are sent in the
   confirmation control message, which is mandatorily sent by the device
   after the successful reception of a Downlink message (see
   [sigfox-callbacks], Section 5.2).

   The Message Timestamp, Device Geolocation, RSSI, Device Temperature,
   and Device Battery Voltage are metadata parameters provided by the
   Network.

   A detailed description of the Sigfox callbacks/APIs can be found in
   [sigfox-callbacks].

   Only messages that have passed the L2 Cyclic Redundancy Check (CRC)
   at Network reception are delivered by the Sigfox network to the
   Network SCHC C/D + F/R.

   The L2 Word size used by Sigfox is 1 byte (8 bits).

   Figure 2 shows a SCHC message sent over Sigfox, where the SCHC
   message could be a full SCHC Packet (e.g., compressed) or a SCHC
   Fragment (e.g., a piece of a bigger SCHC Packet).

                    | Sigfox Header | Sigfox Payload  |
                    +---------------+---------------- +
                                    |   SCHC Message  |

                      Figure 2: SCHC Message in Sigfox

3.3.  Downlink

   Downlink transmissions are device-driven and can only take place
   following an Uplink communication that indicates Downlink
   communication can be performed.  Hence, a Sigfox Device explicitly
   indicates its intention to receive a Downlink message (with a size of
   8 bytes) using a Downlink request flag when sending the preceding
   Uplink message to the Network.  The Downlink request flag is part of
   the Sigfox protocol headers.  After completing the Uplink
   transmission, the device opens a fixed window for Downlink reception.
   The delay and duration of the reception opportunity window have fixed
   values.  If there is a Downlink message to be sent for this given
   device (e.g., either a response to the Uplink message or queued
   information waiting to be transmitted), the Network transmits this
   message to the device during the reception window.  If no message is
   received by the device after the reception opportunity window has
   elapsed, the device closes the reception window opportunity and gets
   back to the normal mode (e.g., continue Uplink transmissions, sleep,
   standby, etc.).

   When a Downlink message is sent to a device, a reception
   acknowledgement is generated by the device, sent back to the Network
   through the Sigfox radio protocol, and reported in the Sigfox network
   backend.

   A detailed description of the Sigfox radio protocol can be found in
   [sigfox-spec], and a detailed description of the Sigfox callbacks/
   APIs can be found in [sigfox-callbacks].  A Downlink request flag can
   be included in the information exchange between the Sigfox network
   and Network SCHC.

3.3.1.  SCHC ACK on Downlink

   As explained previously, Downlink transmissions are driven by devices
   and can only take place following a specific Uplink transmission that
   indicates and allows a following Downlink opportunity.  For this
   reason, when SCHC bidirectional services are used (e.g., ACK-on-Error
   fragmentation mode), the SCHC protocol implementation needs to
   consider the times when a Downlink message (e.g., SCHC
   Acknowledgement (ACK)) can be sent and/or received.

   For the Uplink ACK-on-Error fragmentation mode, a Downlink
   opportunity MUST be indicated by the last fragment of every window,
   which is signalled by a specific value of the Fragment Compressed
   Number (FCN) value, i.e., FCN = All-0 or FCN = All-1.  The FCN is the
   tile index in a specific window.  The combination of the FCN and the
   window number uniquely identifies a SCHC Fragment, as explained in
   [RFC8724].  The device sends the fragments in sequence and, after
   transmitting FCN = All-0 or FCN = All-1, it opens up a reception
   opportunity.  The Network SCHC can then decide to respond at that
   opportunity (or wait for a further one) with a SCHC ACK, indicating
   that there are missing fragments from the current or previous
   windows.  If there is no SCHC ACK to be sent, or if the Network
   decides to wait for a further Downlink transmission opportunity, then
   no Downlink transmission takes place at that opportunity and the
   Uplink transmissions continue after a timeout.  Intermediate SCHC
   Fragments with FCNs that are different from All-0 or All-1 MUST NOT
   use the Downlink request flag to request a SCHC ACK.

3.4.  SCHC Rules

   The RuleID MUST be included in the SCHC header.  The total number of
   Rules to be used directly affects the RuleID field size, and
   therefore the total size of the fragmentation header.  For this
   reason, it is RECOMMENDED to keep the number of Rules that are
   defined for a specific device to the minimum possible.  Large RuleID
   sizes (and thus larger fragmentation headers) are acceptable for
   devices without significant energy constraints (e.g., a sensor that
   is powered by the electricity grid).

   RuleIDs can be used to differentiate data traffic classes (e.g., QoS,
   control vs. data, etc.) and data sessions.  They can also be used to
   interleave simultaneous fragmentation sessions between a device and
   the Network.

3.5.  Fragmentation

   The SCHC specification [RFC8724] defines a generic fragmentation
   functionality that allows sending data packets or files larger than
   the maximum size of a Sigfox payload.  The functionality also defines
   a mechanism to reliably send multiple messages by allowing to
   selectively resend any lost fragments.

   The SCHC fragmentation supports several modes of operation.  These
   modes have different advantages and disadvantages, depending on the
   specifics of the underlying LPWAN technology and application use
   case.  This section describes how the SCHC fragmentation
   functionality should optimally be implemented when used over a Sigfox
   LPWAN for the most typical use case applications.

   As described in Section 8.2.3 of [RFC8724], the integrity of the
   fragmentation-reassembly process of a SCHC Packet MUST be checked at
   the receiver end.  Since only Uplink/Downlink messages/fragments that
   have passed the Sigfox CRC-check are delivered to the Network/Sigfox
   Device SCHC C/D + F/R, integrity can be guaranteed when no
   consecutive messages are missing from the sequence and all FCN
   bitmaps are complete.  With this functionality in mind, and in order
   to save protocol and processing overhead, the use of a Reassembly
   Check Sequence (RCS), as described in Section 3.5.1.5, MUST be used.

3.5.1.  Uplink Fragmentation

   Sigfox Uplink transmissions are completely asynchronous and take
   place in any random frequency of the allowed Uplink bandwidth
   allocation.  In addition, devices may go to deep sleep mode and then
   wake up and transmit whenever there is a need to send information to
   the Network, as there is no need to perform any Network attachment,
   synchronization, or other procedures before transmitting a data
   packet.

   Since Uplink transmissions are asynchronous, a SCHC Fragment can be
   transmitted at any given time by the device.  Sigfox Uplink messages
   are fixed in size, and as described in [RFC8376], they can carry a
   payload of 0-12 bytes (0-96 bits).  Hence, a single SCHC Tile size,
   per fragmentation mode, can be defined so that every Sigfox message
   always carries one SCHC Tile.

   When the ACK-on-Error mode is used for Uplink fragmentation, the SCHC
   Compound ACK defined in [RFC9441] MUST be used in the Downlink
   responses.

3.5.1.1.  SCHC Sender-Abort

   As defined in [RFC8724], a SCHC Sender-Abort can be triggered when
   the number of SCHC ACK REQ attempts is greater than or equal to
   MAX_ACK_REQUESTS.  In the case of SCHC over Sigfox, a SCHC Sender-
   Abort MUST be sent if the number of repeated All-1s sent in sequence,
   without a Compound ACK reception in between, is greater than or equal
   to MAX_ACK_REQUESTS.

3.5.1.2.  SCHC Receiver-Abort

   As defined in [RFC8724], a SCHC Receiver-Abort is triggered when the
   receiver has no RuleID and DTag pairs available for a new session.
   In the case of this profile, a SCHC Receiver-Abort MUST be sent if,
   for a single device, all the RuleIDs are being processed by the
   receiver (i.e., have an active session) at a certain time and a new
   one is requested or if the RuleID of the fragment is not valid.

   A SCHC Receiver-Abort MUST be triggered when the Inactivity Timer
   expires.

   MAX_ACK_REQUESTS can be increased when facing high error rates.

   Although a SCHC Receiver-Abort can be triggered at any point in time,
   a SCHC Receiver-Abort Downlink message MUST only be sent when there
   is a Downlink transmission opportunity.

3.5.1.3.  Single-Byte SCHC Header for Uplink Fragmentation

3.5.1.3.1.  Uplink No-ACK Mode: Single-Byte SCHC Header

   Single-byte SCHC Header No-ACK mode MUST be used for transmitting
   short, non-critical packets that require fragmentation and do not
   require full reliability.  This mode can be used by Uplink-only
   devices that do not support Downlink communications or by
   bidirectional devices when they send non-critical data.  Note that
   sending non-critical data by using a reliable fragmentation mode
   (which is only possible for bidirectional devices) may incur
   unnecessary overhead.

   Since there are no multiple windows in the No-ACK mode, the W bit is
   not present.  However, it MUST use the FCN field to indicate the size
   of the data packet.  In this sense, the data packet would need to be
   split into X fragments and, similarly to the other fragmentation
   modes, the first transmitted fragment would need to be marked with
   FCN = X-1.  Consecutive fragments MUST be marked with decreasing FCN
   values, having the last fragment marked with FCN = (All-1).  Hence,
   even though the No-ACK mode does not allow recovering missing
   fragments, it allows implicitly indicating the size of the expected
   packet to the Network and hence detects whether all fragments have
   been received or not at the receiver side.  In case the FCN field is
   not used to indicate the size of the data packet, the Network can
   detect whether all fragments have been received or not by using the
   integrity check.

   When using the Single-byte SCHC Header for Uplink fragmentation, the
   fragmentation header MUST be 8 bits in size and is composed as
   follows:

   *  RuleID size: 3 bits

   *  DTag size (T): 0 bits

   *  Fragment Compressed Number (FCN) size (N): 5 bits

   Other F/R parameters MUST be configured as follows:

   *  As per [RFC8724], in the No-ACK mode, the W (window) field is not
      present.

   *  Regular tile size: 11 bytes

   *  All-1 tile size: 0 to 10 bytes

   *  Inactivity Timer: Application-dependent.  The default value is 12
      hours.

   *  RCS size: 5 bits

   The maximum SCHC Packet size is 340 bytes.

   Section 3.6.1 presents SCHC Fragment format examples, and Section 5.1
   provides fragmentation examples, using Single-byte SCHC Header No-ACK
   mode.

3.5.1.3.2.  Uplink ACK-on-Error Mode: Single-Byte SCHC Header

   ACK-on-Error with a single-byte header MUST be used for short- to
   medium-sized packets that need to be sent reliably.  ACK-on-Error is
   optimal for reliable SCHC Packet transmission over Sigfox
   transmissions, since it leads to a reduced number of ACKs in the
   lower-capacity Downlink channel.  Also, Downlink messages can be sent
   asynchronously and opportunistically.  In contrast, ACK-Always would
   not minimize the number of ACKs, and No-ACK would not allow reliable
   transmission.

   Allowing transmission of packets/files up to 300 bytes long, the SCHC
   Uplink fragmentation header size is 8 bits in size and is composed as
   follows:

   *  RuleID size: 3 bits

   *  DTag size (T): 0 bits

   *  Window index (W) size (M): 2 bits

   *  Fragment Compressed Number (FCN) size (N): 3 bits

   Other F/R parameters MUST be configured as follows:

   *  MAX_ACK_REQUESTS: 5

   *  WINDOW_SIZE: 7 (i.e., the maximum FCN value is 0b110)

   *  Regular tile size: 11 bytes

   *  All-1 tile size: 0 to 10 bytes

   *  Retransmission Timer: Application-dependent.  The default value is
      12 hours.

   *  Inactivity Timer: Application-dependent.  The default value is 12
      hours.

   *  RCS size: 3 bits

   Section 3.6.2 presents SCHC Fragment format examples, and Section 5.2
   provides fragmentation examples, using ACK-on-Error with a single-
   byte header.

3.5.1.4.  Two-Byte SCHC Header for Uplink Fragmentation

   ACK-on-Error with a two-byte header MUST be used for medium- to
   large-sized packets that need to be sent reliably.  ACK-on-Error is
   optimal for reliable SCHC Packet transmission over Sigfox, since it
   leads to a reduced number of ACKs in the lower-capacity Downlink
   channel.  Also, Downlink messages can be sent asynchronously and
   opportunistically.  In contrast, ACK-Always would not minimize the
   number of ACKs, and No-ACK would not allow reliable transmission.

3.5.1.4.1.  Uplink ACK-on-Error Mode: Two-Byte SCHC Header Option 1

   In order to allow transmission of medium to large packets/files up to
   480 bytes long, the SCHC Uplink fragmentation header size is 16 bits
   in size and is composed as follows:

   *  RuleID size: 6 bits

   *  DTag size (T): 0 bits

   *  Window index (W) size (M): 2 bits

   *  Fragment Compressed Number (FCN) size (N): 4 bits

   *  RCS size: 4 bits

   Other F/R parameters MUST be configured as follows:

   *  MAX_ACK_REQUESTS: 5

   *  WINDOW_SIZE: 12 (with a maximum value of FCN=0b1011)

   *  Regular tile size: 10 bytes

   *  All-1 tile size: 1 to 10 bytes

   *  Retransmission Timer: Application-dependent.  The default value is
      12 hours.

   *  Inactivity Timer: Application-dependent.  The default value is 12
      hours.

   Note that WINDOW_SIZE is limited to 12.  This is because 4 windows (M
   = 2) with bitmaps of size 12 can be fitted in a single SCHC Compound
   ACK.

   Section 3.6.3 presents SCHC Fragment format examples, using ACK-on-
   Error with two-byte header Option 1.

3.5.1.4.2.  Uplink ACK-on-Error Mode: Two-Byte SCHC Header Option 2

   In order to allow transmission of very large packets/files up to 2400
   bytes long, the SCHC Uplink fragmentation header size is 16 bits in
   size and is composed as follows:

   *  RuleID size: 8 bits

   *  DTag size (T): 0 bits

   *  Window index (W) size (M): 3 bits

   *  Fragment Compressed Number (FCN) size (N): 5 bits

   *  RCS size: 5 bits

   Other F/R parameters MUST be configured as follows:

   *  MAX_ACK_REQUESTS: 5

   *  WINDOW_SIZE: 31 (with a maximum value of FCN=0b11110)

   *  Regular tile size: 10 bytes

   *  All-1 tile size: 0 to 9 bytes

   *  Retransmission Timer: Application-dependent.  The default value is
      12 hours.

   *  Inactivity Timer: Application-dependent.  The default value is 12
      hours.

   Section 3.6.4 presents SCHC Fragment format examples, using ACK-on-
   Error with two-byte header Option 2.

3.5.1.5.  All-1 SCHC Fragment and RCS Behavior

   For ACK-on-Error, as defined in [RFC8724], it is expected that the
   last SCHC Fragment of the last window will always be delivered with
   an All-1 FCN.  Since this last window may not be full (i.e., it may
   be composed of fewer than WINDOW_SIZE fragments), an All-1 fragment
   may follow a value of FCN higher than 1 (0b01).  In this case, the
   receiver cannot determine from the FCN values alone whether there are
   or are not any missing fragments right before the All-1 fragment.

   For Rules where the number of fragments in the last window is
   unknown, an RCS field MUST be used, indicating the number of
   fragments in the last window, including the All-1.  With this RCS
   value, the receiver can detect if there are missing fragments before
   the All-1 and hence construct the corresponding SCHC ACK Bitmap
   accordingly and send it in response to the All-1.

3.5.2.  Downlink Fragmentation

   In some LPWAN technologies, as part of energy-saving techniques,
   Downlink transmission is only possible immediately after an Uplink
   transmission.  This allows the device to go in a very deep sleep mode
   and preserve battery without the need to listen to any information
   from the Network.  This is the case for Sigfox-enabled devices, which
   can only listen to Downlink communications after performing an Uplink
   transmission and requesting a Downlink.

   When there are fragments to be transmitted in the Downlink, an Uplink
   message is required to trigger the Downlink communication.  In order
   to avoid a potentially high delay for fragmented datagram
   transmission in the Downlink, the fragment receiver MAY perform an
   Uplink transmission as soon as possible after reception of a Downlink
   fragment that is not the last one.  Such an Uplink transmission MAY
   be triggered by sending a SCHC message, such as a SCHC ACK.  However,
   other data messages can equally be used to trigger Downlink
   communications.  The fragment receiver MUST send an Uplink
   transmission (e.g., empty message) and request a Downlink every 24
   hours when no SCHC session is started.  Whether this Uplink
   transmission is used (and the transmission rate, if used) depends on
   application-specific requirements.

   Sigfox Downlink messages are fixed in size, and as described in
   [RFC8376] they can carry a payload of 0-8 bytes (0-64 bits).  Hence,
   a single SCHC Tile size per mode can be defined so that every Sigfox
   message always carries one SCHC Tile.

   For reliable Downlink fragment transmission, the ACK-Always mode
   SHOULD be used.  Note that ACK-on-Error does not guarantee Uplink
   feedback (since no SCHC ACK will be sent when no errors occur in a
   window), and No-ACK would not allow reliable transmission.

   The SCHC Downlink fragmentation header size is 8 bits in size and is
   composed as follows:

   *  RuleID size: 3 bits

   *  DTag size (T): 0 bits

   *  Window index (W) size (M): 0 bits

   *  Fragment Compressed Number (FCN) size (N): 5 bits

   Other F/R parameters MUST be configured as follows:

   *  MAX_ACK_REQUESTS: 5

   *  WINDOW_SIZE: 31 (with a maximum value of FCN=0b11110)

   *  Regular tile size: 7 bytes

   *  All-1 tile size: 0 to 6 bytes

   *  Retransmission Timer: Application-dependent.  The default value is
      12 hours.

   *  Inactivity Timer: Application-dependent.  The default value is 12
      hours.

   *  RCS size: 5 bits

3.6.  SCHC over Sigfox F/R Message Formats

   This section depicts the different formats of SCHC Fragment, SCHC ACK
   (including the SCHC Compound ACK defined in [RFC9441]), and SCHC
   Abort used in SCHC over Sigfox.

3.6.1.  Uplink No-ACK Mode: Single-Byte SCHC Header

3.6.1.1.  Regular SCHC Fragment

   Figure 3 shows an example of a Regular SCHC Fragment for all
   fragments except the last one.  As tiles are 11 bytes in size,
   padding MUST NOT be added.  The penultimate tile of a SCHC Packet is
   of regular size.

                   |- SCHC Fragment Header -|
                   +------------------------+---------+
                   |   RuleID   |    FCN    | Payload |
                   +------------+-----------+---------+
                   |   3 bits   |  5 bits   | 88 bits |

      Figure 3: Regular SCHC Fragment Format for All Fragments except
                                the Last One

3.6.1.2.  All-1 SCHC Fragment

   Figure 4 shows an example of the All-1 message.  The All-1 message
   MAY contain the last tile of the SCHC Packet.  Padding MUST NOT be
   added, as the resulting size is a multiple of an L2 Word.

   The All-1 messages Fragment Header includes a 5-bit RCS, and 3 bits
   are added as padding to complete 2 bytes.  The payload size of the
   All-1 message ranges from 0 to 80 bits.

          |--------  SCHC Fragment Header -------|
          +--------------------------------------+--------------+
          | RuleID | FCN=ALL-1 |  RCS   |  b'000 |   Payload    |
          +--------+-----------+--------+--------+--------------+
          | 3 bits |  5 bits   | 5 bits | 3 bits | 0 to 80 bits |

           Figure 4: All-1 SCHC Message Format with the Last Tile

   As per [RFC8724], the All-1 must be distinguishable from a SCHC
   Sender-Abort message (with the same RuleID and N values).  The All-1
   MAY have the last tile of the SCHC Packet.  The SCHC Sender-Abort
   message header size is 1 byte with no padding bits.

   For the All-1 message to be distinguishable from the Sender-Abort
   message, the Sender-Abort message MUST be 1 byte (only header with no
   padding).  This way, the minimum size of the All-1 is 2 bytes, and
   the Sender-Abort message is 1 byte.

3.6.1.3.  SCHC Sender-Abort Message Format

                               Sender-Abort
                          |------ Header ------|
                          +--------------------+
                          | RuleID | FCN=ALL-1 |
                          +--------+-----------+
                          | 3 bits |  5 bits   |

                 Figure 5: SCHC Sender-Abort Message Format

3.6.2.  Uplink ACK-on-Error Mode: Single-Byte SCHC Header

3.6.2.1.  Regular SCHC Fragment

   Figure 6 shows an example of a Regular SCHC Fragment for all
   fragments except the last one.  As tiles are 11 bytes in size,
   padding MUST NOT be added.

                  |-- SCHC Fragment Header --|
                  +--------------------------+---------+
                  | RuleID |   W    |  FCN   | Payload |
                  +--------+--------+--------+---------+
                  | 3 bits | 2 bits | 3 bits | 88 bits |

      Figure 6: Regular SCHC Fragment Format for All Fragments except
                                the Last One

   The SCHC ACK REQ MUST NOT be used, instead the All-1 SCHC Fragment
   MUST be used to request a SCHC ACK from the receiver (Network SCHC).
   As per [RFC8724], the All-0 message is distinguishable from the SCHC
   ACK REQ (All-1 message).  The penultimate tile of a SCHC Packet is of
   regular size.

3.6.2.2.  All-1 SCHC Fragment

   Figure 7 shows an example of the All-1 message.  The All-1 message
   MAY contain the last tile of the SCHC Packet.  Padding MUST NOT be
   added, as the resulting size is L2-word-multiple.

     |-------------  SCHC Fragment Header -----------|
     +-----------------------------------------------+--------------+
     | RuleID |   W    | FCN=ALL-1 |  RCS   |b'00000 |   Payload    |
     +--------+--------+-----------+--------+--------+--------------+
     | 3 bits | 2 bits |  3 bits   | 3 bits | 5 bits | 0 to 80 bits |

           Figure 7: All-1 SCHC Message Format with the Last Tile

   As per [RFC8724], the All-1 must be distinguishable from a SCHC
   Sender-Abort message (with same RuleID, M, and N values).  The All-1
   MAY have the last tile of the SCHC Packet.  The SCHC Sender-Abort
   message header size is 1 byte with no padding bits.

   For the All-1 message to be distinguishable from the Sender-Abort
   message, the Sender-Abort message MUST be 1 byte (only header with no
   padding).  This way, the minimum size of the All-1 is 2 bytes, and
   the Sender-Abort message is 1 byte.

3.6.2.3.  SCHC ACK Format

   Figure 8 shows the SCHC ACK format when all fragments have been
   correctly received (C=1).  Padding MUST be added to complete the
   64-bit Sigfox Downlink frame payload size.

                   |---- SCHC ACK Header ----|
                   +-------------------------+---------+
                   | RuleID |    W   | C=b'1 | b'0-pad |
                   +--------+--------+-------+---------+
                   | 3 bits | 2 bits | 1 bit | 58 bits |

                 Figure 8: SCHC Success ACK Message Format

   In case SCHC Fragment losses are found in any of the windows of the
   SCHC Packet (C=0), the SCHC Compound ACK defined in [RFC9441] MUST be
   used.  The SCHC Compound ACK message format is shown in Figure 9.

 |--- SCHC ACK Header ---|- W=w1 -|...|----- W=wi ------|
 +------+--------+-------+--------+...+--------+--------+------+-------+
 |RuleID| W=b'w1 | C=b'0 | Bitmap |...| W=b'wi | Bitmap | b'00 |b'0-pad|
 +------+--------+-------+--------+...+--------+--------+------+-------+
 |3 bits| 2 bits | 1 bit | 7 bits |...| 2 bits | 7 bits |2 bits|

               Figure 9: SCHC Compound ACK Message Format

   Losses are found in windows W = w1,...,wi, where w1 < w2 <...< wi.

3.6.2.4.  SCHC Sender-Abort Message Format

                      |---- Sender-Abort Header ----|
                      +-----------------------------+
                      | RuleID | W=b'11 | FCN=ALL-1 |
                      +--------+--------+-----------+
                      | 3 bits | 2 bits |  3 bits   |

                Figure 10: SCHC Sender-Abort Message Format

3.6.2.5.  SCHC Receiver-Abort Message Format

      |- Receiver-Abort Header -|
      +---------------------------------+-----------------+---------+
      | RuleID | W=b'11 | C=b'1 |  b'11 |  0xFF (all 1's) | b'0-pad |
      +--------+--------+-------+-------+-----------------+---------+
      | 3 bits | 2 bits | 1 bit | 2 bit |  8 bit          | 48 bits |
                next L2 Word boundary ->| <-- L2 Word --> |

               Figure 11: SCHC Receiver-Abort Message Format

3.6.3.  Uplink ACK-on-Error Mode: Two-Byte SCHC Header Option 1

3.6.3.1.  Regular SCHC Fragment

   Figure 12 shows an example of a Regular SCHC Fragment for all
   fragments except the last one.  The penultimate tile of a SCHC Packet
   is of the regular size.

              |------- SCHC Fragment Header ------|
              +-----------------------------------+---------+
              | RuleID |    W   |  FCN   | b'0000 | Payload |
              +--------+--------+--------+--------+---------+
              | 6 bits | 2 bits | 4 bits | 4 bits | 80 bits |

      Figure 12: Regular SCHC Fragment Format for All Fragments except
                                the Last One

   The SCHC ACK REQ MUST NOT be used, instead the All-1 SCHC Fragment
   MUST be used to request a SCHC ACK from the receiver (Network SCHC).
   As per [RFC8724], the All-0 message is distinguishable from the SCHC
   ACK REQ (All-1 message).

3.6.3.2.  All-1 SCHC Fragment

   Figure 13 shows an example of the All-1 message.  The All-1 message
   MUST contain the last tile of the SCHC Packet.

   The All-1 message Fragment Header contains an RCS of 4 bits to
   complete the two-byte size.  The size of the last tile ranges from 8
   to 80 bits.

          |--------- SCHC Fragment Header -------|
          +--------------------------------------+--------------+
          | RuleID |    W   | FCN=ALL-1 |  RCS   |    Payload   |
          +--------+--------+-----------+--------+--------------+
          | 6 bits | 2 bits |  4 bits   | 4 bits | 8 to 80 bits |

          Figure 13: All-1 SCHC Message Format with the Last Tile

   As per [RFC8724], the All-1 must be distinguishable from the SCHC
   Sender-Abort message (with same RuleID, M, and N values).  The All-1
   MUST have the last tile of the SCHC Packet that MUST be at least 1
   byte.  The SCHC Sender-Abort message header size is 2 bytes with no
   padding bits.

   For the All-1 message to be distinguishable from the Sender-Abort
   message, the Sender-Abort message MUST be 2 bytes (only header with
   no padding).  This way, the minimum size of the All-1 is 3 bytes, and
   the Sender-Abort message is 2 bytes.

3.6.3.3.  SCHC ACK Format

   Figure 14 shows the SCHC ACK format when all fragments have been
   correctly received (C=1).  Padding MUST be added to complete the
   64-bit Sigfox Downlink frame payload size.

                   |---- SCHC ACK Header ----|
                   +-------------------------+---------+
                   | RuleID |    W   | C=b'1 | b'0-pad |
                   +--------+--------+-------+---------+
                   | 6 bits | 2 bits | 1 bit | 55 bits |

                 Figure 14: SCHC Success ACK Message Format

   The SCHC Compound ACK message MUST be used in case SCHC Fragment
   losses are found in any window of the SCHC Packet (C=0).  The SCHC
   Compound ACK message format is shown in Figure 15.  The SCHC Compound
   ACK can report up to 4 windows with losses, as shown in Figure 16.

   When sent in the Downlink, the SCHC Compound ACK MUST be 0 padded
   (padding bits must be 0) to complement the 64 bits required by the
   Sigfox payload.

   |--- SCHC ACK Header ---|- W=w1 -|...|---- W=wi -----|
   +--------+------+-------+--------+...+------+--------+------+-------+
   | RuleID |W=b'w1| C=b'0 | Bitmap |...|W=b'wi| Bitmap | b'00 |b'0-pad|
   +--------+------+-------+--------+...+------+--------+------+-------+
   | 6 bits |2 bits| 1 bit | 12 bits|...|2 bits| 12 bits|2 bits|

                Figure 15: SCHC Compound ACK Message Format

   Losses are found in windows W = w1,...,wi, where w1 < w2 <...< wi.

            |- SCHC ACK Header -|- W=0 -|      |- W=1 -|...
            +------+------+-----+-------+------+-------+...
            |RuleID|W=b'00|C=b'0|Bitmap |W=b'01|Bitmap |...
            +------+------+-----+-------+------+-------+...
            |6 bits|2 bits|1 bit|12 bits|2 bits|12 bits|...

                        ...       |- W=2 -|      |- W=3 -|
                        ...+------+-------+------+-------+---+
                        ...|W=b'10|Bitmap |W=b'11|Bitmap |b'0|
                        ...+------+-------+------+-------+---+
                        ...|2 bits|12 bits|2 bits|12 bits|

      Figure 16: SCHC Compound ACK Message Format Example with Losses
                               in All Windows

   Losses are found in windows W = w1,...,wi, where w1 < w2 <...< wi.

3.6.3.4.  SCHC Sender-Abort Message Format

                      |---- Sender-Abort Header ----|
                      +-----------------------------+
                      | RuleID |   W    | FCN=ALL-1 |
                      +--------+--------+-----------+
                      | 6 bits | 2 bits |  4 bits   |

                Figure 17: SCHC Sender-Abort Message Format

3.6.3.5.  SCHC Receiver-Abort Message Format

      |- Receiver-Abort Header -|
      +---------------------------------+-----------------+---------+
      | RuleID | W=b'11 | C=b'1 |  0x7F |  0xFF (all 1's) | b'0-pad |
      +--------+--------+-------+-------+-----------------+---------+
      | 6 bits | 2 bits | 1 bit | 7 bit |  8 bit          | 40 bits |
                next L2 Word boundary ->| <-- L2 Word --> |

               Figure 18: SCHC Receiver-Abort Message Format

3.6.4.  Uplink ACK-on-Error Mode: Two-Byte SCHC Header Option 2

3.6.4.1.  Regular SCHC Fragment

   Figure 19 shows an example of a Regular SCHC Fragment for all
   fragments except the last one.  The penultimate tile of a SCHC Packet
   is of the regular size.

                  |-- SCHC Fragment Header --|
                  +--------------------------+---------+
                  | RuleID |   W    | FCN    | Payload |
                  +--------+--------+--------+---------+
                  | 8 bits | 3 bits | 5 bits | 80 bits |

      Figure 19: Regular SCHC Fragment Format for All Fragments except
                                the Last One

   The SCHC ACK REQ MUST NOT be used, instead the All-1 SCHC Fragment
   MUST be used to request a SCHC ACK from the receiver (Network SCHC).
   As per [RFC8724], the All-0 message is distinguishable from the SCHC
   ACK REQ (All-1 message).

3.6.4.2.  All-1 SCHC Fragment

   Figure 20 shows an example of the All-1 message.  The All-1 message
   MAY contain the last tile of the SCHC Packet.

   The All-1 message Fragment Header contains an RCS of 5 bits and 3
   padding bits to complete a 3-byte Fragment Header.  The size of the
   last tile, if present, ranges from 8 to 72 bits.

     |-------------- SCHC Fragment Header -----------|
     +-----------------------------------------------+--------------+
     | RuleID |    W   | FCN=ALL-1 |  RCS   | b'000  |    Payload   |
     +--------+--------+-----------+--------+--------+--------------+
     | 8 bits | 3 bits |  5 bits   | 5 bits | 3 bits | 8 to 72 bits |

          Figure 20: All-1 SCHC Message Format with the Last Tile

   As per [RFC8724], the All-1 must be distinguishable from the SCHC
   Sender-Abort message (with same RuleID, M, and N values).  The SCHC
   Sender-Abort message header size is 2 bytes with no padding bits.

   For the All-1 message to be distinguishable from the Sender-Abort
   message, the Sender-Abort message MUST be 2 bytes (only header with
   no padding).  This way, the minimum size of the All-1 is 3 bytes, and
   the Sender-Abort message is 2 bytes.

3.6.4.3.  SCHC ACK Format

   Figure 21 shows the SCHC ACK format when all fragments have been
   correctly received (C=1).  Padding MUST be added to complete the
   64-bit Sigfox Downlink frame payload size.

                   |---- SCHC ACK Header ----|
                   +-------------------------+---------+
                   | RuleID |    W   | C=b'1 | b'0-pad |
                   +--------+--------+-------+---------+
                   | 8 bits | 3 bits | 1 bit | 52 bits |

                 Figure 21: SCHC Success ACK Message Format

   The SCHC Compound ACK message MUST be used in case SCHC Fragment
   losses are found in any window of the SCHC Packet (C=0).  The SCHC
   Compound ACK message format is shown in Figure 22.  The SCHC Compound
   ACK can report up to 3 windows with losses.

   When sent in the Downlink, the SCHC Compound ACK MUST be 0 padded
   (padding bits must be 0) to complement the 64 bits required by the
   Sigfox payload.

    |-- SCHC ACK Header --|- W=w1 -|...|---- W=wi -----|
    +------+------+-------+--------+...+------+--------+------+-------+
    |RuleID|W=b'w1| C=b'0 | Bitmap |...|W=b'wi| Bitmap | 000  |b'0-pad|
    +------+------+-------+--------+...+------+--------+------+-------+
    |8 bits|3 bits| 1 bit | 31 bits|...|3 bits| 31 bits|3 bits|

                Figure 22: SCHC Compound ACK Message Format

   Losses are found in windows W = w1,...,wi, where w1 < w2 <...< wi.

3.6.4.4.  SCHC Sender-Abort Message Format

                      |---- Sender-Abort Header ----|
                      +-----------------------------+
                      | RuleID |   W    | FCN=ALL-1 |
                      +--------+--------+-----------+
                      | 8 bits | 3 bits |  5 bits   |

                Figure 23: SCHC Sender-Abort Message Format

3.6.4.5.  SCHC Receiver-Abort Message Format

     |-- Receiver-Abort Header -|
     +-----------------------------------+-----------------+---------+
     | RuleID | W=b'111 | C=b'1 | b'1111 |  0xFF (all 1's) | b'0-pad |
     +--------+---------+-------+--------+-----------------+---------+
     | 8 bits |  3 bits | 1 bit | 4 bit  |  8 bit          | 40 bits |
                 next L2 Word boundary ->| <-- L2 Word --> |

               Figure 24: SCHC Receiver-Abort Message Format

3.6.5.  Downlink ACK-Always Mode: Single-Byte SCHC Header

3.6.5.1.  Regular SCHC Fragment

   Figure 25 shows an example of a Regular SCHC Fragment for all
   fragments except the last one.  The penultimate tile of a SCHC Packet
   is of the regular size.

                          SCHC Fragment
                       |--    Header   --|
                       +-----------------+---------+
                       | RuleID |  FCN   | Payload |
                       +--------+--------+---------+
                       | 3 bits | 5 bits | 56 bits |

      Figure 25: Regular SCHC Fragment Format for All Fragments except
                                the Last One

   The SCHC ACK MUST NOT be used, instead the All-1 SCHC Fragment MUST
   be used to request a SCHC ACK from the receiver.  As per [RFC8724],
   the All-0 message is distinguishable from the SCHC ACK REQ (All-1
   message).

3.6.5.2.  All-1 SCHC Fragment

   Figure 26 shows an example of the All-1 message.  The All-1 message
   MAY contain the last tile of the SCHC Packet.

   The All-1 message Fragment Header contains an RCS of 5 bits and 3
   padding bits to complete a 2-byte Fragment Header.  The size of the
   last tile, if present, ranges from 8 to 48 bits.

          |--------- SCHC Fragment Header -------|
          +--------------------------------------+--------------+
          | RuleID | FCN=ALL-1 |  RCS   | b'000  |    Payload   |
          +--------+-----------+--------+--------+--------------+
          | 3 bits |  5 bits   | 5 bits | 3 bits | 0 to 48 bits |

          Figure 26: All-1 SCHC Message Format with the Last Tile

   As per [RFC8724], the All-1 must be distinguishable from the SCHC
   Sender-Abort message (with same RuleID and N values).  The SCHC
   Sender-Abort message header size is 1 byte with no padding bits.

   For the All-1 message to be distinguishable from the Sender-Abort
   message, the Sender-Abort message MUST be 1 byte (only header with no
   padding).  This way, the minimum size of the All-1 is 2 bytes, and
   the Sender-Abort message is 1 bytes.

3.6.5.3.  SCHC ACK Format

   Figure 27 shows the SCHC ACK format when all fragments have been
   correctly received (C=1).  Padding MUST be added to complete 2 bytes.

                            SCHC ACK
                       |--   Header   --|
                       +----------------+---------+
                       | RuleID | C=b'1 | b'0-pad |
                       +--------+-------+---------+
                       | 3 bits | 1 bit |  4 bits |

                 Figure 27: SCHC Success ACK Message Format

   The SCHC ACK message format is shown in Figure 28.

                   |---- SCHC ACK Header ----|
                   +--------+-------+--------+---------+
                   | RuleID | C=b'0 | Bitmap | b'0-pad |
                   +--------+-------+--------+---------+
                   | 3 bits | 1 bit | 31 bits|  5 bits |

                Figure 28: SCHC Compound ACK Message Format

3.6.5.4.  SCHC Sender-Abort Message Format

                               Sender-Abort
                          |----   Header   ----|
                          +--------------------+
                          | RuleID | FCN=ALL-1 |
                          +--------+-----------+
                          | 3 bits |  5 bits   |

                Figure 29: SCHC Sender-Abort Message Format

3.6.5.5.  SCHC Receiver-Abort Message Format

                 Receiver-Abort
               |---  Header  ---|
               +----------------+--------+-----------------+
               | RuleID | C=b'1 | b'1111 |  0xFF (all 1's) |
               +--------+-------+--------+-----------------+
               | 3 bits | 1 bit | 4 bit  |  8 bit          |

               Figure 30: SCHC Receiver-Abort Message Format

3.7.  Padding

   The Sigfox payload fields have different characteristics in Uplink
   and Downlink.

   Uplink messages can contain a payload size from 0 to 12 bytes.  The
   Sigfox radio protocol allows sending zero bits, one single bit of
   information for binary applications (e.g., status), or an integer
   number of bytes.  Therefore, for 2 or more bits of payload, it is
   required to add padding to the next integer number of bytes.  The
   reason for this flexibility is to optimize transmission time and
   hence save battery consumption at the device.

   On the other hand, Downlink frames have a fixed length.  The payload
   length MUST be 64 bits (i.e., 8 bytes).  Hence, if less information
   bits are to be transmitted, padding MUST be used with bits equal to
   0.  The receiver MUST remove the added padding bits before the SCHC
   reassembly process.

4.  Fragmentation Rules Examples

   This section provides an example of RuleID configuration for
   interoperability between the F/R modes presented in this document.
   Note that the RuleID space for Uplink F/R is different than the one
   for Downlink F/R; therefore, this section is divided in two
   subsections: Rules for Uplink fragmentation and Rules for Downlink
   fragmentation.

   For Uplink F/R, multiple header lengths were described in
   Section 3.5.  All of them are part of the SCHC over Sigfox Profile
   and offer not only low protocol overhead for small payloads (single
   byte header) but also extensibility to transport larger payloads with
   more overhead (2-byte header, Options 1 and 2).  The usage of the
   RuleID space for each header length is an implementation choice, but
   we provide an example of it in the following section.  This
   illustrates implementation choices made in order to 1) identify the
   different header length and 2) finally parse the RuleID field to
   identify the RuleID value and execute the associated treatment.

4.1.  Uplink Fragmentation Rules Examples

   The RuleID field for Uplink F/R modes has different sizes depending
   on the header length.  In order to identify the header length and
   then the value of the RuleID, the RuleID field is interpreted as
   follows:

   *  The RuleID field is the first one to be parsed in the SCHC header,
      starting from the leftmost bits.

   *  For Single-byte SCHC Header F/R modes, a RuleID field of 3 bits is
      expected:

      -  If the first 3 leftmost bits have a value different than
         0b'111, then it signals a Single-byte SCHC Header F/R mode.

      -  If their value is 0b'111, then it signals a Two-byte SCHC
         Header F/R mode.

   *  For Single-byte SCHC Header F/R modes:

      -  There are 7 RuleIDs available (with values from 0b'000-0b'110);
         the RuleID with value 0b'111 is reserved to indicate a Two-byte
         SCHC Header.

      -  This set of Rules is called "standard rules", and it is used to
         implement Single-byte SCHC Header modes.

      -  Each RuleID is associated with a set of properties defining if
         Uplink F/R is used and which Uplink F/R mode is used.  As an
         example, the RuleID 0b'000 is mapped onto Uplink No-ACK Mode:
         Single-byte SCHC Header, and the RuleIDs 0b'001 and 0b'002 are
         mapped onto Uplink ACK-on-Error mode: Single-byte SCHC Header
         (2 RuleIDs to allow for SCHC Packet interleaving).

   *  For Two-byte SCHC Header F/R modes, at least 6 bits for the RuleID
      field are expected:

      -  The 3 first leftmost bits are always 0b'111.

         o  If the following 3 bits have a different value than 0b'111,
            then it signals the Two-byte SCHC Header Option 1.

         o  If the following 3 bits are 0b'111, then it signals the Two-
            byte SCHC Header Option 2.

      -  For the Two-byte SCHC Header Option 1, there are 7 RuleIDs
         available (0b'111000-0b'111110), 0b'111111 being reserved to
         indicate the Two-byte SCHC Header Option 2.  This set of Rules
         is called "extended rules", and it is used to implement the
         Uplink ACK-on-Error mode: Two-byte SCHC Header Option 1.

      -  For the Two-byte SCHC Header Option 2, there are 2 additional
         bits to parse as the RuleID, so 4 RuleIDs are available
         (0b'11111100-0b'11111111).  This set of Rules is used to cover
         specific cases that previous RuleIDs do not cover.  As an
         example, RuleID 0b'00111111 is used to transport uncompressed
         IPv6 packets using the Uplink ACK-on-Error mode: Two-byte SCHC
         Header Option 2.

4.2.  Downlink Fragmentation Rules Example

   For the Downlink ACK-Always Mode: Single-byte SCHC Header, RuleIDs
   can get values in ranges from 0b'000 to 0b'111.

5.  Fragmentation Sequence Examples

   In this section, some sequence diagrams depict message exchanges for
   different fragmentation modes and use cases are shown.  In the
   examples, 'Seq' indicates the Sigfox Sequence Number of the frame
   carrying a fragment.

5.1.  Uplink No-ACK Examples

   The FCN field indicates the size of the data packet.  The first
   fragment is marked with FCN = X-1, where X is the number of fragments
   the message is split into.  All fragments are marked with decreasing
   FCN values.  The last packet fragment is marked with FCN = All-1
   (1111).

   *Case No Losses - All fragments are sent and received successfully.*

          Sender                     Receiver
            |-------FCN=6,Seq=1-------->|
            |-------FCN=5,Seq=2-------->|
            |-------FCN=4,Seq=3-------->|
            |-------FCN=3,Seq=4-------->|
            |-------FCN=2,Seq=5-------->|
            |-------FCN=1,Seq=6-------->|
            |-------FCN=15,Seq=7------->| All fragments received
          (End)

                     Figure 31: Uplink No-ACK No-Losses

   When the first SCHC Fragment is received, the receiver can calculate
   the total number of SCHC Fragments that the SCHC Packet is composed
   of.  For example, if the first fragment is numbered with FCN=6, the
   receiver can expect six more messages/fragments (i.e., with FCN going
   from 5 downwards and the last fragment with an FCN equal to 15).

   *Case Losses on Any Fragment except the First*

   Sender                     Receiver
     |-------FCN=6,Seq=1-------->|
     |-------FCN=5,Seq=2----X    |
     |-------FCN=4,Seq=3-------->|
     |-------FCN=3,Seq=4-------->|
     |-------FCN=2,Seq=5-------->|
     |-------FCN=1,Seq=6-------->|
     |-------FCN=15,Seq=7------->| Missing Fragment Unable to reassemble
   (End)

                Figure 32: Uplink No-ACK Losses (Scenario 1)

5.2.  Uplink ACK-on-Error Examples: Single-Byte SCHC Header

   The Single-byte SCHC Header ACK-on-Error mode allows sending up to 28
   fragments and packet sizes up to 300 bytes.  The SCHC Fragments may
   be delivered asynchronously, and Downlink ACK can be sent
   opportunistically.

   *Case No Losses*

   The Downlink flag must be enabled in the sender Uplink message to
   allow a Downlink message from the receiver.  The Downlink Enable in
   the figures shows where the sender MUST enable the Downlink and wait
   for an ACK.

               Sender                    Receiver
                 |-----W=0,FCN=6,Seq=1----->|
                 |-----W=0,FCN=5,Seq=2----->|
                 |-----W=0,FCN=4,Seq=3----->|
                 |-----W=0,FCN=3,Seq=4----->|
                 |-----W=0,FCN=2,Seq=5----->|
                 |-----W=0,FCN=1,Seq=6----->|
       DL Enable |-----W=0,FCN=0,Seq=7----->|
             (no ACK)
                 |-----W=1,FCN=6,Seq=8----->|
                 |-----W=1,FCN=5,Seq=9----->|
                 |-----W=1,FCN=4,Seq=10---->|
       DL Enable |-----W=1,FCN=7,Seq=11---->| All fragments received
                 |<- Compound ACK,W=1,C=1 --| C=1
               (End)

                  Figure 33: Uplink ACK-on-Error No-Losses

   *Case Fragment Losses in the First Window*

   In this case, fragments are lost in the first window (W=0).  After
   the first All-0 message arrives, the receiver leverages the
   opportunity and sends a SCHC ACK with the corresponding bitmap and
   C=0.

   After the loss fragments from the first window (W=0) are resent, the
   sender continues transmitting the fragments of the following window
   (W=1) without opening a reception opportunity.  Finally, the All-1
   fragment is sent, the Downlink is enabled, and the SCHC ACK is
   received with C=1.  Note that the SCHC Compound ACK also uses a
   Sequence Number.

          Sender                    Receiver
            |-----W=0,FCN=6,Seq=1----->|
            |-----W=0,FCN=5,Seq=2--X   |
            |-----W=0,FCN=4,Seq=3----->|
            |-----W=0,FCN=3,Seq=4----->|
            |-----W=0,FCN=2,Seq=5--X   |                    __
            |-----W=0,FCN=1,Seq=6----->|                   | W=0
  DL Enable |-----W=0,FCN=0,Seq=7----->| Missing Fragments<- FCN=5,Seq=2
            |<- Compound ACK,W=0,C=0 --| Bitmap:1011011    | FCN=2,Seq=5
            |-----W=0,FCN=5,Seq=9----->|                    --
            |-----W=0,FCN=2,Seq=10---->|
            |-----W=1,FCN=6,Seq=11---->|
            |-----W=1,FCN=5,Seq=12---->|
            |-----W=1,FCN=4,Seq=13---->|
  DL Enable |-----W=1,FCN=7,Seq=14---->| All fragments received
            |<-Compound ACK,W=1,C=1 ---| C=1
          (End)

        Figure 34: Uplink ACK-on-Error Losses in the First Window

   *Case Fragment All-0 Lost in the First Window (W=0)*

   In this example, the All-0 of the first window (W=0) is lost.
   Therefore, the receiver waits for the next All-0 message of
   intermediate windows or All-1 message of last window to generate the
   corresponding SCHC ACK, which indicates that the All-0 of window 0 is
   absent.

   The sender resends the missing All-0 messages (with any other missing
   fragment from window 0) without opening a reception opportunity.

           Sender                    Receiver
             |-----W=0,FCN=6,Seq=1----->|
             |-----W=0,FCN=5,Seq=2----->|
             |-----W=0,FCN=4,Seq=3----->|
             |-----W=0,FCN=3,Seq=4----->|
             |-----W=0,FCN=2,Seq=5----->|
             |-----W=0,FCN=1,Seq=6----->| DL Enable
             |-----W=0,FCN=0,Seq=7--X   |
         (no ACK)
             |-----W=1,FCN=6,Seq=8----->|
             |-----W=1,FCN=5,Seq=9----->|                    __
             |-----W=1,FCN=4,Seq=10---->|                   |W=0
   DL Enable |-----W=1,FCN=7,Seq=11---->| Missing Fragment<- FCN=0,Seq=7
             |<-Compound ACK,W=0,C=0 ---| Bitmap:1111110    |__
             |-----W=0,FCN=0,Seq=13---->| All fragments received
   DL Enable |-----W=1,FCN=7,Seq=14---->|
             |<-Compound ACK,W=1,C=1 ---| C=1
           (End)

       Figure 35: Uplink ACK-on-Error All-0 Lost in the First Window

   In the following diagram, besides the All-0, there are other fragment
   losses in the first window (W=0).

           Sender                    Receiver
             |-----W=0,FCN=6,Seq=1----->|
             |-----W=0,FCN=5,Seq=2--X   |
             |-----W=0,FCN=4,Seq=3----->|
             |-----W=0,FCN=3,Seq=4--X   |
             |-----W=0,FCN=2,Seq=5----->|
             |-----W=0,FCN=1,Seq=6----->|
   DL Enable |-----W=0,FCN=0,Seq=7--X   |
         (no ACK)
             |-----W=1,FCN=6,Seq=8----->|
             |-----W=1,FCN=5,Seq=9----->|                    __
             |-----W=1,FCN=4,Seq=10---->|                   |W=0
   DL Enable |-----W=1,FCN=7,Seq=11---->| Missing Fragment<- FCN=5,Seq=2
             |<--Compound ACK,W=0,C=0 --| Bitmap:1010110    |FCN=3,Seq=4
             |-----W=0,FCN=5,Seq=13---->|                   |FCN=0,Seq=7
             |-----W=0,FCN=3,Seq=14---->|                    --
             |-----W=0,FCN=0,Seq=15---->| All fragments received
   DL Enable |-----W=1,FCN=7,Seq=16---->|
             |<-Compound ACK,W=1,C=1 ---| C=1
           (End)

      Figure 36: Uplink ACK-on-Error All-0 and Other Fragments Lost in
                              the First Window

   In the next examples, there are fragment losses in both the first
   (W=0) and second (W=1) windows.  The retransmission cycles after the
   All-1 is sent (i.e., not in intermediate windows) MUST always finish
   with an All-1, as it serves as an ACK Request message to confirm the
   correct reception of the retransmitted fragments.

          Sender                    Receiver
            |-----W=0,FCN=6,Seq=1----->|
            |-----W=0,FCN=5,Seq=2--X   |
            |-----W=0,FCN=4,Seq=3----->|
            |-----W=0,FCN=3,Seq=4--X   |                    __
            |-----W=0,FCN=2,Seq=5----->|                   |W=0
            |-----W=0,FCN=1,Seq=6----->|                   |FCN=5,Seq=2
  DL Enable |-----W=0,FCN=0,Seq=7--X   |                   |FCN=3,Seq=4
       (no ACK)                                            |FCN=0,Seq=7
            |-----W=1,FCN=6,Seq=8--X   |                   |W=1
            |-----W=1,FCN=5,Seq=9----->|                   |FCN=6,Seq=8
            |-----W=1,FCN=4,Seq=10-X   |                   |FCN=4,Seq=10
  DL Enable |-----W=1,FCN=7,Seq=11---->| Missing Fragment<-|__
            |<-Compound ACK,W=0,1,C=0--| Bitmap W=0:1010110
            |-----W=0,FCN=5,Seq=13---->|        W=1:0100001
            |-----W=0,FCN=3,Seq=14---->|
            |-----W=0,FCN=0,Seq=15---->|
            |-----W=1,FCN=6,Seq=16---->|
            |-----W=1,FCN=4,Seq=17---->| All fragments received
  DL Enable |-----W=1,FCN=7,Seq=18---->|
            |<-Compound ACK,W=1,C=1----| C=1
          (End)

     Figure 37: Uplink ACK-on-Error All-0 and Other Fragments Lost in
                     the First and Second Windows (1)

   The figure below is a similar case as above but with fewer fragments
   in the second window (W=1).

          Sender                    Receiver
            |-----W=0,FCN=6,Seq=1----->|
            |-----W=0,FCN=5,Seq=2--X   |
            |-----W=0,FCN=4,Seq=3----->|
            |-----W=0,FCN=3,Seq=4--X   |
            |-----W=0,FCN=2,Seq=5----->|                     __
            |-----W=0,FCN=1,Seq=6----->|                    |W=0
  DL Enable |-----W=0,FCN=0,Seq=7--X   |                    |FCN=5,Seq=2
         (no ACK)                                           |FCN=3,Seq=4
            |-----W=1,FCN=6,Seq=8--X   |                    |FCN=0,Seq=7
  DL Enable |-----W=1,FCN=7,Seq=9----->| Missing Fragment--> W=1
            |<-Compound ACK,W=0,1, C=0-| Bitmap W=0:1010110,|FCN=6,Seq=8
            |-----W=0,FCN=5,Seq=11---->|        W=1:0000001 |__
            |-----W=0,FCN=3,Seq=12---->|
            |-----W=0,FCN=0,Seq=13---->|
            |-----W=1,FCN=6,Seq=14---->| All fragments received
  DL Enable |-----W=1,FCN=7,Seq=15---->|
            |<-Compound ACK, W=1,C=1---| C=1
          (End)

     Figure 38: Uplink ACK-on-Error All-0 and Other Fragments Lost in
                     the First and Second Windows (2)

   *Case SCHC ACK is Lost*

   SCHC over Sigfox does not implement the SCHC ACK REQ message.
   Instead, it uses the SCHC All-1 message to request a SCHC ACK when
   required.

              Sender                     Receiver
                 |-----W=0,FCN=6,Seq=1----->|
                 |-----W=0,FCN=5,Seq=2----->|
                 |-----W=0,FCN=4,Seq=3----->|
                 |-----W=0,FCN=3,Seq=4----->|
                 |-----W=0,FCN=2,Seq=5----->|
                 |-----W=0,FCN=1,Seq=6----->|
       DL Enable |-----W=0,FCN=0,Seq=7----->|
             (no ACK)
                 |-----W=1,FCN=6,Seq=8----->|
                 |-----W=1,FCN=5,Seq=9----->|
                 |-----W=1,FCN=4,Seq=10---->|
       DL Enable |-----W=1,FCN=7,Seq=11---->| All fragments received
                 | X--Compound ACK,W=1,C=1 -| C=1
       DL Enable |-----W=1,FCN=7,Seq=13---->| RESEND ACK
                 |<-Compound ACK,W=1,C=1 ---| C=1
               (End)

                  Figure 39: Uplink ACK-on-Error ACK Lost

   *Case SCHC Compound ACK at the End*

   In this example, SCHC Fragment losses are found in both windows 0 and
   1.  However, the sender does not send a SCHC Compound ACK after the
   All-0 of window 0.  Instead, it sends a SCHC Compound ACK indicating
   fragment losses on both windows.

          Sender                    Receiver
            |-----W=0,FCN=6,Seq=1----->|
            |-----W=0,FCN=5,Seq=2--X   |
            |-----W=0,FCN=4,Seq=3----->|
            |-----W=0,FCN=3,Seq=4--X   |
            |-----W=0,FCN=2,Seq=5----->|
            |-----W=0,FCN=1,Seq=6----->|                     __
  DL Enable |-----W=0,FCN=0,Seq=7----->| Waits for          |W=0
         (no ACK)                       next DL opportunity |FCN=5,Seq=2
            |-----W=1,FCN=6,Seq=8--X   |                    |FCN=3,Seq=4
  DL Enable |-----W=1,FCN=7,Seq=9----->| Missing Fragment<-- W=1
            |<-Compound ACK,W=0,1, C=0-| Bitmap W=0:1010110 |FCN=6,Seq=8
            |-----W=0,FCN=5,Seq=11---->|        W=1:0000001  --
            |-----W=0,FCN=3,Seq=12---->|
            |-----W=1,FCN=6,Seq=13---->| All fragments received
  DL Enable |-----W=1,FCN=7,Seq=14---->|
            |<-Compound ACK, W=1, C=1 -| C=1
          (End)

      Figure 40: Uplink ACK-on-Error Fragments Lost in the First and
                   Second Windows with One Compound ACK

   The number of times the same SCHC ACK message will be retransmitted
   is determined by the MAX_ACK_REQUESTS.

5.3.  SCHC Abort Examples

   *Case SCHC Sender-Abort*

   The sender may need to send a Sender-Abort to stop the current
   communication.  For example, this may happen if the All-1 has been
   sent MAX_ACK_REQUESTS times.

             Sender                    Receiver
               |-----W=0,FCN=6,Seq=1----->|
               |-----W=0,FCN=5,Seq=2----->|
               |-----W=0,FCN=4,Seq=3----->|
               |-----W=0,FCN=3,Seq=4----->|
               |-----W=0,FCN=2,Seq=5----->|
               |-----W=0,FCN=1,Seq=6----->|
     DL Enable |-----W=0,FCN=0,Seq=7----->|
           (no ACK)
               |-----W=1,FCN=6,Seq=8----->|
               |-----W=1,FCN=5,Seq=9----->|
               |-----W=1,FCN=4,Seq=10---->|
     DL Enable |-----W=1,FCN=7,Seq=11---->| All fragments received
               | X--Compound ACK,W=1,C=1 -| C=1
     DL Enable |-----W=1,FCN=7,Seq=13---->| RESEND ACK  (1)
               | X--Compound ACK,W=1,C=1 -| C=1
     DL Enable |-----W=1,FCN=7,Seq=15---->| RESEND ACK  (2)
               | X--Compound ACK,W=1,C=1 -| C=1
     DL Enable |-----W=1,FCN=7,Seq=17---->| RESEND ACK  (3)
               | X--Compound ACK,W=1,C=1 -| C=1
     DL Enable |-----W=1,FCN=7,Seq=18---->| RESEND ACK  (4)
               | X--Compound ACK,W=1,C=1 -| C=1
     DL Enable |-----W=1,FCN=7,Seq=19---->| RESEND ACK  (5)
               | X--Compound ACK,W=1,C=1 -| C=1
     DL Enable |----Sender-Abort,Seq=20-->| exit with error condition
             (End)

                Figure 41: Uplink ACK-on-Error Sender-Abort

   *Case Receiver-Abort*

   The receiver may need to send a Receiver-Abort to stop the current
   communication.  This message can only be sent after a Downlink
   Enable.

                  Sender                    Receiver
                    |-----W=0,FCN=6,Seq=1----->|
                    |-----W=0,FCN=5,Seq=2----->|
                    |-----W=0,FCN=4,Seq=3----->|
                    |-----W=0,FCN=3,Seq=4----->|
                    |-----W=0,FCN=2,Seq=5----->|
                    |-----W=0,FCN=1,Seq=6----->|
          DL Enable |-----W=0,FCN=0,Seq=7----->|
                    |<------  RECV ABORT ------| under-resourced
                 (Error)

               Figure 42: Uplink ACK-on-Error Receiver-Abort

6.  Security Considerations

   The radio protocol authenticates and ensures the integrity of each
   message.  This is achieved by using a unique Device ID and an AES-
   128-based message authentication code, ensuring that the message has
   been generated and sent by the device (see [sigfox-spec],
   Section 3.8) or Network (see [sigfox-spec], Section 4.3) with the ID
   claimed in the message [sigfox-spec].

   Application data may or may not be encrypted at the application
   layer, depending on the criticality of the use case.  This
   flexibility allows a balance between cost and effort versus risk.
   AES-128 in counter mode is used for encryption.  Cryptographic keys
   are independent for each device.  These keys are associated with the
   Device ID, and separate integrity and encryption keys are pre-
   provisioned.  An encryption key is only provisioned if
   confidentiality is to be used (see [sigfox-spec], Section 5.3; note
   that further documentation is available at Sigfox upon request).

   The radio protocol has protections against replay attacks, and the
   cloud-based core Network provides firewall protection against
   undesired incoming communications [sigfox-spec].

   The previously described security mechanisms do not guarantee end-to-
   end security between the device SCHC C/D + F/R and the Network SCHC
   C/D + F/R; potential security threats described in [RFC8724] are
   applicable to the profile specified in this document.

   In some circumstances, sending device location information is privacy
   sensitive.  The Device Geolocation parameter provided by the Network
   is optional; therefore, it can be omitted to protect this aspect of
   the device privacy.

7.  IANA Considerations

   This document has no IANA actions.

8.  References

8.1.  Normative References

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119,
              DOI 10.17487/RFC2119, March 1997,
              <https://www.rfc-editor.org/info/rfc2119>.

   [RFC8174]  Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
              2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
              May 2017, <https://www.rfc-editor.org/info/rfc8174>.

   [RFC8724]  Minaburo, A., Toutain, L., Gomez, C., Barthel, D., and JC.
              Zuniga, "SCHC: Generic Framework for Static Context Header
              Compression and Fragmentation", RFC 8724,
              DOI 10.17487/RFC8724, April 2020,
              <https://www.rfc-editor.org/info/rfc8724>.

   [RFC9441]  Zúñiga, JC., Gomez, C., Aguilar, S., Toutain, L.,
              Céspedes, S., and D. Wistuba, "Static Context Header
              Compression (SCHC) Compound Acknowledgement (ACK)",
              RFC 9441, DOI 10.17487/RFC9441, July 2023,
              <https://www.rfc-editor.org/info/rfc9441>.

   [sigfox-spec]
              Sigfox, "Sigfox Device Radio Specifications",
              <https://build.sigfox.com/sigfox-device-radio-
              specifications>.

8.2.  Informative References

   [CORE-COMI]
              Veillette, M., Ed., van der Stok, P., Ed., Pelov, A.,
              Bierman, A., and C. Bormann, Ed., "CoAP Management
              Interface (CORECONF)", Work in Progress, Internet-Draft,
              draft-ietf-core-comi-12, 13 March 2023,
              <https://datatracker.ietf.org/doc/html/draft-ietf-core-
              comi-12>.

   [RFC6241]  Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed.,
              and A. Bierman, Ed., "Network Configuration Protocol
              (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011,
              <https://www.rfc-editor.org/info/rfc6241>.

   [RFC7252]  Shelby, Z., Hartke, K., and C. Bormann, "The Constrained
              Application Protocol (CoAP)", RFC 7252,
              DOI 10.17487/RFC7252, June 2014,
              <https://www.rfc-editor.org/info/rfc7252>.

   [RFC8040]  Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF
              Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017,
              <https://www.rfc-editor.org/info/rfc8040>.

   [RFC8259]  Bray, T., Ed., "The JavaScript Object Notation (JSON) Data
              Interchange Format", STD 90, RFC 8259,
              DOI 10.17487/RFC8259, December 2017,
              <https://www.rfc-editor.org/info/rfc8259>.

   [RFC8376]  Farrell, S., Ed., "Low-Power Wide Area Network (LPWAN)
              Overview", RFC 8376, DOI 10.17487/RFC8376, May 2018,
              <https://www.rfc-editor.org/info/rfc8376>.

   [RFC8949]  Bormann, C. and P. Hoffman, "Concise Binary Object
              Representation (CBOR)", STD 94, RFC 8949,
              DOI 10.17487/RFC8949, December 2020,
              <https://www.rfc-editor.org/info/rfc8949>.

   [sigfox-callbacks]
              Sigfox, "Sigfox Callbacks",
              <https://support.sigfox.com/docs/callbacks-documentation>.

   [sigfox-docs]
              Sigfox, "Sigfox Documentation",
              <https://support.sigfox.com/docs>.

Acknowledgements

   Carles Gomez has been funded in part by the Spanish Government
   through the TEC2016-79988-P grant and the PID2019-106808RA-I00 grant
   (funded by MCIN / AEI / 10.13039/501100011033) and by Secretaria
   d'Universitats i Recerca del Departament d'Empresa i Coneixement de
   la Generalitat de Catalunya through 2017 grant SGR 376 and 2021 grant
   SGR 00330.

   Sergio Aguilar has been funded by the ERDF and the Spanish Government
   through project TEC2016-79988-P and project PID2019-106808RA-I00,
   AEI/FEDER, EU (funded by MCIN / AEI / 10.13039/501100011033).

   Sandra Cespedes has been funded in part by the ANID Chile Project
   FONDECYT Regular 1201893 and Basal Project FB0008.

   Diego Wistuba has been funded by the ANID Chile Project FONDECYT
   Regular 1201893.

   The authors would like to thank Ana Minaburo, Clement Mannequin,
   Rafael Vidal, Julien Boite, Renaud Marty, and Antonis Platis for
   their useful comments and implementation design considerations.

Authors' Addresses

   Juan Carlos Zúñiga
   Montreal QC
   Canada
   Email: j.c.zuniga@ieee.org


   Carles Gomez
   Universitat Politècnica de Catalunya
   C/Esteve Terradas, 7
   08860 Castelldefels
   Spain
   Email: carles.gomez@upc.edu


   Sergio Aguilar
   Universitat Politècnica de Catalunya
   C/Esteve Terradas, 7
   08860 Castelldefels
   Spain
   Email: sergio.aguilar.romero@upc.edu


   Laurent Toutain
   IMT-Atlantique
   CS 17607
   2 rue de la Chataigneraie
   35576 Cesson-Sevigne Cedex
   France
   Email: Laurent.Toutain@imt-atlantique.fr


   Sandra Céspedes
   Concordia University
   1455 De Maisonneuve Blvd. W.
   Montreal QC H3G 1M8
   Canada
   Email: sandra.cespedes@concordia.ca


   Diego Wistuba
   NIC Labs, Universidad de Chile
   Av. Almte. Blanco Encalada 1975
   Santiago
   Chile
   Email: research@witu.cl


   Julien Boite
   Unabiz (Sigfox)
   Labege
   France
   Email: juboite@free.fr
   URI:   https://www.sigfox.com/