<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.4 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-groupcomm-bis-12" category="std" consensus="true" submissionType="IETF" obsoletes="7390" updates="7252, 7641" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.2 -->
  <front>
    <title abbrev="Group Communication for CoAP">Group Communication for the Constrained Application Protocol (CoAP)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-core-groupcomm-bis-12"/>
    <author initials="E." surname="Dijk" fullname="Esko Dijk">
      <organization>IoTconsultancy.nl</organization>
      <address>
        <postal>
          <city>Utrecht</city>
          <country>Netherlands</country>
        </postal>
        <email>esko.dijk@iotconsultancy.nl</email>
      </address>
    </author>
    <author initials="C." surname="Wang" fullname="Chonggang Wang">
      <organization>InterDigital</organization>
      <address>
        <postal>
          <street>1001 E Hector St, Suite 300</street>
          <city>Conshohocken</city>
          <code>PA 19428</code>
          <country>United States</country>
        </postal>
        <email>Chonggang.Wang@InterDigital.com</email>
      </address>
    </author>
    <author initials="M." surname="Tiloca" fullname="Marco Tiloca">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>16440 Stockholm</code>
          <country>Sweden</country>
        </postal>
        <email>marco.tiloca@ri.se</email>
      </address>
    </author>
    <date year="2024" month="October" day="21"/>
    <area>Internet</area>
    <workgroup>CoRE Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 121?>

<t>This document specifies the use of the Constrained Application Protocol (CoAP) for group communication, including the use of UDP/IP multicast as the default underlying data transport. Both unsecured and secured CoAP group communication are specified. Security is achieved by use of the Group Object Security for Constrained RESTful Environments (Group OSCORE) protocol. The target application area of this specification is any group communication use cases that involve resource-constrained devices or networks that support CoAP. This document replaces and obsoletes RFC 7390, while it updates RFC 7252 and RFC 7641.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-core-groupcomm-bis/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Constrained RESTful Environments Working Group mailing list (<eref target="mailto:core@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/core/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/core/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/core-wg/groupcomm-bis"/>.</t>
    </note>
  </front>
  <middle>
    <?line 125?>

<section anchor="chap-intro">
      <name>Introduction</name>
      <t>This document specifies group communication using the Constrained Application Protocol (CoAP) <xref target="RFC7252"/>, together with UDP/IP multicast as the default transport for CoAP group communication messages. CoAP is a RESTful communication protocol that is used in resource-constrained nodes, and in resource-constrained networks where packet sizes should be small. This area of use is summarized as Constrained RESTful Environments (CoRE).</t>
      <t>One-to-many group communication can be achieved in CoAP, by a client using UDP/IP multicast data transport to send multicast CoAP request messages. In response, each server in the addressed group sends a response message back to the client over UDP/IP unicast. Notable CoAP implementations that support group communication include "Eclipse Californium" <xref target="Californium"/>, "Go-CoAP" <xref target="Go-CoAP"/> as well as "libcoap" <xref target="libcoap"/>.</t>
      <t>Both unsecured and secured CoAP group communication are specified in this document. Security is achieved by using Group Object Security for Constrained RESTful Environments (Group OSCORE) <xref target="I-D.ietf-core-oscore-groupcomm"/>, which in turn builds on Object Security for Constrained Restful Environments (OSCORE) <xref target="RFC8613"/>. This method provides end-to-end application-layer security protection of CoAP messages, by using CBOR Object Signing and Encryption (COSE) <xref target="RFC9052"/><xref target="RFC9053"/>.</t>
      <t>This document replaces and obsoletes <xref target="RFC7390"/>, while it updates both <xref target="RFC7252"/> and <xref target="RFC7641"/>. A summary of the changes and additions to these documents is provided in <xref target="changes"/>.</t>
      <t>All sections in the body of this document are normative, while appendices are informative. For additional background about use cases for CoAP group communication in resource-constrained devices and networks, see <xref target="appendix-usecases"/>.</t>
      <section anchor="scope">
        <name>Scope</name>
        <t>For group communication, only those solutions that use CoAP messages over a "one-to-many" (i.e., non-unicast) transport protocol are in the scope of this document. There are alternative methods to achieve group communication using CoAP, using unicast only. One example is Publish-Subscribe <xref target="I-D.ietf-core-coap-pubsub"/> which uses a central broker server that CoAP clients access via unicast communication. These alternative methods may be usable for the same or similar use cases as the ones targeted in this document.</t>
        <t>This document defines UDP/IP multicast as the default transport protocol for CoAP group requests, as in <xref target="RFC7252"/>. Other transport protocols (which may include broadcast, non-IP multicast, geocast, etc.) are not described in detail and are not considered. Although UDP/IP multicast transport is assumed in most of the text in this document, we expect many of the considerations for UDP/IP multicast can be re-used for alternative transport protocols.</t>
        <t>Furthermore, this document defines Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/> as the default group communication security solution for CoAP. Security solutions for group communication and configuration other than Group OSCORE are not considered. General principles for secure group configuration are in scope.</t>
      </section>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

<t>This specification requires readers to be familiar with CoAP terminology <xref target="RFC7252"/>. Terminology related to group communication is defined in <xref target="sec-groupdef"/>.</t>
        <t>In addition, the following terms are extensively used.</t>
        <ul spacing="normal">
          <li>
            <t>Group URI -- This is defined as a CoAP URI that has the "coap" scheme and includes in the authority component either an IP multicast address or a group hostname (e.g., a Group Fully Qualified Domain Name (FQDN)) that can be resolved to an IP multicast address. A group URI also can contain a UDP port number in the authority component. Group URIs follow the regular CoAP URI syntax (see <xref section="6" sectionFormat="of" target="RFC7252"/>).</t>
          </li>
          <li>
            <t>Security material -- This refers to any security keys, counters, or parameters stored in a device that are required to participate in secure group communication with other devices.</t>
          </li>
        </ul>
      </section>
      <section anchor="changes">
        <name>Changes to Other Documents</name>
        <t>This document obsoletes and replaces <xref target="RFC7390"/> as follows.</t>
        <ul spacing="normal">
          <li>
            <t>It provides separate definitions for CoAP groups, application groups, and security groups, together with high-level guidelines on their configuration (see <xref target="chap-general-groupcomm"/>).</t>
          </li>
          <li>
            <t>It defines the use of Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/> as the security protocol to protect group communication for CoAP, together with high-level guidelines on secure group maintenance (see <xref target="chap-oscore"/>).</t>
          </li>
          <li>
            <t>It updates all the guidelines about using group communication for CoAP (see <xref target="sec-coap-usage"/>).</t>
          </li>
          <li>
            <t>It strongly discourages unsecured group communication for CoAP based on the CoAP NoSec (No Security) mode (see <xref target="chap-unsecured-groupcomm"/> and <xref target="chap-security-considerations-nosec-mode"/>), and highlights the risk of amplification attacks (see <xref target="ssec-amplification"/>).</t>
          </li>
          <li>
            <t>It updates all sections on transport protocols and interworking with other protocols based on new IETF work done for these protocols.</t>
          </li>
        </ul>
        <t>This document updates <xref target="RFC7252"/> as follows.</t>
        <ul spacing="normal">
          <li>
            <t>It updates the request/response model for group communication, as to response suppression (see <xref target="sec-request-response-suppress"/>) and token reuse time (see <xref target="sec-token-reuse"/>).</t>
          </li>
          <li>
            <t>It updates the freshness model and validation model to use for cached responses (see <xref target="sec-caching-freshness"/> and <xref target="sec-caching-validation"/>).</t>
          </li>
          <li>
            <t>It defines the measures against congestion risk specified in <xref target="RFC7252"/> to be applicable also to alternative transports other than IP multicast, and defines additional guidelines to reduce congestion risks (see <xref target="sec-congestion"/>).</t>
          </li>
          <li>
            <t>It explicitly admits the use of the IPv6 multicast address scopes realm-local (3), admin-local (4), and global (E). In particular, it recommends that an IPv6 CoAP server supports at least link-local (2), admin-local (4), and site-local (5) scopes with the "All CoAP Nodes" multicast CoAP group (see <xref target="sec-udptransport"/>). Also, it recommends that the realm-local (3) scope is supported by an IPv6 CoAP server on a 6LoWPAN node (see <xref target="sec-udptransport"/>).</t>
          </li>
        </ul>
        <t>This document updates <xref target="RFC7641"/> as follows.</t>
        <ul spacing="normal">
          <li>
            <t>It defines the use of the CoAP Observe Option in group requests, for both the GET method and the FETCH method <xref target="RFC8132"/>, together with normative behavior for both CoAP clients and CoAP servers (see <xref target="sec-observe"/>).</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="chap-general-groupcomm">
      <name>Group Definition and Group Configuration</name>
      <t>In the following, different group types are first defined in <xref target="sec-groupdef"/>. Then, Group configuration, including group creation and maintenance by an application, user, or commissioning entity is considered in <xref target="sec-groupconf"/>.</t>
      <section anchor="sec-groupdef">
        <name>Group Definition</name>
        <t>Three types of groups and their mutual relations are defined in this section: CoAP group, application group, and security group.</t>
        <section anchor="sec-groupdef-coapgroup">
          <name>CoAP Group</name>
          <t>A CoAP group is defined as a set of CoAP endpoints, where each endpoint is configured to receive CoAP group messages that are sent to the group's associated IP multicast address and UDP port. That is, CoAP groups have relevance at the level of IP networks and CoAP endpoints.</t>
          <t>An endpoint may be a member of multiple CoAP groups, by subscribing to multiple IP multicast addresses. A node may be a member of multiple CoAP groups, by hosting multiple CoAP server endpoints on different UDP ports. Membership(s) of an endpoint or node to a CoAP group may dynamically change over time. A node or endpoint sending a CoAP group message to a CoAP group is not necessarily itself a member of that CoAP group: it is a member only if it also has a CoAP endpoint listening on the associated IP multicast address and UDP port associated with the CoAP group.</t>
          <t>A CoAP group is identified by information encoded within a group URI. Further details on identifying a CoAP group are provided in <xref target="sec-groupnaming-coap"/>.</t>
        </section>
        <section anchor="sec-groupdef-applicationgroup">
          <name>Application Group</name>
          <t>An application group is a set of CoAP server endpoints (hosted on different nodes) that share a common set of CoAP resources. That is, an application group has relevance at the application level. For example, an application group could denote all lights in an office room or all sensors in a hallway.</t>
          <t>An endpoint may be a member of multiple application groups. A client endpoint that sends a group communication message to an application group is not necessarily itself a member of this application group.</t>
          <t>There can be a one-to-one or a one-to-many relation between a CoAP group and application group(s). Such relations are discussed in more detail in <xref target="sec-groupdef-grouprelations"/>.</t>
          <t>An application group name may be explicitly encoded in the group URI of a CoAP request, for example in the URI path component. If this is not the case, the application group is implicitly derived by the receiver, e.g., based on information in the CoAP request or other contextual information. Further details on identifying an application group are provided in <xref target="sec-groupnaming-app"/>.</t>
        </section>
        <section anchor="sec-groupdef-securitygroup">
          <name>Security Group</name>
          <t>For secure group communication, a security group is required. A security group comprises endpoints storing shared group security material, such that they can use it to protect and verify mutually exchanged messages.</t>
          <t>That is, a client endpoint needs to be a member of a security group in order to send a valid secured group communication message to that group. A server endpoint needs to be a member of a security group in order to receive and correctly verify a secured group communication message sent to that group. An endpoint may be a member of multiple security groups.</t>
          <t>There can be a many-to-many relation between security groups and CoAP groups, but often it is one-to-one. Also, there can be a many-to-many relation between security groups and application groups, but often it is one-to-one. Such relations are discussed in more detail in <xref target="sec-groupdef-grouprelations"/>.</t>
          <t>Further details on identifying a security group are provided in <xref target="sec-groupnaming-sec"/>.</t>
          <t>If the NoSec mode is used (see <xref target="chap-unsecured-groupcomm"/>), group communication does not rely on security at the transport layer nor at the CoAP layer, hence the communicating endpoints do not refer to a security group.</t>
        </section>
        <section anchor="sec-groupdef-grouprelations">
          <name>Relations Between Group Types</name>
          <t>Using the above group type definitions, a CoAP group communication message sent by an endpoint can be associated with a tuple that contains one instance of each group type:</t>
          <artwork><![CDATA[
(application group, CoAP group, security group)
]]></artwork>
          <t>A special note is appropriate about the possible relation between security groups and application groups.</t>
          <t>On one hand, multiple application groups may use the same security group. Thus, the same group security material is used to protect the messages targeting any of those application groups. This has the benefit that typically less storage, configuration, and updating are required for security material. In this case, a CoAP endpoint is supposed to know the exact application group to refer to for each message that is sent or received, based on, e.g., the server port number used, the targeted resource, or the content and structure of the message payload.</t>
          <t>On the other hand, a single application group may use multiple security groups. Thus, different messages targeting the resources of the application group can be protected with different security material. This can be convenient, for example, if the security groups differ with respect to the cryptographic algorithms and related parameters they use. In this case, a CoAP client can join just one of the security groups, based on what it supports and prefers, while a CoAP server in the application group would rather have to join all of them.</t>
          <t>Beyond this particular case, applications should be careful in associating a single application group to multiple security groups. In particular, it is <bcp14>NOT RECOMMENDED</bcp14> to use different security groups to reflect different access policies for resources in the same application group.</t>
          <t>In fact, being a member of a security group actually grants access only to exchange secured messages and enables authentication of group members, while access control (authorization) to use resources in the application group belongs to a separate security domain. Therefore, access control to use resources in the application group should be separately enforced by leveraging the resource properties or through dedicated access control credentials assessed by separate means.</t>
          <t><xref target="fig-group-relation"/> summarizes the relations between the different types of groups described above in Unified Modeling Language (UML) class diagram notation. The class attributes in square brackets are optionally defined.</t>
          <figure anchor="fig-group-relation">
            <name>Relations Among Different Group Types</name>
            <artwork align="center"><![CDATA[
+------------------------------+              +--------------------+
|   Application group          |              |    CoAP group      |
|..............................|              |....................|
|                              |              |                    |
| [ - Application group name ] +--------------+ - IP mcast address |
|                              |  1...N    1  | - UDP port number  |
| - Resource URI path(s)       |              |                    |
|                              |              |                    |
+-------------+----------------+              +---------+----------+
              |  1...N                                  |  1...N
              |                                         |
              |                                         |
              |                                         |  1...N
              |                            +------------+----------+
              |                            |   Security group      |
              |                            |.......................|
              |                            |                       |
              '----------------------------+ - Security group name |
                                    1...N  | - Security material   |
                                           |                       |
                                           +-----------------------+
]]></artwork>
          </figure>
          <t><xref target="fig-group-relation-example"/> provides a deployment example of the relations between the different types of groups. It shows six CoAP servers (Srv1-Srv6) and their respective resources hosted (/resX). Although in real-life deployments using group communication the number of servers and resources would usually be higher, only limited numbers are shown here for ease of representation.</t>
          <t>There are three application groups (1, 2, 3) and two security groups (1, 2). The Security Group 1 may, for example, include all lighting devices on a floor of an office building, while Security Group 2 includes all Heating, Ventilation, and Air Conditioning (HVAC) devices of that floor. Security Group 1 is used by both Application Group 1 and 2. The Application Group 1 for example may consist of all lights in a hallway, while Application Group 2 includes all lights in a storage room. Three clients (Cli1, Cli2, Cli3) are configured with security material for Security Group 1. These clients may be motion sensors and a control panel (Cli3), that send multicast messages to /resA to inform the lights of any motion or user activity detected. The control panel Cli3 additionally sends a multicast message to /resB to communicate the latest light preset selected by a user. The latter action only influences the lighting in the storage room (Application Group 2). Two clients (Cli2, Cli4) are  configured with security material for Security Group 2. These clients may be temperature/humidity sensors that report measurements periodically to all HVAC devices (Srv5, Srv6) in the Application Group 3, using for example /resC to report temperature and /resD to report humidity.</t>
          <t>All the shown application groups may use the same CoAP group (not shown in the figure), for example the CoAP group with site-local, site-specific multicast IP address ff15::3456 and default UDP port number 5683 on which all the shown resources are hosted for each server. Other floors of the same building may replicate the shown structure, but using different security groups and different CoAP groups.</t>
          <figure anchor="fig-group-relation-example">
            <name>Deployment Example of Different Group Types</name>
            <artwork align="center"><![CDATA[
 .------------------------------.   .-----------------------------.
|                                | |                               |
|       +---------------------+  | |  +---------------------+      |
|       | Application Group 1 |  | |  | Application Group 3 | Cli2 |
|       |                     |  | |  |                     |      |
| Cli1  | Srv1   Srv2   Srv3  |  | |  | Srv5   Srv6         | Cli4 |
|       | /resA  /resA  /resA |  | |  | /resC  /resC        |      |
| Cli2  +---------------------+  | |  | /resD  /resD        |      |
|                                | |  +---------------------+      |
| Cli3     Security Group 1      | |                               |
|                                | |        Security Group 2       |
|       +---------------------+  |  '-----------------------------'
|       | Application Group 2 |  |
|       |                     |  |
|       | Srv1   Srv4         |  |
|       | /resB  /resB        |  |
|       +---------------------+  |
 '------------------------------'
]]></artwork>
          </figure>
        </section>
      </section>
      <section anchor="sec-groupconf">
        <name>Group Configuration</name>
        <t>The following defines how groups of different types are named, created, discovered, and maintained.</t>
        <section anchor="sec-groupnaming">
          <name>Group Naming</name>
          <t>Different types of groups are named as specified below, separately for CoAP groups, application groups, and security groups.</t>
          <section anchor="sec-groupnaming-coap">
            <name>CoAP Groups</name>
            <t>A CoAP group is always defined by the two properties of IP multicast address and UDP port number (see <xref target="sec-groupdef-coapgroup"/>).</t>
            <t>However, a CoAP group is for practical purposes identified and named by the authority component in the group URI. This component includes the host subcomponent and an optional UDP port number.
The host subcomponent directly defines the IP multicast address of the CoAP group, in case the host consists of an IP literal.
The host subcomponent indirectly defines the IP multicast address of the CoAP group, in case the host consists of a hostname: resolving the hostname to an IP address in this case produces the IP multicast address.</t>
            <t>It follows that the same CoAP group might have multiple names, which can be simultaneously and interchangeably used. For example, if the two hostnames group1.example and group1.alias.example both resolve to the IP multicast address [ff15::1234], then the following authority components are all names for the same CoAP group.</t>
            <ul spacing="normal">
              <li>
                <t>group1.example:7700</t>
              </li>
              <li>
                <t>group1.alias.example:7700</t>
              </li>
              <li>
                <t>[ff15::1234]:7700</t>
              </li>
            </ul>
            <t>Also note that, when using the "coap" scheme, the two authority components &lt;HOST&gt; and &lt;HOST&gt;:5683 both identify the same CoAP group, whose members listen to the CoAP default port number 5683. Therefore, building on the above, the following authority components are all names for the same CoAP group.</t>
            <ul spacing="normal">
              <li>
                <t>group1.example</t>
              </li>
              <li>
                <t>group1.alias.example</t>
              </li>
              <li>
                <t>[ff15::1234]</t>
              </li>
              <li>
                <t>group1.example:5683</t>
              </li>
              <li>
                <t>group1.alias.example:5683</t>
              </li>
              <li>
                <t>[ff15::1234]:5683</t>
              </li>
            </ul>
            <t>When configuring a CoAP group membership, it is recommended to configure an endpoint with an IP multicast address literal, instead of a group hostname. This is because DNS infrastructure may not be deployed in many constrained networks. In case a group hostname is configured, it can be uniquely mapped to an IP multicast address via DNS resolution, if DNS client functionality is available in the endpoint being configured and the DNS service is supported in the network.</t>
            <t>Examples of hierarchical CoAP group FQDN naming (and scoping) for a building control application were shown in <xref section="2.2" sectionFormat="of" target="RFC7390"/>.</t>
          </section>
          <section anchor="sec-groupnaming-app">
            <name>Application Groups</name>
            <t>An application group can be named through different types of identifiers, such as a name string, (integer) number, URI, or other types of strings. The decision of whether and how an application group name is encoded and transported in a CoAP group request is application specific.</t>
            <t>This section summarizes possible methods for encoding an application group name in a CoAP group request. Full examples for these methods are provided in <xref target="sec-examples-app-group-naming"/>.</t>
            <t>An application group name can be explicitly encoded in a group URI. Specifically, it can be encoded within one of the following URI components:</t>
            <ul spacing="normal">
              <li>
                <t>URI path component -- This is the most common and <bcp14>RECOMMENDED</bcp14> method to encode the application group name. When using this method in constrained networks, an application group name APPNAME should be kept short.  </t>
                <t>
A best practice is to use a URI path component such that: i) it includes a path segment as delimiter with a designated value, e.g., "gp", followed by ii) a path segment containing the name of the application group, followed by iii) the path segment(s) that identify the targeted resource within the application group. For example, both /gp/APPNAME/res1 and /base/gp/APPNAME/res1/res2 conform to this practice. The path segment used as delimiter ('gp' in the examples) should be kept short in constrained networks.  </t>
                <t>
Full examples are provided in <xref target="sec-examples-app-group-naming-path"/>.</t>
              </li>
              <li>
                <t>URI query component -- This method can use the following formats. In either case, when using this method in constrained networks, an application group name APPNAME should be as short as possible.  </t>
                <ul spacing="normal">
                  <li>
                    <t>As a first alternative, the URI query component consists of only one parameter, which has no value and has the name of the application group as its own identifier. The query component ?APPNAME conforms to this format.</t>
                  </li>
                  <li>
                    <t>As a second alternative, the URI query component includes a query parameter as designated indicator, e.g., "gp", with a value equal to the name of the application group. That is, assuming that "gp" is used as designated indicator, both the query components ?gp=APPNAME and ?par1=v1&amp;gp=APPNAME conform to this format.</t>
                  </li>
                </ul>
                <t>
Full examples are provided in <xref target="sec-examples-app-group-naming-query"/>.</t>
              </li>
              <li>
                <t>URI authority component -- If this method is used, the application group is identified by the authority component of the group URI or a subset thereof.  </t>
                <t>
Because the CoAP group is also defined by the same authority component (see <xref target="sec-groupnaming-coap"/>), a given CoAP group always maps to exactly one application group. (See <xref target="sec-groupdef-grouprelations"/> for background on group relations.)  </t>
                <t>
Note that the host subcomponent within the authority component of the Group URI can be a group hostname, or an IP address literal. For constrained networks, using an IP address literal matching the request's destination IP address has the benefit of reducing the size of the CoAP message.
 This is because the Uri-Host Option is elided from the CoAP request in this case, since its default value applies (see Section <xref target="RFC7252" section="5.10.1" sectionFormat="bare"/> and Section <xref target="RFC7252" section="6.4" sectionFormat="bare"/> of <xref target="RFC7252"/>).  </t>
                <t>
Full examples are provided in <xref target="sec-examples-app-group-naming-authority"/>.</t>
              </li>
            </ul>
            <t>Due to the CoAP client's encoding of the request URI into CoAP options (per <xref section="6.4" sectionFormat="of" target="RFC7252"/>) and the possibility of the CoAP server to compose the URI again based on received options (see <xref section="6.5" sectionFormat="of" target="RFC7252"/>), the application group name information can be transported to the server and used to select the intended application group.</t>
            <t>Any other method to transport the application group name within a CoAP request, but not using the group URI, would require a new CoAP option to be defined. Such an approach is out of the scope of this document.</t>
            <t>Finally, it is also possible to not encode the application group name in the CoAP request, yielding the most compact representation on the wire. In this case, each CoAP server needs to determine the right application group based on contextual information, such as the CoAP group, and/or the client identity and/or the target resource. For example, each application group on a server could support a unique set of resources, such that it does not overlap with the set of resources of any other application group.
Appendix A of <xref target="RFC9176"/> provides an example of a named application group registered to a Resource Directory (RD), along with the CoAP group it uses and the resources it supports. In that example, an application group name "lights" is encoded in the "ep" (endpoint) attribute of the RD registration entry, while the CoAP group ff35:30:2001:db8:f1::8000:1 is specified in the authority component of the URI encoded in the "base" attribute. In subsequent group requests by a client to the "lights" group, the name of the group is not present in the request message. Rather, the URI authority component that selects the CoAP group ff35:30:2001:db8:f1::8000:1 will implicitly also select the "lights" application group.</t>
          </section>
          <section anchor="sec-groupnaming-sec">
            <name>Security Groups</name>
            <t>A security group can be named in many ways through different types of identifiers, such as name string, (integer) number, URI, or other types of strings. Such a group name is generally not related to other kinds of group identifiers that may be specific of the used security solution.</t>
            <t>The name of a security group is not expected to be used in messages exchanged among its members, unless the application requires otherwise. At the same time, it is useful to identify the security group when performing a number of side tasks related to secure group communication, such as the following ones.</t>
            <ul spacing="normal">
              <li>
                <t>An administrator may have to request for an authorization to configure security groups at an available Group Manager (see <xref target="chap-oscore"/>). During the authorization process, as well as during the interaction between the administrator and the Group Manager, the group name identifies the specific security group that the administrator wishes to configure and is authorized to.</t>
              </li>
              <li>
                <t>A CoAP endpoint may have to request for an authorization to join a specific security group through the respective Group Manager, and thus obtain the required group security material (see <xref target="chap-oscore"/>). During the authorization process, as well as during the interaction between the CoAP endpoint and the Group Manager, the group name identifies the specific security group that the CoAP endpoint wishes to join and is authorized to.</t>
              </li>
              <li>
                <t>A CoAP endpoint may first need to discover the specific security groups to join through the respective Group Manager (see <xref target="sssec-discovery-from-rd"/>). Results from the discovery process include the name of the security groups to join, together with additional information such as a pointer to the respective Group Manager.</t>
              </li>
            </ul>
            <t>It is discouraged to use "NoSec" and any of its lowercase/uppercase combinations as name of a security group. Indications that endpoints can use the NoSec mode <bcp14>MUST NOT</bcp14> rely on setting up and advertising a pseudo security group with name "NoSec" or any of its lowercase/uppercase combinations.</t>
          </section>
        </section>
        <section anchor="sssec-group-creation">
          <name>Group Creation and Membership</name>
          <t>To create a CoAP group, a configuring entity defines an IP multicast address (or hostname) for the group and optionally a UDP port number in case it differs from the default CoAP port number 5683. Then, it configures one or more devices as listeners to that IP multicast address, with a CoAP endpoint listening on the CoAP group's associated UDP port. These endpoints/devices are the group members.</t>
          <t>The configuring entity can be, for example, a local application with pre-configuration, a user, a software developer, a cloud service, or a local commissioning tool. Also, the devices sending CoAP requests to the CoAP group in the role of CoAP client need to be configured with the same information, even though they are not necessarily group members. One way to configure a client is to supply it with a group URI.</t>
          <t>The IETF does not define a mandatory protocol to accomplish CoAP group creation. <xref target="RFC7390"/> defined an experimental protocol for configuring memberships of CoAP groups for unsecured group communication, based on JSON-formatted configuration resources. The experiment is concluded as showing that the protocol has not been considered for deployment and use. For IPv6 CoAP groups, common multicast address ranges that are used to configure group addresses from are ff1x::/16 and ff3x::/16.</t>
          <t>To create an application group, a configuring entity may configure a resource (name) or a set of resources on CoAP endpoints, such that a CoAP request sent to a group URI by a configured CoAP client will be processed by one or more CoAP servers that have the matching URI path configured. These servers are the members of the application group.</t>
          <t>To create a security group, a configuring entity defines an initial subset of the related security material. This comprises a set of group properties including the cryptographic algorithms and parameters used in the security group, as well as additional information relevant throughout the group life-cycle, such as the security group name and description. This task <bcp14>MAY</bcp14> be entrusted to a dedicated administrator, that interacts with a Group Manager as defined in <xref target="chap-oscore"/>. After that, further security materials to protect group communications have to be generated, compatible with the configuration specified for the security group.</t>
          <t>To participate in a security group, CoAP endpoints have to be configured with the group security material used to protect communications in the associated application/CoAP groups. The part of the process that involves secure distribution of group security material <bcp14>MAY</bcp14> use standardized communication with a Group Manager as defined in <xref target="chap-oscore"/>.</t>
          <t>For unsecure group communication using the NoSec mode (see <xref target="chap-unsecured-groupcomm"/>), there is no security material to be provided, hence there is no security group for CoAP endpoints to participate in.</t>
          <t>The configuration of groups and membership may be performed at different moments in the life-cycle of a device. For example, it can occur during product (software) creation, in the factory, at a reseller, on-site during first deployment, or on-site during a system reconfiguration operation.</t>
        </section>
        <section anchor="group-discovery">
          <name>Group Discovery</name>
          <t>The following describes how a CoAP endpoint can discover groups by different means, i.e., by using a Resource Directory or directly from the CoAP servers that are members of such groups.</t>
          <section anchor="sssec-discovery-from-rd">
            <name>Discovery through a Resource Directory</name>
            <t>It is possible for CoAP endpoints to discover application groups as well as CoAP groups, by using the RD-Groups usage pattern of the CoRE Resource Directory (RD), as defined in Appendix A of <xref target="RFC9176"/>.</t>
            <t>In particular, an application group can be registered to the RD, specifying the reference IP multicast address of its associated CoAP group. The registration of groups to the RD is typically performed by a Commissioning Tool. Later on, CoAP endpoints can discover the registered application groups and related CoAP group(s), by using the lookup interface of the RD.</t>
            <t>When secure communication is provided with Group OSCORE (see <xref target="chap-oscore"/>), the approach described in <xref target="I-D.tiloca-core-oscore-discovery"/> also based on the RD can be used, in order to discover the security group to join.</t>
            <t>In particular, the responsible OSCORE Group Manager registers its security groups to the RD, as links to its own corresponding resources for joining the security groups <xref target="I-D.ietf-ace-key-groupcomm-oscore"/>. Later on, CoAP endpoints can discover the names of the registered security groups and related application groups, by using the lookup interface of the RD, and then join the security group through the respective Group Manager.</t>
          </section>
          <section anchor="sssec-discovery-from-servers">
            <name>Discovery from the CoAP Servers</name>
            <t>It is possible for CoAP endpoints to discover application groups and CoAP groups from the CoAP servers that are members of such groups, by using a GET request targeting the /.well-known/core resource.</t>
            <t>As discussed below, such a GET request may be sent to the IP multicast address of an already known CoAP group associated with one or more application groups; or to the "All CoAP Nodes" multicast address, thus targeting all reachable CoAP servers in any CoAP group. Also, the GET request may specify a query component, in order to filter the application groups of interest.</t>
            <t>These particular details concerning the GET request depend on the specific discovery action intended by the client and on application-specific means used to encode names of application groups and CoAP groups, e.g., in group URIs and/or CoRE target attributes used with resource links.</t>
            <t>The following discusses a number of methods to discover application groups and CoAP groups, building on the following assumptions.</t>
            <ul spacing="normal">
              <li>
                <t>Application group names are encoded in the path component of Group URIs (see <xref target="sec-groupnaming-app"/>), using the path segment "gp" as designated delimiter.</t>
              </li>
              <li>
                <t>The type of an application group is encoded in the value of the CoRE Link Format attribute "rt" of a group resource.  </t>
                <t>
As exclusively intended to support examples throughout this document, the following considers such values for the attribute "rt" to have the semantics "g.&lt;GROUPTYPE&gt;", where GROUPTYPE denotes the type of the application group in question.  </t>
                <t>
To be effectively usable, such Resource Type values have to be registered in the "Resource Type (rt=) Link Target Attribute Values" IANA registry <xref target="Resource.Type.Link.Target.Attribute.Values"/> within the "Constrained RESTful Environments (CoRE) Parameters" registry group.</t>
              </li>
            </ul>
            <t>Full examples for the different methods are provided in <xref target="sec-examples-group-discovery"/>.</t>
            <ul spacing="normal">
              <li>
                <t>A CoAP client can discover all the application groups associated with a specific CoAP group.  </t>
                <t>
This is achieved by sending the GET request above to the IP multicast address of the CoAP group, and specifying a wildcarded group type "g.*" as resource type in the URI query parameter "rt". For example, the request can use a Group URI with path and query components "/.well-known/core?rt=g.*", so that the query matches any application group resource type. Alternatively, the request can use a Group URI with path and query components "/.well-known/core?href=/gp/*", so that the query matches any application group resources and also matches any sub-resources of those.  </t>
                <t>
Through the corresponding responses, the query result is a list of resources at CoAP servers that are members of the specified CoAP group and have at least one application group associated with the CoAP group. That is, the client gains knowledge of: i) the set of servers that are members of the specified CoAP group and member of any of the associated application groups; ii) for each of those servers, the name of the application groups where the server is a member and that are associated with the CoAP group.  </t>
                <t>
A full example is provided in <xref target="sec-examples-group-discovery-1"/>.</t>
              </li>
              <li>
                <t>A CoAP client can discover the CoAP servers that are members of a specific application group, the CoAP group associated with the application group, and optionally the resources that those servers host for each application group.  </t>
                <t>
This is achieved by sending the GET request above to the "All CoAP Nodes" IP multicast address (see <xref section="12.8" sectionFormat="of" target="RFC7252"/>), with a particular chosen scope (e.g., site-local or realm-local) if IPv6 is used. Also, the request specifies the application group name of interest in the URI query component, as defined in <xref target="sec-groupnaming-app"/>. For example, the request can use a Group URI with path and query components "/.well-known/core?href=/gp/gp1" to specify the application group with name "gp1".  </t>
                <t>
Through the corresponding responses, the query result is a list of resources at CoAP servers that are members of the specified application group and for each application group the associated CoAP group. That is, the client gains knowledge of: i) the set of servers that are members of the specified application group and of the associated CoAP group; ii) for each of those servers, optionally the resources it hosts within the application group.  </t>
                <t>
If the client wishes to discover resources that a particular server hosts within a particular application group, it may use unicast discovery request(s) to this server.  </t>
                <t>
A full example is provided in <xref target="sec-examples-group-discovery-2"/>.</t>
              </li>
              <li>
                <t>A CoAP client can discover the CoAP servers that are members of any application group of a specific type, the CoAP group associated with those application groups, and optionally the resources that those servers host as members of those application groups.  </t>
                <t>
This is achieved by sending the GET request above to the "All CoAP Nodes" IP multicast address (see <xref section="12.8" sectionFormat="of" target="RFC7252"/>), with a particular chosen scope (e.g., site-local or realm-local) if IPv6 is used. Also, the request can specify the application group type of interest in the URI query component as value of a query parameter "rt". For example, the request can use a Group URI with path and query components "/.well-known/core?rt=TypeA" to specify the application group type "TypeA".  </t>
                <t>
Through the corresponding responses, the query result is a list of resources at CoAP servers that are members of any application group of the specified type and of the CoAP group associated with each of those application groups. That is, the client gains knowledge of: i) the set of servers that are members of the application groups of the specified type and of the associated CoAP group; ii) optionally for each of those servers, the resources it hosts within each of those application groups.  </t>
                <t>
If the client wishes to discover resources that a particular server hosts within a particular application group, it may use unicast discovery request(s) to this server.  </t>
                <t>
A full example is provided in <xref target="sec-examples-group-discovery-3"/>.</t>
              </li>
              <li>
                <t>A CoAP client can discover the CoAP servers that are members of any application group configured in the 6LoWPAN wireless mesh network of the client, the CoAP group associated with each application group, and optionally the resources that those servers host as members of the application group.  </t>
                <t>
This is achieved by sending the GET request above with a query specifying a wildcarded group type in the URI query parameter for "rt". For example, the request can use a Group URI with path and query components "/.well-known/core?rt=g.*", so that the query matches any application group type.
 The request is sent to the "All CoAP Nodes" IP multicast address (see <xref section="12.8" sectionFormat="of" target="RFC7252"/>), with a particular chosen scope if IPv6 is used.  </t>
                <t>
Through the corresponding responses, the query result is a list of group resources hosted by any server in the mesh network. Each group resource denotes one application group membership of a server. For each application group, the associated CoAP group is obtained as the URI authority component of the corresponding returned link.  </t>
                <t>
If the client wishes to discover resources that a particular server hosts within a particular application group, it may use unicast discovery request(s) to this server.  </t>
                <t>
Full examples are provided in <xref target="sec-examples-group-discovery-4"/>.</t>
              </li>
            </ul>
            <t>Note that the specific way of using the above methods, including the ways shown by the examples in <xref target="sec-examples-group-discovery-4"/>, is application-specific. That is, there is currently no standard way of encoding names of application groups and CoAP groups in group URIs and/or CoRE target attributes used with resource links. In particular, the discovery of application groups and CoAP groups through the RD mentioned in <xref target="sssec-discovery-from-rd"/> is only defined for use with an RD, i.e., not directly with CoAP servers as group members.</t>
          </section>
        </section>
        <section anchor="sec-group-maintenance">
          <name>Group Maintenance</name>
          <t>Maintenance of a group includes any necessary operations to cope with changes in a system, such as: adding group members, removing group members, changing group security material, reconfiguration of UDP port number and/or IP multicast address, reconfiguration of the group URI, renaming of application groups, splitting of groups, or merging of groups.</t>
          <t>For unsecured group communication (see <xref target="chap-unsecured-groupcomm"/>), i.e., when the NoSec mode is used, addition/removal of CoAP group members is simply done by configuring these devices to start/stop listening to the group IP multicast address on the group's UDP port.</t>
          <t>For secured group communication (see <xref target="chap-oscore"/>), the maintenance operations of the protocol Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/> <bcp14>MUST</bcp14> be implemented as well. When using Group OSCORE, CoAP endpoints participating in group communication are also members of a corresponding OSCORE security group, and thus share common security material. Additional related maintenance operations are discussed in <xref target="chap-sec-group-maintenance"/>.</t>
        </section>
      </section>
    </section>
    <section anchor="sec-coap-usage">
      <name>CoAP Usage in Group Communication</name>
      <t>This section specifies the usage of CoAP in group communication, both unsecured and secured. This includes additional support for protocol extensions, such as Observe (see <xref target="sec-observe"/>) and block-wise transfer (see <xref target="sec-block-wise"/>).</t>
      <t>How CoAP group messages are carried over various transport layers is the subject of <xref target="sec-transport"/>. Finally, <xref target="sec-other-protocols"/> covers the interworking of CoAP group communication with other protocols that may operate in the same network.</t>
      <section anchor="sec-request-response">
        <name>Request/Response Model</name>
        <section anchor="general">
          <name>General</name>
          <t>A CoAP client is an endpoint able to transmit CoAP requests and receive CoAP responses. Since the underlying UDP transport supports multiplexing by means of UDP port number, there can be multiple independent CoAP clients operational on a single host. On each UDP port, an independent CoAP client can be hosted. Each independent CoAP client sends requests that use the associated endpoint's UDP port number as the UDP source port number of the request.</t>
          <t>All CoAP requests that are sent via IP multicast <bcp14>MUST</bcp14> be Non-confirmable, see <xref section="8.1" sectionFormat="of" target="RFC7252"/>.  The Message ID in an IP multicast CoAP message is used for optional message deduplication by both clients and servers, as detailed in <xref section="4.5" sectionFormat="of" target="RFC7252"/>. A server sends back a unicast response to a CoAP group request. The unicast responses received by the CoAP client may carry a mixture of success (e.g., 2.05 (Content)) and failure (e.g., 4.04 (Not Found)) response codes, depending on the individual server processing results.</t>
        </section>
        <section anchor="sec-request-response-suppress">
          <name>Response Suppression</name>
          <t>A server <bcp14>MAY</bcp14> suppress its response for various reasons given in <xref section="8.2" sectionFormat="of" target="RFC7252"/>. This document adds the requirement that a server <bcp14>SHOULD</bcp14> suppress the response in case of error or in case there is nothing useful to respond, unless the application related to a particular resource requires such a response to be made for that resource.</t>
          <t>The CoAP No-Response Option <xref target="RFC7967"/> can be used by a client to influence the default response suppression on the server side. It is <bcp14>RECOMMENDED</bcp14> that a server supporting this option only takes it into account when processing requests targeting selected resources, as useful in the application context.</t>
          <t>Any default response suppression by a server <bcp14>SHOULD</bcp14> be performed consistently, as follows: if a request on a resource produces a particular Response Code and this response is not suppressed, then another request on the same resource that produces a response of the same Response Code class is also not suppressed. For example, if a 4.05 (Method Not Allowed) error response code is suppressed by default on a resource, then a 4.15 Unsupported Content-Format error response code is also suppressed by default for that resource.</t>
        </section>
        <section anchor="repeating-a-request">
          <name>Repeating a Request</name>
          <t>A CoAP client <bcp14>MAY</bcp14> repeat a group request using the same Token value and same Message ID value, in order to ensure that enough (or all) members of the CoAP group have been reached with the request. This is useful in case a number of members of the CoAP group did not respond to the initial request and the client suspects that the request did not reach these group members. However, in case one or more servers did receive the initial request but the response to that request was lost, this repeat does not help to retrieve the lost response(s) if the server(s) implement the optional Message ID based deduplication (<xref section="4.5" sectionFormat="of" target="RFC7252"/>).</t>
          <t>A CoAP client <bcp14>MAY</bcp14> repeat a group request using a different Message ID (and the same or a different Token value), in which case all servers that received the initial request will again process the repeated request since it appears within a new CoAP message. This is useful in case a client suspects that one or more response(s) to its original request were lost and the client needs to collect more, or even all, responses from members of the CoAP group, even if this comes at the cost of the overhead of certain group members responding twice (once to the original request, and once to the repeated request with different Message ID).</t>
        </section>
        <section anchor="requestresponse-matching-and-distinguishing-responses">
          <name>Request/Response Matching and Distinguishing Responses</name>
          <t>A CoAP client can distinguish the origin of multiple server responses by the source IP address of the message containing the CoAP response and/or any other available application-specific source identifiers contained in the CoAP response payload or CoAP response options, such as an application-level unique ID associated with the server. If secure communication is provided with Group OSCORE (see <xref target="chap-oscore"/>), additional security-related identifiers in the CoAP response enable the client to retrieve the right security material for decrypting each response and authenticating its source.</t>
          <t>While processing a response on the client, the source endpoint of the response is not matched to the destination endpoint of the request, since for a group request these will never match. This is specified in <xref section="8.2" sectionFormat="of" target="RFC7252"/>, with reference to IP multicast.</t>
          <t>Also, when UDP transport is used, a server <bcp14>MAY</bcp14> respond from a UDP port number that differs from the destination UDP port number of the request.</t>
          <t>In case a single client has sent multiple group requests and concurrent CoAP transactions are ongoing, the responses received by that client are matched to an active request using only the Token value. Due to UDP level multiplexing, the UDP destination port number of the response <bcp14>MUST</bcp14> match to the client endpoint's UDP port number, i.e., to the UDP source port number of the client's request.</t>
        </section>
        <section anchor="sec-token-reuse">
          <name>Token Reuse</name>
          <t>For CoAP group requests, there are additional constraints on the reuse of Token values at the client, compared to the unicast case defined in <xref target="RFC7252"/> and updated by <xref target="RFC9175"/>. Since for CoAP group requests the number of responses is not bound a priori, the client cannot use the reception of a response as a trigger to "free up" a Token value for reuse.</t>
          <t>Reusing a Token value too early could lead to incorrect response/request matching on the client, and would be a protocol error.  Therefore, the time between reuse of Token values for different group requests <bcp14>MUST</bcp14> be greater than:</t>
          <artwork><![CDATA[
MIN_TOKEN_REUSE_TIME = (NON_LIFETIME + MAX_LATENCY +
                        MAX_SERVER_RESPONSE_DELAY)
]]></artwork>
          <t>where NON_LIFETIME and MAX_LATENCY are defined in <xref section="4.8" sectionFormat="of" target="RFC7252"/>.  This specification defines MAX_SERVER_RESPONSE_DELAY as was done in <xref target="RFC7390"/>, that is: the expected maximum response delay over all servers that the client can send a CoAP group request to. This delay includes the maximum Leisure time period as defined in <xref section="8.2" sectionFormat="of" target="RFC7252"/>. However, CoAP does not define a time limit for the server response delay. Using the default CoAP parameters, the Token reuse time <bcp14>MUST</bcp14> be greater than 250 seconds plus MAX_SERVER_RESPONSE_DELAY.</t>
          <t>A preferred solution to meet this requirement is to generate a new unique Token for every new group request, such that a Token value is never reused.  If a client has to reuse Token values for some reason, and also MAX_SERVER_RESPONSE_DELAY is unknown, then using MAX_SERVER_RESPONSE_DELAY = 250 seconds is a reasonable guideline. The time between Token reuses is in that case set to a value greater than MIN_TOKEN_REUSE_TIME = 500 seconds.</t>
          <t>When securing CoAP group communication with Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/>, secure binding between requests and responses is ensured (see <xref target="chap-oscore"/>). Thus, a client may reuse a Token value after it has been freed up, as discussed above and considering a reuse time greater than MIN_TOKEN_REUSE_TIME. If an alternative security protocol for CoAP group communication is used which does not ensure secure binding between requests and responses, a client <bcp14>MUST</bcp14> follow the Token processing requirements as defined in <xref target="RFC9175"/>.</t>
          <t>Another method to more easily meet the above constraint is to instantiate multiple CoAP clients at multiple UDP ports on the same host. The Token values only have to be unique within the context of a single CoAP client, so using multiple clients can make it easier to meet the constraint.</t>
        </section>
        <section anchor="sec-request-response-multi">
          <name>Client Handling of Multiple Responses With Same Token</name>
          <t>Since a client sending a group request with a Token T will accept multiple responses with the same Token T, it is possible in particular that the same server sends multiple responses with the same Token T back to the client. For example, this server might not implement the optional CoAP message deduplication based on Message ID; or it might be acting out of specification as a malicious, compromised or faulty server.</t>
          <t>When this happens, it is up to the specific client implementation at which layer deduplication of responses is performed, or whether it is necessary in an application at all. If the processing of a response is successful, the client delivers the response to the application as usual.</t>
          <t>The application itself can be in a good position to decide what to do, depending on the available context information. For instance, it might accept and process all the responses from the same server, even if they are not Observe notifications (i.e., they do not include an Observe option). Alternatively, the application might accept and process only one of those responses, such as the most recent one from that server, e.g., when this can trigger a change of state within the application.</t>
          <t>As part of a long exchange between the client and any of the servers in the CoAP group, the responses considered above are an example of the more general concept elaborated in <xref section="2" sectionFormat="of" target="I-D.bormann-core-responses"/>.</t>
        </section>
      </section>
      <section anchor="sec-caching">
        <name>Caching</name>
        <t>CoAP endpoints that are members of a CoAP group <bcp14>MAY</bcp14> cache responses to a group request as defined in <xref section="5.6" sectionFormat="of" target="RFC7252"/>. In particular, these same rules apply to determine the set of request options used as "Cache-Key".</t>
        <t>Furthermore, building on what is defined in <xref section="8.2.1" sectionFormat="of" target="RFC7252"/>:</t>
        <ul spacing="normal">
          <li>
            <t>A client sending a GET or FETCH group request <bcp14>MAY</bcp14> update a cache with the responses from the servers in the CoAP group. Then, the client uses both cached-still-fresh and new responses as the result of the group request.</t>
          </li>
          <li>
            <t>A client sending a GET or FETCH group request <bcp14>MAY</bcp14> use a response received from a server, to satisfy a subsequent sent request intended to that server on the related unicast request URI. In particular, the unicast request URI is obtained by replacing the authority component of the request URI with the transport-layer source address of the cached response message.</t>
          </li>
          <li>
            <t>A client <bcp14>MAY</bcp14> revalidate a cached response by making a GET or FETCH request on the related unicast request URI.</t>
          </li>
        </ul>
        <t>Note that, in the presence of proxies, doing any of the above (optional) unicast requests requires the client to distinguish the different responses to a group request, as well as to distinguish the different origin servers that responded. This in turn requires additional means to provide the client with information about the origin server of each response, e.g., using the forward-proxying method defines in <xref target="I-D.ietf-core-groupcomm-proxy"/>.</t>
        <t>The following subsections define the freshness model and validation model to use for cached responses, which update the models defined in Sections <xref target="RFC7252" section="5.6.1" sectionFormat="bare"/> and <xref target="RFC7252" section="5.6.2" sectionFormat="bare"/> of <xref target="RFC7252"/>, respectively.</t>
        <section anchor="sec-caching-freshness">
          <name>Freshness Model</name>
          <t>For caching of group communication responses at client endpoints, the same freshness model relying on the Max-Age Option as defined in <xref section="5.6.1" sectionFormat="of" target="RFC7252"/> applies, and
the multicast caching rules of <xref section="8.2.1" sectionFormat="of" target="RFC7252"/> apply except for the one discussed below.</t>
          <t>In <xref section="8.2.1" sectionFormat="of" target="RFC7252"/> it is stated that, regardless of the presence of cached responses to the group request, the client endpoint will always send out a new group request onto the network because new members may have joined the CoAP group since the last group request to the same CoAP group or resource.
That is, a request is never served from cached responses only. This document updates <xref target="RFC7252"/> by adding the following exception case, where a client endpoint <bcp14>MAY</bcp14> serve a request by using cached responses only, and not send out a new group request onto the network:</t>
          <ul spacing="normal">
            <li>
              <t>The client knows all current CoAP servers that are members of the CoAP group; and, for each group member, the client's cache currently stores a fresh response.</t>
            </li>
          </ul>
          <t>How the client in the case above determines the CoAP servers that are currently members of the CoAP group is out of scope for this document. It may be, for example, via a group manager server, or by monitoring group joining protocol exchanges.</t>
          <t>For caching at proxies, the freshness model defined in <xref target="I-D.ietf-core-groupcomm-proxy"/> can be used.</t>
        </section>
        <section anchor="sec-caching-validation">
          <name>Validation Model</name>
          <t>For validation of cached group communication responses at client endpoints, the multicast validation rules in <xref section="8.2.1" sectionFormat="of" target="RFC7252"/> apply, except for the last paragraph which states "A GET request to a multicast group <bcp14>MUST NOT</bcp14> contain an ETag option".
This document updates <xref target="RFC7252"/> by allowing a group request to contain ETag Options as specified below.</t>
          <t>For validation at proxies, the validation model defined in <xref target="I-D.ietf-core-groupcomm-proxy"/> can be used.</t>
          <section anchor="etag-option-in-a-group-requestresponse">
            <name>ETag Option in a Group Request/Response</name>
            <t>A client endpoint <bcp14>MAY</bcp14> include one or more ETag Options in a GET or FETCH group request, to validate one or more stored responses it has cached.
In case two or more servers in the CoAP group have responded to a past request to the same resource with an identical ETag value, it is the responsibility of the client to handle this case. In particular, if the client
wishes to validate, using a group request, a response from server 1 with an ETag value N, while it wants a fresh response from server 2, there is no way to achieve this using a single group request. This wish could occur if the client has a cached representation for server 1, but has no cached representation for server 2: for example, because the client needed to remove older items from its cache to make space for newer resource representations.</t>
            <t>There are various strategies to avoid problems caused by identical ETag values: one strategy is for a client to repeat a request if a particular server returned 2.03 (Valid) with an ETag value that is not in the client's cache (for that server). The repeated request excludes the "duplicate" ETag, and it may be a group request or a unicast request to the particular server. Another strategy is to mark a cached ETag value as "duplicated - not to be used for revalidation" as soon as another server responds with the same ETag value. Finally, the recommended strategy is for the servers to generate unique ETags as specified below.</t>
            <t>A server endpoint <bcp14>MUST</bcp14> process an ETag Option in a GET or FETCH group request in the same way it processes an ETag Option for a unicast request.
A server endpoint that includes an ETag Option in a response to a group request <bcp14>SHOULD</bcp14> construct the ETag Option value in such a way that the value
will be unique to this particular server with a high probability. This practically prevents a collision of the ETag values from different servers in the same CoAP group and application group, which in turn allows the client to effectively validate a particular response of an origin server. This can be accomplished, for example, by embedding a compact ID (or hash) of the server within the ETag value, where the ID is unique (or unique with a high probability) in the scope of the CoAP/application groups.</t>
            <t>Note: a legacy CoAP server might treat an ETag Option in a group request as an unrecognized option per Sections <xref target="RFC7252" section="5.4" sectionFormat="bare"/> and <xref target="RFC7252" section="8.2.1" sectionFormat="bare"/> of <xref target="RFC7252"/>, causing it to ignore this (elective) ETag Option regardless of its value, and process the request normally as if that ETag Option was not included.</t>
          </section>
        </section>
      </section>
      <section anchor="uri-path-selection">
        <name>URI Path Selection</name>
        <t>The URI Path used in a group request is preferably a path that is known to be supported across all members of a CoAP group. However, there are valid use cases where a group request is known to be successful only for a subset of the CoAP group. For instance, the subset may include only members of a specific application group, while the members of the CoAP group for which the request is unsuccessful (for example because they are outside the target application group) either suppress a response as per the default behavior from <xref target="sec-request-response-suppress"/>, or reply with an error response, e.g., when the default behavior is overridden by a No-Response Option <xref target="RFC7967"/> included in the group request.</t>
      </section>
      <section anchor="port-selection-for-udp-transport">
        <name>Port Selection for UDP Transport</name>
        <t>A server that is a member of a CoAP group listens for CoAP request messages on the group's IP multicast address, usually on the CoAP default UDP port number 5683, or another non-default UDP port number if configured. Regardless of the method for selecting the port number, the same port number <bcp14>MUST</bcp14> be used across all CoAP servers that are members of a CoAP group and across all CoAP clients sending group requests to that group.</t>
        <t>One way to create multiple CoAP groups is using different UDP ports with the same IP multicast address, in case the devices' network stack only supports a limited number of multicast address subscriptions. However, it must be taken into account that this incurs additional processing overhead on each CoAP server participating in at least one of these groups: messages to groups that are not of interest to the node are only discarded at the higher transport (UDP) layer instead of directly at the network (IP) layer. Also, a constrained network may be additionally burdened in this case with multicast traffic that is eventually discarded at the UDP layer by most nodes.</t>
        <t>The port number 5684 is reserved for DTLS-secured unicast CoAP and <bcp14>MUST NOT</bcp14> be used for any CoAP group communication.</t>
        <t>For a CoAP server node that supports resource discovery as defined in <xref section="2.4" sectionFormat="of" target="RFC7252"/>, the default port number 5683 <bcp14>MUST</bcp14> be supported (see <xref section="7.1" sectionFormat="of" target="RFC7252"/>) for the "All CoAP Nodes" CoAP group as detailed in <xref target="sec-transport"/>.</t>
      </section>
      <section anchor="sec-proxy">
        <name>Proxy Operation</name>
        <t>This section defines how proxies operate in a group communication scenario. In particular, <xref target="sec-proxy-forward"/> defines operations of forward-proxies, while <xref target="sec-proxy-reverse"/> defines operations of reverse-proxies. Furthermore, <xref target="multicasting-to-proxies"/> discusses the case where a client sends a group request to multiple proxies at once. Security operations for a proxy are discussed later in <xref target="chap-proxy-security"/>.</t>
        <section anchor="sec-proxy-forward">
          <name>Forward-Proxies</name>
          <t>CoAP enables a client to request a forward-proxy to process a CoAP request on its behalf, as described in Sections <xref target="RFC7252" section="5.7.2" sectionFormat="bare"/> and <xref target="RFC7252" section="8.2.2" sectionFormat="bare"/> of <xref target="RFC7252"/>.</t>
          <t>When intending to reach a CoAP group through a proxy, the client sends a unicast CoAP group request to the proxy. The group URI where the request has to be forwarded to is specified in the request, either as a string in the Proxy-Uri Option, or through the Proxy-Scheme Option with the group URI constructed from the usual Uri-* Options. Then, the forward-proxy resolves the group URI to a destination CoAP group, i.e., it sends (e.g., multicasts) the CoAP group request to the group URI, receives the responses and forwards all the individual (unicast) responses back to the client.</t>
          <t>Issues and limitations of this approach are compiled in <xref target="sec-issues-forward-proxies"/>. A forward-proxying method using this approach and addressing such issues and limitations is defined in <xref target="I-D.ietf-core-groupcomm-proxy"/>.</t>
          <t>An alternative approach is for the proxy to collect all the individual (unicast) responses to a CoAP group request and then send back only a single (aggregated) response to the client. Issues and limitations of this alternative approach are also compiled in <xref target="sec-issues-forward-proxies"/>.</t>
          <t>It is <bcp14>RECOMMENDED</bcp14> that a CoAP proxy processes a request to be forwarded to a group URI only if it is explicitly enabled to do so. If such functionality is not explicitly enabled, the default response returned to the client is 5.01 (Not Implemented). Furthermore, a proxy <bcp14>SHOULD</bcp14> be explicitly configured (e.g., by allow-listing and/or client authentication) to allow proxied CoAP group requests only from specific client(s).</t>
          <t>The operation of HTTP-to-CoAP proxies for multicast CoAP requests is specified in Sections <xref target="RFC8075" section="8.4" sectionFormat="bare"/> and <xref target="RFC8075" section="10.1" sectionFormat="bare"/> of <xref target="RFC8075"/>. In this case, the "application/http" media type is used to let the proxy return multiple CoAP responses -- each translated to a HTTP response -- back to the HTTP client. Resulting issues and limitations are also compiled in <xref target="sec-issues-forward-proxies"/>.</t>
          <t>A forward-proxying method for HTTP-to-CoAP proxies addressing such issues and limitations is defined in <xref target="I-D.ietf-core-groupcomm-proxy"/>.</t>
        </section>
        <section anchor="sec-proxy-reverse">
          <name>Reverse-Proxies</name>
          <t>CoAP enables the use of a reverse-proxy, as an endpoint that stands in for one or more other server(s), and satisfies requests on behalf of these, doing any necessary translations (see <xref section="5.7.3" sectionFormat="of" target="RFC7252"/>).</t>
          <t>In a group communication scenario, a reverse-proxy can rely on its configuration and/or on information in a request from a client, in order to determine that a group request has to be sent to servers in a CoAP group, over a one-to-many transport such as IP/UDP multicast.</t>
          <t>One typical implementation is to allocate specific resources on the reverse-proxy to application groups. A client can then select the application group, and group resource to access, using the URI path in its group request. For example, a request to /proxy/APPNAME/res1 could give access to resource /res1 in the application group APPNAME. In this example, the proxy automatically selects the associated CoAP group.</t>
          <t>In general, using the URI path to select application group and/or CoAP group is an efficient way to access a reverse proxy. Other methods are possible, such as using the URI authority component: this requires configuration of more elements on the reverse proxy, like multiple virtual servers and/or multiple IP addresses and/or multiple port numbers.</t>
          <t>The reverse-proxy practically stands in for a CoAP group, thus preventing the client from reaching the group as a whole with a single group request directly addressed to that group (e.g., via multicast). In addition to that, the reverse-proxy may also stand in for each of the individual servers in the CoAP group (e.g., if acting as firewall), thus also preventing the client from individually reaching any server in the group with a unicast request directly addressed to that server.</t>
          <t>For a reverse-proxy that sends a group request to servers in a CoAP group, the considerations as defined in <xref section="5.7.3" sectionFormat="of" target="RFC7252"/> hold. Resulting issues and limitations are compiled in <xref target="sec-issues-reverse-proxies"/>. A reverse-proxying method addressing such issues and limitations is defined in <xref target="I-D.ietf-core-groupcomm-proxy"/>.</t>
          <t>A client might re-use a Token value in a valid new request to the reverse-proxy, while the reverse-proxy still has an ongoing group communication request for this client with the same Token value (i.e., its time period for response collection has not ended yet).</t>
          <t>If this happens, the reverse-proxy <bcp14>MUST</bcp14> stop the ongoing request and associated response forwarding, it <bcp14>MUST NOT</bcp14> forward the new request to the servers in the CoAP group, and it <bcp14>MUST</bcp14> send a 4.00 (Bad Request) error response to the client. The diagnostic payload of the error response <bcp14>SHOULD</bcp14> indicate to the client that the resource is a reverse-proxy resource, and that for this reason immediate Token re-use is not possible.</t>
          <t>For the operation of HTTP-to-CoAP reverse proxies, see the last two paragraphs of <xref target="sec-proxy-forward"/>, which apply also to the case of reverse-proxies.</t>
        </section>
        <section anchor="multicasting-to-proxies">
          <name>Single Group Request to Multiple Proxies</name>
          <t>A client might send a group request to multiple proxies at once (e.g., over IP multicast), so that each and every of those proxies forwards it to the servers in the CoAP group. Assuming that no message loss occurs and that N proxies receive and forward the group request, this has the following implications.</t>
          <ul spacing="normal">
            <li>
              <t>Each server receives N copies of the group request, i.e., one copy from each proxy.</t>
            </li>
            <li>
              <t>If the NoSec mode is used (see <xref target="chap-unsecured-groupcomm"/>), each server treats each received copy of the group request as a different request from a different client. Consistently:  </t>
              <ul spacing="normal">
                <li>
                  <t>Each server can reply to each of the N received requests with multiple responses over time (see <xref target="sec-request-response-multi"/>). All the responses to the same received request are sent to the same proxy that has forwarded that request, which in turn relays those responses to the client.</t>
                </li>
                <li>
                  <t>From each proxy, the client receives all the responses to the group request that each server has sent to that proxy. Even in case the client is able to distinguish the different servers originating the responses (e.g., by using the approach defined in <xref target="I-D.ietf-core-groupcomm-proxy"/>), the client would receive the same response content originated by each server N times, as relayed by the N proxies.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>If secure group communication with Group OSCORE is used (see <xref target="chap-oscore"/>), each server is able to determine that each received copy of the group request is in fact originated by the same client. In particular, each server is able to determine that all such received requests are copies of exactly the same group request.  </t>
              <t>
Consistently, each server S accepts only the first copy of the group request received from one of the proxies, say P, while discarding as replay any later copies received from any other proxy.  </t>
              <t>
After that, the server S can reply to the accepted request with multiple responses over time (see <xref target="sec-request-response-multi"/>). All those responses are sent to the same proxy P that forwarded the only accepted request, and that in turn relays those responses to the client.  </t>
              <t>
As a consequence, for each server, the client receives responses originated by that server only from one proxy. That is, the client receives a certain response content only once, like in the case with only one proxy.</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="sec-congestion">
        <name>Congestion Control</name>
        <t>CoAP group requests may result in a multitude of responses from different nodes, potentially causing congestion. Therefore, both the sending of CoAP group requests and the sending of the unicast CoAP responses to these group requests should be conservatively controlled.</t>
        <t>CoAP <xref target="RFC7252"/> reduces IP multicast-specific congestion risks through the following measures:</t>
        <ul spacing="normal">
          <li>
            <t>A server may choose not to respond to an IP multicast request if there is nothing useful to respond to, e.g., error or empty response (see <xref section="8.2" sectionFormat="of" target="RFC7252"/>).</t>
          </li>
          <li>
            <t>A server should limit the support for IP multicast requests to specific resources where multicast operation is required (<xref section="11.3" sectionFormat="of" target="RFC7252"/>).</t>
          </li>
          <li>
            <t>An IP multicast request <bcp14>MUST</bcp14> be Non-confirmable (<xref section="8.1" sectionFormat="of" target="RFC7252"/>).</t>
          </li>
          <li>
            <t>The same rationale for enforcing congestion control based on the transmission parameter PROBING_RATE defined in <xref section="4.7" sectionFormat="of" target="RFC7252"/> holds for CoAP group communication. In particular, group requests are the Non-confirmable requests in question, and an average data rate PROBING_RATE is not to be exceeded by a client that does not receive a response from any server in the targeted CoAP group.</t>
          </li>
          <li>
            <t>A response to an IP multicast request <bcp14>SHOULD</bcp14> be Non-confirmable (<xref section="5.2.3" sectionFormat="of" target="RFC7252"/>).</t>
          </li>
          <li>
            <t>A server does not respond immediately to an IP multicast request and should first wait for a time that is randomly picked within a predetermined time interval called the Leisure (<xref section="8.2" sectionFormat="of" target="RFC7252"/>).</t>
          </li>
        </ul>
        <t>This document also defines these measures to be applicable to alternative transports (other than IP multicast), if not defined otherwise.</t>
        <t>Independently of the used transport, additional guidelines to reduce congestion risks defined in this document are as follows:</t>
        <ul spacing="normal">
          <li>
            <t>A server in a constrained network <bcp14>SHOULD</bcp14> only support group requests for resources that have a small representation (where the representation may be retrieved via a GET, FETCH, or POST method in the request). For example, "small" can be defined as a response payload limited to approximately 5% of the IP Maximum Transmit Unit (MTU) size, so that it fits into a single link-layer frame in case IPv6 over Low-Power Wireless Personal Area Networks (6LoWPAN, see <xref target="sec-6lowpan"/>) is used on the constrained network.</t>
          </li>
          <li>
            <t>A server <bcp14>SHOULD</bcp14> minimize the payload size of a response to a group GET or FETCH request on "/.well-known/core" by using hierarchy in arranging link descriptions for the response. An example of this is given in <xref section="5" sectionFormat="of" target="RFC6690"/>.</t>
          </li>
          <li>
            <t>A server <bcp14>MAY</bcp14> minimize the payload size of a response to a group GET or FETCH request (e.g., on "/.well-known/core") by using CoAP block-wise transfers <xref target="RFC7959"/> in case the payload is long, returning only a first block of the CoRE Link Format description.  For this reason, a CoAP client sending a CoAP group request to "/.well-known/core" <bcp14>SHOULD</bcp14> support block-wise transfers. See also <xref target="sec-block-wise"/>.</t>
          </li>
          <li>
            <t>A client <bcp14>SHOULD</bcp14> be configured to use CoAP groups with the smallest possible IP multicast scope that fulfills the application needs. As an example, site-local scope is always preferred over global scope IP multicast if this fulfills the application needs. Similarly, realm-local scope is always preferred over site-local scope if this fulfills the application needs.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-observe">
        <name>Observing Resources</name>
        <t>The CoAP Observe Option <xref target="RFC7641"/> is a protocol extension of CoAP, which allows a CoAP client to retrieve a representation of a resource and automatically keep this representation up-to-date over a longer period of time. The client gets notified when the representation has changed. <xref target="RFC7641"/> does not mention whether the Observe Option can be combined with CoAP (multicast) group communication.</t>
        <t>This section updates <xref target="RFC7641"/> with the use of the Observe Option in a CoAP GET group request, and defines normative behavior for both client and server. Consistent with <xref section="2.4" sectionFormat="of" target="RFC8132"/>, the same rules apply when using the Observe Option in a CoAP FETCH group request.</t>
        <t>Multicast Observe is a useful way to start observing a particular resource on all members of a CoAP group at the same time. If a group member does not have this particular resource or it does not allow the GET or FETCH method on that resource, then the group member will either suppress a response as per the default behavior from <xref target="sec-request-response-suppress"/>, or reply with an error response -- 4.04 (Not Found) or 4.05 (Method Not Allowed), respectively -- e.g., when the default behavior is overridden by a No-Response Option <xref target="RFC7967"/> included in the group request.</t>
        <t>A client that sends a group GET or FETCH request with the Observe Option <bcp14>MAY</bcp14> repeat this request using the same Token value and the same Observe Option value, in order to ensure that enough (or all) members of the CoAP group have been reached with the request. This is useful in case a number of members of the CoAP group did not respond to the initial request. The client <bcp14>MAY</bcp14> additionally use the same Message ID in the repeated request, to avoid that members of the CoAP group that had already received the initial request would respond again. Note that using the same Message ID in a repeated request will not be helpful in case of loss of a response message, since the server that responded already will consider the repeated request as a duplicate message. On the other hand, if the client uses a different, fresh Message ID in the repeated request, then all the members of the CoAP group that receive this new message will typically respond again, which increases the network load.</t>
        <t>A client that has sent a group GET or FETCH request with the Observe Option <bcp14>MAY</bcp14> follow up by sending a new unicast CON request with the same Token value and same Observe Option value to a particular server, in order to ensure that the particular server receives the request. This is useful in case a specific member of the CoAP group did not respond to the initial group request, although it was expected to. In this case, the client <bcp14>MUST</bcp14> use a Message ID that differs from that of the initial group request message.</t>
        <t>Since the first Observe notification from a server can be lost, a client should be ready to start receiving the Observe notifications from a server long after the Non-confirmable group request with the Observe Option was sent.</t>
        <t>At the same time, the loss of initial responses with the Observe Option from a server is less problematic than in the case where the group request is a regular request, i.e., when the request does not include the Observe Option. That is, as per <xref section="4.5" sectionFormat="of" target="RFC7641"/>, servers that have registered a client as an observer have to ensure that the client achieves eventual consistency with respect to the representation of the observed resource. This realistically relies on the sending of new Observe notifications, which are occasionally expected to be sent as Confirmable messages also in order to assess client aliveness (see below).</t>
        <t>Furthermore, consistent with <xref section="3.3.1" sectionFormat="of" target="RFC7641"/> and following its guidelines, a client <bcp14>MAY</bcp14> at any time send a new group/multicast GET or FETCH request with the same Token value and same Observe Option value as the original request. This allows the client to verify that it has an up-to-date representation of an observed resource and/or to re-register its interest to observe a resource.</t>
        <t>In the above client behaviors, the Token value is kept identical to the initial request to avoid that a client is included in more than one entry in the list of observers (<xref section="4.1" sectionFormat="of" target="RFC7641"/>).</t>
        <t>Before repeating a request as specified above, the client <bcp14>SHOULD</bcp14> wait for at least the expected round-trip time plus the Leisure time period defined in <xref section="8.2" sectionFormat="of" target="RFC7252"/>, to give the server time to respond.</t>
        <t>A server that receives a GET or FETCH request with the Observe Option, for which request processing is successful, <bcp14>SHOULD</bcp14> respond to this request and not suppress the response. If a server adds a client (as a new entry) to the list of observers for a resource due to an Observe request, the server <bcp14>SHOULD</bcp14> respond to this request and <bcp14>SHOULD NOT</bcp14> suppress the response. An exception to the above is the overriding of response suppression according to a CoAP No-Response Option <xref target="RFC7967"/> specified by the client in the GET or FETCH request (see <xref target="sec-request-response-suppress"/>).</t>
        <t>A server <bcp14>SHOULD</bcp14> have a mechanism to verify the aliveness of its observing clients and the continued interest of these clients in receiving the Observe notifications. This can be implemented by sending notifications occasionally using a Confirmable message (see <xref section="4.5" sectionFormat="of" target="RFC7641"/> for details). This requirement overrides the regular behavior of sending Non-confirmable notifications in response to a Non-confirmable request.</t>
        <t>A client can use the unicast cancellation methods of <xref section="3.6" sectionFormat="of" target="RFC7641"/> and stop the ongoing observation of a particular resource on members of a CoAP group. This can be used to remove specific observed servers, or even all servers in the CoAP group (using serial unicast to each known group member). In addition, a client <bcp14>MAY</bcp14> explicitly deregister from all those servers at once, by sending a group/multicast GET or FETCH request that includes the Token value of the observation to be canceled and includes an Observe Option with the value set to 1 (deregister). In case not all the servers in the CoAP group received this deregistration request, either the unicast cancellation methods can be used at a later point in time or the group/multicast deregistration request <bcp14>MAY</bcp14> be repeated upon receiving another observe response from a server.</t>
        <t>For observing at servers that are members of a CoAP group through a CoAP-to-CoAP proxy, the limitations stated in <xref target="sec-proxy"/> apply. The method defined in <xref target="I-D.ietf-core-groupcomm-proxy"/> enables group communication including resource observation through proxies and addresses those limitations.</t>
      </section>
      <section anchor="sec-block-wise">
        <name>Block-Wise Transfer</name>
        <t><xref section="2.8" sectionFormat="of" target="RFC7959"/> specifies how a client can use block-wise transfer (Block2 Option) in a multicast GET request to limit the size of the initial response of each server. Consistent with <xref section="2.5" sectionFormat="of" target="RFC8132"/>, the same can be done with a multicast FETCH request.</t>
        <t>To retrieve any further blocks of the resource from responding servers, the client can rely on two possible approaches.</t>
        <ol spacing="normal" type="1"><li>
            <t>The client uses unicast requests, separately addressing each different server.</t>
          </li>
          <li>
            <t>The client uses follow-up group requests, if all the received responses from different servers specify the same block size SIZE in their Block2 Option. In particular, SIZE can have the same value specified in the Block2 Option of the first group request, or instead a different one. If the client relies on this approach, follow-up group requests <bcp14>MUST</bcp14> specify SIZE in their Block2 Option.</t>
          </li>
        </ol>
        <t>Furthermore, a server (member of a targeted CoAP group) that needs to respond to a group request with a particularly large resource can use block-wise transfer (Block2 Option) at its own initiative, to limit the size of the initial response. A client can rely on either of the two approaches above for any further requests to retrieve more blocks of the resource.</t>
        <t>A solution for group/multicast block-wise transfer using the Block1 Option is not specified in <xref target="RFC7959"/> nor in the present document. Such a solution would be useful for group FETCH/PUT/POST/PATCH/iPATCH requests, to efficiently distribute a large request payload as multiple blocks to all members of a CoAP group. Multicast usage of Block1 is non-trivial due to potential message loss (leading to missing blocks or missing confirmations), and potential diverging block size preferences of different members of the CoAP group.</t>
        <t><xref target="RFC9177"/> specifies a specialized alternative method for CoAP block-wise transfer. It specifies that "servers <bcp14>MUST</bcp14> ignore multicast requests that contain the Q-Block2 Option".</t>
      </section>
      <section anchor="sec-transport">
        <name>Transport Protocols</name>
        <t>In this document UDP, both over IPv4 and IPv6, is considered as the default transport protocol for CoAP group communication.</t>
        <section anchor="sec-udptransport">
          <name>UDP/IPv6 Multicast Transport</name>
          <t>CoAP group communication can use UDP over IPv6 as a transport protocol, provided that IPv6 multicast is enabled. IPv6 multicast <bcp14>MAY</bcp14> be supported in a network only for a limited scope. For example, <xref target="sec-rpl"/> describes the potential limited support of RPL for multicast, depending on how the protocol is configured.</t>
          <t>For a CoAP server node that supports resource discovery as defined in <xref section="2.4" sectionFormat="of" target="RFC7252"/>, the default port number 5683 <bcp14>MUST</bcp14> be supported as per Sections <xref target="RFC7252" section="7.1" sectionFormat="bare"/> and <xref target="RFC7252" section="12.8" sectionFormat="bare"/> of <xref target="RFC7252"/> for the "All CoAP Nodes" multicast CoAP group. An IPv6 CoAP server <bcp14>SHOULD</bcp14> support the "All CoAP Nodes" multicast CoAP group with at least link-local (2), admin-local (4), and site-local (5) scopes. An IPv6 CoAP server on a 6LoWPAN node (see <xref target="sec-6lowpan"/>) <bcp14>SHOULD</bcp14> also support the realm-local (3) scope.</t>
          <t>Note that a client sending an IPv6 multicast CoAP message to a port number that is not supported by the server will not receive an ICMPv6 Port Unreachable error message from that server, because the server does not send it in this case, per <xref section="2.4" sectionFormat="of" target="RFC4443"/>.</t>
        </section>
        <section anchor="sec-6lowpan">
          <name>UDP/IPv6 Multicast Transport over 6LoWPAN</name>
          <t>In 6LoWPAN <xref target="RFC4944"/> <xref target="RFC6282"/> networks, an IPv6 packet (up to 1280 bytes) may be fragmented into multiple 6LoWPAN fragments, each fragment small enough to be carried over an IEEE 802.15.4 MAC frame (up to 127 bytes).</t>
          <t>These 6LoWPAN fragments are exchanged between 6LoWPAN nodes, potentially involving 6LoWPAN routers operating in a multi-hop network topology. Although 6LoWPAN multicast routing protocols usually define mechanisms to compensate for the loss of transmitted fragments (e.g., using link-layer unicast acknowledgements, or repeated link-layer broadcast transmissions as in MPL -- see <xref target="sec-mpl"/>) a fragment may still be lost in transit. The loss of a single fragment implies the loss of the entire IPv6 packet, because the reassembly back into IPv6 packet will fail in that case. Also, if this fragment loss causes the application-layer retransmission of the entire multi-fragment IPv6 packet, it may happen that much of the same data is transmitted yet again over the constrained network.</t>
          <t>For this reason, the performance in terms of packet loss and throughput of using larger, multi-fragment multicast IPv6 packets is on average worse than the performance of smaller, single-fragment IPv6 multicast packets. So it is recommended to design application payloads for group communication sufficiently small: a CoAP request sent over multicast over a 6LoWPAN network interface <bcp14>SHOULD</bcp14> fit in a single IEEE 802.15.4 MAC frame, if possible.</t>
          <t>On 6LoWPAN networks, multicast CoAP groups can be defined with realm-local scope <xref target="RFC7346"/>. Such a realm-local CoAP group is restricted to the local 6LoWPAN network/subnet. In other words, a multicast request to that CoAP group does not propagate beyond the 6LoWPAN network segment where the request originated. For example, a multicast discovery request can be sent to the realm-local "All CoAP Nodes" IPv6 multicast CoAP group (see <xref target="sec-udptransport"/>) in order to discover only CoAP servers on the local 6LoWPAN network.</t>
        </section>
        <section anchor="udpipv4-multicast-transport">
          <name>UDP/IPv4 Multicast Transport</name>
          <t>CoAP group communication can use UDP over IPv4 as a transport protocol, provided that IPv4 multicast is enabled. For a CoAP server node that supports resource discovery as defined in <xref section="2.4" sectionFormat="of" target="RFC7252"/>, the default port number 5683 <bcp14>MUST</bcp14> be supported as per Sections <xref target="RFC7252" section="7.1" sectionFormat="bare"/> and <xref target="RFC7252" section="12.8" sectionFormat="bare"/> of <xref target="RFC7252"/>, for the "All CoAP Nodes" IPv4 multicast CoAP group.</t>
          <t>Note that a client sending an IPv4 multicast CoAP message to a port number that is not supported by the server will not receive an ICMP Port Unreachable error message from that server, because the server does not send it in this case, per <xref section="3.2.2" sectionFormat="of" target="RFC1122"/>.</t>
        </section>
        <section anchor="tcp-tls-and-websockets">
          <name>TCP, TLS, and WebSockets</name>
          <t>Because it supports unicast only, <xref target="RFC8323"/> (CoAP over TCP, TLS, and WebSockets) has a restricted scope as a transport for CoAP group communication. This is limited to the use of block-wise transfer discussed in <xref target="sec-block-wise"/>.</t>
          <t>That is, after the first group request including the Block2 Option and sent over UDP, the following unicast CoAP requests targeting individual servers to retrieve further blocks may be sent over TCP or WebSockets, possibly protected with TLS.</t>
          <t>This requires the individually addressed servers to also support CoAP over TCP/TLS/WebSockets for the targeted resource. While those transports do not support multicast, it is possible to rely on multicast for discovering that a server has those transports available and that they allow accessing the targeted resource, possibly with block-wise transfer used for random access to blocks within the resource representation. Such discovering can rely on means defined in <xref target="I-D.ietf-core-transport-indication"/>.</t>
        </section>
        <section anchor="other-transports">
          <name>Other Transports</name>
          <t>CoAP group communication may be used over transports other than UDP/IP multicast. For example broadcast, non-UDP multicast, geocast, serial unicast, etc. In such cases the particular considerations for UDP/IP multicast in this document may need to be applied to that particular transport.</t>
        </section>
      </section>
      <section anchor="sec-other-protocols">
        <name>Interworking with Other Protocols</name>
        <section anchor="mldmldv2igmpigmpv3">
          <name>MLD/MLDv2/IGMP/IGMPv3</name>
          <!-- Section 4.2 of {{RFC7390}} has the original content -->

<t>A CoAP node that is an IP host (i.e., not an IP router) may be unaware of the specific IP multicast routing/forwarding protocol
being used in its network.  When such a node needs to join a specific (CoAP) multicast group, the application process would typically subscribe to the particular IP multicast group via an API method of the IP stack on the node. Then the IP stack would execute a particular (e.g., default) method to communicate its subscription to on-link IP (multicast) routers.</t>
          <t>The Multicast Listener Discovery Version 2 (MLDv2) protocol <xref target="RFC3810"/> is the standard IPv6 method to communicate multicast subscriptions, when other methods are not defined. The CoAP server nodes then act in the role of MLD Multicast Address Listener. MLDv2 uses link-local communication between Listeners and IP multicast routers. Constrained IPv6 networks such as ones implementing either RPL (see <xref target="sec-rpl"/>) or MPL (see <xref target="sec-mpl"/>) typically
do not support MLDv2 as they have their own mechanisms defined for subscribing to multicast groups.</t>
          <t>The Internet Group Management Protocol Version 3 (IGMPv3) protocol <xref target="RFC3376"/> is the standard IPv4 method to signal subscriptions to multicast group. This <bcp14>SHOULD</bcp14> be used by members of a CoAP group to subscribe to its multicast IPv4 address on IPv4 networks unless another method is defined for the network interface/technology used.</t>
          <t>The guidelines from <xref target="RFC6636"/> on the tuning of MLD for mobile and wireless networks may be useful when implementing MLD in constrained networks.</t>
        </section>
        <section anchor="sec-rpl">
          <name>RPL</name>
          <!-- see Section 4.3 of {{RFC7390}} for original content -->

<t>IPv6 Routing Protocol for Low-Power and Lossy Networks (RPL) <xref target="RFC6550"/> is an IPv6 based routing protocol suitable for low-power, lossy networks (LLNs). In such a context, CoAP is often used as an application protocol.</t>
          <t>If only RPL is used in a network for routing and its optional multicast support is disabled, there will be no IP multicast routing available.  Any IPv6 multicast packets in this case will not propagate beyond a single hop (to direct neighbors in the LLN). This implies that any CoAP group request will be delivered to link-local nodes only, for any scope value &gt;= 2 used in the IPv6 destination address.</t>
          <t>RPL supports (see <xref section="12" sectionFormat="of" target="RFC6550"/>) advertisement of IP multicast destinations using Destination Advertisement Object (DAO) messages and subsequent routing of multicast IPv6 packets based on this.  It requires the RPL mode of operation to be set to a mode that supports multicast, for example 3 (Storing mode with multicast support) or 5 (Non-Storing Mode of Operation with ingress replication multicast support) defined in <xref target="I-D.ietf-6lo-multicast-registration"/>.</t>
          <t>In mode 3, RPL DAO can be used by an RPL/CoAP node that is either an RPL router or RPL Leaf Node, to advertise its CoAP group membership to parent RPL routers. Then, RPL will route any IP multicast CoAP requests over multiple hops to those CoAP servers that are members of the CoAP group.</t>
          <t>The same DAO mechanism can be used by an edge router (e.g., 6LBR) to learn CoAP group membership information of the entire RPL network, in case the edge router is also the root of the RPL Destination-Oriented Directed Acyclic Graph (DODAG). This is useful because the edge router learns which IP multicast traffic it needs to selectively pass through from the backbone network into the LLN subnet.  In LLNs, such ingress filtering helps to avoid congestion of the resource-constrained network segment, due to IP multicast traffic from the high-speed backbone IP network.</t>
          <t>See <xref target="I-D.ietf-6lo-multicast-registration"/> for more details on RPL Mode 5, and on subscribing to IPv6 multicast groups using 6LoWPAN Neighbor Discovery (ND) and the Extended Address Registration Option (EARO) in RPL networks.</t>
        </section>
        <section anchor="sec-mpl">
          <name>MPL</name>
          <t>The Multicast Protocol for Low-Power and Lossy Networks (MPL) <xref target="RFC7731"/> can be used for propagation of IPv6 multicast packets throughout a defined network domain, over multiple hops. MPL is designed to work in LLNs and can operate alone or in combination with RPL. The protocol involves a predefined group of MPL Forwarders to collectively distribute IPv6 multicast packets throughout their MPL Domain. An MPL Forwarder may be associated with multiple MPL Domains at the same time. Non-Forwarders will receive IPv6 multicast packets from one or more of their neighboring Forwarders. Therefore, MPL can be used to propagate a CoAP multicast group request to all members of the CoAP group.</t>
          <t>However, a CoAP multicast request to a CoAP group that originated outside of the MPL Domain will not be propagated by MPL -- unless an MPL Forwarder is explicitly configured as an ingress point that introduces external multicast packets into the MPL Domain. Such an ingress point could be located on an edge router (e.g., 6LBR). Methods to configure which multicast groups are to be propagated into the MPL Domain could be:</t>
          <ul spacing="normal">
            <li>
              <t>Manual configuration on each ingress MPL Forwarder.</t>
            </li>
            <li>
              <t>MLDv2 protocol <xref target="RFC3810"/>, which works only in case all CoAP servers joining a CoAP group are in link-local communication range of an ingress MPL Forwarder. This is typically not the case on mesh networks.</t>
            </li>
            <li>
              <t>Using 6LoWPAN Neighbor Discovery (ND) and Extended Address Registration Option (EARO) as described in <xref target="I-D.ietf-6lo-multicast-registration"/>, in a network that supports 6LoWPAN-ND, RPL, and MPL.</t>
            </li>
            <li>
              <t>A new/custom protocol to register multicast groups at an ingress MPL Forwarder. This could be for example a CoAP-based protocol offering multicast group subscription features similar to MLDv2.</t>
            </li>
          </ul>
          <t>For security and performance reasons, also other filtering criteria may be defined at an ingress MPL Forwarder. See <xref target="sec-security-considerations-6lowpan-mpl"/> for more details.</t>
        </section>
      </section>
    </section>
    <section anchor="chap-unsecured-groupcomm">
      <name>Unsecured Group Communication</name>
      <t>CoAP group communication can operate in CoAP NoSec (No Security) mode, without using application-layer and transport-layer security mechanisms. The NoSec mode uses the "coap" scheme, and is defined in <xref section="9" sectionFormat="of" target="RFC7252"/>.</t>
      <t>The NoSec mode does not require and does not make use of a security group. Indications that endpoints can use the NoSec mode <bcp14>MUST NOT</bcp14> rely on setting up and advertising a pseudo security group with name "NoSec" or any of its lowercase/uppercase combinations.</t>
      <t>A CoAP server in NoSec mode <bcp14>MUST NOT</bcp14> be accessible through the public Internet.
It is <bcp14>NOT RECOMMENDED</bcp14> to use CoAP group communication in NoSec mode.</t>
      <t>The possible, exceptional use of the NoSec mode ought to be limited to specific, well-defined steps that are proven to not require security or to not be able to attain it, e.g., early discovery of devices and resources (see <xref target="chap-security-considerations-nosec-mode"/>).</t>
      <t>Before possibly and exceptionally using the NoSec mode in such circumstances, the security implications in <xref target="chap-security-considerations-nosec-mode"/> must be very well considered and understood, especially as to the risk and impact of amplification attacks (see <xref target="ssec-amplification"/>). Consistently with such security implications, the use of the NoSec mode should still be avoided whenever possible.</t>
    </section>
    <section anchor="chap-oscore">
      <name>Secured Group Communication using Group OSCORE</name>
      <t>This section discusses how CoAP group communication can be secured. In particular, <xref target="chap-group-oscore"/> describes how the Group OSCORE security protocol <xref target="I-D.ietf-core-oscore-groupcomm"/> can be used to protect messages exchanged in a CoAP group, while <xref target="chap-sec-group-maintenance"/> provides guidance on required maintenance operations for OSCORE groups used as security groups.</t>
      <section anchor="chap-group-oscore">
        <name>Group OSCORE</name>
        <t>The application-layer protocol Object Security for Constrained RESTful Environments (OSCORE) <xref target="RFC8613"/> provides end-to-end encryption, integrity, and replay protection of CoAP messages exchanged between two CoAP endpoints. These can act both as CoAP Client as well as CoAP Server, and share an OSCORE Security Context used to protect and verify exchanged messages. The use of OSCORE does not affect the URI scheme and OSCORE can therefore be used with any URI scheme defined for CoAP.</t>
        <t>OSCORE uses COSE <xref target="RFC9052"/><xref target="RFC9053"/> to perform encryption operations and protect a CoAP message carried in a COSE object, by using an Authenticated Encryption with Associated Data (AEAD) algorithm. In particular, OSCORE takes as input an unprotected CoAP message and transforms it into a protected CoAP message transporting the COSE object.</t>
        <t>OSCORE makes it possible to selectively protect different parts of a CoAP message in different ways, while still allowing intermediaries (e.g., CoAP proxies) to perform their intended functionalities. That is, some message parts are encrypted and integrity protected; other parts are only integrity protected to be accessible to, but not modifiable by, proxies; and some parts are kept as plain content to be both accessible to and modifiable by proxies. Such differences especially concern the CoAP options included in the unprotected message.</t>
        <t>Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/> builds on OSCORE, and provides end-to-end security of CoAP messages exchanged between members of an OSCORE group, while fulfilling the same security requirements.</t>
        <t>In particular, Group OSCORE protects CoAP group requests sent by a CoAP client, e.g., over UDP/IP multicast, as well as multiple corresponding CoAP responses sent as (IP) unicast by different CoAP servers. However, the same security material can also be used to protect CoAP requests sent over (IP) unicast to a single CoAP server in the OSCORE group, as well as the corresponding responses.</t>
        <t>Group OSCORE ensures source authentication of all messages exchanged within the OSCORE group. That is, the recipient of a CoAP message protected with Group OSCORE is able to securely verify whether the CoAP endpoint that has generated and sent the message is indeed the alleged one. This is achieved by means of two possible methods.</t>
        <t>The first method, called group mode, relies on digital signatures. That is, sender devices sign their outgoing messages using their own private key, and embed the signature in the protected CoAP message.</t>
        <t>The second method, called pairwise mode, relies on a symmetric key, which is derived from a pairwise shared secret computed from the asymmetric keys of the message sender and recipient. This method is intended for one-to-one messages sent in the security group, such as all responses individually sent by servers, as well as requests addressed to an individual server.</t>
        <t>A Group Manager is responsible for managing one or multiple OSCORE groups. In particular, the Group Manager acts as repository of the security group members' authentication credentials including the corresponding public keys; manages, renews, and provides security material in the security group; and handles the join process of new members in the security group.</t>
        <t>As defined in <xref target="I-D.ietf-ace-oscore-gm-admin"/>, an administrator entity can interact with the Group Manager to create OSCORE groups and specify their configuration (see <xref target="sssec-group-creation"/>). During the lifetime of the OSCORE group, the administrator can further interact with the Group Manager, in order to possibly update the configuration of the security group and eventually delete the group.</t>
        <t>As recommended in <xref target="I-D.ietf-core-oscore-groupcomm"/>, a CoAP endpoint can join an OSCORE group by using the method described in <xref target="I-D.ietf-ace-key-groupcomm-oscore"/> and based on the ACE framework for Authentication and Authorization in constrained environments <xref target="RFC9200"/>.</t>
        <t>A CoAP endpoint can discover OSCORE groups and retrieve information to join them through their respective Group Managers by using the method described in <xref target="I-D.tiloca-core-oscore-discovery"/> and based on the CoRE Resource Directory <xref target="RFC9176"/>.</t>
        <t>If security is required, CoAP group communication as described in this specification <bcp14>MUST</bcp14> use Group OSCORE. In particular, a CoAP group as defined in <xref target="sec-groupdef"/> and using secure group communication is associated with an OSCORE security group, which includes:</t>
        <ul spacing="normal">
          <li>
            <t>All members of the CoAP group, i.e., the CoAP endpoints that are configured to receive CoAP group messages sent to the particular CoAP group and -- in case of IP multicast transport -- that are listening to the group's multicast IP address on the group's UDP port.</t>
          </li>
          <li>
            <t>All further CoAP endpoints configured only as CoAP clients, that may send CoAP group requests to the CoAP group.</t>
          </li>
        </ul>
      </section>
      <section anchor="chap-sec-group-maintenance">
        <name>Secure Group Maintenance</name>
        <t>As part of group maintenance operations (see <xref target="sec-group-maintenance"/>), additional key management operations are required for an OSCORE group, also depending on the security requirements of the application (see <xref target="chap-security-considerations-sec-mode-key-mgmt"/>). Specifically:</t>
        <ul spacing="normal">
          <li>
            <t>Adding new members to a CoAP group or enabling new client-only endpoints to interact with that group require also that each of such members/endpoints join the corresponding OSCORE group. When this happens, they are securely provided with the security material to use in that OSCORE group.  </t>
            <t>
Applications may need backward security. That is, they may require that, after having joined an OSCORE group, a new member of that group cannot read the cleartext of messages exchanged in the group prior to its joining, even if it has recorded them.  </t>
            <t>
In such a case, new security material to use in the OSCORE group has first to be generated and distributed to the current members of that group, before new endpoints are also provided with that new security material upon their joining.</t>
          </li>
          <li>
            <t>Removing members from a CoAP group or stopping client-only endpoints from interacting with that group requires removing such members/endpoints from the corresponding OSCORE group. To this end, new security material is generated and securely distributed only to the remaining members of the OSCORE group, together with the list of former members removed from that group.  </t>
            <t>
This ensures forward security in the OSCORE group. That is, it ensures that only the members intended to remain in the OSCORE group are able to continue participating in the secure communications within that group, while the evicted ones are not able to participate after the distribution and installation of the new security material.  </t>
            <t>
Also, this ensures that the members intended to remain in the OSCORE group are able to confidently assert the group membership of other sender nodes, when receiving protected messages in the OSCORE group after the distribution and installation of the new security material (see <xref section="12.2" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>).</t>
          </li>
        </ul>
        <t>The key management operations mentioned above are entrusted to the Group Manager responsible for the OSCORE group <xref target="I-D.ietf-core-oscore-groupcomm"/>, and it is <bcp14>RECOMMENDED</bcp14> to perform them as defined in <xref target="I-D.ietf-ace-key-groupcomm-oscore"/>.</t>
      </section>
      <section anchor="chap-proxy-security">
        <name>Proxy Security</name>
        <t>Different solutions may be selected for secure group communication via a proxy depending on proxy type, use case and deployment requirements. In this section the options based on Group OSCORE are listed.</t>
        <t>For a client performing a group communication request via a forward-proxy, end-to-end security should be implemented. The client then creates a group request protected with Group OSCORE and unicasts this to the proxy. The proxy adapts the request from a forward-proxy request to a regular request and multicasts this adapted request to the indicated CoAP group. During the adaptation, the security provided by Group OSCORE persists, in either case of using the group mode or using the pairwise mode. The first leg of communication from client to proxy can optionally be further protected, e.g., by using (D)TLS and/or OSCORE.</t>
        <t>For a client performing a group communication request via a reverse-proxy, either end-to-end-security or hop-by-hop security can be implemented.
The case of end-to-end security is the same as for the forward-proxy case.</t>
        <t>The case of hop-by-hop security is only possible if the proxy can be completely trusted and it is configured as a member of the OSCORE security group(s) that it needs to access, when sending a group request on behalf of clients. As further clarified below, the first communication leg between the client and the proxy, on one hand, and the second communication leg between the proxy and the servers, on the other hand, are protected individually and independently from one another.</t>
        <t>The first leg of communication between client and proxy is then protected with a security method for CoAP unicast, such as (D)TLS, OSCORE, or a combination of such methods. The second leg between proxy and servers is protected using Group OSCORE. This can be useful in applications where for example the origin client does not implement Group OSCORE, or the group management operations are confined to a particular network domain and the client is outside this domain.</t>
        <t>For all the above cases, more details on using Group OSCORE are defined in <xref target="I-D.ietf-core-groupcomm-proxy"/>.</t>
      </section>
    </section>
    <section anchor="chap-security-considerations">
      <name>Security Considerations</name>
      <t>This section provides security considerations for CoAP group communication, in general and for the particular transport of IP multicast.</t>
      <section anchor="chap-security-considerations-nosec-mode">
        <name>CoAP NoSec Mode</name>
        <t>CoAP group communication, if not protected, is vulnerable to all the attacks mentioned in <xref section="11" sectionFormat="of" target="RFC7252"/> for IP multicast. Moreover, as also discussed in <xref target="I-D.irtf-t2trg-amplification-attacks"/>, the NoSec mode is susceptible to source IP address spoofing, hence amplification attacks are especially feasible and greatly effective, since a single request can result in multiple responses from multiple servers (see <xref target="ssec-amplification"/>).</t>
        <t>Therefore, it is <bcp14>NOT RECOMMENDED</bcp14> to use CoAP group communication in NoSec mode, also in order to prevent proliferation of high-volume amplification attacks as further discussed in <xref target="ssec-amplification"/>.
The requirement in <xref target="chap-unsecured-groupcomm"/> on publically accessible CoAP servers also aims to prevent amplification attacks.</t>
        <t>Exceptionally, and only after the security implications have been very well considered and understood, some applications may rely on a limited use of the NoSec mode, when performing specific, well-defined steps that are proven to not require security or to not be able to attain it.</t>
        <t>For example, early link-local discovery of devices and resources as part of an onboarding protocol is a typical use case where the NoSec mode or equivalent unsecured mode is used. In such a discovery step, there may be a querying device that needs to discover nearby devices capable of helping it with the network onboarding process. But there are no mutual security relations configured on the querying device and its neighbor devices at the time it performs the early discovery. These relations are configured later in the process based on secure device identities. Alternatively, a new device to be onboarded may wait for advertisements of nearby devices able to help it do the network onboarding process. Also in this case, these messages cannot be secured initially because the new device does not yet have any security relation configured with devices that are already a member of the network. See <xref target="I-D.ietf-anima-constrained-voucher"/> for an example of an onboarding protocol that can use CoAP multicast for early link-local discovery.</t>
        <t>As a further example, the NoSec mode may be useful in simple applications that neither involve nor may have an impact on sensitive data and personal information. These include, e.g., read-only temperature sensors deployed in an environment where a client reads temperature values but does not use this data to control actuators or to perform other automated actions.</t>
        <t>In the exception cases where NoSec mode is used, high-volume and harmful amplifications need to be prevented through appropriate and conservative device configurations: taking the early discovery query as an example, only a few CoAP servers are expected to be configured for responding to multicast group requests that are sent for discovery. And the time window during which such unsecured requests are accepted, can be limited as well. Furthermore, the scope is also limited: only link-local requests are accepted.</t>
        <t>Except for the class of applications discussed above, and all the more so in applications that obviously have hard security requirements (e.g., health monitoring systems and alarm monitoring systems), CoAP group communication <bcp14>MUST NOT</bcp14> be used in NoSec mode.</t>
      </section>
      <section anchor="chap-security-considerations-sec-mode">
        <name>Group OSCORE</name>
        <t>Group OSCORE provides end-to-end application-level security. This has many desirable properties, including maintaining security assurances while forwarding traffic through intermediaries (proxies). Application-level security also tends to more cleanly separate security from the specific dynamics of security group membership (e.g., the problem of distributing security keys across large groups with many members that come and go).</t>
        <t>CoAP group communication <bcp14>MUST</bcp14> be protected by using Group OSCORE as specified in <xref target="I-D.ietf-core-oscore-groupcomm"/>, with the possible exception of specific, well-defined steps that are proven to not require security or to not be able to attain it (e.g., early discovery).</t>
        <t>The same security considerations from <xref section="13" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/> hold for this specification.</t>
        <section anchor="chap-security-considerations-sec-mode-key-mgmt">
          <name>Group Key Management</name>
          <t>A key management scheme for secure revocation and renewal of group security material, namely group rekeying, is required to be adopted in OSCORE groups. The key management scheme has to preserve forward security in the OSCORE group, as well as backward security if this is required by the application (see <xref target="chap-sec-group-maintenance"/>). In particular, the key management scheme <bcp14>MUST</bcp14> comply with the functional steps defined in <xref section="12.2" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>.</t>
          <t>Even though security group policies vary depending on the specific applications and their security requirements, they <bcp14>SHOULD</bcp14> also take into account:</t>
          <ul spacing="normal">
            <li>
              <t>The expected amount of time that the key management scheme requires to rekey the OSCORE group.</t>
            </li>
            <li>
              <t>The expected frequency of group membership changes in the OSCORE group (i.e., nodes joining and leaving).</t>
            </li>
            <li>
              <t>The identity of the specific CoAP endpoints as they join and leave the OSCORE group.</t>
            </li>
          </ul>
          <t>In particular, it can be desirable to not rekey the OSCORE group upon every single membership change, in case group members frequently join and leave, and at the same time a single group rekeying instance takes a non-negligible time to complete.</t>
          <t>In such a case, the Group Manager can cautiously consider to rekey the OSCORE group, e.g., after a minimum number of nodes has joined or left the group within a pre-defined time interval, or according to communication patterns with predictable time intervals of network inactivity. This would prevent from paralyzing communications in the OSCORE group, when a slow rekeying scheme is used and frequently invoked.</t>
          <t>At the same time, the security implications of delaying the rekeying process have to be carefully considered and understood before employing such security group policies.</t>
          <t>In fact, this comes at the cost of not continuously preserving backward and forward security, since group rekeying might not occur upon every single change in the OSCORE group membership. That is, most recently joined nodes would have access to the security material used prior to their joining, and thus be able to access past group communications protected with that security material. Similarly, until the OSCORE group is rekeyed, most recently left nodes would retain access to group communications protected with the existing security material.</t>
        </section>
        <section anchor="chap-security-considerations-sec-mode-sauth">
          <name>Source Authentication</name>
          <t>Both the group mode and the pairwise mode of Group OSCORE ensure source authentication of messages exchanged by CoAP endpoints through CoAP group communication.</t>
          <t>To this end, outgoing messages are either signed by the message sender endpoint with its own private key (group mode), or protected with a symmetric key, which is in turn derived using the asymmetric keys of the message sender and recipient (pairwise mode).</t>
          <t>Thus, both modes allow a recipient CoAP endpoint to verify that a message has actually been originated and sent by a specific and identified CoAP endpoint as a member of the OSCORE group.</t>
          <t>Note that Group OSCORE does not protect the addressing information about the CoAP endpoint that has sent the message, e.g., the source IP address and port number used when sending the message. Therefore, Group OSCORE does not provide authentication of such source addressing information.</t>
        </section>
        <section anchor="chap-security-considerations-sec-mode-attacks">
          <name>Countering Attacks</name>
          <t>As discussed below, Group OSCORE addresses a number of security attacks mentioned in <xref section="11" sectionFormat="of" target="RFC7252"/>, with particular reference to their execution over IP multicast.</t>
          <ul spacing="normal">
            <li>
              <t>Since Group OSCORE provides end-to-end confidentiality and integrity of request/response messages, proxies capable of group communication cannot break message protection, and thus cannot act as man-in-the-middle beyond their legitimate duties (see <xref section="11.2" sectionFormat="of" target="RFC7252"/>). In fact, intermediaries such as proxies are not assumed to have access to the OSCORE Security Context used by OSCORE group members. Also, with the notable addition of signatures for the group mode, Group OSCORE protects messages using the same procedure as OSCORE (see Sections <xref target="I-D.ietf-core-oscore-groupcomm" section="7" sectionFormat="bare"/> and <xref target="I-D.ietf-core-oscore-groupcomm" section="8" sectionFormat="bare"/> of <xref target="I-D.ietf-core-oscore-groupcomm"/>), and especially processes CoAP options according to the same classification in U/I/E classes.</t>
            </li>
            <li>
              <t>Group OSCORE limits the feasibility and impact of amplification attacks (see <xref target="ssec-amplification"/> of this document and <xref section="11.3" sectionFormat="of" target="RFC7252"/>), thanks to the handling of protected group requests on the server side. That is, upon receiving a group request protected with Group OSCORE, a server verifies whether the request is not a replay, and whether it has been originated and sent by the alleged CoAP endpoint in the OSCORE group.  </t>
              <t>
In order to perform the latter check of source authentication, the server either: i) verifies the signature included in the request by using the public key of the client, when the request is protected using the group mode (see <xref section="7.2" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>); or ii) decrypts and verifies the request by means of an additionally derived pairwise key associated with the client, when the request is protected using the pairwise mode (see <xref section="8.4" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>).  </t>
              <t>
As also discussed in <xref section="7" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>, it is recommended that, when failing to decrypt and verify an incoming group request protected with the group mode, a server does not send back any error message in case any of the following holds: the server determines that the request was indeed sent to the whole CoAP group (e.g., over IP multicast); or the server is not able to determine it altogether.  </t>
              <t>
Such a message processing on the server limits an adversary to leveraging an intercepted group request protected with Group OSCORE, and then altering the source address to be the one of the intended amplification victim.  </t>
              <t>
Furthermore, the adversary needs to consider a group request that specifically targets a resource for which the CoAP servers are configured to respond. While this can be often correctly inferable from the application context, it is not explicit from the group request itself, since Group OSCORE protects the Uri-Path and Uri-Query CoAP Options conveying the respective components of the target URI.  </t>
              <t>
As a further mitigation against amplification attacks, a server can also rely on the Echo Option for CoAP defined in <xref target="RFC9175"/> and include it in a response to a group request. By doing so, the server can assert that the alleged sender of the group request (i.e., the CoAP client associated with a certain authentication credential including the corresponding public key) is indeed reachable at the claimed source address of the group request, especially if such an address differs from the one used in previous group requests from the same (authenticated) device. Although responses including the Echo Option do still result in amplification, this is limited in volume compared to when all servers reply with a full response.  </t>
              <t>
Using the Echo Option does not provide authentication of source addressing information about the sender of a CoAP message. Also, using the Echo Option in itself does not provide source authentication of exchanged messages, which is achieved by means of Group OSCORE (see <xref target="chap-security-considerations-sec-mode-sauth"/>). Using the Echo Option together with Group OSCORE allows a CoAP server in the OSCORE group to assert the freshness of CoAP requests received from other members in the group.</t>
            </li>
            <li>
              <t>Group OSCORE limits the impact of attacks based on IP spoofing over IP multicast (see <xref section="11.4" sectionFormat="of" target="RFC7252"/>). In fact, requests and corresponding responses sent in the OSCORE group can be correctly generated only by CoAP endpoints that are legitimate members of the group.  </t>
              <t>
Within an OSCORE group, the shared symmetric-key security material strictly provides only group-level authentication. However, source authentication of messages is also ensured, both in the group mode by means of signatures (see Sections <xref target="I-D.ietf-core-oscore-groupcomm" section="7.1" sectionFormat="bare"/> and <xref target="I-D.ietf-core-oscore-groupcomm" section="7.3" sectionFormat="bare"/> of <xref target="I-D.ietf-core-oscore-groupcomm"/>), and in the pairwise mode by using additionally derived pairwise keys (see Sections <xref target="I-D.ietf-core-oscore-groupcomm" section="8.3" sectionFormat="bare"/> and <xref target="I-D.ietf-core-oscore-groupcomm" section="8.5" sectionFormat="bare"/> of <xref target="I-D.ietf-core-oscore-groupcomm"/>). Thus, recipient endpoints can verify a message to have been originated and sent by the alleged, identifiable CoAP endpoint in the OSCORE group.  </t>
              <t>
As noted above, the server may additionally rely on the Echo Option for CoAP defined in <xref target="RFC9175"/>, in order to verify the aliveness and reachability of the client sending a request from a particular IP address.</t>
            </li>
            <li>
              <t>Group OSCORE does not require members of an OSCORE group to be equipped with a good source of entropy for generating security material (see <xref section="11.6" sectionFormat="of" target="RFC7252"/>), and thus does not contribute to create an entropy-related attack vector against such (constrained) CoAP endpoints. In particular, the symmetric keys used for message encryption and decryption are derived through the same HMAC-based HKDF scheme used for OSCORE (see <xref section="3.2" sectionFormat="of" target="RFC8613"/>). Besides, the OSCORE Master Secret used in such derivation is securely generated by the Group Manager responsible for the OSCORE group, and securely provided to the CoAP endpoints when they join the OSCORE group.</t>
            </li>
            <li>
              <t>Group OSCORE prevents making any single member of an OSCORE group a target for subverting security in the whole group (see <xref section="11.6" sectionFormat="of" target="RFC7252"/>), even though all group members share (and can derive) the same symmetric-key security material used in the group. In fact, source authentication is always ensured for exchanged CoAP messages, as verifiable to be originated by the alleged, identifiable sender in the OSCORE group. This relies on including a signature computed with a node's individual private key (in the group mode), or on protecting messages with a pairwise symmetric key, which is in turn derived from the asymmetric keys of the sender and recipient CoAP endpoints (in the pairwise mode).</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="ssec-amplification">
        <name>Risk of Amplification</name>
        <t><xref section="11.3" sectionFormat="of" target="RFC7252"/> highlights that CoAP group requests may be used for accidentally or deliberately performing Denial of Service attacks, especially in the form of a high-volume amplification attack, by using all the servers in the CoAP group as attack vectors.</t>
        <t>That is, following a group request sent to a CoAP group, each of the servers in the group may reply with a response which is likely larger in size than the group request. Thus, an attacker sending a single group request may achieve a high amplification factor, i.e., a high ratio between the size of the group request and the total size of the corresponding responses intended to the attack victim.</t>
        <t>Thus, consistently with <xref section="11.3" sectionFormat="of" target="RFC7252"/>, a server in a CoAP group:</t>
        <ul spacing="normal">
          <li>
            <t><bcp14>SHOULD</bcp14> limit the support for CoAP group requests only to the group resources of the application group(s) using that CoAP group;</t>
          </li>
          <li>
            <t><bcp14>SHOULD NOT</bcp14> accept group requests that cannot be authenticated in some way, i.e., for which it is not possible to securely assert that they have been originated and sent by the alleged, identifiable CoAP endpoint in the OSCORE group;</t>
          </li>
          <li>
            <t><bcp14>SHOULD NOT</bcp14> provide large amplification factors through its responses to a non-authenticated group request, possibly employing CoAP block-wise transfers <xref target="RFC7959"/> to reduce the amount of amplification.</t>
          </li>
        </ul>
        <t>Amplification attacks using CoAP are further discussed in <xref target="I-D.irtf-t2trg-amplification-attacks"/>, which also highlights how the amplification factor would become even higher when CoAP group communication is combined with resource observation <xref target="RFC7641"/>. That is, a single group request may result in multiple notification responses from each of the responding servers, throughout the observation lifetime.</t>
        <t>Thus, consistently with <xref section="7" sectionFormat="of" target="RFC7641"/>, a server in a CoAP group <bcp14>MUST</bcp14> strictly limit the number of notifications it sends between receiving acknowledgements that confirm the actual interest of the client in continuing the observation.</t>
        <t>Moreover, it is especially easy to perform an amplification attack when the NoSec mode is used. Therefore, also in order to prevent an easy proliferation of high-volume amplification attacks, it is generally <bcp14>NOT RECOMMENDED</bcp14> to use CoAP group communication in NoSec mode (see <xref target="chap-security-considerations-nosec-mode"/>).</t>
        <t>Besides building on very well understood security implications and being limited to specific, well-defined steps that are proven to not require security or to not be able to attain it, possible exceptions should also be limited to use cases where accesses to a group resource have a specific, narrow, and well understood scope, and where only a few CoAP servers (or, ideally, only one) would possibly respond to a group request.</t>
        <t>A relevant exceptional example is a CoAP client performing the discovery of hosts such as a group manager or a Resource Directory <xref target="RFC9176"/>, by probing for them through a group request sent to the CoAP group. This early, unprotected step is relevant for a CoAP client that does not know the address of such hosts in advance, and that does not have yet configured a mutual security relation with them. In this kind of deployments, such a discovery procedure does not result in a considerable and harmful amplification, since only the few CoAP servers that are the object of discovery are going to respond to the group request targeting that specific resource. In particular, those hosts can be the only CoAP servers in that specific CoAP group (hence listening for group requests sent to that group), and/or the only CoAP servers explicitly configured to respond to group requests targeting specific group resources.</t>
        <t>With the exception of such particular use cases, group communications <bcp14>MUST</bcp14> be secured using Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/>, see <xref target="chap-oscore"/>. As discussed in <xref target="chap-security-considerations-sec-mode-attacks"/>, this limits the feasibility and impact of amplification attacks.</t>
      </section>
      <section anchor="replay-of-non-confirmable-messages">
        <name>Replay of Non-Confirmable Messages</name>
        <t>Since all requests sent over IP multicast are Non-confirmable, a client might not be able to know if an adversary has actually captured one of its transmitted requests and later re-injected it in the group as a replay to the server nodes. In fact, even if the servers sent back responses to the replayed request, the client would typically not have a valid matching request active anymore, so this attack would not accomplish anything in the client.</t>
        <t>If Group OSCORE is used, such a replay attack on the servers is prevented, since a client protects each different request with a different Sequence Number value, which is in turn included as Partial IV in the protected message and takes part in the construction of the AEAD cipher nonce. Thus, a server would be able to detect the replayed request, by checking the conveyed Partial IV against its own replay window in the OSCORE Recipient Context associated with the client.</t>
        <t>This requires a server to have a synchronized, up-to-date view of the sequence number used by the client. If such synchronization is lost, e.g., due to a reboot, or suspected so, the server should use the challenge-response synchronization method based on the Echo Option for CoAP defined in <xref target="RFC9175"/> as described in Section 10 of <xref target="I-D.ietf-core-oscore-groupcomm"/>, in order to (re-)synchronize with the client's sequence number.</t>
      </section>
      <section anchor="use-of-coap-no-response-option">
        <name>Use of CoAP No-Response Option</name>
        <t>When CoAP group communication is used in CoAP NoSec (No Security)
mode (see <xref target="chap-unsecured-groupcomm"/>), the CoAP No-Response Option <xref target="RFC7967"/> could be misused by a malicious client to evoke as many responses from servers to a group request as possible, by using the value '0' -- Interested in all responses. This might even override the default behavior of a CoAP server to suppress the response in case there is nothing of interest to respond with. Therefore, this option can be used to perform an amplification attack (see <xref target="ssec-amplification"/>).</t>
        <t>A proposed mitigation is to only allow this option to relax the standard suppression rules for a resource in case the option is sent by an authenticated client. If sent by an unauthenticated client, the option can be used to expand the classes of responses suppressed compared to the default rules but not to reduce the classes of responses suppressed.</t>
      </section>
      <section anchor="sec-security-considerations-6lowpan-mpl">
        <name>6LoWPAN and MPL</name>
        <t>In a 6LoWPAN network, the MPL <xref target="RFC7731"/> protocol may be used to forward multicast packets throughout the network. A 6LoWPAN Router that forwards a large IPv6 packet may have a relatively high impact on the occupation of the wireless channel because sending a large packet consists of the transmission of multiple link-layer IEEE 802.15.4 frames. Also, a constrained 6LoWPAN Router may experience a high memory load due to buffering of the large packet -- MPL requires an MPL Forwarder to store the packet for a longer duration, to allow multiple forwarding transmissions to neighboring Forwarders. This could allow an attacker on the 6LoWPAN network or outside the 6LoWPAN network to execute a Denial of Service (DoS) attack by sending large IPv6 multicast packets. This is also an amplification attack in general, because each of potentially multiple MPL Forwarder(s) repeats the transmission of the IPv6 packet potentially multiple times, hence amplifying the original amount of data sent by the attacker considerably.</t>
        <t>The amplification factor may be even further increased by the loss of link-layer frames. If one or more of the fragments are not received correctly by an MPL Forwarder during its packet reassembly time window, the Forwarder discards all received fragments and it will likely at a future point in time trigger a neighboring MPL Forwarder to send the IPv6 packet (fragments) again, because its internal state marks this packet (that it failed to received previously) still as a "new" IPv6 packet. Hence, this leads to an MPL Forwarder signaling to neighbors its "old" state, triggering additional transmission(s) of all packet fragments.</t>
        <t>For these reasons, a large IPv6 multicast packet is a possible attack vector in a Denial of Service (DoS) amplification attack on a 6LoWPAN network. See <xref target="ssec-amplification"/> of this document and <xref section="11.3" sectionFormat="of" target="RFC7252"/> for more details on amplification. To mitigate the risk, applications sending multicast IPv6 requests to 6LoWPAN hosted CoAP servers <bcp14>SHOULD</bcp14> limit the size of the request to avoid 6LoWPAN fragmentation of the request packet. A 6LoWPAN Router or (MPL) multicast forwarder <bcp14>SHOULD</bcp14> deprioritize forwarding for multi-fragment 6LoWPAN multicast packets. 6LoWPAN Border Routers are typical ingress points where multicast traffic enters into a 6LoWPAN network. Specific MPL Forwarders (whether located on a 6LBR or not) may also be configured as ingress points. Any such ingress point <bcp14>SHOULD</bcp14> implement multicast packet filtering to prevent unwanted multicast traffic from entering a 6LoWPAN network from the outside. For example, it could filter out all multicast packets for which there is no known multicast listener on the 6LoWPAN network. See <xref target="sec-other-protocols"/> for protocols that allow multicast listeners to signal which groups they would like to listen to. As part of multicast packet filtering, the ingress point <bcp14>SHOULD</bcp14> implement a filtering criterion based on the size of the multicast packet. Ingress multicast packets above a defined size may then be dropped or deprioritized.</t>
      </section>
      <section anchor="wi-fi">
        <name>Wi-Fi</name>
        <t>In a home automation scenario using Wi-Fi, Wi-Fi security
   should be enabled to prevent rogue nodes from joining.  The Customer
   Premises Equipment (CPE) that enables access to the Internet should
   also have its IP multicast filters set so that it enforces multicast
   scope boundaries to isolate local multicast groups from the rest of
   the Internet (e.g., as per <xref target="RFC6092"/>). In addition, the scope of
   IP multicast transmissions and listeners should be site-local (5) or smaller.  For
   site-local scope, the CPE will be an appropriate multicast scope
   boundary point.</t>
      </section>
      <section anchor="monitoring">
        <name>Monitoring</name>
        <section anchor="general-monitoring">
          <name>General Monitoring</name>
          <t>CoAP group communication can be used to control a set of
   related devices: for example, to simultaneously turn on all the lights in a
   room. This intrinsically exposes the communicating devices to some unique
   monitoring risks, which they are not as vulnerable to when not using group communication.</t>
          <t>For example, an attacker might be able to
   physically see a set of lights turn on in a room. Then, the attacker
   can correlate an observed CoAP group communication message to the observed
   coordinated group action -- even if the CoAP message is (partly) encrypted.
   This will give the attacker side-channel information
   to plan further attacks (e.g., by determining the members of the CoAP group, some network topology information may be deduced).</t>
        </section>
        <section anchor="pervasive-monitoring">
          <name>Pervasive Monitoring</name>
          <t>CoAP traffic is typically used for the Internet of Things, and CoAP (multicast) group communication may specifically be used for conveniently controlling and monitoring critical infrastructure (e.g., lights, alarms, HVAC, electrical grid, etc.).</t>
          <t>However, this may be a prime target of pervasive monitoring attacks <xref target="RFC7258"/>, which have to be considered as a key additional threat for group communication. For example, an attacker may attempt to record all the CoAP traffic going over a smart grid (i.e., networked electrical utility) and try to determine critical nodes for further attacks. For instance, the source node (controller) sends out CoAP group messages, which easily identifies it as a controller.</t>
          <t>CoAP group communication built on top of IP multicast is inherently more vulnerable compared to communications solely relying on IP unicast, since the same packet may be replicated over many multiple links. In particular, this yields a higher probability of packet capture by a pervasive monitoring system, which in turn results in more information available to analyze within the same time interval. Moreover, a single CoAP group request potentially results in multiple CoAP responses, thus further contributing to the information available to analyze.</t>
          <t>This requires CoAP group communication solutions that are built on top of IP multicast to pay particular attention to these dangers.</t>
          <t>In order to limit the ease of interception of group communication messages, one mitigation is to restrict the scope of IP multicast to the minimal scope that fulfills the application need. See the congestion control recommendations in the last bullet of
   <xref target="sec-congestion"/> to minimize the scope. Thus, for example, realm-local IP multicast scope is always preferred over site-local scope IP multicast, if it fulfills the application needs.</t>
          <t>Even if CoAP group communications are encrypted/protected (see <xref target="chap-oscore"/>), an attacker may still attempt to capture this traffic and perform an off-line attack in the future.</t>
        </section>
      </section>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>This document has no actions for IANA.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC1122">
          <front>
            <title>Requirements for Internet Hosts - Communication Layers</title>
            <author fullname="R. Braden" initials="R." role="editor" surname="Braden"/>
            <date month="October" year="1989"/>
            <abstract>
              <t>This RFC is an official specification for the Internet community. It incorporates by reference, amends, corrects, and supplements the primary protocol standards documents relating to hosts. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="3"/>
          <seriesInfo name="RFC" value="1122"/>
          <seriesInfo name="DOI" value="10.17487/RFC1122"/>
        </reference>
        <reference anchor="RFC3376">
          <front>
            <title>Internet Group Management Protocol, Version 3</title>
            <author fullname="B. Cain" initials="B." surname="Cain"/>
            <author fullname="S. Deering" initials="S." surname="Deering"/>
            <author fullname="I. Kouvelas" initials="I." surname="Kouvelas"/>
            <author fullname="B. Fenner" initials="B." surname="Fenner"/>
            <author fullname="A. Thyagarajan" initials="A." surname="Thyagarajan"/>
            <date month="October" year="2002"/>
          </front>
          <seriesInfo name="RFC" value="3376"/>
          <seriesInfo name="DOI" value="10.17487/RFC3376"/>
        </reference>
        <reference anchor="RFC4443">
          <front>
            <title>Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification</title>
            <author fullname="A. Conta" initials="A." surname="Conta"/>
            <author fullname="S. Deering" initials="S." surname="Deering"/>
            <author fullname="M. Gupta" initials="M." role="editor" surname="Gupta"/>
            <date month="March" year="2006"/>
            <abstract>
              <t>This document describes the format of a set of control messages used in ICMPv6 (Internet Control Message Protocol). ICMPv6 is the Internet Control Message Protocol for Internet Protocol version 6 (IPv6). [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="89"/>
          <seriesInfo name="RFC" value="4443"/>
          <seriesInfo name="DOI" value="10.17487/RFC4443"/>
        </reference>
        <reference anchor="RFC4944">
          <front>
            <title>Transmission of IPv6 Packets over IEEE 802.15.4 Networks</title>
            <author fullname="G. Montenegro" initials="G." surname="Montenegro"/>
            <author fullname="N. Kushalnagar" initials="N." surname="Kushalnagar"/>
            <author fullname="J. Hui" initials="J." surname="Hui"/>
            <author fullname="D. Culler" initials="D." surname="Culler"/>
            <date month="September" year="2007"/>
            <abstract>
              <t>This document describes the frame format for transmission of IPv6 packets and the method of forming IPv6 link-local addresses and statelessly autoconfigured addresses on IEEE 802.15.4 networks. Additional specifications include a simple header compression scheme using shared context and provisions for packet delivery in IEEE 802.15.4 meshes. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4944"/>
          <seriesInfo name="DOI" value="10.17487/RFC4944"/>
        </reference>
        <reference anchor="RFC6282">
          <front>
            <title>Compression Format for IPv6 Datagrams over IEEE 802.15.4-Based Networks</title>
            <author fullname="J. Hui" initials="J." role="editor" surname="Hui"/>
            <author fullname="P. Thubert" initials="P." surname="Thubert"/>
            <date month="September" year="2011"/>
            <abstract>
              <t>This document updates RFC 4944, "Transmission of IPv6 Packets over IEEE 802.15.4 Networks". This document specifies an IPv6 header compression format for IPv6 packet delivery in Low Power Wireless Personal Area Networks (6LoWPANs). The compression format relies on shared context to allow compression of arbitrary prefixes. How the information is maintained in that shared context is out of scope. This document specifies compression of multicast addresses and a framework for compressing next headers. UDP header compression is specified within this framework. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6282"/>
          <seriesInfo name="DOI" value="10.17487/RFC6282"/>
        </reference>
        <reference anchor="RFC6690">
          <front>
            <title>Constrained RESTful Environments (CoRE) Link Format</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <date month="August" year="2012"/>
            <abstract>
              <t>This specification defines Web Linking using a link format for use by constrained web servers to describe hosted resources, their attributes, and other relationships between links. Based on the HTTP Link Header field defined in RFC 5988, the Constrained RESTful Environments (CoRE) Link Format is carried as a payload and is assigned an Internet media type. "RESTful" refers to the Representational State Transfer (REST) architecture. A well-known URI is defined as a default entry point for requesting the links hosted by a server. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6690"/>
          <seriesInfo name="DOI" value="10.17487/RFC6690"/>
        </reference>
        <reference anchor="RFC7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks. The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s. The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types. CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
        <reference anchor="RFC7641">
          <front>
            <title>Observing Resources in the Constrained Application Protocol (CoAP)</title>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <date month="September" year="2015"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a RESTful application protocol for constrained nodes and networks. The state of a resource on a CoAP server can change over time. This document specifies a simple protocol extension for CoAP that enables CoAP clients to "observe" resources, i.e., to retrieve a representation of a resource and keep this representation updated by the server over a period of time. The protocol follows a best-effort approach for sending new representations to clients and provides eventual consistency between the state observed by each client and the actual resource state at the server.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7641"/>
          <seriesInfo name="DOI" value="10.17487/RFC7641"/>
        </reference>
        <reference anchor="RFC7959">
          <front>
            <title>Block-Wise Transfers in the Constrained Application Protocol (CoAP)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="Z. Shelby" initials="Z." role="editor" surname="Shelby"/>
            <date month="August" year="2016"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a RESTful transfer protocol for constrained nodes and networks. Basic CoAP messages work well for small payloads from sensors and actuators; however, applications will need to transfer larger payloads occasionally -- for instance, for firmware updates. In contrast to HTTP, where TCP does the grunt work of segmenting and resequencing, CoAP is based on datagram transports such as UDP or Datagram Transport Layer Security (DTLS). These transports only offer fragmentation, which is even more problematic in constrained nodes and networks, limiting the maximum size of resource representations that can practically be transferred.</t>
              <t>Instead of relying on IP fragmentation, this specification extends basic CoAP with a pair of "Block" options for transferring multiple blocks of information from a resource representation in multiple request-response pairs. In many important cases, the Block options enable a server to be truly stateless: the server can handle each block transfer separately, with no need for a connection setup or other server-side memory of previous block transfers. Essentially, the Block options provide a minimal way to transfer larger representations in a block-wise fashion.</t>
              <t>A CoAP implementation that does not support these options generally is limited in the size of the representations that can be exchanged, so there is an expectation that the Block options will be widely used in CoAP implementations. Therefore, this specification updates RFC 7252.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7959"/>
          <seriesInfo name="DOI" value="10.17487/RFC7959"/>
        </reference>
        <reference anchor="RFC7967">
          <front>
            <title>Constrained Application Protocol (CoAP) Option for No Server Response</title>
            <author fullname="A. Bhattacharyya" initials="A." surname="Bhattacharyya"/>
            <author fullname="S. Bandyopadhyay" initials="S." surname="Bandyopadhyay"/>
            <author fullname="A. Pal" initials="A." surname="Pal"/>
            <author fullname="T. Bose" initials="T." surname="Bose"/>
            <date month="August" year="2016"/>
            <abstract>
              <t>There can be machine-to-machine (M2M) scenarios where server responses to client requests are redundant. This kind of open-loop exchange (with no response path from the server to the client) may be desired to minimize resource consumption in constrained systems while updating many resources simultaneously or performing high-frequency updates. CoAP already provides Non-confirmable (NON) messages that are not acknowledged by the recipient. However, the request/response semantics still require the server to respond with a status code indicating "the result of the attempt to understand and satisfy the request", per RFC 7252.</t>
              <t>This specification introduces a CoAP option called 'No-Response'. Using this option, the client can explicitly express to the server its disinterest in all responses against the particular request. This option also provides granular control to enable expression of disinterest to a particular response class or a combination of response classes. The server MAY decide to suppress the response by not transmitting it back to the client according to the value of the No-Response option in the request. This option may be effective for both unicast and multicast requests. This document also discusses a few examples of applications that benefit from this option.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7967"/>
          <seriesInfo name="DOI" value="10.17487/RFC7967"/>
        </reference>
        <reference anchor="RFC8075">
          <front>
            <title>Guidelines for Mapping Implementations: HTTP to the Constrained Application Protocol (CoAP)</title>
            <author fullname="A. Castellani" initials="A." surname="Castellani"/>
            <author fullname="S. Loreto" initials="S." surname="Loreto"/>
            <author fullname="A. Rahman" initials="A." surname="Rahman"/>
            <author fullname="T. Fossati" initials="T." surname="Fossati"/>
            <author fullname="E. Dijk" initials="E." surname="Dijk"/>
            <date month="February" year="2017"/>
            <abstract>
              <t>This document provides reference information for implementing a cross-protocol network proxy that performs translation from the HTTP protocol to the Constrained Application Protocol (CoAP). This will enable an HTTP client to access resources on a CoAP server through the proxy. This document describes how an HTTP request is mapped to a CoAP request and how a CoAP response is mapped back to an HTTP response. This includes guidelines for status code, URI, and media type mappings, as well as additional interworking advice.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8075"/>
          <seriesInfo name="DOI" value="10.17487/RFC8075"/>
        </reference>
        <reference anchor="RFC8132">
          <front>
            <title>PATCH and FETCH Methods for the Constrained Application Protocol (CoAP)</title>
            <author fullname="P. van der Stok" initials="P." surname="van der Stok"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="A. Sehgal" initials="A." surname="Sehgal"/>
            <date month="April" year="2017"/>
            <abstract>
              <t>The methods defined in RFC 7252 for the Constrained Application Protocol (CoAP) only allow access to a complete resource, not to parts of a resource. In case of resources with larger or complex data, or in situations where resource continuity is required, replacing or requesting the whole resource is undesirable. Several applications using CoAP need to access parts of the resources.</t>
              <t>This specification defines the new CoAP methods, FETCH, PATCH, and iPATCH, which are used to access and update parts of a resource.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8132"/>
          <seriesInfo name="DOI" value="10.17487/RFC8132"/>
        </reference>
        <reference anchor="RFC8613">
          <front>
            <title>Object Security for Constrained RESTful Environments (OSCORE)</title>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="J. Mattsson" initials="J." surname="Mattsson"/>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <date month="July" year="2019"/>
            <abstract>
              <t>This document defines Object Security for Constrained RESTful Environments (OSCORE), a method for application-layer protection of the Constrained Application Protocol (CoAP), using CBOR Object Signing and Encryption (COSE). OSCORE provides end-to-end protection between endpoints communicating using CoAP or CoAP-mappable HTTP. OSCORE is designed for constrained nodes and networks supporting a range of proxy operations, including translation between different transport protocols.</t>
              <t>Although an optional functionality of CoAP, OSCORE alters CoAP options processing and IANA registration. Therefore, this document updates RFC 7252.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8613"/>
          <seriesInfo name="DOI" value="10.17487/RFC8613"/>
        </reference>
        <reference anchor="RFC9052">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Structures and Process</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines the CBOR Object Signing and Encryption (COSE) protocol. This specification describes how to create and process signatures, message authentication codes, and encryption using CBOR for serialization. This specification additionally describes how to represent cryptographic keys using CBOR.</t>
              <t>This document, along with RFC 9053, obsoletes RFC 8152.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="96"/>
          <seriesInfo name="RFC" value="9052"/>
          <seriesInfo name="DOI" value="10.17487/RFC9052"/>
        </reference>
        <reference anchor="RFC9053">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Initial Algorithms</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines a set of algorithms that can be used with the CBOR Object Signing and Encryption (COSE) protocol (RFC 9052).</t>
              <t>This document, along with RFC 9052, obsoletes RFC 8152.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9053"/>
          <seriesInfo name="DOI" value="10.17487/RFC9053"/>
        </reference>
        <reference anchor="RFC9175">
          <front>
            <title>Constrained Application Protocol (CoAP): Echo, Request-Tag, and Token Processing</title>
            <author fullname="C. Amsüss" initials="C." surname="Amsüss"/>
            <author fullname="J. Preuß Mattsson" initials="J." surname="Preuß Mattsson"/>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <date month="February" year="2022"/>
            <abstract>
              <t>This document specifies enhancements to the Constrained Application Protocol (CoAP) that mitigate security issues in particular use cases. The Echo option enables a CoAP server to verify the freshness of a request or to force a client to demonstrate reachability at its claimed network address. The Request-Tag option allows the CoAP server to match block-wise message fragments belonging to the same request. This document updates RFC 7252 with respect to the following: processing requirements for client Tokens, forbidding non-secure reuse of Tokens to ensure response-to-request binding when CoAP is used with a security protocol, and amplification mitigation (where the use of the Echo option is now recommended).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9175"/>
          <seriesInfo name="DOI" value="10.17487/RFC9175"/>
        </reference>
        <reference anchor="I-D.ietf-core-oscore-groupcomm">
          <front>
            <title>Group Object Security for Constrained RESTful Environments (Group OSCORE)</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="John Preuß Mattsson" initials="J. P." surname="Mattsson">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <date day="26" month="September" year="2024"/>
            <abstract>
              <t>   This document defines the security protocol Group Object Security for
   Constrained RESTful Environments (Group OSCORE), providing end-to-end
   security of CoAP messages exchanged between members of a group, e.g.,
   sent over IP multicast.  In particular, the described protocol
   defines how OSCORE is used in a group communication setting to
   provide source authentication for CoAP group requests, sent by a
   client to multiple servers, and for protection of the corresponding
   CoAP responses.  Group OSCORE also defines a pairwise mode where each
   member of the group can efficiently derive a symmetric pairwise key
   with any other member of the group for pairwise OSCORE communication.
   Group OSCORE can be used between endpoints communicating with CoAP or
   CoAP-mappable HTTP.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-groupcomm-23"/>
        </reference>
        <reference anchor="Resource.Type.Link.Target.Attribute.Values" target="https://www.iana.org/assignments/core-parameters/core-parameters.xhtml#rt-link-target-att-value">
          <front>
            <title>Resource Type (rt=) Link Target Attribute Values</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.bormann-core-responses">
          <front>
            <title>CoAP: Non-traditional response forms</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <date day="1" month="September" year="2024"/>
            <abstract>
              <t>   In CoAP as defined by RFC 7252, responses are always unicast back to
   a client that posed a request.  The present memo describes two forms
   of responses that go beyond that model.  These descriptions are not
   intended as advocacy for adopting these approaches immediately, they
   are provided to point out potential avenues for development that
   would have to be carefully evaluated.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-core-responses-03"/>
        </reference>
        <reference anchor="I-D.ietf-core-groupcomm-proxy">
          <front>
            <title>Proxy Operations for CoAP Group Communication</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Esko Dijk" initials="E." surname="Dijk">
              <organization>IoTconsultancy.nl</organization>
            </author>
            <date day="21" month="October" year="2024"/>
            <abstract>
              <t>   This document specifies the operations performed by a proxy, when
   using the Constrained Application Protocol (CoAP) in group
   communication scenarios.  Such a proxy processes a single request
   sent by a client over unicast, and distributes the request to a group
   of servers, e.g., over UDP/IP multicast as the defined default
   transport protocol.  Then, the proxy collects the individual
   responses from those servers and relays those responses back to the
   client, in a way that allows the client to distinguish the responses
   and their origin servers through embedded addressing information.
   This document updates RFC7252 with respect to caching of response
   messages at proxies.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-groupcomm-proxy-03"/>
        </reference>
        <reference anchor="I-D.ietf-ace-key-groupcomm-oscore">
          <front>
            <title>Key Management for OSCORE Groups in ACE</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Jiye Park" initials="J." surname="Park">
              <organization>Universitaet Duisburg-Essen</organization>
            </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="6" month="March" year="2023"/>
            <abstract>
              <t>   This document defines an application profile of the ACE framework for
   Authentication and Authorization, to request and provision keying
   material in group communication scenarios that are based on CoAP and
   are secured with Group Object Security for Constrained RESTful
   Environments (Group OSCORE).  This application profile delegates the
   authentication and authorization of Clients, that join an OSCORE
   group through a Resource Server acting as Group Manager for that
   group.  This application profile leverages protocol-specific
   transport profiles of ACE to achieve communication security, server
   authentication and proof-of-possession for a key owned by the Client
   and bound to an OAuth 2.0 Access Token.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-key-groupcomm-oscore-16"/>
        </reference>
        <reference anchor="I-D.tiloca-core-oscore-discovery">
          <front>
            <title>Discovery of OSCORE Groups with the CoRE Resource Directory</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <author fullname="Peter Van der Stok" initials="P." surname="Van der Stok">
         </author>
            <date day="4" month="September" year="2024"/>
            <abstract>
              <t>   Group communication over the Constrained Application Protocol (CoAP)
   can be secured by means of Group Object Security for Constrained
   RESTful Environments (Group OSCORE).  At deployment time, devices may
   not know the exact security groups to join, the respective Group
   Manager, or other information required to perform the joining
   process.  This document describes how a CoAP endpoint can use
   descriptions and links of resources registered at the CoRE Resource
   Directory to discover security groups and to acquire information for
   joining them through the respective Group Manager.  A given security
   group may protect multiple application groups, which are separately
   announced in the Resource Directory as sets of endpoints sharing a
   pool of resources.  This approach is consistent with, but not limited
   to, the joining of security groups based on the ACE framework for
   Authentication and Authorization in constrained environments.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-tiloca-core-oscore-discovery-16"/>
        </reference>
        <reference anchor="I-D.ietf-ace-oscore-gm-admin">
          <front>
            <title>Admin Interface for the OSCORE Group Manager</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Peter Van der Stok" initials="P." surname="Van der Stok">
         </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="8" month="July" year="2024"/>
            <abstract>
              <t>   Group communication for CoAP can be secured using Group Object
   Security for Constrained RESTful Environments (Group OSCORE).  A
   Group Manager is responsible for handling the joining of new group
   members, as well as managing and distributing the group keying
   material.  This document defines a RESTful admin interface at the
   Group Manager that allows an Administrator entity to create and
   delete OSCORE groups, as well as to retrieve and update their
   configuration.  The ACE framework for Authentication and
   Authorization is used to enforce authentication and authorization of
   the Administrator at the Group Manager.  Protocol-specific transport
   profiles of ACE are used to achieve communication security, proof-of-
   possession, and server authentication.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-oscore-gm-admin-12"/>
        </reference>
        <reference anchor="I-D.ietf-anima-constrained-voucher">
          <front>
            <title>Constrained Bootstrapping Remote Secure Key Infrastructure (cBRSKI)</title>
            <author fullname="Michael Richardson" initials="M." surname="Richardson">
              <organization>Sandelman Software Works</organization>
            </author>
            <author fullname="Peter Van der Stok" initials="P." surname="Van der Stok">
              <organization>vanderstok consultancy</organization>
            </author>
            <author fullname="Panos Kampanakis" initials="P." surname="Kampanakis">
              <organization>Cisco Systems</organization>
            </author>
            <author fullname="Esko Dijk" initials="E." surname="Dijk">
              <organization>IoTconsultancy.nl</organization>
            </author>
            <date day="8" month="July" year="2024"/>
            <abstract>
              <t>   This document defines the Constrained Bootstrapping Remote Secure Key
   Infrastructure (cBRSKI) protocol, which provides a solution for
   secure zero-touch onboarding of resource-constrained (IoT) devices
   into the network of a domain owner.  This protocol is designed for
   constrained networks, which may have limited data throughput or may
   experience frequent packet loss. cBRSKI is a variant of the BRSKI
   protocol, which uses an artifact signed by the device manufacturer
   called the "voucher" which enables a new device and the owner's
   network to mutually authenticate.  While the BRSKI voucher data is
   encoded in JSON, cBRSKI uses a compact CBOR-encoded voucher.  The
   BRSKI voucher data definition is extended with new data types that
   allow for smaller voucher sizes.  The Enrollment over Secure
   Transport (EST) protocol, used in BRSKI, is replaced with EST-over-
   CoAPS; and HTTPS used in BRSKI is replaced with DTLS-secured CoAP
   (CoAPS).  This document Updates RFC 8995 and RFC 9148.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-anima-constrained-voucher-25"/>
        </reference>
        <reference anchor="I-D.ietf-core-coap-pubsub">
          <front>
            <title>A publish-subscribe architecture for the Constrained Application Protocol (CoAP)</title>
            <author fullname="Jaime Jimenez" initials="J." surname="Jimenez">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Michael Koster" initials="M." surname="Koster">
              <organization>Dogtiger Labs</organization>
            </author>
            <author fullname="Ari Keränen" initials="A." surname="Keränen">
              <organization>Ericsson</organization>
            </author>
            <date day="21" month="October" year="2024"/>
            <abstract>
              <t>   This document describes a publish-subscribe architecture for the
   Constrained Application Protocol (CoAP), extending the capabilities
   of CoAP communications for supporting endpoints with long breaks in
   connectivity and/or up-time.  CoAP clients publish on and subscribe
   to a topic via a corresponding topic resource at a CoAP server acting
   as broker.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-coap-pubsub-15"/>
        </reference>
        <reference anchor="I-D.ietf-core-transport-indication">
          <front>
            <title>CoAP Transport Indication</title>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <author fullname="Martine Sophie Lenders" initials="M. S." surname="Lenders">
              <organization>TUD Dresden University of Technology</organization>
            </author>
            <date day="8" month="July" year="2024"/>
            <abstract>
              <t>   The Constrained Application Protocol (CoAP, [RFC7252]) is available
   over different transports (UDP, DTLS, TCP, TLS, WebSockets), but
   lacks a way to unify these addresses.  This document provides
   terminology and provisions based on Web Linking [RFC8288] to express
   alternative transports available to a device, and to optimize
   exchanges using these.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-transport-indication-06"/>
        </reference>
        <reference anchor="I-D.irtf-t2trg-amplification-attacks">
          <front>
            <title>Amplification Attacks Using the Constrained Application Protocol (CoAP)</title>
            <author fullname="John Preuß Mattsson" initials="J. P." surname="Mattsson">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
              <organization>Energy Harvesting Solutions</organization>
            </author>
            <date day="21" month="February" year="2024"/>
            <abstract>
              <t>   Protecting Internet of Things (IoT) devices against attacks is not
   enough.  IoT deployments need to make sure that they are not used for
   Distributed Denial-of-Service (DDoS) attacks.  DDoS attacks are
   typically done with compromised devices or with amplification attacks
   using a spoofed source address.  This document gives examples of
   different theoretical amplification attacks using the Constrained
   Application Protocol (CoAP).  The goal with this document is to raise
   awareness and to motivate generic and protocol-specific
   recommendations on the usage of CoAP.  Some of the discussed attacks
   can be mitigated by not using NoSec or by using the Echo option.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-irtf-t2trg-amplification-attacks-03"/>
        </reference>
        <reference anchor="I-D.ietf-6lo-multicast-registration">
          <front>
            <title>IPv6 Neighbor Discovery Multicast and Anycast Address Listener Subscription</title>
            <author fullname="Pascal Thubert" initials="P." surname="Thubert">
         </author>
            <date day="16" month="May" year="2024"/>
            <abstract>
              <t>   This document updates the 6LoWPAN extensions to IPv6 Neighbor
   Discovery (RFC 4861, RFC 8505) to enable a listener to subscribe to
   an IPv6 anycast or multicast address; the document updates the
   Routing Protocol for Low-Power and Lossy Networks (RFC 6550, RFC
   6553) to add a new Non-Storing Multicast Mode and a new support for
   anycast addresses in Storing and Non-Storing Modes.  This document
   extends RFC 9010 to enable a 6LoWPAN Router to inject the anycast and
   multicast addresses in RPL.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-6lo-multicast-registration-19"/>
        </reference>
        <reference anchor="RFC3810">
          <front>
            <title>Multicast Listener Discovery Version 2 (MLDv2) for IPv6</title>
            <author fullname="R. Vida" initials="R." role="editor" surname="Vida"/>
            <author fullname="L. Costa" initials="L." role="editor" surname="Costa"/>
            <date month="June" year="2004"/>
            <abstract>
              <t>This document updates RFC 2710, and it specifies Version 2 of the ulticast Listener Discovery Protocol (MLDv2). MLD is used by an IPv6 router to discover the presence of multicast listeners on directly attached links, and to discover which multicast addresses are of interest to those neighboring nodes. MLDv2 is designed to be interoperable with MLDv1. MLDv2 adds the ability for a node to report interest in listening to packets with a particular multicast address only from specific source addresses or from all sources except for specific source addresses. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3810"/>
          <seriesInfo name="DOI" value="10.17487/RFC3810"/>
        </reference>
        <reference anchor="RFC6092">
          <front>
            <title>Recommended Simple Security Capabilities in Customer Premises Equipment (CPE) for Providing Residential IPv6 Internet Service</title>
            <author fullname="J. Woodyatt" initials="J." role="editor" surname="Woodyatt"/>
            <date month="January" year="2011"/>
            <abstract>
              <t>This document identifies a set of recommendations for the makers of devices and describes how to provide for "simple security" capabilities at the perimeter of local-area IPv6 networks in Internet-enabled homes and small offices. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6092"/>
          <seriesInfo name="DOI" value="10.17487/RFC6092"/>
        </reference>
        <reference anchor="RFC6550">
          <front>
            <title>RPL: IPv6 Routing Protocol for Low-Power and Lossy Networks</title>
            <author fullname="T. Winter" initials="T." role="editor" surname="Winter"/>
            <author fullname="P. Thubert" initials="P." role="editor" surname="Thubert"/>
            <author fullname="A. Brandt" initials="A." surname="Brandt"/>
            <author fullname="J. Hui" initials="J." surname="Hui"/>
            <author fullname="R. Kelsey" initials="R." surname="Kelsey"/>
            <author fullname="P. Levis" initials="P." surname="Levis"/>
            <author fullname="K. Pister" initials="K." surname="Pister"/>
            <author fullname="R. Struik" initials="R." surname="Struik"/>
            <author fullname="JP. Vasseur" initials="JP." surname="Vasseur"/>
            <author fullname="R. Alexander" initials="R." surname="Alexander"/>
            <date month="March" year="2012"/>
            <abstract>
              <t>Low-Power and Lossy Networks (LLNs) are a class of network in which both the routers and their interconnect are constrained. LLN routers typically operate with constraints on processing power, memory, and energy (battery power). Their interconnects are characterized by high loss rates, low data rates, and instability. LLNs are comprised of anything from a few dozen to thousands of routers. Supported traffic flows include point-to-point (between devices inside the LLN), point-to-multipoint (from a central control point to a subset of devices inside the LLN), and multipoint-to-point (from devices inside the LLN towards a central control point). This document specifies the IPv6 Routing Protocol for Low-Power and Lossy Networks (RPL), which provides a mechanism whereby multipoint-to-point traffic from devices inside the LLN towards a central control point as well as point-to-multipoint traffic from the central control point to the devices inside the LLN are supported. Support for point-to-point traffic is also available. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6550"/>
          <seriesInfo name="DOI" value="10.17487/RFC6550"/>
        </reference>
        <reference anchor="RFC6636">
          <front>
            <title>Tuning the Behavior of the Internet Group Management Protocol (IGMP) and Multicast Listener Discovery (MLD) for Routers in Mobile and Wireless Networks</title>
            <author fullname="H. Asaeda" initials="H." surname="Asaeda"/>
            <author fullname="H. Liu" initials="H." surname="Liu"/>
            <author fullname="Q. Wu" initials="Q." surname="Wu"/>
            <date month="May" year="2012"/>
            <abstract>
              <t>The Internet Group Management Protocol (IGMP) and Multicast Listener Discovery (MLD) are the protocols used by hosts and multicast routers to exchange their IP multicast group memberships with each other. This document describes ways to achieve IGMPv3 and MLDv2 protocol optimization for mobility and aims to become a guideline for the tuning of IGMPv3/MLDv2 Queries, timers, and counter values. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6636"/>
          <seriesInfo name="DOI" value="10.17487/RFC6636"/>
        </reference>
        <reference anchor="RFC7258">
          <front>
            <title>Pervasive Monitoring Is an Attack</title>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="May" year="2014"/>
            <abstract>
              <t>Pervasive monitoring is a technical attack that should be mitigated in the design of IETF protocols, where possible.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="188"/>
          <seriesInfo name="RFC" value="7258"/>
          <seriesInfo name="DOI" value="10.17487/RFC7258"/>
        </reference>
        <reference anchor="RFC7346">
          <front>
            <title>IPv6 Multicast Address Scopes</title>
            <author fullname="R. Droms" initials="R." surname="Droms"/>
            <date month="August" year="2014"/>
            <abstract>
              <t>This document updates the definitions of IPv6 multicast scopes and therefore updates RFCs 4007 and 4291.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7346"/>
          <seriesInfo name="DOI" value="10.17487/RFC7346"/>
        </reference>
        <reference anchor="RFC7390">
          <front>
            <title>Group Communication for the Constrained Application Protocol (CoAP)</title>
            <author fullname="A. Rahman" initials="A." role="editor" surname="Rahman"/>
            <author fullname="E. Dijk" initials="E." role="editor" surname="Dijk"/>
            <date month="October" year="2014"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for constrained devices and constrained networks. It is anticipated that constrained devices will often naturally operate in groups (e.g., in a building automation scenario, all lights in a given room may need to be switched on/off as a group). This specification defines how CoAP should be used in a group communication context. An approach for using CoAP on top of IP multicast is detailed based on existing CoAP functionality as well as new features introduced in this specification. Also, various use cases and corresponding protocol flows are provided to illustrate important concepts. Finally, guidance is provided for deployment in various network topologies.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7390"/>
          <seriesInfo name="DOI" value="10.17487/RFC7390"/>
        </reference>
        <reference anchor="RFC7731">
          <front>
            <title>Multicast Protocol for Low-Power and Lossy Networks (MPL)</title>
            <author fullname="J. Hui" initials="J." surname="Hui"/>
            <author fullname="R. Kelsey" initials="R." surname="Kelsey"/>
            <date month="February" year="2016"/>
            <abstract>
              <t>This document specifies the Multicast Protocol for Low-Power and Lossy Networks (MPL), which provides IPv6 multicast forwarding in constrained networks. MPL avoids the need to construct or maintain any multicast forwarding topology, disseminating messages to all MPL Forwarders in an MPL Domain.</t>
              <t>MPL has two modes of operation. One mode uses the Trickle algorithm to manage control-plane and data-plane message transmissions and is applicable for deployments with few multicast sources. The other mode uses classic flooding. By providing both modes and parameterization of the Trickle algorithm, an MPL implementation can be used in a variety of multicast deployments and can trade between dissemination latency and transmission efficiency.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7731"/>
          <seriesInfo name="DOI" value="10.17487/RFC7731"/>
        </reference>
        <reference anchor="RFC8323">
          <front>
            <title>CoAP (Constrained Application Protocol) over TCP, TLS, and WebSockets</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="S. Lemay" initials="S." surname="Lemay"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="B. Silverajan" initials="B." surname="Silverajan"/>
            <author fullname="B. Raymor" initials="B." role="editor" surname="Raymor"/>
            <date month="February" year="2018"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP), although inspired by HTTP, was designed to use UDP instead of TCP. The message layer of CoAP over UDP includes support for reliable delivery, simple congestion control, and flow control.</t>
              <t>Some environments benefit from the availability of CoAP carried over reliable transports such as TCP or Transport Layer Security (TLS). This document outlines the changes required to use CoAP over TCP, TLS, and WebSockets transports. It also formally updates RFC 7641 for use with these transports and RFC 7959 to enable the use of larger messages over a reliable transport.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8323"/>
          <seriesInfo name="DOI" value="10.17487/RFC8323"/>
        </reference>
        <reference anchor="RFC8710">
          <front>
            <title>Multipart Content-Format for the Constrained Application Protocol (CoAP)</title>
            <author fullname="T. Fossati" initials="T." surname="Fossati"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>This memo defines application/multipart-core, an application-independent media type that can be used to combine representations of zero or more different media types (each with a Constrained Application Protocol (CoAP) Content-Format identifier) into a single representation, with minimal framing overhead.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8710"/>
          <seriesInfo name="DOI" value="10.17487/RFC8710"/>
        </reference>
        <reference anchor="RFC9019">
          <front>
            <title>A Firmware Update Architecture for Internet of Things</title>
            <author fullname="B. Moran" initials="B." surname="Moran"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="D. Brown" initials="D." surname="Brown"/>
            <author fullname="M. Meriac" initials="M." surname="Meriac"/>
            <date month="April" year="2021"/>
            <abstract>
              <t>Vulnerabilities in Internet of Things (IoT) devices have raised the need for a reliable and secure firmware update mechanism suitable for devices with resource constraints. Incorporating such an update mechanism is a fundamental requirement for fixing vulnerabilities, but it also enables other important capabilities such as updating configuration settings and adding new functionality.</t>
              <t>In addition to the definition of terminology and an architecture, this document provides the motivation for the standardization of a manifest format as a transport-agnostic means for describing and protecting firmware updates.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9019"/>
          <seriesInfo name="DOI" value="10.17487/RFC9019"/>
        </reference>
        <reference anchor="RFC9176">
          <front>
            <title>Constrained RESTful Environments (CoRE) Resource Directory</title>
            <author fullname="C. Amsüss" initials="C." role="editor" surname="Amsüss"/>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="M. Koster" initials="M." surname="Koster"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. van der Stok" initials="P." surname="van der Stok"/>
            <date month="April" year="2022"/>
            <abstract>
              <t>In many Internet of Things (IoT) applications, direct discovery of resources is not practical due to sleeping nodes or networks where multicast traffic is inefficient. These problems can be solved by employing an entity called a Resource Directory (RD), which contains information about resources held on other servers, allowing lookups to be performed for those resources. The input to an RD is composed of links, and the output is composed of links constructed from the information stored in the RD. This document specifies the web interfaces that an RD supports for web servers to discover the RD and to register, maintain, look up, and remove information on resources. Furthermore, new target attributes useful in conjunction with an RD are defined.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9176"/>
          <seriesInfo name="DOI" value="10.17487/RFC9176"/>
        </reference>
        <reference anchor="RFC9177">
          <front>
            <title>Constrained Application Protocol (CoAP) Block-Wise Transfer Options Supporting Robust Transmission</title>
            <author fullname="M. Boucadair" initials="M." surname="Boucadair"/>
            <author fullname="J. Shallow" initials="J." surname="Shallow"/>
            <date month="March" year="2022"/>
            <abstract>
              <t>This document specifies alternative Constrained Application Protocol (CoAP) block-wise transfer options: Q-Block1 and Q-Block2.</t>
              <t>These options are similar to, but distinct from, the CoAP Block1 and Block2 options defined in RFC 7959. The Q-Block1 and Q-Block2 options are not intended to replace the Block1 and Block2 options but rather have the goal of supporting Non-confirmable (NON) messages for large amounts of data with fewer packet interchanges. Also, the Q-Block1 and Q-Block2 options support faster recovery should any of the blocks get lost in transmission.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9177"/>
          <seriesInfo name="DOI" value="10.17487/RFC9177"/>
        </reference>
        <reference anchor="RFC9124">
          <front>
            <title>A Manifest Information Model for Firmware Updates in Internet of Things (IoT) Devices</title>
            <author fullname="B. Moran" initials="B." surname="Moran"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <date month="January" year="2022"/>
            <abstract>
              <t>Vulnerabilities with Internet of Things (IoT) devices have raised the need for a reliable and secure firmware update mechanism that is also suitable for constrained devices. Ensuring that devices function and remain secure over their service lifetime requires such an update mechanism to fix vulnerabilities, update configuration settings, and add new functionality.</t>
              <t>One component of such a firmware update is a concise and machine-processable metadata document, or manifest, that describes the firmware image(s) and offers appropriate protection. This document describes the information that must be present in the manifest.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9124"/>
          <seriesInfo name="DOI" value="10.17487/RFC9124"/>
        </reference>
        <reference anchor="RFC9200">
          <front>
            <title>Authentication and Authorization for Constrained Environments Using the OAuth 2.0 Framework (ACE-OAuth)</title>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This specification defines a framework for authentication and authorization in Internet of Things (IoT) environments called ACE-OAuth. The framework is based on a set of building blocks including OAuth 2.0 and the Constrained Application Protocol (CoAP), thus transforming a well-known and widely used authorization solution into a form suitable for IoT devices. Existing specifications are used where possible, but extensions are added and profiles are defined to better serve the IoT use cases.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9200"/>
          <seriesInfo name="DOI" value="10.17487/RFC9200"/>
        </reference>
        <reference anchor="Californium" target="https://github.com/eclipse/californium">
          <front>
            <title>Eclipse Californium</title>
            <author>
              <organization>Eclipse Foundation</organization>
            </author>
            <date year="2022" month="June"/>
          </front>
        </reference>
        <reference anchor="Go-CoAP" target="https://github.com/go-ocf/go-coap">
          <front>
            <title>Go-CoAP</title>
            <author>
              <organization>Open Connectivity Foundation (OCF)</organization>
            </author>
            <date year="2022" month="June"/>
          </front>
        </reference>
        <reference anchor="libcoap" target="https://github.com/obgm/libcoap">
          <front>
            <title>libcoap</title>
            <author initials="O." surname="Bergmann" fullname="Olaf Bergmann">
              <organization>TZI</organization>
            </author>
            <date year="2022" month="June"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 1098?>

<section anchor="appendix-usecases">
      <name>Use Cases</name>
      <t>To illustrate where and how CoAP-based group communication can be used, this section summarizes the most common use cases. These use cases include both secured and non-secured CoAP usage. Each subsection below covers one particular category of use cases for CoRE. Within each category, a use case may cover multiple application areas such as home IoT, commercial building IoT (sensing and control), industrial IoT/control, or environmental sensing.</t>
      <section anchor="discovery">
        <name>Discovery</name>
        <t>Discovery of physical devices in a network, or discovery of information entities hosted on network devices, are operations that are usually required in a system during the phases of setup or (re)configuration. When a discovery use case involves devices that need to interact without having been configured previously with a common security context, unsecured CoAP communication is typically used. Discovery may involve a request to a directory server, which provides services to aid clients in the discovery process. One particular type of directory server is the CoRE Resource Directory <xref target="RFC9176"/>; and there may be other types of directories that can be used with CoAP.</t>
        <section anchor="sec-uc-dd">
          <name>Distributed Device Discovery</name>
          <t>Device discovery is the discovery and identification of networked devices -- optionally only devices of a particular class, type, model, or brand. Group communication is used for distributed device discovery, if a central directory server is not used. Typically, in distributed device discovery, a multicast request is sent to a particular address (or address range) and multicast scope of interest, and any devices configured to be discoverable will respond back. For the alternative solution of centralized device discovery a central directory server is accessed through unicast, in which case group communication is not needed. This requires that the address of the central directory is either preconfigured in each device or configured during operation using a protocol.</t>
          <t>In CoAP, device discovery can be implemented by CoAP resource discovery requesting (GET) a particular resource that the sought device class, type, model, or brand is known to respond to. It can also be implemented using CoAP resource discovery (<xref section="7" sectionFormat="of" target="RFC7252"/>) and the CoAP query interface defined in <xref section="4" sectionFormat="of" target="RFC6690"/> to find these particular resources.</t>
        </section>
        <section anchor="sec-uc-sd">
          <name>Distributed Service Discovery</name>
          <t>Service discovery is the discovery and identification of particular services hosted on network devices. Services can be identified by one or more parameters such as ID, name, protocol, version, and/or type. Distributed service discovery involves group communication to reach individual devices hosting a particular service; with a central directory server not being used.</t>
          <t>In CoAP, services are represented as resources and service discovery is implemented using resource discovery (<xref section="7" sectionFormat="of" target="RFC7252"/>) and the CoAP query interface defined in <xref section="4" sectionFormat="of" target="RFC6690"/>.</t>
        </section>
        <section anchor="sec-uc-dirdiscovery">
          <name>Directory Discovery</name>
          <t>This use case is a specific subcase of Distributed Service Discovery (<xref target="sec-uc-sd"/>), in which a device needs to identify the location of a Directory on the network to which it
can e.g., register its own offered services, or to which it can perform queries to identify and locate other devices/services it needs to access on
the network. <xref section="3.3" sectionFormat="of" target="RFC7390"/> showed an example of discovering a CoRE Resource Directory using CoAP group communication. As defined in <xref target="RFC9176"/>, a resource directory is a web entity that stores information about web resources and implements REST interfaces for registration and lookup of those resources. For example, a device can register itself to a resource directory to let it be found by other devices and/or applications.</t>
        </section>
      </section>
      <section anchor="operational-phase">
        <name>Operational Phase</name>
        <t>Operational phase use cases describe those operations that occur most frequently in a networked system, during its operational lifetime and regular operation. Regular usage is when the applications on networked devices perform the tasks they were designed for and exchange of application-related data using group communication occurs. Processes like system reconfiguration, group changes, system/device setup, extra group security changes, etc. are not part of regular operation.</t>
        <section anchor="actuator-group-control">
          <name>Actuator Group Control</name>
          <t>Group communication can be beneficial to control actuators that need to act in synchrony, as a cohesive collection, with strict timing (latency) requirements. Examples are office lighting, stage lighting, street lighting, or audio alert/Public Address systems. Sections <xref target="RFC7390" section="3.4" sectionFormat="bare"/> and <xref target="RFC7390" section="3.5" sectionFormat="bare"/> of <xref target="RFC7390"/> showed examples of lighting control of a set of 6LoWPAN-connected lights.</t>
        </section>
        <section anchor="device-group-status-request">
          <name>Device Group Status Request</name>
          <t>To properly monitor the status of systems, there may be a need for ad-hoc, unplanned status updates. Group communication can be used to quickly send out a request to a (potentially large) number of devices for specific information. Each device then responds back with the requested data. Those devices that did not respond to the request can optionally be polled again via reliable unicast communication to complete the dataset. A set of devices may be defined as a CoAP group, e.g., as intended to cover "all temperature sensors on floor 3", or "all lights in wing B". For example, it could be a status request for device temperature, most recent sensor event detected, firmware version, network load, and/or battery level.</t>
        </section>
        <section anchor="network-wide-query">
          <name>Network-wide Query</name>
          <t>In some cases, a whole network or subnet of multiple IP devices needs to be queried for status or other information. This is similar to the previous use case except that the set of devices is not defined in terms of its function/type but in terms of its network location. Technically this is also similar to distributed service discovery (<xref target="sec-uc-sd"/>) where a query is processed by all devices on a network -- except that the query is not about services offered by the device, but rather specific operational data is requested.</t>
        </section>
        <section anchor="network-wide-group-notification">
          <name>Network-wide / Group Notification</name>
          <t>In some cases, a whole network, or subnet of multiple IP devices, or a specific target set of devices needs to be notified of a status change or other information. This is similar to the previous two use cases except that the recipients are not expected to respond with some information. Unreliable notification can be acceptable in some use cases, in which a recipient does not respond with a confirmation of having received the notification. In such a case, the receiving CoAP server does not have to create a CoAP response. If the sender needs confirmation of reception, the CoAP servers can be configured for that resource to respond with a 2.xx success status after processing a notification request successfully.</t>
        </section>
      </section>
      <section anchor="software-update">
        <name>Software Update</name>
        <t>Group communication can be useful to efficiently distribute new software (firmware, image, application, etc.) to a set of multiple devices, e.g., by relying on the SUIT firmware update architecture <xref target="RFC9019"/> and its manifest information model <xref target="RFC9124"/>. In this case, a CoAP group can be defined in terms of the device type of its members: all devices in the target CoAP group are known to be capable of installing and running the new software. The software is distributed as a series of smaller blocks that are collected by all devices and stored in memory. All devices in the target CoAP group are usually responsible for integrity verification of the received software; which can be done per-block or for the entire software image once all blocks have been received. Due to the inherent unreliability of CoAP multicast, there needs to be a backup mechanism (e.g., implemented using CoAP unicast) by which a device can individually request missing blocks of a whole software image/entity. Prior to a multicast software update, the CoAP group of recipients can be separately notified that there is new software available and coming, using the above network-wide or group notification.</t>
      </section>
    </section>
    <section anchor="sec-examples-app-group-naming">
      <name>Examples of Group Naming for Application Groups</name>
      <t>This section provides examples for the different methods that can be used to name application groups, as defined in <xref target="sec-groupnaming-app"/>.</t>
      <t>The shown examples consider a CoAP group identified by the group hostname grp.example. Its members are CoAP servers listening to the associated IP multicast address ff35:30:2001:db8:f1::8000:1 and port number 5685.</t>
      <t>Note that a group hostname is used in most examples to improve readability. In practice, as discussed in <xref target="sec-groupnaming-app"/>, using an IP address literal as the host subcomponent of the Group URI can reduce the size of the CoAP request message, in case the Uri-Host Option can be elided.</t>
      <t>Also note that the Uri-Port Option does not appear in the examples, since the port number 5685 is already included in the CoAP request's UDP header (which is not shown in the examples) in the destination port field.</t>
      <section anchor="sec-examples-app-group-naming-path">
        <name>Group Naming using the URI Path Component</name>
        <t><xref target="fig-gname-path-example"/> provides an example where the URI path component is used for naming application groups.</t>
        <figure anchor="fig-gname-path-example">
          <name>Example of application group name in the URI path (1/2)</name>
          <artwork><![CDATA[
   Application group name: gp1

   Group URI: coap://grp.example:5685/gp/gp1/light?foo=bar

   CoAP group request
      Header: GET (T=NON, Code=0.01, MID=0x7d41)
      Uri-Host: "grp.example"
      Uri-Path: "gp"
      Uri-Path: "gp1"
      Uri-Path: "light"
      Uri-Query: "foo=bar"
]]></artwork>
        </figure>
        <t><xref target="fig-gname-path-example-2"/> provides a different example, where an IPv6 literal address and the default CoAP port number 5683 are used in the authority component, which yields a compact CoAP request. Also, the resource structure is different in this example.</t>
        <figure anchor="fig-gname-path-example-2">
          <name>Example of application group name in the URI path (2/2)</name>
          <artwork><![CDATA[
   Application group name: gp1

   Group URI: coap://[ff35:30:2001:db8:f1::8000:1]/g/gp1/li

   CoAP group request
      Header: POST (T=NON, Code=0.02, MID=0x7d41)
      Uri-Path: "g"
      Uri-Path: "gp1"
      Uri-Path: "li"
]]></artwork>
        </figure>
      </section>
      <section anchor="sec-examples-app-group-naming-query">
        <name>Group Naming using the URI Query Component</name>
        <t><xref target="fig-gname-query1-example"/> provides an example where the URI query component is used for naming application groups. In particular, it considers the first alternative discussed in <xref target="sec-groupnaming-app"/>, where the URI query component consists of only one parameter, which has no value and has the name of the application group as its own identifier.</t>
        <figure anchor="fig-gname-query1-example">
          <name>Example of application group name in the URI query (1/2)</name>
          <artwork><![CDATA[
   Application group name: gp1

   Group URI: coap://grp.example:5685/light?gp1

   CoAP group request
      Header: GET (T=NON, Code=0.01, MID=0x7d41)
      Uri-Host: "grp.example"
      Uri-Path: "light"
      Uri-Query: "gp1"
]]></artwork>
        </figure>
        <t><xref target="fig-gname-query2-example"/> provides another example, which considers the second alternative discussed in <xref target="sec-groupnaming-app"/>. In particular, the URI query component includes a query parameter "gp" as designated indicator, with value the name of the application group.</t>
        <figure anchor="fig-gname-query2-example">
          <name>Example of application group name in the URI query (2/2)</name>
          <artwork><![CDATA[
   Application group name: gp1

   Group URI: coap://grp.example:5685/light?foo=bar&gp=gp1

   CoAP group request
      Header: GET (T=NON, Code=0.01, MID=0x7d41)
      Uri-Host: "grp.example"
      Uri-Path: "light"
      Uri-Query: "foo=bar"
      Uri-Query: "gp=gp1"
]]></artwork>
        </figure>
      </section>
      <section anchor="sec-examples-app-group-naming-authority">
        <name>Group Naming using the URI Authority Component</name>
        <t><xref target="fig-gname-auth-example"/> provides an example where the URI authority component as a whole is used for encoding the name of the application group.
Note that, although the port information (5685) is not carried as a CoAP Option, it is still transported within the UDP message (in the UDP destination port field).
So, effectively, the application group name is transported in the UDP message as two parts.</t>
        <figure anchor="fig-gname-auth-example">
          <name>Example of application group name defined by the URI authority</name>
          <artwork><![CDATA[
   Application group name: grp.example:5685

   Group URI: coap://grp.example:5685/light?foo=bar

   CoAP group request
      Header: GET (T=NON, Code=0.01, MID=0x7d41)
      Uri-Host: "grp.example"
      Uri-Path: "light"
      Uri-Query: "foo=bar"
]]></artwork>
        </figure>
        <t><xref target="fig-gname-host-example"/> provides an example where the URI host subcomponent of the URI authority component is used for encoding the name of the application group.
Specifically, the first label of the DNS name is used.</t>
        <figure anchor="fig-gname-host-example">
          <name>Example of application group name encoded in the URI host</name>
          <artwork><![CDATA[
   Application group name: grp42

   Group URI: coap://grp42.example:5685/light?foo=bar

   CoAP group request
      Header: GET (T=NON, Code=0.01, MID=0x7d41)
      Uri-Host: "grp42.example"
      Uri-Path: "light"
      Uri-Query: "foo=bar"
]]></artwork>
        </figure>
        <t><xref target="fig-gname-port-example"/> provides an example where the URI port subcomponent of the URI authority component is used for naming application groups.
It uses a UDP port from the dynamic port range. Multiple application groups could be defined this way, each represented by a number and associated port in the dynamic port range.</t>
        <figure anchor="fig-gname-port-example">
          <name>Example of application group name in the URI port</name>
          <artwork><![CDATA[
   Application group name: 55685

   Group URI: coap://grp.example:55685/light?foo=bar

   CoAP group request
      Header: GET(T=NON, Code=0.01, MID=0x7d41)
      Uri-Host: "grp.example"
      Uri-Path: "light"
      Uri-Query: "foo=bar"
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="sec-examples-group-discovery">
      <name>Examples of Group Discovery from CoAP Servers</name>
      <t>This section provides examples for the different methods that a CoAP client can use to discover application groups and CoAP groups by interacting with CoAP servers, as defined in <xref target="sssec-discovery-from-servers"/>.</t>
      <t>The examples build on the same assumptions considered in <xref target="sssec-discovery-from-servers"/>. In addition, a CoAP group is used and is identified by the URI authority grp.example:5685.</t>
      <section anchor="sec-examples-group-discovery-1">
        <name>Application Groups Associated with a CoAP Group</name>
        <t><xref target="fig-app-gp-discovery-example1"/> provides an example where a CoAP client discovers all the application groups associated with a specific CoAP group.</t>
        <t>As a result, the client gains knowledge of: i) the set of servers that are members of the specified CoAP group and member of any of the associated application groups; ii) for each of those servers, the name of the application groups where the server is a member and that are associated with the CoAP group.</t>
        <t>Each of the servers S1 and S2 is identified by the IP source address of the CoAP response. If the client wishes to discover resources that a particular server hosts within a particular application group, it may use unicast discovery request(s) to this server, i.e., to its respective unicast IP address. Alternatively the client may use the discovered group resource type (e.g., rt=g.light) to infer which resources are present below the group resource.</t>
        <t>The semantics "g.&lt;GROUPTYPE&gt;" for the values of the attribute "rt" is exclusively intended to support examples in this document. To be effectively usable, such Resource Type values have to be registered in the "Resource Type (rt=) Link Target Attribute Values" IANA registry <xref target="Resource.Type.Link.Target.Attribute.Values"/> within the "Constrained RESTful Environments (CoRE) Parameters" registry group.</t>
        <figure anchor="fig-app-gp-discovery-example1">
          <name>Discovery of application groups associated with a CoAP group</name>
          <artwork><![CDATA[
   // Request to all members of the CoAP group
   Req: GET coap://grp.example:5685/.well-known/core?rt=g.*

   // Response from server S1, as member of:
   //   - The CoAP group "grp.example:5685"
   //   - The application group "gp1"
   Res: 2.05 (Content)
   Content-Format: 40 (application/link-format)
   Payload:
   </gp/gp1>;rt=g.light

   // Response from server S2, as member of:
   // - The CoAP group "grp.example:5685"
   // - The application groups "gp1" and "gp2"
   Res: 2.05 (Content)
   Content-Format: 40 (application/link-format)
   Payload:
   </gp/gp1>;rt=g.light,
   </gp/gp2>;rt=g.temp
]]></artwork>
        </figure>
      </section>
      <section anchor="sec-examples-group-discovery-2">
        <name>Members of a Given Application Group</name>
        <t><xref target="fig-app-gp-discovery-example2"/> provides an example where a CoAP client discovers the CoAP servers that are members of a specific application group and the CoAP group associated with the application group.</t>
        <t>Note that, unlike in the example shown in <xref target="sec-examples-group-discovery-1"/>, now the servers need to respond with an absolute URI and not a relative URI. This is necessary because the responding CoAP endpoint serving the Link Format document (on port 5683) is a different CoAP endpoint from the one hosting the group resource "gp1" (on port 5685). Due to this situation, the responding server includes the full (absolute) URI in the Link Format response from which the client can conveniently gain knowledge of the CoAP group.</t>
        <t>Also note that a server could equally well respond with the literal IPv6 multicast address within square brackets instead of the CoAP group name "grp.example". In that case, the client would still gain knowledge of the CoAP group, albeit in a different representation.</t>
        <figure anchor="fig-app-gp-discovery-example2">
          <name>Discovery of members of an application group, together with the associated CoAP group</name>
          <artwork><![CDATA[
   // Request to realm-local members of the application group "gp1"
   Req: GET coap://[ff03::fd]/.well-known/core?href=/gp/gp1

   // CoAP response from server S1, as member of:
   //   - The CoAP group "grp.example:5685"
   //   - The application group "gp1"
   Res: 2.05 (Content)
   Content-Format: 40 (application/link-format)
   Payload:
   <coap://grp.example:5685/gp/gp1>;rt=g.light

   // CoAP response from server S2, as member of:
   // - The CoAP group "grp.example:5685"
   // - The application groups "gp1"
   Res: 2.05 (Content)
   Content-Format: 40 (application/link-format)
   Payload:
   <coap://grp.example:5685/gp/gp1>;rt=g.light
]]></artwork>
        </figure>
      </section>
      <section anchor="sec-examples-group-discovery-3">
        <name>Members of any Application Group of a Given Type</name>
        <t><xref target="fig-app-gp-discovery-example3"/> provides an example where a CoAP client  discovers the CoAP servers that are members of any application group of a specific type, and the CoAP group associated with those application groups.</t>
        <figure anchor="fig-app-gp-discovery-example3">
          <name>Discovery of members of application groups of a specified type, and of the associated CoAP group</name>
          <artwork><![CDATA[
   // Request to realm-local members of application groups
   // with group type "g.temp"
   Req: GET coap://[ff03::fd]/.well-known/core?rt=g.temp

   // Response from server S1, as member of:
   //   - The CoAP group "grp.example:5685"
   //   - The application group "gp1" of type "g.temp"
   Res: 2.05 (Content)
   Content-Format: 40 (application/link-format)
   Payload:
   <coap://grp.example:5685/gp/gp1>;rt=g.temp

   // Response from server S2, as member of:
   //   - The CoAP group "grp.example:5685"
   //   - The application groups "gp1" and "gp2" of type "g.temp"
   Res: 2.05 (Content)
   Content-Format: 40 (application/link-format)
   Payload:
   <coap://grp.example:5685/gp/gp1>;rt=g.temp,
   <coap://grp.example:5685/gp/gp2>;rt=g.temp
]]></artwork>
        </figure>
      </section>
      <section anchor="sec-examples-group-discovery-4">
        <name>Members of any Application Group in the Network</name>
        <t><xref target="fig-app-gp-discovery-example4"/> provides an example where a CoAP client discovers the CoAP servers that are members of any application group configured in the 6LoWPAN wireless mesh network of the client, and the CoAP group associated with each application group. In this example, the scope is realm-local to address all servers in the current 6LoWPAN wireless mesh network of the client.</t>
        <t>The semantics "g.&lt;GROUPTYPE&gt;" for the values of the attribute "rt" is exclusively intended to support examples in this document. To be effectively usable, such Resource Type values have to be registered in the "Resource Type (rt=) Link Target Attribute Values" IANA registry <xref target="Resource.Type.Link.Target.Attribute.Values"/> within the "Constrained RESTful Environments (CoRE) Parameters" registry group.</t>
        <figure anchor="fig-app-gp-discovery-example4">
          <name>Discovery of the resources and members of any application group, and of the associated CoAP group</name>
          <artwork><![CDATA[
   // Request to realm-local members of any application group
   Req: GET coap://[ff03::fd]/.well-known/core?rt=g.*

   // Response from server S1, as member of:
   //   - The CoAP groups "grp.example:5685" and "grp2.example"
   //   - The application groups "gp1" and "gp5"
   Res: 2.05 (Content)
   Content-Format: 40 (application/link-format)
   Payload:
   <coap://grp.example:5685/gp/gp1>;rt=g.light,
   <coap://grp2.example/gp/gp5>;rt=g.lock

   // Response from server S2, as member of:
   //   - The CoAP group "grp.example:5685"
   //   - The application groups "gp1" and "gp2"
   Res: 2.05 (Content)
   Content-Format: 40 (application/link-format)
   Payload:
   <coap://grp.example:5685/gp/gp1>;rt=g.light,
   <coap://grp.example:5685/gp/gp2>;rt=g.light

   // Response from server S3, as member of:
   //   - The CoAP group "grp2.example"
   //   - The application group "gp5"
   Res: 2.05 (Content)
   Content-Format: 40 (application/link-format)
   Payload:
   <coap://grp2.example/gp/gp5>;rt=g.lock
]]></artwork>
        </figure>
        <t>Alternatively, some applications may use the "rt" attribute on a parent resource to denote support for a particular REST API to access child resources.</t>
        <t>For instance, <xref target="fig-app-gp-discovery-example5"/> provides a different example where a custom Link Format attribute "gpt" is used to denote the group type within the scope of the application/system. An alternative, shorter encoding (not shown in the figure) is to use only the value "1" for each "gpt" attribute, in order to denote that the resource is of type application group. In that case, information about the semantics/API of the group resource is disclosed only via the "rt" attribute as shown in the figure.</t>
        <figure anchor="fig-app-gp-discovery-example5">
          <name>Example of using a custom 'gpt' link attribute to denote group type</name>
          <artwork><![CDATA[
   // Request to realm-local members of any application group
   Req: GET coap://[ff03::fd]/.well-known/core?gpt=*

   // Response from server S1, as member of:
   //   - The CoAP groups "grp.example:5685" and "grp2.example"
   //   - The application groups "gp1" and "gp5"
   Res: 2.05 (Content)
   Content-Format: 40 (application/link-format)
   Payload:
   <coap://grp.example:5685/gp/gp1>;rt=oic.d.light;gpt=light,
   <coap://grp2.example/gp/gp5>;rt=oic.d.smartlock;gpt=lock

   // Response from server S2, as member of:
   //   - The CoAP group "grp.example:5685"
   //   - The application groups "gp1" and "gp2"
   Res: 2.05 (Content)
   Content-Format: 40 (application/link-format)
   Payload:
   <coap://grp.example:5685/gp/gp1>;rt=oic.d.light;gpt=light,
   <coap://grp.example:5685/gp/gp2>;rt=oic.d.light;gpt=light

   // Response from server S3, as member of:
   //   - The CoAP group "grp2.example"
   //   - The application group "gp5"
   Res: 2.05 (Content)
   Content-Format: 40 (application/link-format)
   Payload:
   <coap://grp2.example/gp/gp5>;rt=oic.d.smartlock;gpt=lock
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="sec-examples-exchanges">
      <name>Examples of Message Exchanges</name>
      <t>This section provides examples of different message exchanges when CoAP is used with group communication. The examples consider:</t>
      <ul spacing="normal">
        <li>
          <t>A client with address ADDR_CLIENT and port number PORT_CLIENT.</t>
        </li>
        <li>
          <t>A CoAP group associated with the IP multicast address ADDR_GRP and port number PORT_GRP.</t>
        </li>
        <li>
          <t>An application group "gp1" associated with the CoAP group above.</t>
        </li>
        <li>
          <t>Three servers A, B, and C, all of which are members of the CoAP group above and of the application group "gp1". Each server X (with X equal to A, B, or C): listens to its own address ADDR_X and port number PORT_X; and listens to the address ADDR_GRP and port number PORT_GRP. For each server its PORT_X may be different from PORT_GRP or may be equal to it, in general.</t>
        </li>
      </ul>
      <t>In <xref target="fig-exchange-example"/>, the client sends a Non-confirmable GET request to the CoAP group, targeting the resource "temperature" in the application group "gp1". All servers reply with a 2.05 (Content) response, although the response from server B is lost. As source port number of their response, servers A and B use the destination port number of the request, i.e., PORT_GRP. Instead, server C uses its own port number PORT_C.</t>
      <figure anchor="fig-exchange-example">
        <name>Example of Non-confirmable group request, followed by Non-confirmable Responses</name>
        <artwork><![CDATA[
Client              A  B  C
   |                |  |  |
   |  GET           |  |  |
   +-------+------->|  |  | Source: ADDR_CLIENT:PORT_CLIENT
   |        \       |  |  | Destination: ADDR_GRP:PORT_GRP
   |         `.------->|  | Header: GET (T=NON, Code=0.01, MID=0x7d41)
   |           `.   |  |  | Token: 0x86
   |             `------->| Uri-Path: "gp"
   |                |  |  | Uri-Path: "gp1"
   |                |  |  | Uri-Path: "temperature"
   |                |  |  |
   |<---------------+  |  | Source: ADDR_A:PORT_GRP
   |      2.05      |  |  | Destination: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Header: 2.05 (T=NON, Code=2.05, MID=0x60b1)
   |                |  |  | Token: 0x86
   |                |  |  | Payload: "22.3 C"
   |                |  |  |
   |   X---------------+  | Source: ADDR_B:PORT_GRP
   |      2.05      |  |  | Destination: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Header: 2.05 (T=NON, Code=2.05, MID=0x01a0)
   |                |  |  | Token: 0x86
   |                |  |  | Payload: "20.9 C"
   |                |  |  |
   |                |  |  |
   |<---------------------+ Source: ADDR_C:PORT_C
   |      2.05      |  |  | Destination: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Header: 2.05 (T=NON, Code=2.05, MID=0x952a)
   |                |  |  | Token: 0x86
   |                |  |  | Payload: "21.0 C"
   |                |  |  |
]]></artwork>
      </figure>
      <t>In <xref target="fig-exchange-example-observe"/>, the client sends a Non-confirmable GET request to the CoAP group, targeting and requesting to observe the resource "temperature" in the application group "gp1". All servers reply with a 2.05 (Content) notification response. As source port number of their response, servers A and B use the destination port number of the request, i.e., PORT_GRP. Instead, server C uses its own port number PORT_C. Some time later, all servers send a 2.05 (Content) notification response, with the new representation of the "temperature" resource as payload.</t>
      <figure anchor="fig-exchange-example-observe">
        <name>Example of Non-confirmable Observe group request, followed by Non-confirmable Responses as Observe notifications</name>
        <artwork><![CDATA[
Client              A  B  C
   |                |  |  |
   |  GET           |  |  |
   +-------+------->|  |  | Source: ADDR_CLIENT:PORT_CLIENT
   |        \       |  |  | Destination: ADDR_GRP:PORT_GRP
   |         `.------->|  | Header: GET (T=NON, Code=0.01, MID=0x7d41)
   |           `.   |  |  | Token: 0x86
   |             `------->| Observe: 0 (register)
   |                |  |  | Uri-Path: "gp"
   |                |  |  | Uri-Path: "gp1"
   |                |  |  | Uri-Path: "temperature"
   |                |  |  |
   |<---------------+  |  | Source: ADDR_A:PORT_GRP
   |      2.05      |  |  | Destination: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Header: 2.05 (T=NON, Code=2.05, MID=0x60b1)
   |                |  |  | Token: 0x86
   |                |  |  | Observe: 3
   |                |  |  | Payload: "22.3 C"
   |                |  |  |
   |<------------------+  | Source: ADDR_B:PORT_GRP
   |      2.05      |  |  | Destination: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Header: 2.05 (T=NON, Code=2.05, MID=0x01a0)
   |                |  |  | Token: 0x86
   |                |  |  | Observe: 13
   |                |  |  | Payload: "20.9 C"
   |                |  |  |
   |<---------------------+ Source: ADDR_C:PORT_C
   |      2.05      |  |  | Destination: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Header: 2.05 (T=NON, Code=2.05, MID=0x952a)
   |                |  |  | Token: 0x86
   |                |  |  | Observe: 23
   |                |  |  | Payload: "21.0 C"
   |                |  |  |

   // The temperature changes ...

   |                |  |  |
   |<---------------+  |  | Source: ADDR_A:PORT_GRP
   |      2.05      |  |  | Destination: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Header: 2.05 (T=NON, Code=2.05, MID=0x60b2)
   |                |  |  | Token: 0x86
   |                |  |  | Observe: 7
   |                |  |  | Payload: "32.3 C"
   |                |  |  |
   |<------------------+  | Source: ADDR_B:PORT_GRP
   |      2.05      |  |  | Destination: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Header: 2.05 (T=NON, Code=2.05, MID=0x01a1)
   |                |  |  | Token: 0x86
   |                |  |  | Observe: 18
   |                |  |  | Payload: "30.9 C"
   |                |  |  |
   |<---------------------+ Source: ADDR_C:PORT_C
   |      2.05      |  |  | Destination: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Header: 2.05 (T=NON, Code=2.05, MID=0x952b)
   |                |  |  | Token: 0x86
   |                |  |  | Observe: 29
   |                |  |  | Payload: "31.0 C"
   |                |  |  |
]]></artwork>
      </figure>
      <t>In <xref target="fig-exchange-example-blockwise"/>, the client sends a Non-confirmable GET request to the CoAP group, targeting the resource "log" in the application group "gp1", and requesting a blockwise transfer. All servers reply with a 2.05 (Content) response including the first block. As source port number of its response, each server uses its own port number. After obtaining the first block, the client requests the following blocks separately from each server, by means of unicast exchanges.</t>
      <figure anchor="fig-exchange-example-blockwise">
        <name>Example of Non-confirmable group request starting a blockwise transfer, followed by Non-confirmable Responses with the first block. The transfer continues over confirmable unicast exchanges</name>
        <artwork><![CDATA[
Client              A  B  C
   |                |  |  |
   |  GET           |  |  |
   +-------+------->|  |  | Source: ADDR_CLIENT:PORT_CLIENT
   |        \       |  |  | Destination: ADDR_GRP:PORT_GRP
   |         `.------->|  | Header: GET (T=NON, Code=0.01, MID=0x7d41)
   |           `.   |  |  | Token: 0x86
   |             `------->| Uri-Path: "gp"
   |                |  |  | Uri-Path: "gp1"
   |                |  |  | Uri-Path: "log"
   |                |  |  | Block2: 0/0/64
   |                |  |  |
   |<---------------+  |  | Source: ADDR_A:PORT_A
   |      2.05      |  |  | Destination: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Header: 2.05 (T=NON, Code=2.05, MID=0x60b1)
   |                |  |  | Token: 0x86
   |                |  |  | Block2: 0/1/64
   |                |  |  | Payload: 0x0a00 ...
   |                |  |  |
   |<------------------+  | Source: ADDR_B:PORT_B
   |      2.05      |  |  | Destination: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Header: 2.05 (T=NON, Code=2.05, MID=0x01a0)
   |                |  |  | Token: 0x86
   |                |  |  | Block2: 0/1/64
   |                |  |  | Payload: 0x0b00 ...
   |                |  |  |
   |<---------------------+ Source: ADDR_C:PORT_C
   |      2.05      |  |  | Destination: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Header: 2.05 (T=NON, Code=4.04, MID=0x952a)
   |                |  |  | Token: 0x86
   |                |  |  | Block2: 0/1/64
   |                |  |  | Payload: 0x0c00 ...
   |                |  |  |
   |      GET       |  |  |
   +--------------->|  |  | Source: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Destination: ADDR_A:PORT_A
   |                |  |  | Header: GET (T=CON, Code=0.01, MID=0x7d42)
   |                |  |  | Token: 0xa6
   |                |  |  | Uri-Path: "gp"
   |                |  |  | Uri-Path: "gp1"
   |                |  |  | Uri-Path: "log"
   |                |  |  | Block2: 1/0/64
   |                |  |  |
   |<---------------+  |  | Source: ADDR_A:PORT_A
   |      2.05      |  |  | Destination: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Header: 2.05 (T=ACK, Code=2.05, MID=0x7d42)
   |                |  |  | Token: 0xa6
   |                |  |  | Block2: 1/1/64
   |                |  |  | Payload: 0x0a01 ...
   |                |  |  |
   |      GET       |  |  |
   +--------------->|  |  | Source: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Destination: ADDR_A:PORT_A
   |                |  |  | Header: GET (T=CON, Code=0.01, MID=0x7d43)
   |                |  |  | Token: 0xa7
   |                |  |  | Uri-Path: "gp"
   |                |  |  | Uri-Path: "gp1"
   |                |  |  | Uri-Path: "log"
   |                |  |  | Block2: 2/0/64
   |                |  |  |
   |<---------------+  |  | Source: ADDR_A:PORT_A
   |      2.05      |  |  | Destination: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Header: 2.05 (T=ACK, Code=2.05, MID=0x7d43)
   |                |  |  | Token: 0xa7
   |                |  |  | Block2: 2/0/64
   |                |  |  | Payload: 0x0a02 ...
   |                |  |  |
   |      GET       |  |  |
   +------------------>|  | Source: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Destination: ADDR_B:PORT_B
   |                |  |  | Header: GET (T=CON, Code=0.01, MID=0x7d44)
   |                |  |  | Token: 0xb6
   |                |  |  | Uri-Path: "gp"
   |                |  |  | Uri-Path: "gp1"
   |                |  |  | Uri-Path: "log"
   |                |  |  | Block2: 1/0/64
   |                |  |  |
   |<------------------+  | Source: ADDR_B:PORT_B
   |      2.05      |  |  | Destination: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Header: 2.05 (T=ACK, Code=2.05, MID=0x7d44)
   |                |  |  | Token: 0xb6
   |                |  |  | Block2: 1/1/64
   |                |  |  | Payload: 0x0b01 ...
   |                |  |  |
   |      GET       |  |  |
   +------------------>|  | Source: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Destination: ADDR_C:PORT_B
   |                |  |  | Header: GET (T=CON, Code=0.01, MID=0x7d45)
   |                |  |  | Token: 0xb7
   |                |  |  | Uri-Path: "gp"
   |                |  |  | Uri-Path: "gp1"
   |                |  |  | Uri-Path: "log"
   |                |  |  | Block2: 2/0/64
   |                |  |  |
   |<------------------+  | Source: ADDR_B:PORT_B
   |      2.05      |  |  | Destination: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Header: 2.05 (T=ACK, Code=2.05, MID=0x7d45)
   |                |  |  | Token: 0xb7
   |                |  |  | Block2: 2/0/64
   |                |  |  | Payload: 0x0b02 ...
   |                |  |  |
   |      GET       |  |  |
   +--------------------->| Source: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Destination: ADDR_C:PORT_C
   |                |  |  | Header: GET (T=CON, Code=0.01, MID=0x7d46)
   |                |  |  | Token: 0xc6
   |                |  |  | Uri-Path: "gp"
   |                |  |  | Uri-Path: "gp1"
   |                |  |  | Uri-Path: "log"
   |                |  |  | Block2: 1/0/64
   |                |  |  |
   |<---------------------+ Source: ADDR_C:PORT_C
   |      2.05      |  |  | Destination: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Header: 2.05 (T=ACK, Code=2.05, MID=0x7d46)
   |                |  |  | Token: 0xc6
   |                |  |  | Block2: 1/1/64
   |                |  |  | Payload: 0x0c01 ...
   |                |  |  |
   |      GET       |  |  |
   +--------------------->| Source: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Destination: ADDR_C:PORT_C
   |                |  |  | Header: GET (T=CON, Code=0.01, MID=0x7d47)
   |                |  |  | Token: 0xc7
   |                |  |  | Uri-Path: "gp"
   |                |  |  | Uri-Path: "gp1"
   |                |  |  | Uri-Path: "log"
   |                |  |  | Block2: 2/0/64
   |                |  |  |
   |<---------------------+ Source: ADDR_C:PORT_C
   |      2.05      |  |  | Destination: ADDR_CLIENT:PORT_CLIENT
   |                |  |  | Header: 2.05 (T=ACK, Code=2.05, MID=0x7d47)
   |                |  |  | Token: 0xc7
   |                |  |  | Block2: 2/0/64
   |                |  |  | Payload: 0x0c02 ...
   |                |  |  |

]]></artwork>
      </figure>
    </section>
    <section anchor="sec-issues-forward-proxies">
      <name>Issues and Limitations with Forward-Proxies</name>
      <t><xref target="sec-proxy-forward"/> defines how a forward-proxy sends (e.g., multicasts) a CoAP group request to the group URI specified in the request from the client. After that, the proxy receives the responses and forwards all the individual (unicast) responses back to the client.</t>
      <t>However, there are certain issues and limitations with this approach:</t>
      <ul spacing="normal">
        <li>
          <t>The CoAP client component that has sent the unicast CoAP group request to the proxy may be expecting only one (unicast) response, as usual for a CoAP unicast request. Instead, it receives multiple (unicast) responses, potentially leading to fault conditions in the component or to discarding any received responses following the first one. This issue may occur even if the application calling the CoAP client component is aware that the forward-proxy is going to forward the CoAP group request to the group URI.</t>
        </li>
        <li>
          <t>Each individual CoAP response received by the client will appear to originate (based on its IP source address) from the CoAP proxy, and not from the server that produced the response. This makes it impossible for the client to identify the server that produced each response, unless the server identity is contained as a part of the response payload or inside a CoAP option in the response.</t>
        </li>
        <li>
          <t>Unlike a CoAP client, the proxy is likely to lack "application context". In particular, the proxy is not expected to know how many members there are in the CoAP group (not even the order of magnitude), how many members of that group will actually respond, or the minimal amount/percentage of those that will respond.  </t>
          <t>
Therefore, while still capable to forward the group request to the CoAP group and the corresponding responses to the client, the proxy does not know and cannot reliably determine for how long to collect responses, before it stops forwarding them to the client.  </t>
          <t>
In principle, a CoAP client that is not using a proxy might face the same problems in collecting responses to a group request. However, unlike a CoAP proxy, the client itself would typically have application-specific rules or knowledge on how to handle this situation. For example, a CoAP client could monitor incoming responses and use this information to decide for how long to continue collecting responses</t>
        </li>
      </ul>
      <t>An alternative solution is for the proxy to collect all the individual (unicast) responses to a CoAP group request and then send back only a single (aggregated) response to the client. However, this solution brings up new issues:</t>
      <ul spacing="normal">
        <li>
          <t>Like for the approach discussed above, the proxy does not know for how long to collect responses before sending back the aggregated response to the client. Analogous considerations apply to this approach too, both on the client and proxy side.</t>
        </li>
        <li>
          <t>There is no default format defined in CoAP for aggregation of multiple responses into a single response. Such a format could be standardized based on, for example, the multipart Content-Format <xref target="RFC8710"/>.</t>
        </li>
      </ul>
      <t>Finally, <xref target="sec-proxy-forward"/> refers to <xref target="RFC8075"/> for the operation of HTTP-to-CoAP proxies for multicast CoAP requests. This relies on the "application/http" media type to let the proxy return multiple CoAP responses -- each translated to a HTTP response -- back to the HTTP client. Of course, in this case the HTTP client sending a group URI to the proxy needs to be aware that it is going to receive this format, and needs to be able to decode it into the responses of multiple CoAP servers. Also, the IP source address of each CoAP response cannot be determined anymore from the "application/http" response. The HTTP client may still be able to identify the CoAP servers by other means such as application-specific information in the response payload.</t>
    </section>
    <section anchor="sec-issues-reverse-proxies">
      <name>Issues and Limitations with Reverse-Proxies</name>
      <t><xref target="sec-proxy-reverse"/> defines how a reverse-proxy sends a group request to servers in a CoAP group, over a one-to-many transport such as IP/UDP multicast. This results in certain issues and limitations:</t>
      <ul spacing="normal">
        <li>
          <t>The three issues and limitations defined in <xref target="sec-proxy-forward"/> for a forward proxy apply to a reverse-proxy as well.</t>
        </li>
        <li>
          <t>A reverse-proxy may have preconfigured time duration(s) that are used for collecting server responses and forwarding these back to the client. These duration(s) may be set as global configuration or as resource-specific configurations. If there is such preconfiguration, then an explicit signaling of the time period in the client's request as defined in <xref target="I-D.ietf-core-groupcomm-proxy"/> is not necessarily needed. Note that a reverse-proxy is in an explicit relation with the origin servers it stands in for. Thus, compared to a forward-proxy, it has a much better basis for determining and configuring such time durations.</t>
        </li>
        <li>
          <t>A client that is configured to access a reverse-proxy resource (i.e., one that triggers a CoAP group communication request) should be configured also to handle potentially multiple responses with the same Token value caused by a single request.  </t>
          <t>
That is, the client needs to preserve the Token value used for the request also after the reception of the first response forwarded back by the proxy (see <xref target="sec-request-response-multi"/>) and keep the request open to potential further responses with this Token. This requirement can be met by a combination of client implementation and proper proxied group communication configuration on the client.</t>
        </li>
      </ul>
    </section>
    <section anchor="sec-document-updates" removeInRFC="true">
      <name>Document Updates</name>
      <section anchor="sec-11-12">
        <name>Version -11 to -12</name>
        <ul spacing="normal">
          <li>
            <t>Clarified how a group name can be included in a URI path for reverse proxies; removed reference to URI templates for reverse proxies.</t>
          </li>
          <li>
            <t>Clarified the issue of identical ETags from multiple servers and added strategies to cope with this. Removed recommendation to not use such duplicate ETags.</t>
          </li>
          <li>
            <t>Simplified section on application group naming using URI authority and corresponding appendix examples; declaring new Option solution out of scope.</t>
          </li>
          <li>
            <t>Added application group resource URI path(s) in Figure 1.</t>
          </li>
          <li>
            <t>Clarified outcome of the RFC 7390 experiment on group membership configuration protocol.</t>
          </li>
          <li>
            <t>Clarified that rt=g.&lt;GROUPTYPE&gt; is used just as an example.</t>
          </li>
          <li>
            <t>Made RFC 7967 a normative reference.</t>
          </li>
          <li>
            <t>Generalized resending of a group request with different Message ID.</t>
          </li>
          <li>
            <t>Switched <bcp14>SHOULD</bcp14> to <bcp14>MAY</bcp14> on changing port number from group request to response.</t>
          </li>
          <li>
            <t>Further generalized the handling of multiple responses from the same server to the same request.</t>
          </li>
          <li>
            <t>Clarifications on response suppression.</t>
          </li>
          <li>
            <t>Issues and limitations with Forward-Proxies compiled in an appendix.</t>
          </li>
          <li>
            <t>Issues and limitations with Reverse-Proxies compiled in an appendix.</t>
          </li>
          <li>
            <t>Mentioned PROBING_RATE as a means to enforce congestion control.</t>
          </li>
          <li>
            <t>Consideration on how eventual consistency from Observe compensates for lost notifications.</t>
          </li>
          <li>
            <t>Admitted resource retrieval through consecutive group requests with the Block2 Option.</t>
          </li>
          <li>
            <t>Clarified relation with TCP/TLS/WebSockets.</t>
          </li>
          <li>
            <t>Clarified security on the different legs with a proxy.</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-10-11">
        <name>Version -10 to -11</name>
        <ul spacing="normal">
          <li>
            <t>Updated references.</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-09-10">
        <name>Version -09 to -10</name>
        <ul spacing="normal">
          <li>
            <t>Clarified use of NoSec for 'early discovery' and refer to cBRSKI.</t>
          </li>
          <li>
            <t>Clarified mandatory vs optional elements in CoAP group and CoAP group URI.</t>
          </li>
          <li>
            <t>Replaced "GROUPNAME" with "APPNAME".</t>
          </li>
          <li>
            <t>Explicitly mentioning of the type of group (CoAP/application/security).</t>
          </li>
          <li>
            <t>Use of .example for example hostnames.</t>
          </li>
          <li>
            <t>The name of a security group is not necessarily a string.</t>
          </li>
          <li>
            <t>Changed "has to" to "should" for enforcing access control based on membership to security groups.</t>
          </li>
          <li>
            <t>Used normative language for policies about group rekeying.</t>
          </li>
          <li>
            <t>Further stressed that group communication ought to be secured.</t>
          </li>
          <li>
            <t>Avoid calling applications as "(non-)sensitive" and "(non-)critical".</t>
          </li>
          <li>
            <t>Clarification on source authentication, source addresses, and Echo Option.</t>
          </li>
          <li>
            <t>Editorial fixes and improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-08-09">
        <name>Version -08 to -09</name>
        <ul spacing="normal">
          <li>
            <t>Multiple responses in long exchanges are non-traditional responses.</t>
          </li>
          <li>
            <t>Updated references.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-07-08">
        <name>Version -07 to -08</name>
        <ul spacing="normal">
          <li>
            <t>Updated references.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-06-07">
        <name>Version -06 to -07</name>
        <ul spacing="normal">
          <li>
            <t>Updated list of changes to other documents.</t>
          </li>
          <li>
            <t>Added real-life context and clarifications to examples.</t>
          </li>
          <li>
            <t>Clarified aliasing of CoAP group names.</t>
          </li>
          <li>
            <t>Clarified use of security group names.</t>
          </li>
          <li>
            <t>Clarified response suppression.</t>
          </li>
          <li>
            <t>Clarified response revalidation.</t>
          </li>
          <li>
            <t>Clarified limitations and peculiarities when using proxies.</t>
          </li>
          <li>
            <t>Discussed the case of group request sent to multiple proxies at once.</t>
          </li>
          <li>
            <t>Discussed limited use of reliable transports with block-wise transfer.</t>
          </li>
          <li>
            <t>Revised text on joining CoAP groups and multicast routing.</t>
          </li>
          <li>
            <t>Clarified use/avoidance of the CoAP NoSec mode.</t>
          </li>
          <li>
            <t>Moved examples of application group naming and group discovery to appendix sections.</t>
          </li>
          <li>
            <t>Revised list of references.</t>
          </li>
          <li>
            <t>Updated list of implementations supporting group communication.</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-05-06">
        <name>Version -05 to -06</name>
        <ul spacing="normal">
          <li>
            <t>Harmonized use of "group URI".</t>
          </li>
          <li>
            <t>Clarifications about different group types.</t>
          </li>
          <li>
            <t>Revised methods to perform group naming.</t>
          </li>
          <li>
            <t>Revised methods to discover application groups and CoAP groups.</t>
          </li>
          <li>
            <t>Explicit difference between "authentication credential" and "public key".</t>
          </li>
          <li>
            <t>Added examples of application group naming.</t>
          </li>
          <li>
            <t>Added examples of application/CoAP group discovery.</t>
          </li>
          <li>
            <t>Added examples of message exchanges.</t>
          </li>
          <li>
            <t>Reference to draft-mattsson-core-coap-attacks replaced with reference to draft-mattsson-t2trg-amplification-attacks.</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-04-05">
        <name>Version -04 to -05</name>
        <ul spacing="normal">
          <li>
            <t>Clarified changes to other documents.</t>
          </li>
          <li>
            <t>Clarified relation between different group types.</t>
          </li>
          <li>
            <t>Clarified discovery of application groups.</t>
          </li>
          <li>
            <t>Discussed methods to express application group names in requests.</t>
          </li>
          <li>
            <t>Revised and extended text on the NoSec mode and amplification attacks.</t>
          </li>
          <li>
            <t>Rephrased backward/forward security as properties.</t>
          </li>
          <li>
            <t>Removed appendix on Multi-ETag Option for response revalidation.</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-03-04">
        <name>Version -03 to -04</name>
        <ul spacing="normal">
          <li>
            <t>Multi-ETag Option for response revalidation moved to appendix.</t>
          </li>
          <li>
            <t>ETag Option usage added.</t>
          </li>
          <li>
            <t>Q-Block Options added in the block-wise transfer section.</t>
          </li>
          <li>
            <t>Caching at proxies moved to draft-tiloca-core-groupcomm-proxy.</t>
          </li>
          <li>
            <t>Client-Proxy response revalidation with the Group-ETag Option moved to draft-tiloca-core-groupcomm-proxy.</t>
          </li>
          <li>
            <t>Security considerations on amplification attacks.</t>
          </li>
          <li>
            <t>Generalized transport protocols to include others than UDP/IP multicast; and security protocols other than Group OSCORE.</t>
          </li>
          <li>
            <t>Overview of security cases with proxies.</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-02-03">
        <name>Version -02 to -03</name>
        <ul spacing="normal">
          <li>
            <t>Multiple responses from same server handled at the application.</t>
          </li>
          <li>
            <t>Clarifications about issues with forward-proxies.</t>
          </li>
          <li>
            <t>Operations for reverse-proxies.</t>
          </li>
          <li>
            <t>Caching of responses at proxies.</t>
          </li>
          <li>
            <t>Client-Server response revalidation, with Multi-ETag Option.</t>
          </li>
          <li>
            <t>Client-Proxy response revalidation, with the Group-ETag Option.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-01-02">
        <name>Version -01 to -02</name>
        <ul spacing="normal">
          <li>
            <t>Clarified relation between security groups and application groups.</t>
          </li>
          <li>
            <t>Considered also FETCH for requests over IP multicast.</t>
          </li>
          <li>
            <t>More details on Observe re-registration.</t>
          </li>
          <li>
            <t>More details on Proxy intermediaries.</t>
          </li>
          <li>
            <t>More details on servers changing port number in the response.</t>
          </li>
          <li>
            <t>Usage of the Uri-Host Option to indicate an application group.</t>
          </li>
          <li>
            <t>Response suppression based on classes of error codes.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-00-01">
        <name>Version -00 to -01</name>
        <ul spacing="normal">
          <li>
            <t>Clarifications on group memberships for the different group types.</t>
          </li>
          <li>
            <t>Simplified description of Token reusage, compared to the unicast case.</t>
          </li>
          <li>
            <t>More details on the rationale for response suppression.</t>
          </li>
          <li>
            <t>Clarifications of creation and management of security groups.</t>
          </li>
          <li>
            <t>Clients more knowledgeable than proxies about stopping receiving responses.</t>
          </li>
          <li>
            <t>Cancellation of group observations.</t>
          </li>
          <li>
            <t>Clarification on multicast scope to use.</t>
          </li>
          <li>
            <t>Both the group mode and pairwise mode of Group OSCORE are considered.</t>
          </li>
          <li>
            <t>Updated security considerations.</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
        </ul>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The authors sincerely thank <contact fullname="Christian Amsüss"/>, <contact fullname="Carsten Bormann"/>, <contact fullname="Thomas Fossati"/>, <contact fullname="Rikard Höglund"/>, <contact fullname="Jaime Jiménez"/>, <contact fullname="John Preuß Mattsson"/>, <contact fullname="Jim Schaad"/>, and <contact fullname="Jon Shallow"/> for their comments and feedback.</t>
      <t>The work on this document has been partly supported by the Sweden's Innovation Agency VINNOVA and the Celtic-Next projects CRITISEC and CYPRESS; and by the H2020 projects SIFIS-Home (Grant agreement 952652) and ARCADIAN-IoT (Grant agreement 101020259).</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
BOHnXsRobY76gl7+tO/TDCxc5K/iJm2cFIWw0CuJKqqRNwGSKRBQeyx5AAKV
u8w/lsv1MtDaDGTzbWYFYpFiHlMu+TIH/ZWIoyn+Mxot6hqqb3xZlGyTIllw
l/ZeZv5m75yZcdy7sIfgRqNStadDDYp0Pp7bJHtvxnWMT2hleyPHsZlsafAh
cswOHz+UPjKgKy3WW85KLK8VyV0CAhC4Y7yMy6Lo1HIM7kZGtVPsJLFkRKXj
6c3Zdmhu6avoTGIUMs8RkE0VvDOcv4sKYO7FKSlduPDeZW1r8gqhW3UUyr42
EyiqCxWlgokrhlnU5h/8JtrSkn1N+DpSDEHHx5reSjpFRRzGHRj9sBTEdpIB
1Naltg480Rlu4CCPH9o8ErgOw0vcGFT7zPD0SPXvi5INscA1oziXEzTs4Jlt
wu49v1q3o3CoGBzgE41JISekr5JPnRw/KGlQLnK0wyLHnHYkmhRVHauSbPfj
zj0lQ4MQD6ysMSjyEU7ixs3VSA57E4wLiLfrszbR7Q7dbHa8uqufuI3lUrY9
nhXUBvYIpx07yG8AJIyglnLPNY0rqDty17ENKJZm43U3dTaKJ+ZOz1Wlro18
thxZPL9Kbi+poq64WviIq1cRx7akBbKO7d5N2Zt8fW0GOiuUDsv8A/lfcKms
tthqwzpNd3zGW/89nMlC4tSvdNRg8P+Al+ks+EC/3BhaHtOcQOFk1S33gVAm
1VhiSa4nD3suXqYpqmNhdeHCxWCm8iOFgTdwk9JnngUJSr+JwoH3fQPHDSOl
vpesa+mI0u0Z78MGv2EUFE3ingr8E7w1hCiCmZE0LGp8U06J4i4vsapCGusy
xw4K9ZrxPuH+LEsatclIzmoma+CmNPsrdNgRDhhblyvrnaNuE80M0FXJKzth
A5RHkawn1cst4kLuNu1Sym8M+W8cSPbBHhSemCL0IkLs09SxyOCXSOt8vYhU
fpRXlpoR+4/juBIFndbUtJyDcf7LsmuLxVxjb9z5swb+ArRXqhKBfVhncKOJ
7uCf9UCkNjio9LY7PEumLeZBU0as48OXi0HYmeKDVTCBxF+Z0Lv3UjqcX83D
gb+NhNpsV2xSfHLGESPFNodl62+YmvcGq+P9jm2cuXUotAoOJxM8TueS/fNT
Sl6G52WB1GNEFkcB8xsjZTweNdtyyZqku9IhQx8uDVRkIQWGRPhmdGBJ74oI
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
hC0Rxb16ecLuNq1VtmULFnHfNx20NdrQe+QpfONFUFftOM1Y+tSCWl7oXslL
p7Cl7cYLkIOSKl6u7JpN1mufBCn+sJfXSbvnlJ3953Xy6vFpcuUedG9uKjAI
dhJC8mx9tKehcwyAEfkTsibk+IkOElxczwpgX7E/y5Hu+8rrO5il3LP0hx+c
WjW4BFLCP8o7VLlNN9p4ksl0kc/CC77FSxBtpu9ELjSu5n/5/6QJTPtBZAgH
yeVsl59QKjpwn0xnB9vb5pYewAFtX87c/9vdRnP8Xy/K8qthWnUTQvmYCE0+
SZ7iOR0kXx+fJ5vnXz1/8bzvnh5nX+1s7ez2k2cnj7/aeXd/fHe3J28IIR4k
G2YKG/ZnOBD4eRb/627szzjt4Ae0yt0vvJSN1sb9cJB8Fj+9xImvSfbVxrEP
AHROgjguU56e5ubu9l5vYylpDPYC4jD8XR0ekrxF1YbKJ0y30MbAGeDZtG7b
HVaD/BUDnIWS81+Y4iQ1RVNhMUV31ATXUQrquaCGLAafO57XZgE5K7TC+z8c
rf7HEr7/n9uXTLdrE+vpi7Mute4tpFYhvBtR4/rkNtj7EQS3pwS3nMdJ26n1
mRx6RzqkjH/dvRGfIzfLTRldO2s7b1QdYeSzvKqbIONkPVm8fHIWiEIQIn2g
3RcoYOomgdEQRiBNCg9pETozOks5EKpKVPUxWTrxcv/Kz8PHF7Nmuj1L7klI
bre6J3TCCzgz/rgXJ2fyfBmujLZgQIM1hMbGNybCaD+O6FUhRalWd6dSIkpH
hrLCJgT4wTFsBaCcoiOHyHMlWX58AmQJ/D8uZ199urTo1YQYnX61HqnufQhS
XZenH6pMvwlfV02gcxnglxtx9ohSQa4fcgtYRp8Vo1Kby60iRzXYoBqNG5Ko
TWG9aptAZD0xD0ZphfESH6p6wX5RwnmmxH8s24WROJNV9v+xL2bcNH+LWxVQ
AXfm1KLM6T4jAkbqL2D6Ymfa70a+mZLfHLjCjbX81q275fX85O/lkstnSXf9
qyeeEXZjBCTdlRVgod/oeiw06RfdnVtfmDNTG9o32tEkHWYTefHx8zMlRk2v
uxGV3d1bRlp3935O4vJf/wjkZY9+ffLCIzS3nUkiYh86rnAz1wEwottS1jLn
wgmmqQP/BN5E/E7wFMbX8OaI/oqp5VvJs1gJDQMxaNBerhkah9g8BLNHbQ4n
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
MBgkF5P5xcXvf/f/AQo3IUTU0AIA

-->

</rfc>
