RFC 9442: Static Context Header Compression (SCHC) over Sigfox Low-Power Wide Area Network (LPWAN)
- J. Zúñiga,
- C. Gomez,
- S. Aguilar,
- L. Toutain,
- S. Céspedes,
- D. Wistuba,
- J. Boite
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://
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://
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
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
Sigfox is an LPWAN technology that offers energy
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
3.1. Network Architecture
Figure 1 represents the architecture for Compression
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
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:¶
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).¶
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
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
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
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:¶
Other F/R parameters MUST be configured as follows:¶
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 opportunistical
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:¶
Other F/R parameters MUST be configured as follows:¶
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
opportunistical
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:¶
Other F/R parameters MUST be configured as follows:¶
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:¶
Other F/R parameters MUST be configured as follows:¶
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
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:¶
Other F/R parameters MUST be configured as follows:¶
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.¶
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.¶
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.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.¶
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
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.¶
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.¶
Losses are found in windows W = w1,...,wi, where w1 < w2 <...< wi.¶
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.¶
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.¶
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.¶
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.¶
Losses are found in windows W = w1,...,wi, where w1 < w2 <...< wi.¶
Losses are found in windows W = w1,...,wi, where w1 < w2 <...< wi.¶
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.¶
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.¶
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.¶
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.¶
Losses are found in windows W = w1,...,wi, where w1 < w2 <...< wi.¶
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.¶
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.¶
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.¶
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 interoperabilit
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:¶
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.¶
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
Case Losses on Any Fragment except the First¶
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 opportunistical
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.¶
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.¶
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.¶
In the following diagram, besides the All-0, there are other fragment losses in the first window (W=0).¶
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.¶
The figure below is a similar case as above but with fewer fragments in the second window (W=1).¶
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.¶
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.¶
The number of times the same SCHC ACK message will be retransmitted is determined by the
MAX
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
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.¶
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
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 , , <https:///RFC2119 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 , , <https:///RFC8174 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 , , <https:///RFC8724 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 , , <https:///RFC9441 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 , , <https://-core -comi -12 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 , , <https:///RFC6241 www >..rfc -editor .org /info /rfc6241 - [RFC7252]
-
Shelby, Z., Hartke, K., and C. Bormann, "The Constrained Application Protocol (CoAP)", RFC 7252, DOI 10
.17487 , , <https:///RFC7252 www >..rfc -editor .org /info /rfc7252 - [RFC8040]
-
Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF Protocol", RFC 8040, DOI 10
.17487 , , <https:///RFC8040 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 , , <https:///RFC8259 www >..rfc -editor .org /info /rfc8259 - [RFC8376]
-
Farrell, S., Ed., "Low-Power Wide Area Network (LPWAN) Overview", RFC 8376, DOI 10
.17487 , , <https:///RFC8376 www >..rfc -editor .org /info /rfc8376 - [RFC8949]
-
Bormann, C. and P. Hoffman, "Concise Binary Object Representation (CBOR)", STD 94, RFC 8949, DOI 10
.17487 , , <https:///RFC8949 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
Sergio Aguilar has been funded by the ERDF and the Spanish Government through project TEC2016-79988-P and project PID2019
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.¶