Internet-Draft | SCHC Minimal Architecture | July 2025 |
Lampin, et al. | Expires 31 January 2026 | [Page] |
This document investigates the requirements of a minimal architecture for the Static Context Header Compression (and fragmentation) protocol (SCHC). The intent is to identify the essential components their relationships and interfaces. To do so, the document considers scenarios of increasing complexity involving the use of SCHC, from a simple point-to-point communication to a more complex deployment involving multiple SCHC Instances communicating with each other. In this process, the authors hope to identify the essential components of a SCHC architecture and their relationships.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 31 January 2026.¶
Copyright (c) 2025 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.¶
The SCHC Working Group has developed the [RFC8724] SCHC protocol for Low-Power Wide-Area (LPWA) networks, providing efficient header compression and fragmentation mechanisms. As SCHC adoption expands beyond its original scope, there is a need to define a minimal architecture that identifies only the essential elements required for proper SCHC operation. This document does not aim to replace the SCHC architecture defined in [DRAFT-ARCH], but rather to investigate the minimal set of components and their relationships that are necessary for SCHC to function effectively in various deployment scenarios.¶
This document provides:¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
This section defines terminology and abbreviations used in this document. It borrows from the terminology of [RFC8724] and [DRAFT-ARCH].¶
In the following, terms used in the terminology are assumed to be defined in the context of the SCHC protocol unless specified otherwise, .e.g Endpoint refers to a SCHC Endpoint, Instance refers to a SCHC Instance, and so on.¶
Endpoint: A network host capable of compressing and decompressing headers and optionally fragmenting and reassembling packets.¶
Instance: A logical component of an Endpoint that implements the SCHC protocol, including header compression, fragmentation, and context management.¶
Context: A set of rules and parameters that define how SCHC operations are
performed by Instances
that implement this Context
. It includes the Set of
Rules (SoR) and the parser ID.¶
Endpoint Manager: A logical component that manages the lifecycle and
configuration of Instances
within an Endpoint
. It is responsible for
creating, updating, and deleting Instances
as needed, synchronizing
Contexts
and Profiles
, and managing the Dispatcher
.¶
Session: A communication session between two Instances
that
share a common context for compression and fragmentation operations. Whenever
the Context
is updated, a new or updated Session
is established.¶
Domain: A logical grouping of Instances
that share a common set of
Contexts
for compression and fragmentation operations.¶
Dispatcher: A logical component that routes packets to the appropriate
Instances
based on defined admission rules. It can be integrated into the
network stack or implemented as a separate component.¶
Profile: A set of configurations that define how SCHC operations are
performed within a specific Instance
. It includes parameters for the
different SCHC components.¶
Domain Manager: A logical component that manages the Domain
, including
context synchronization and profile distribution.¶
Context Repository: A logical component that stores and manages the
Contexts
used by its Domain
.¶
In this section, we investigate the minimal components required for SCHC operation in the context of typical deployment scenarios.¶
This section considers a simple point-to-point deployment scenario
where two Endpoints
communicate with each other using SCHC. The devices are
assumed to have a very simple network stack, as shown in the figure below:¶
Endpoint A Endpoint B +------------------+ +------------------+ | Application A | | Application B | +------------------+ +------------------+ | CoAP | | CoAP | +------------------+ +------------------+ | UDP | | UDP | +------------------+ +------------------+ | IPv6 | | IPv6 | +------------------+ +------------------+ | SCHC Instance | | SCHC Instance | +------------------+ +------------------+ | LPWAN Link Layer | | LPWAN Link Layer | +------------------+ +------------------+ | Physical Layer | | Physical Layer | +------------------+ +------------------+ | | +---------------------------+¶
In this scenario,¶
Both Endpoint
A and Endpoint
B implement the SCHC protocol for header
compression and decompression.¶
Both Endpoints
feature a single application and all traffic is sent and
received using the CoAP protocol over UDP over IPv6.¶
The SCHC protocol is used to compress the CoAP, UDP, and IPv6 headers before sending the packets over the LPWAN link layer.¶
The SCHC protocol is implemented as a single Instance
on each
Endpoint
.¶
The Instance
is hardwired into the protocol stack of each Endpoint
,
meaning that it is not dynamically loaded or unloaded.¶
All of the traffic is compressed and decompressed using those Instances
.¶
In this simplistic scenario, which is representative of some LPWAN deployments, the requirements for the minimal architecture are as follows:¶
The Set Of Rules (SoR) of Endpoint
A MUST be compatible with the SoR of
Endpoint
B. Such compatitibility requires that rules IDs and Rule
Descriptors are consistent between the two Instances
. Parsers of both
Instances
MUST be compatible, meaning that they MUST delineate the same
header fields in the same order and with the same semantics.¶
Whenever Endpoint
A compresses a packet, it MUST use the same Context
as
Endpoint
B. This means that the Context
MUST be synchronized between the
two Instances
. This communication session is referred to as a Session
.¶
Why Instance
? Here we use the term Instance
to refer to the SCHC
protocol routine that is running on each endpoint. This is different from the
SCHC Instance defined in [DRAFT-ARCH], which refers to a pair of SCHC
endpoints that communicate through SCHC.¶
The rationale for this terminology is that the term Instance
is often used to
refer to a specific realization of a class in object-oriented programming, and
in this case, the SCHC Instance
is a specific realization of the SCHC
protocol that is running on each endpoint.¶
Session vs Instance: In this document, we use the term Session
to refer to
a communication session between two (or more) Instances
that are
communicating with each other using SCHC, using the same Context
.¶
The rationale for this is that the term Session
is often used to refer to a
specific communication session between two endpoints and this definition
extends this concept to all Instances
that maintain a common context.¶
Why not use the terminology of [DRAFT-ARCH]? We believe that
version -04 introduced changes in the terminology that are prone to confusion.
In particular, the term Instance
is defined as:¶
SCHC Instance. The **session** between SCHC end points in two or more
peer nodes operating SCHC to communicate using a common SoR and a
matching SoV. There are 2 SCHC Instances or more involved per
SCHC stratum, one for the SCHC Stratum Header and one or more for
the SCHC payload, i.e., the SCHC-compressed data.
¶
while the end point is defined as:¶
SCHC end point. An entity (e.g., Device, Application and Network
Gateway) involved in the SCHC process. Each SCHC end point will
have its Set of Rules (SoR), based on the profile, the protocols,
the device, the behaviour and a Set of Variables (SoV).
¶
Those definitions are confusing as they do not clearly identify the components
which they are referring to. For example, the term Instance
can be used to
refer to session between two applications that are using SCHC, or to refer to
two hardware devices that are using SCHC, etc.¶
The proposed terminology in this document aims to clarify the definitions of the
architecture components by calling a session a Session
and therefore reuses
the term Instance
to refer to the SCHC protocol routine that is running on
an endpoint.¶
This terminology is consistent with prior versions of the architecture document, such as version -03, which had the following definitions:¶
SCHC Instance. The different stages of SCHC in a host. Each instance will have its Set of Rules (SoR), based on the profile, the protocols, the device, the behaviour and a Set of Variables (SoV). There are 2 SCHC Instances involved per SCHC stratum, one for the SCHC header and one for the SCHC payload, i.e., the SCHC- compressed data.¶
SCHC Session. The association of SCHC Instances in two or more peer nodes operating SCHC to communicate using a common SoR and a matching SoV.¶
In this section, we consider a more complex deployment scenario where two or more endpoints communicate with the same SCHC Instance/Endpoint. This scenario is common in IoT deployments where multiple sensors or devices communicate with a central gateway or server using SCHC.¶
Endpoint A Endpoint B Endpoint C +------------------+ +------------------+ +------------------+ | Application A | | Application B | | Application A | +------------------+ +------------------+ +------------------+ | CoAP | | CoAP | | CoAP | +------------------+ +------------------+ +------------------+ | UDP | | UDP | | UDP | +------------------+ +------------------+ +------------------+ | IPv6 | | IPv6 | | IPv6 | +------------------+ +------------------+ +------------------+ | SCHC Instance | | SCHC Instance | | SCHC Instance | +------------------+ +------------------+ +------------------+ | LPWAN Link Layer | | LPWAN Link Layer | | LPWAN Link Layer | +------------------+ +------------------+ +------------------+ | Physical Layer | | Physical Layer | | Physical Layer | +------------------+ +------------------+ +------------------+ | | | | +--------------------+ +-------------------+¶
In this scenario, we have three Endpoints
, Endpoint
A, Endpoint
B,
and Endpoint
C, that communicate with each other using SCHC. Here,
Endpoint
A and Endpoint
C are typically sensors or devices that send data
to Endpoint
B, which is a gateway or server that collects and processes the
data.¶
We further assume that Endpoints
A and C have very similar traffic patterns,
meaning that they send similar packets to Endpoint B. This allows the SCHC
Instances
on Host A, B and C to share the same Context
, which reduces
the complexity of administration and management of this deployment.
In the following, we refer to Instances
that share the same Contexts
as a
Domain
.¶
In this typical IoT deployment scenario, the requirements for the minimal architecture are as follows:¶
The Context
of all three Endpoints
MUST be compatible. This means that
the SoR, parsers, and rule IDs are consistent between the three Instances
.¶
The Context
MUST be synchronized between the three Instances
. This
means that an updated Session
between all three Instances
is
established whenever the Context
is updated or modified.¶
The Domain
MUST be able to manage the Contexts
of all Instances
that
belong to it. This includes the Endpoints
enrollment, provisioning of
Contexts
and synchronization. This role is assumed by a logical component of
the Domain
, referred to as the Domain Manager
.¶
Why synchronize the Contexts
of A and C? Synchronizing the Contexts
of
Endpoint A and Endpoint C is desirable. This reduces the complexity of
managing multiple Contexts
at Endpoint B and eventually reduces the size the
Rules IDs, impacting the SCHC packet size.¶
Domain Manager, why introduce a new entity? In a first approach, the
Domain Manager
could be implemented as a component of the Instance
that is
running on an Endpoint
, here B. However, this would require distinguishing
between different types of Instances
: those capable of managing other
instances from those that are not, those that are in charge of managing others
from those that are not. By separating the Domain Manager
from the
Instance
, we allow for a more flexible and modular architecture that can be
adapted to different deployment scenarios.¶
Context compatibility or equality? While not strictly required, it is
desirable that the Contexts
of all Instances
that belong to the same
Domain
are equal, meaning that they share the same SoR, parsers, and rule
IDs. This simplifies the management of the Contexts
and reduces the risk of
misconfiguration or incompatibility between Instances
. However, this is not
strictly required, as long as the Contexts
are compatible, meaning that they
can be used interchangeably without causing issues in compression or
fragmentation operations.¶
In this section, we consider a deployment scenario where multiple Endpoints
communicate with each other using SCHC, but the traffic patterns of these
Endpoints
are dynamic and change over time. This scenario typically occurs
in Smart Buildings applications, where different configurations are deployed
based on the current season, occupancy, etc. For example, thermostats
setpoints are set differently in winter and summer.¶
In this scenario, we have three Endpoints
A, B and C. A, B feature a
temperature and thermostat functionality, while C is a server that collects
and processes the data from A and B.¶
We further assume that the Endpoints
A, B and C are first registered with the
Domain Manager
of the domain which they are part of, and that they are
provisioned with an initial Context
. This Context
is used to compress the
temperature and thermostat data sent by A and B to C, and is tailored to the
specifics of the temperatures recorded during winter, and the thermostat
setpoints used during this season, as shown in the figure below:¶
+----------------+ | Domain Manager | +----------------+ ^ | 1. Endpoints | | registered | | | | 2. Context v1 deployed for winter | +-----------------+-----------------+ | | | | | | | | | v v v +--------------+ +--------------+ +--------------+ | Endpoint A | | Endpoint B | | Endpoint C | +--------------+ +--------------+ +--------------+¶
Then comes the spring, and the temperature and thermostat setpoints change.
The Domain Manager
is responsible for updating the Context
of all
Instances
that belong to the domain, i.e. A, B and C. This update is done
dynamically, meaning that the Context
is updated without interrupting the
communication between the Endpoints
.¶
+--------------------+ | Application Server | +--------------------+ | | 1. Submission of a new Context (v2) | | +----------------+ Context v2 +--------------------+ +------>| Domain Manager | <----------> | Context Repository | +----------------+ stored +--------------------+ | | | | 2. Context v2 deployed +-----------------+-----------------+ | | | | | | v v v +--------------+ +--------------+ +--------------+ | Endpoint A | | Endpoint B | | Endpoint C | +--------------+ +--------------+ +--------------+¶
This scenario highlights the need for a dynamic context update mechanism that
allows the Domain Manager
to update the Context
of all Instances
belonging to the Domain
.¶
This raises a number of questions, such as:¶
How to ensure that all Instances
are updated with the new Context
?¶
How to process packets sent before the Context
update but received after?¶
Answering those specific questions is critical for the proper operation of SCHC
in this scenario as unsynchronized Contexts
can lead to packet loss or
misinterpretation at the receiving end.¶
It is worth noting that the same questions arise in the context of configuration management and are possibly addressed by existing IETF protocols.¶
Nevertheless, we can already identify the need for the following:¶
A Context Repository
that is responsible for storing the Contexts
of
the domain. In case of disagreement between Instances
, the Context
Repository
is used to resolve the disagreement. Having one identified source
of truth for the Contexts
helps to maintain consistency across the domain.
This is also useful when (new) nodes join the domain later, as the
Context Repository
can provide the necessary Context
information to new or
existing Instances
.¶
A mechanism for versioning Contexts
, allowing the Domain Manager
to
manage multiple versions of a Context
and facilitate rollbacks if needed.¶
A mechanism for notifying Endpoints
of Context
updates, ensuring that all
Endpoints
are aware of the latest Context
version and can adapt their
behavior accordingly.¶
In this scenario, a single Endpoint
that hosts multiple Instances
is
considered. This scenario involves each Instance
being configured with
different Contexts
. This can be useful for supporting multiple applications
or services with distinct traffic patterns. One such use-case arises when
a single Endpoint
needs to handle different types of traffic, potentially
sent and received on different network interfaces, each requiring
its own Instance
with tailored compression and fragmentation settings.¶
Endpoint A Endpoint B +------------------------------+ +------------------------------+ | App. 1 | App. 2 | | App. 1 | App. 2 | +------------------------------+ +------------------------------+ | CoAP | HTTP | | CoAP | HTTP | +------------------------------+ +------------------------------+ | UDP | UDP/QUIC | | UDP | UDP/QUIC | +------------------------------+ +------------------------------+ | IPv6 | | IPv6 | +------------------------------+ +------------------------------+ | SCHC | SCHC | | SCHC | SCHC | | Instance A1 | Instance A2 | | Instance B1 | Instance B2 | +------------------------------+ +------------------------------+ | Link Layer | | Link Layer | +------------------------------+ +------------------------------+ | Physical Layer | | Physical Layer | +------------------------------+ +------------------------------+ | | +-------------------------------------+¶
In the above example, two Endpoints
, A and B, each host two Instances
.
Endpoint
A hosts Instance
A1 and Instance
A2, while Endpoint
B hosts
Instance
B1 and Instance
B2. Instance
A1 and Instance
B1 are configured
to handle CoAP traffic and share a common Context
C1 while Instance
A2 and
Instance
B2 are configured to handle HTTP traffic and share a common
Context
C2.¶
This new scenario introduces the following challenges:¶
Datagram Dispatch: The Endpoint
must be able to dispatch packets to the
appropriate Instance
based on the protocol or application in use. This
requires an additional functional entity, the Dispatcher
, that can identify
and dispatch packets to the correct Instance
for compression and
fragmentation. Conversely, the Dispatcher
must also be able to route inbound
compressed and fragmented packets to the correct Instance
for decompression
and reassembly.¶
In the above example, uncompressed CoAP/UDP packets must be dispatched to
Instances
A1 and B1, while uncompressed HTTP/QUIC packets must be dispatched
to Instances
A2 and B2. Additionally, compressed CoAP/UDP packets must be
dispatched to Instances
A1 and B1, while compressed HTTP/QUIC packets must
be dispatched to Instances
A2 and B2 for decompression. The criteria for
dispatching compressed packets to the correct Instance
is called the
Discriminator
in [DRAFT-ARCH].¶
Those challenges are discussed further in section Section 4.7.5.¶
Instance/Context Identification: In addition to the need for a Dispatch
mechanism, which addresses the routing of packets to the correct Instance
,
each Instance
or Context
must be uniquely identifiable to allow the
Domain Manager
to update the Context
of a specific Instance
.¶
Dispatcher and Discriminator In [DRAFT-ARCH], the authors introduce
the concept of a Discriminator
that is used to identify the Instance
or
Context
that must be used to decompress a packet. As explained in the
document, the Discriminator
is a criterion that is used to select the
appropriate Instance
or Context
for decompression.¶
The Dispatcher
is different from the Discriminator
in that it is the
functional unit responsible for routing packets to the correct Instance
based on:¶
This additional scenario introduces heterogeneous Endpoints
that feature
different hardware and software configurations. These differences may include
the Operating System (OS) or the hardware on which the Instance
is run.
Those differences are the source of a challenge in the deployment of
Instances
in configurations.¶
To illustrate this challenge, we consider the following example, illustrated in
the figure below, where two Endpoints
A and B are both running the same
OS, here a Linux-based distribution using udev for device management, but on
two different hardware platforms.¶
Endpoint A Endpoint B +------------------------------+ +------------------------------+ | Application | | Application | +------------------------------+ +------------------------------+ | CoAP | | CoAP | +------------------------------+ +------------------------------+ | UDP | | UDP | +------------------------------+ +------------------------------+ | IPv6 | | IPv6 | +------------------------------+ +------------------------------+ | SCHC | | SCHC | | Instance | | Instance | +------------------------------+ +------------------------------+ | eno0 | | enp2s0 | | Ethernet, onboard device, | | Ethernet, PCI device | | index 0 | | bus 2, slot 0 | +------------------------------+ +------------------------------+ | Physical Interface | | Physical Interface | +------------------------------+ +------------------------------+ | | +----------------------------------+¶
Endpoint
A features an Ethernet interface which is located on the mainboard
and is referred to as eno0
: en standing for "Ethernet",
o for "onboard", and 0 for "index 0" in the udev naming convention.¶
Endpoint
B features an Ethernet interface which is located on a PCI bus and
is referred to as enp2s0
: en standing for "Ethernet", p for "PCI",
2 for "bus 2", and s0 for "slot 0" in the same naming convention.¶
In this scenario, the Context
which contains the Set of Rules (SoR) and parser
ID, i.e. the configuration which is shared by all Instances
of a Domain
,
provides no information on how to instruct the Dispatcher
to route packets
from the appropriate Network Interface to the appropriate Instance
.¶
Without further configuration and unless the Dispatcher
intercepts all packets
from all network interfaces, we cannot guarantee the correct dispatching of
packets to the appropriate Instances
. Obviously, intercepting traffic from
all network interfaces is not a viable solution, as it would require the
inspection of all packets, regardless of their destination, which requires
significant processing power and may introduce unacceptable latency on
high-speed links.¶
Additionally, different OSes may use different filtering/dispatch frameworks,
e.g. Netfilter on Linux, BPF on FreeBSD, PF on OpenBSD and macOS etc. This
means that the foundation on which the Dispatcher
implementation relies may
vary significantly between different platforms and could require different
configurations to dispatch packets to Instances
based on the same Context
but running on different Endpoints
.¶
This assessment advocates for the introduction of a device-specific
configuration that is independent of the Context
, which we name Profile
.¶
Such Profiles
are Endpoint
specific so their actual content is out of scope
of this document. However, the Profile
SHALL include the following:¶
The configuration of the Dispatcher
, i.e. the admission rules for
compression and decompression.¶
The rule matching policy, i.e. the policy used to select the appropriate
compression or decompression rule based on the SCHC packet and the Context
.¶
As the Profile
is Endpoint
specific, it is not shared between Instances
of
different Endpoints
. However, the Profile
required for a given Instance
may need to change when the Context
is updated, e.g. the filtering rules may
need to be adjusted to account for the new traffic patterns and C/D rules.¶
This means that the Profile
may need to be updated whenever the Context
is
updated, and that the Domain Manager
SHALL therefore be responsible for
managing the Profile
delivery to Instances
and their synchronization with
the Context
.¶
In this scenario, we consider the case where an Endpoint
A is powered on and
needs to establish a SCHC Session
with another Endpoint
B. Endpoint
A
does not have any Context
or Profile
stored in memory, and it needs to
retrieve or negotiate this information before establishing the session.¶
Two hypothetical scenarios are considered here:¶
S1. Endpoint
A is provisioned on the appropriate Domain
and is
configured with the address/URI of the Domain Manager
and
Context Repository
.¶
S2. Endpoint
A is provisioned on the appropriate Domain
but is not
configured with the address/URI of the Domain Manager
and
Context Repository
. In this scenario, the Domain Manager
is in charge of
advertising its presence and push the context to Endpoint
A.¶
In scenario S1, Endpoint
A initiates the configuration phase, effectively
pulling the Context
and Profile
from the Domain Manager
and the
Context Repository
. This scenario implies that the Domain Manager
exposes
a management interface that allows Endpoints
to retrieve the necessary
configuration information. Additionally, a logical component referred to as
Endpoint Manager
is required to manage the Instances
of the Endpoint
.¶
In scenario S2, the Domain Manager
is in charge of advertising its presence
and Endpoint
A is pulling the Contexts
and Profiles
from it.
The advertisement can be done using a discovery mechanism, such as DNS-SD or a
predefined multicast address. This scenario implies that Endpoints
are
capable of discovering the Domain Manager
and retrieving the necessary
configuration information. This further requires that Endpoints
feature a
service discovery mechanism and a Management Protocol
that enables them to
interact with the Domain Manager
and request the required Context
and
Profile
.¶
In both scenarios, a management protocol is required to enable the retrieval
of the Context
and Profile
from the Domain Manager
. [DRAFT-CORECONF]
provides initial ideas on how to implement such a management protocol for SCHC
in a Constrained Environment, e.g. IoT devices.¶
This section provides an overview of the SCHC Core components their interactions and key functionalities and interfaces.¶
An Endpoint
is a network host capable of compressing and decompressing headers
and optionally fragmenting and reassembling packets. It implements the SCHC
protocol as defined in [RFC8724]. An Endpoint
can host multiple
Instances
, each with its own Context
and Profile
.¶
retrieves, synchronizes +------------+ contexts | Endpoint | retrieves, synchronizes +---------| Manager |-------------+---------------+ | +------------+ | | | | manages v v | | lifecycle +------------+ +------------+ | | of Instances | Profile P1 | | Context Pk | | | +------------+ +------------+ | | configures | |configures | | | | | | compresses, decompresses +-----+ | | | +------------------------+ | | v v | fragments, reassembles | | | +------------+ +-------------+ | | | | Context C1 |--| Instance I1 |<--+ v v v +------------+ +-------------+ | +---------------+ ... ... +<----------| Dispatcher |----+ ... ... | | +---------------+ | +------------+ +-------------+ | dispatch ^ | | | Context Ck |--| Instance Ik |<--+ packets - | reinject configures +------------+ +-------------+ | | | | v v +-------------------------------+ | OS/firmware | | network stack | +-------------------------------+¶
An Instance
is the fundamental component that implements the SCHC protocol
as defined in [RFC8724]. An Endpoint
MAY execute several Instances
in
its protocol stack. Each Instance
operates independently, with its own
context and profile.¶
An Instance
MUST implement the following components:¶
Its configuration MUST include:¶
a SCHC Context, which defines the set of C/D and F/R rules - or Set of Rules - and the parser to be used to delineate the header field.¶
a SCHC Profile, which defines the configuration of the Dispatch Engine, the rule matching policy, and the device-specific configuration.¶
A SCHC Instance MAY implement:¶
Fragmentation and Reassembly (F/R) functionality.¶
Dynamic context update mechanisms.¶
Performance monitoring and reporting.¶
This component is responsible for compressing and decompressing headers using the SCHC protocol, as described in [RFC8724]. It applies the rules defined in the SCHC Context.¶
The C/D engine MUST expose the following interface:¶
compress(buffer, context, profile)
: Compresses the provided buffer using the
SCHC Context and the profile.¶
decompress(buffer, context, profile)
: Decompresses the provided buffer using
the SCHC Context and the profile.¶
Internally, on compression, the C/D engine:¶
delineates the fields using the parser identified in the SCHC Context.¶
chooses the appropriate compression rule based on the SCHC Context and the matching policy defined in the profile.¶
applies the compression rule to the fields of the header.¶
generates the compressed SCHC packet.¶
On decompression, the C/D engine:¶
This component is responsible for fragmenting larger packets into smaller fragments and reassembling them at the receiving end. It is optional in the minimal architecture but recommended for scenarios where packet sizes exceed the maximum transmission unit (MTU) of the underlying network.¶
As illustrated in the figure below, the Session
is a communication session
between two or more Instances
that share a common Context
, i.e. they are
part of the same Domain
. It is established whenever the Context
is updated
or modified.¶
Endpoint A Endpoint B +------------------+ +------------------+ | SCHC Instance | <--- ----> | SCHC Instance | +------------------+ \ / +------------------+ \ / Session / \ +------------------+ / \ +------------------+ | SCHC Instance | <--- ---> | SCHC Instance | +------------------+ +------------------+ Endpoint C Endpoint D¶
The SCHC Domain
is an administrative unit, whose role is to manage the SCHC
Contexts of all Instances
that belong to it. The Domain Manager
is the
component responsible for this management. It handles Endpoints Enrollment,
and Context
synchronization.¶
Domain Manager +----------------------------+ | | | +----------+ +----------+ | | | Endpoint | | Context | | +-------+>| Manager | | Manager | | | | +----------+ +----------+ | | +--------------------+-------+ Register | | Endpoint | +------------------------+ | | synchronize Context(es) v v +-----------------+ +------------------+ +----------------+ | Endpoint A | | Endpoint B | | Endpoint ... | +-----------------+ +------------------+ +----------------+¶
SCHC Domain, different illutration.¶
+------------------------------------------------------------+ | | +-+ +-------------+ +-+ i | | p | Context | e | | i n | | r +--| Repository |-+ n | | n t | | o +-------------+ | +-------------+ | +----------+ d | | t e | | v | |-+ +-------------+ +--| Endpoint | p | | e r | | i | Provisioner |----| Profile |----| Manager | o | | r f | | s | |-+ | Repository | +-| | i | | f a | | i +-------------+ | +-------------+ | +----------+ n | | a c | | o | +-------------+ | t | | c e | | n +--| Endpoints |--+ | | e +-+ | Registry | +-+ | +-------------+ | | | +------------------------------------------------------------+¶
The Dispatcher is responsible for delivering compressed packets to the
correct SCHC Instance
. It ensures that the compressed packets are sent
to the appropriate destination and that the decompressed packets are
delivered to the correct application or protocol routine.¶
The Dispatcher is a key component that enables the coexistence of multiple
SCHC Instances
on the same network host, allowing different protocols or
applications to use SCHC compression and decompression mechanisms. It also
allows regular traffic to coexist with SCHC-compressed traffic.¶
Dispatcher is illustrated in the figure below, where two SCHC Instances
are running on the same Endpoint
. The Dispatcher is responsible for routing
packets to the appropriate Instance
based on admission criteria defined in
the Profiles
and the Contexts
.¶
reinject +------------------------------------------------------------------+ | | | Profile1 Context1 | | | | | | +-----+----+ | | | | | +- - - - - - -+ Instance 1 | | | Packet p+1 | + - - - - - -+ | | +-------------+ + - - - - - - - - - -+ |- compress | | +->| Packet p | + -| chain_inst1_comp | + - - - - - -+ | +-------------+ | + - - - - - - - - - -+ |- decompress| | | Packet p-1 | + -| chain_inst1_decomp | + - - - - - -+ | +- - - - - - -+ | +--------------------+ | Packet +->| chain_inst2_comp |--+ | Queue | +--------------------+ | +------------+ | + -| chain_inst2_decomp | +-->|- compress |---+ + - - - - - - - - - -+ +------------+ | . . . | |- decompress| + - - - - - - - - - -+ + - - - - - -+ Dispatcher Instance 2 | +-----+----+ | | Profile2 Context2¶
There are two types of admission criteria that are used by the Dispatcher:¶
Discriminator
values for decompression and reassembly. Those criteria
are used to identify packets that should be decompressed and reassembled by
SCHC. The Discriminator
is a value that is either included in the packet,
such as a field in the packet headers (MPLS label, UDP port) or is derived
from the metadata associated with the packet, such as the Network Interface
ID, as described in [DRAFT-ARCH].¶
Matching Operators
and Target Values
of the Contexts
for compression
and fragmentation. Those criteria are used to identify packets that should be
compressed and fragmented by SCHC. The Matching Operators
and Target
Values
are defined in the SCHC Contexts
and are used to match specific
header fields or values in the packet headers. The Dispatcher
uses these
criteria to determine whether a packet should be compressed or fragmented by
a given Instance
.¶
TODO: LINK between discriminator, MO/TV and filter chains. What follows is WIP, needs to be completed.¶
Context management is responsible for maintaining the shared state between SCHC entities. This includes:¶
A Context Repository provides centralized storage and management of SCHC contexts and profiles. While not mandatory for minimal deployments, it becomes essential for larger deployments requiring centralized management.¶
Security considerations for SCHC minimal architecture include:¶
This document has no IANA actions.¶
The authors would like to thank the SCHC Working Group for their contributions and feedback on this document.¶
THIS SECTION IS NOT PART OF THE DOCUMENT, IT IS A COLLECTION OF IDEAS, CONCEPTS AND ILLUSTRATIONS THAT ARE NOT YET FULLY DEVELOPED OR INTEGRATED INTO THE DOCUMENT. IT IS PROVIDED FOR REFERENCE AND DISCUSSION PURPOSES ONLY.¶
Endpoint +------------------------------------------------+ | +-------------+ +---------------+ | | | Instance I1 |-----+- Context C1 | +-+ | +-------------+ +- Context C2 | | | i | +-------------+ / | ... | d | | n | | Instance I2 |__/ +---------------+ o | | t | +-------------+ Domain D1 m | | e | ... ... a | | r | +-------------+ +---------------+ i | | f | | Instance Ik |-----+- Context Ck | n | | a | +-------------+ ... +- Context Ck+1 | | | c | +-------------+ __| ... | | | e | | Instance .. |__/ +---------------+ +-+ | +-------------+ Domain Dn | +------------------------------------------------+¶
Endpoint +-------------------------------------------------------------------+ | | | Domain D1 | | +--------------+ +--------------------+ | | +---| Instance I1 |-----|- Context/Profile 1 | +-+ | | +--------------+ +|- Context/Profile 2 | | | i | | +--------------+ / | ... | d| | n | +--|---| Instance I2 |__/ +------------+-------+ o| | t | | | +--------------+ ... | m| | e | | | ... Domain Dn a| | r | | | +--------------+ +---------------------+ i| | f | | | | Instance Ij |-----|- Context/Profile j | n| | a | | | +--------------+ ... | ... | | | c | | | +--------------+ --|- Context/Profile k | | | e | +--|--|---| Instance Ik |__/ +------+--------------+ +-+ | | | | +--------------+ | | | | | | | | | Dispatcher | | | | | | | | +-----------------------+ | | | | | | | | | | | | | | | | | | | | +----------------+ +-+ | | | | | | | | +---|--|-- Inst. 1 Cb | | |--+ | | | | | +------|--|-- Inst. 2 Cb | | |----+ | | | | | | | ... | | |- - - + | | | +---------|--|-- Inst. k Cb | | |--------+ | | | +----------------+ | | | | | +-+ | | +-----------------------+ | +---------------------+-----------------------+---------------------+ | Net. Stack 1 | ... | Net. Stack l | +---------------------+-----------------------+---------------------+¶
Endpoint +------------------------------------------------------------------+ | | | Dispatcher | | +--------------+ +-------------+ +--------------------+ | | | Disp. Filter1| | Instance I1 |-----+- Context/Profile 1 | +-+ | +--------------+ +-------------+ +- Context/Profile 2 | | | i | +--------------+ +-------------+ / | ... | d| | n | | Disp. Filter2| | Instance I2 |__/ +--------------------+ o| | t | +--------------+ +-------------+ Domain D1 m| | e | ... ... a| | r | +--------------+ +-------------+ +---------------------+ i| | f | | Disp. Filterk| | Instance Ik |-----+- Context/Profile k | n| | a | +--------------+ +-------------+ ... +- Context/Profile k+1| | | c | +--------------+ +-------------+ __| ... | | | e | |Disp. Filter..| | Instance .. |__/ +---------------------+ +-+ | +--------------+ +-------------+ Domain Dn | | | | | | | | | | | +---------------------+----------------------+---------------------+ | Net. Interface 1 | ... | Net. Interface l | +---------------------+----------------------+---------------------+¶
Domain D1 +------------------------------------------------------------+ | | +-+ +-------------+ +-+ i | | p | Context | e | | i n | | r +--| Repository |-+ n | | n t | | o +-------------+ | +-------------+ | +----------+ d | | t e | | v | |-+ +-------------+ +--| Endpoint | p | | e r | | i | Provisioner |----| Profile |----| Manager | o | | r f | | s | |-+ | Repository | +-| | i | | f a | | i +-------------+ | +-------------+ | +----------+ n | | a c | | o | +-------------+ | t | | c e | | n +--| Endpoints |--+ | | e +-+ | Registry | +-+ | +-------------+ | | | +------------------------------------------------------------+¶
Dispatch scenarios:¶
Case 1: The Dispatch Engine is integrated into the network stack and a single SCHC Instance is used.¶
Endpoint 1 Endpoint 2 +-------------+-------------+ +-------------+-------------+ | App. A | App. B | | App. A | App. B | +-------------+-------------+ +-------------+-------------+ | HTTP | CoAP | | HTTP | CoAP | +-------------+-------------+ +-------------+-------------+ | QUIC/UDP | UDP | | QUIC/UDP | UDP | +-------------+-------------+ +-------------+-------------+ | IPv6 | | IPv6 | +-----+-------+-------------+ +-------------+-------------+ | ^ ^ | | | ^ ^ | | | | Dispatch | UDP Dest| | | Dispatch | UDP Src | | | Engine | Port 5678| | | Engine | Port 5678| | | | | | | | | | | +----+-----------+------+---+ +----+-----------+----------+ IPv6 | IPv6 IPv6 | IPv6 datagram | datagram datagram | datagram | +---------+------+-----+ | +---------+------+-----+ | | SCHC Instance | | | SCHC Instance | | +---------+------+-----+ | +---------+------+-----+ | | | | | | | | | | | |+------------+ | | | |+------------+ | | | || SCHC Inst. | | | | || SCHC Inst. | | | | || Decompress.| | | | || Decompress.| | | | |+------------+ V | | |+------------+ V | | | ^ +------------+ | | | ^ +------------+ | | | | | SCHC Inst. | | | | | | SCHC Inst. | | | | | | Compress. | | | | | | Compress. | | | | | +------------+ | | | | +------------+ | | | | | | | | | | | | +----+--------+--------+ | +----+--------+--------+ | SCHC SCHC | SCHC SCHC | Packet packet | Packet packet | | | | | | v | V V | V +---------------------------+ +---------------------------+ | Ethertype Ethertype | | Ethertype Ethertype | | == SCHC := SCHC | | == SCHC := SCHC | | | | | | Link layer, e.g. Ethernet | | Link layer, e.g. Ethernet | +---------------------------+ +---------------------------+ | Network Interface Card | | Network Interface Card | +---------------------------+ +---------------------------+ | Physical Layer | | Physical Layer | +---------------------------+ +---------------------------+ | | | | | | | | | +----------------------------------+ | +--------------------------------------+¶
In this simple scenario, the Dispatch Engine is integrated into the network stack and there is a unique predefined SCHC Instance for a specific protocol stack, such as CoAP over UDP over IPv6. This is the classic case for SCHC over LPWAN networks, as described in [RFC8724], [RFC8824], [RFC9363].¶
The dispatching is done based on a identified header field, such as the an ethertype, the IPv6 Next Header field, a specific UDP port, etc.¶
This implementation scenario therefore assumes that the endpoint Operating System (OS) implements the SCHC protocol as part of its network stack and that SCHC is allocated the appropriate ethertype, IPv6 Next Header value or UDP port from IANA.¶
In the example above,¶
On Endpoint 1, the Dispatch "intercepts" outbound packets whose UDP destination port is 5678, which is used by CoAP. It then routes these packets to the SCHC Instance for CoAP over UDP over IPv6. The SCHC instance then compresses the CoAP, UDP and IPv6 headers, and calls the Link Layer interface to send the compressed packet over the network, setting the appropriate SCHC ethertype in the link layer header.¶
On Endpoint 2, incoming packets whose SCHC ethertype is set to the SCHC value are routed to the SCHC Instance for CoAP over UDP over IPv6. The SCHC Instance decompresses the SCHC packets and delivers them to the IPv6 layer.¶
Note that in this example, regular HTTP over QUIC traffic is also present on the
same Endpoint. The Dispatch Engine is able to discriminate those packets from
packets that are compressed by SCHC, as the HTTP over QUIC packets do not
not match the admission rules defined in the SCHC profile, here
UDP Destination Port == 5678
.¶
Case 2: The Dispatch engine lives outside of the network stack.¶
In this case, the Dispatch Engine is a separate component that interacts with multiple SCHC Instances. It is responsible for routing packets to the appropriate SCHC Instance based on the packet type and supplied admission rules.¶
On Linux, this can be implemented using netfilter hooks or similar mechanisms to intercept packets and route them to and from the appropriate SCHC Instance.¶
On macOS, the Dispatch Engine can be implemented as a kernel extension or user-space application that make use of PF, the native packet filter.¶
The exact implementation details of the Dispatch Engine will depend on the Operating System, which therefore is not specified in this document. However, a description of packets criteria and admission rules is provided in the SCHC profile, which is used by the Dispatch Engine to determine how to route packets.¶
Endpoint +------------------------------------------+ | App. A | App. B | App. C | +--------------+-------------+-------------+ | QUIC | CoAP | HTTP | +--------------|-------------+-------------| | Dispatch Dispatch | | Hooks | Hook 1 . Hook 3 | + | | (dport 443) (dport 5768) | | | | . | | +------------------+ | UDP | TCP | | Dispatch Engine | +----------------------------+-------------+ +------------------+ | IPv6 | IPv4 | 1 . . 2 +----------------------------+-------------+ . . | Dispatch . Dispatch | | +------------+ | Hook 2 Hook 4 | | |SCHC Inst.#1| | label . label | | +------------+ | 0xabcd0180 0xabce0180 | | | . . | | | | | v . | | MPLS | | |compress . | +----------------------------+ | | v | | Ethertype | | decompress| | == | +------------+ | 0x8847 | | Ethernet | +------------------------------------------+¶
In the example above, the Dispatch Engine is implemented as a filter that intercepts packets based on their UDP destination port. In this instance, it routes packets with a destination port of 5768 to the SCHC Instance for CoAP over UDP over IPv6. The Dispatch Engine then compresses the CoAP, UDP, and IPv6 headers, adds a MPLS header with appropriate tag and sends the compressed packet over the network.¶
When receiving packets, the Dispatch Engine checks the SCHC ethertype and MPLS label and routes matching packets (MPLS label == 0xabcd0180 && UDP destination port == 5768) them to the appropriate SCHC Instance based on the defined admission rules in the profile.¶
Initial version¶