<?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.29 (Ruby 3.3.7) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-groupcomm-bis-14" category="std" consensus="true" submissionType="IETF" obsoletes="7390" updates="7252, 7641" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.29.0 -->
  <?v3xml2rfc silence="Found SVG with width or height specified"?>
  <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-14"/>
    <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="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="2025" month="July" day="03"/>
    <area>Internet</area>
    <workgroup>CoRE Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 121?>

<t>The Constrained Application Protocol (CoAP) is a web transfer protocol for constrained devices and constrained networks. In a number of use cases, constrained devices 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 document specifies the use of 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>The Constrained Application Protocol (CoAP) <xref target="RFC7252"/> is a web transfer protocol based on Representational State Transfer (REST) that is used in resource-constrained devices and in resource-constrained networks where packet sizes should be small. This area of use is summarized as Constrained RESTful Environments (CoRE). CoAP has many similarities to HTTP <xref target="RFC9110"/><xref target="RFC9112"/> but also some key differences.</t>
      <t>In a number of use cases, constrained devices can be large in number as well as often related to each other in function or by location. For example, in a building automation scenario, all the light switches in a building may belong to one group, and all the thermostats may belong to another group. Groups may be preconfigured before deployment or dynamically formed during operation. If information needs to be sent to or received from a group of devices, group communication mechanisms can improve efficiency and latency of communication and reduce bandwidth requirements for a given application. While CoAP supports group communication via multicast requests (see <xref section="8" sectionFormat="of" target="RFC7252"/>), HTTP does not support any equivalent functionality.</t>
      <t>This document specifies the use of CoAP for group communication, together with UDP/IP multicast as the default transport for CoAP group communication messages.</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 updates all the guidelines about using group communication for CoAP (see <xref target="sec-coap-usage"/>).</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 (see <xref target="sec-transport"/> and <xref target="sec-other-protocols"/>).</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 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>
        </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 allows 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>Types of Groups and Their 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>Types of Groups</name>
        <t>Three types of groups and their mutual relationships 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 relationship between a CoAP group and application group(s). Such relationships 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 relationship between security groups and CoAP groups, but often it is one-to-one. Also, there can be a many-to-many relationship between security groups and application groups, but often it is one-to-one. Such relationships 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>
          <t>When a security group uses the security protocol Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/> to protect group communication (see <xref target="chap-oscore"/> of this document), source authentication is achieved for messages exchanged within the group (see <xref target="chap-group-oscore"/> and <xref target="chap-security-considerations-sec-mode-sauth"/> of this document). That is, even though the endpoints in the security group do share group security material, a recipient CoAP endpoint is able to verify that a message protected with Group OSCORE has actually been originated and sent by a specific and identified CoAP endpoint as a member of the security group.</t>
        </section>
        <section anchor="sec-groupdef-grouprelations">
          <name>Relationships 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 relationship 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 relationships 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>Relationships Among Different Group Types</name>
            <artset>
              <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="368" width="552" viewBox="0 0 552 368" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 8,32 L 8,160" fill="none" stroke="black"/>
                  <path d="M 120,160 L 120,304" fill="none" stroke="black"/>
                  <path d="M 256,32 L 256,160" fill="none" stroke="black"/>
                  <path d="M 352,240 L 352,352" fill="none" stroke="black"/>
                  <path d="M 376,32 L 376,160" fill="none" stroke="black"/>
                  <path d="M 456,160 L 456,240" fill="none" stroke="black"/>
                  <path d="M 544,32 L 544,160" fill="none" stroke="black"/>
                  <path d="M 544,240 L 544,352" fill="none" stroke="black"/>
                  <path d="M 8,32 L 256,32" fill="none" stroke="black"/>
                  <path d="M 376,32 L 544,32" fill="none" stroke="black"/>
                  <path d="M 256,96 L 376,96" fill="none" stroke="black"/>
                  <path d="M 8,160 L 256,160" fill="none" stroke="black"/>
                  <path d="M 376,160 L 544,160" fill="none" stroke="black"/>
                  <path d="M 352,240 L 544,240" fill="none" stroke="black"/>
                  <path d="M 120,304 L 352,304" fill="none" stroke="black"/>
                  <path d="M 352,352 L 544,352" fill="none" stroke="black"/>
                  <g class="text">
                    <text x="80" y="52">Application</text>
                    <text x="152" y="52">group</text>
                    <text x="428" y="52">CoAP</text>
                    <text x="472" y="52">group</text>
                    <text x="132" y="68">..............................</text>
                    <text x="460" y="68">....................</text>
                    <text x="24" y="100">[</text>
                    <text x="40" y="100">-</text>
                    <text x="96" y="100">Application</text>
                    <text x="168" y="100">group</text>
                    <text x="212" y="100">name</text>
                    <text x="240" y="100">]</text>
                    <text x="392" y="100">-</text>
                    <text x="412" y="100">IP</text>
                    <text x="448" y="100">mcast</text>
                    <text x="504" y="100">address</text>
                    <text x="296" y="116">1...N</text>
                    <text x="352" y="116">1</text>
                    <text x="392" y="116">-</text>
                    <text x="416" y="116">UDP</text>
                    <text x="452" y="116">port</text>
                    <text x="500" y="116">number</text>
                    <text x="24" y="132">-</text>
                    <text x="68" y="132">Resource</text>
                    <text x="120" y="132">URI</text>
                    <text x="168" y="132">path(s)</text>
                    <text x="160" y="180">1...N</text>
                    <text x="496" y="180">1...N</text>
                    <text x="496" y="228">1...N</text>
                    <text x="412" y="260">Security</text>
                    <text x="472" y="260">group</text>
                    <text x="448" y="276">.......................</text>
                    <text x="368" y="308">-</text>
                    <text x="412" y="308">Security</text>
                    <text x="472" y="308">group</text>
                    <text x="516" y="308">name</text>
                    <text x="312" y="324">1...N</text>
                    <text x="368" y="324">-</text>
                    <text x="412" y="324">Security</text>
                    <text x="484" y="324">material</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art" 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>
            </artset>
          </figure>
          <t><xref target="fig-group-relation-example"/> provides a deployment example of the relationships 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>
            <artset>
              <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="320" width="552" viewBox="0 0 552 320" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 8,48 L 8,288" fill="none" stroke="black"/>
                  <path d="M 72,64 L 72,144" fill="none" stroke="black"/>
                  <path d="M 72,208 L 72,288" fill="none" stroke="black"/>
                  <path d="M 248,64 L 248,144" fill="none" stroke="black"/>
                  <path d="M 248,208 L 248,288" fill="none" stroke="black"/>
                  <path d="M 272,48 L 272,288" fill="none" stroke="black"/>
                  <path d="M 288,48 L 288,192" fill="none" stroke="black"/>
                  <path d="M 312,64 L 312,160" fill="none" stroke="black"/>
                  <path d="M 488,64 L 488,160" fill="none" stroke="black"/>
                  <path d="M 544,48 L 544,192" fill="none" stroke="black"/>
                  <path d="M 24,32 L 256,32" fill="none" stroke="black"/>
                  <path d="M 304,32 L 528,32" fill="none" stroke="black"/>
                  <path d="M 72,64 L 248,64" fill="none" stroke="black"/>
                  <path d="M 312,64 L 488,64" fill="none" stroke="black"/>
                  <path d="M 72,144 L 248,144" fill="none" stroke="black"/>
                  <path d="M 312,160 L 488,160" fill="none" stroke="black"/>
                  <path d="M 72,208 L 248,208" fill="none" stroke="black"/>
                  <path d="M 304,208 L 528,208" fill="none" stroke="black"/>
                  <path d="M 72,288 L 248,288" fill="none" stroke="black"/>
                  <path d="M 24,304 L 256,304" fill="none" stroke="black"/>
                  <path d="M 24,32 C 15.16936,32 8,39.16936 8,48" fill="none" stroke="black"/>
                  <path d="M 256,32 C 264.83064,32 272,39.16936 272,48" fill="none" stroke="black"/>
                  <path d="M 304,32 C 295.16936,32 288,39.16936 288,48" fill="none" stroke="black"/>
                  <path d="M 528,32 C 536.83064,32 544,39.16936 544,48" fill="none" stroke="black"/>
                  <path d="M 304,208 C 295.16936,208 288,200.83064 288,192" fill="none" stroke="black"/>
                  <path d="M 528,208 C 536.83064,208 544,200.83064 544,192" fill="none" stroke="black"/>
                  <path d="M 24,304 C 15.16936,304 8,296.83064 8,288" fill="none" stroke="black"/>
                  <path d="M 256,304 C 264.83064,304 272,296.83064 272,288" fill="none" stroke="black"/>
                  <g class="text">
                    <text x="128" y="84">Application</text>
                    <text x="200" y="84">Group</text>
                    <text x="232" y="84">1</text>
                    <text x="368" y="84">Application</text>
                    <text x="440" y="84">Group</text>
                    <text x="472" y="84">3</text>
                    <text x="516" y="84">Cli2</text>
                    <text x="36" y="116">Cli1</text>
                    <text x="100" y="116">Srv1</text>
                    <text x="156" y="116">Srv2</text>
                    <text x="212" y="116">Srv3</text>
                    <text x="340" y="116">Srv5</text>
                    <text x="396" y="116">Srv6</text>
                    <text x="516" y="116">Cli4</text>
                    <text x="104" y="132">/resA</text>
                    <text x="160" y="132">/resA</text>
                    <text x="216" y="132">/resA</text>
                    <text x="344" y="132">/resC</text>
                    <text x="400" y="132">/resC</text>
                    <text x="36" y="148">Cli2</text>
                    <text x="344" y="148">/resD</text>
                    <text x="400" y="148">/resD</text>
                    <text x="36" y="180">Cli3</text>
                    <text x="124" y="180">Security</text>
                    <text x="184" y="180">Group</text>
                    <text x="216" y="180">1</text>
                    <text x="388" y="196">Security</text>
                    <text x="448" y="196">Group</text>
                    <text x="480" y="196">2</text>
                    <text x="128" y="228">Application</text>
                    <text x="200" y="228">Group</text>
                    <text x="232" y="228">2</text>
                    <text x="100" y="260">Srv1</text>
                    <text x="156" y="260">Srv4</text>
                    <text x="104" y="276">/resB</text>
                    <text x="160" y="276">/resB</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art" 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>
            </artset>
          </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>Some examples of hierarchical CoAP group FQDN naming (and scoping) for a building control application are shown below.</t>
            <table align="center" anchor="_table-fqdn-naming">
              <name>Examples of Hierarchical Group FQDN Naming</name>
              <thead>
                <tr>
                  <th align="left">URI authority</th>
                  <th align="left">Targeted group of nodes</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">all.bldg6.example</td>
                  <td align="left">"all nodes in building 6"</td>
                </tr>
                <tr>
                  <td align="left">all.west.bldg6.example</td>
                  <td align="left">"all nodes in west wing, building 6"</td>
                </tr>
                <tr>
                  <td align="left">all.floor1.west.bldg6.example</td>
                  <td align="left">"all nodes in floor 1, west wing, building 6"</td>
                </tr>
                <tr>
                  <td align="left">all.bu036.floor1.west.bldg6.example</td>
                  <td align="left">"all nodes in office bu036, floor 1, west wing, building 6"</td>
                </tr>
              </tbody>
            </table>
            <t>Similarly, if supported, reverse mapping (from IP multicast address to Group FQDN) is possible using the reverse DNS resolution technique <xref target="RFC1035"/>. Reverse mapping is important, for example, in troubleshooting to translate IP multicast addresses back to human-readable hostnames to show in a diagnostics user interface.</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"/>), even when using this method, a given application group is always associated with exactly one CoAP group. (See <xref target="sec-groupdef-grouprelations"/> for background on group relationships.)  </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 Sections <xref target="RFC7252" section="5.10.1" sectionFormat="bare"/> and <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 the options received (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:0: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:0: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 to the security solution used.</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 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 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.</t>
          <t>The devices sending CoAP requests to the CoAP group in the role of CoAP client also 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.</t>
          <t>For IPv6 CoAP groups, common multicast address ranges from which group addresses can be taken are ff1x::/16 and ff3x::/16.</t>
          <t>To create an application group, a configuring entity may configure a resource 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 Server Members of an Application or CoAP Group</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 (see <xref section="12.8" sectionFormat="of" target="RFC7252"/>), 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"/>). In examples in this document, the path segment "gp" is used 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>
In examples presented in the following, this document 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>
Resource Type values can 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. While relying on registered Resource Type values is not strictly necessary, it is encouraged in order to ensure a more effective discovery of application groups and CoAP groups.</t>
              </li>
            </ul>
            <t>Note that the specific way of using the methods discussed below 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>
            <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 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 6LoWPAN 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>
          </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 (NON), 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 <bcp14>MAY</bcp14> send one or more responses to a CoAP group request; these are always unicast messages. 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 that target resources for which influencing the default suppression has been predetermined to be appropriate, as well 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 (see <xref section="3" sectionFormat="of" target="RFC7252"/>) 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>Group requests sent over IP multicast generally have much higher loss rates than messages sent over unicast, particularly in constrained networks. Therefore, it is more urgent to have a strategy in place for handling the loss of group requests than the loss of unicast responses. To this end, CoAP clients can rely on the following two approaches.</t>
          <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 bounded 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.</t>
          <t>For example, if the client sends a group request specifying the Observe option set to 0 (see <xref section="3.1" sectionFormat="of" target="RFC7641"/>) and this server adds the client to the list of observers for the targeted resource, then the server is set up to send multiple responses as Observe notifications to notify the client of changes to the resource state (see <xref section="4.2" sectionFormat="of" target="RFC7641"/>). The use of Observe with group communication is discussed in more details in <xref target="sec-observe"/>. As another example, a 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 to decide 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, e.g., when this can trigger a change of state within the application.</t>
          <t>As part of a message exchange between the client and any of the servers in the CoAP group, the multiple responses considered above are examples 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"/>. The set of request options used as "Cache-Key" is also as defined in <xref section="5.6" sectionFormat="of" target="RFC7252"/>.</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. With such a cache, the client uses both cached-still-fresh and new responses as the result of further group requests.</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 defined 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, 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 CoAP server implementation that is unaware of the updates to <xref target="RFC7252"/> made by this document will expect group requests to never contain an ETag Option (see <xref section="8.2.1" sectionFormat="of" target="RFC7252"/>). Such a server treats 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 processes 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 and port number. The group's port number is usually the CoAP default UDP port number 5683, or alternatively another non-default UDP port number if configured. Regardless of the method that is used for selecting the group's port number, the same port number is used as the destination port number for requests 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 Internet (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 dedicated 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 an 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 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. As a result:  </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>
As a result, each server accepts only the first copy of the group request received from one of the proxies, while discarding as replay any later copies received from any other proxy.  </t>
              <t>
After that, the server 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 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, 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 transport used, 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 <bcp14>SHOULD</bcp14> be ready to begin 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>If a client sends a multicast GET or FETCH request including a Block2 Option with a block number of 0, then the client can rely on two possible approaches in order to retrieve any further blocks of the resource from responding servers.</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 responses received from different servers specify the same block size in their Block2 Option. In particular, such a block size can be equal to the block size specified in the Block2 Option of the first group request, or instead a smaller one. If the client relies on this approach, then the Block2 Option of follow-up group requests in the same block-wise transfer specifies the same block size used by all the servers in the Block2 Option of their responses.</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. That is the case when a client sends a multicast GET or FETCH request that does not include a Block2 Option.</t>
        <t>After a client receives responses that include a Block2 Option to the first group request that did not include a Block2 Option, the client can rely on either of the two approaches above for any further requests to retrieve more blocks of the resource. Alternatively, the client can compute a block size that is smaller than or equal to the smallest block size among those specified in the Block2 Option of the received responses. If the client relies on this latter approach, then the Block2 Option of follow-up group requests in the same block-wise transfer specifies the block size computed by the client.</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>CoAP over TCP, TLS, and WebSockets is defined in <xref target="RFC8323"/>. Although it supports unicast only, it can be employed as a transport for CoAP group communication in situations where unicast is used, such as exchanging messages with a proxy and completing block-wise transfers. In particular:</t>
          <ul spacing="normal">
            <li>
              <t>A suitable cross-proxy can be set up, such that it receives a unicast CoAP group request over TCP/TLS/WebSockets, and then forwards the request to the servers in the group over UDP/IP multicast (see <xref target="sec-proxy"/>). The discovery of such a proxy can rely on means defined in <xref target="I-D.ietf-core-transport-indication"/>.</t>
            </li>
            <li>
              <t><xref target="RFC8323"/> can be employed to complete block-wise transfers for CoAP group communication, with the limitations 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 be reachable via a suitable cross-proxy or 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>
            </li>
          </ul>
        </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="mldv2-and-igmpv3">
          <name>MLDv2 and 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="RFC9777"/> 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 MLDv2 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="RFC9776"/> 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 MLDv2 and IGMPv3 for mobile and wireless networks may be useful when implementing MLDv2 and IGMPv3 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="RFC9685"/>.</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 such as a 6LoWPAN Border Router (6LBR, see <xref target="RFC6775"/>), in order 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="RFC9685"/> 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="RFC9777"/>, which works only in case all CoAP servers joining a CoAP group are in link-local communication range of an ingress MPL Forwarder.</t>
            </li>
            <li>
              <t>Using 6LoWPAN Neighbor Discovery (ND) and Extended Address Registration Option (EARO) as described in <xref target="RFC9685"/>, 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, other filtering criteria may also 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 (NoSec Mode)</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 "unsecured steps" that unquestionably do not require security or are not 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"/>). Consistent 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. <xref section="4" sectionFormat="of" target="RFC8613"/> defines in detail if and what protection is applied to the CoAP header fields, payload, and CoAP options specified in the unprotected message, in accordance with their class for OSCORE.</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, requires 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 verify 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 is considered trustworthy in sending a group request on behalf of clients and it is configured as a member of the OSCORE security group(s) that it needs to access. 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 of 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 in particular when using 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>For these reasons and in order to prevent proliferation of high-volume amplification attacks as further discussed in <xref target="ssec-amplification"/>, it is <bcp14>NOT RECOMMENDED</bcp14> to use CoAP group communication in NoSec mode.
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 "unsecured steps" (see <xref target="chap-unsecured-groupcomm"/>).</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 relationships configured on the querying device and its neighbor devices at the time it performs the early discovery. These relationships 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 relationship 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 and acceptable in simple read-only applications that do not involve, impact, or disclose sensitive data and personal information. These include, e.g., read-only temperature sensors deployed in a public gathering environment, where unauthenticated clients retrieve temperature values but do 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 "unsecured steps" (see <xref target="chap-unsecured-groupcomm"/>).</t>
        <t>The security considerations from <xref section="14" 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>Group rekeying, that is, a key management scheme for secure revocation and renewal of group security material, 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 a slow rekeying scheme that is frequently invoked from paralyzing communications in the OSCORE group.</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, 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, 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. In particular, 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 meddler-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 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 often be correctly inferred 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 verify whether 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 verify 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 any single member of an OSCORE group from being 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, consistent 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 verify 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, consistent 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 "unsecured steps" (see <xref target="chap-unsecured-groupcomm"/>), 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 yet have configured a mutual security relationship 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-group-requests">
        <name>Replay of Group Requests</name>
        <t>After a client has sent a group request over IP multicast, an adversary might capture the group request to be re-injected in the group as a replay to the server nodes. In particular:</t>
        <ul spacing="normal">
          <li>
            <t>If the adversary re-injects the group request before the client has freed up the corresponding Token value (see <xref target="sec-token-reuse"/>), the client might receive additional responses from one or more of the servers in the group.  </t>
            <t>
Due to the group request being Non-confirmable and thus not eliciting Acknowledgement messages, the client might not be able to notice the attack, or to distinguish the responses that a particular server has sent as reply to the original group request (if any) or to the replayed group request.</t>
          </li>
          <li>
            <t>If the adversary re-injects the group request after the client has freed up the corresponding Token value, the client would not have anymore a valid, active request matching with responses that the servers sent to the replayed group request.</t>
          </li>
        </ul>
        <t>It follows that, in either case, this replay attack would not accomplish anything on the client, although it does effectively target the servers in the group that do not implement the optional Message ID based deduplication.</t>
        <t>If Group OSCORE is used, such a replay attack is prevented on all servers, 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 Replay Window that is in a valid state. If the server's Replay Window is initialized as invalid, e.g., due to a reboot, the server should use the challenge-response synchronization method based on the Echo Option for CoAP defined in <xref target="RFC9175"/> as described in <xref section="9" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>, in order to make the Replay Window valid before resuming to accept incoming messages from other group members.</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>As a mitigation, a server that takes into account the No-Response Option can specifically relax the standard suppression rules for a resource only in case the option is sent by an authenticated client. Consequently, if sent by an unauthenticated client, the option can still 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. If packet forwarding relies on priority-based scheduling, a 6LoWPAN Router or (MPL) multicast forwarder <bcp14>SHOULD</bcp14> deprioritize forwarding for multi-fragment 6LoWPAN multicast packets, which is implementation specific. 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>This may make it 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 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 anchor="sec-combined-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="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="RFC6775">
          <front>
            <title>Neighbor Discovery Optimization for IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs)</title>
            <author fullname="Z. Shelby" initials="Z." role="editor" surname="Shelby"/>
            <author fullname="S. Chakrabarti" initials="S." surname="Chakrabarti"/>
            <author fullname="E. Nordmark" initials="E." surname="Nordmark"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="November" year="2012"/>
            <abstract>
              <t>The IETF work in IPv6 over Low-power Wireless Personal Area Network (6LoWPAN) defines 6LoWPANs such as IEEE 802.15.4. This and other similar link technologies have limited or no usage of multicast signaling due to energy conservation. In addition, the wireless network may not strictly follow the traditional concept of IP subnets and IP links. IPv6 Neighbor Discovery was not designed for non- transitive wireless links, as its reliance on the traditional IPv6 link concept and its heavy use of multicast make it inefficient and sometimes impractical in a low-power and lossy network. This document describes simple optimizations to IPv6 Neighbor Discovery, its addressing mechanisms, and duplicate address detection for Low- power Wireless Personal Area Networks and similar networks. The document thus updates RFC 4944 to specify the use of the optimizations defined here. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6775"/>
          <seriesInfo name="DOI" value="10.17487/RFC6775"/>
        </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="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="RFC9112">
          <front>
            <title>HTTP/1.1</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document specifies the HTTP/1.1 message syntax, message parsing, connection management, and related security concerns.</t>
              <t>This document obsoletes portions of RFC 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="99"/>
          <seriesInfo name="RFC" value="9112"/>
          <seriesInfo name="DOI" value="10.17487/RFC9112"/>
        </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="RFC9776">
          <front>
            <title>Internet Group Management Protocol, Version 3</title>
            <author fullname="B. Haberman" initials="B." role="editor" surname="Haberman"/>
            <date month="March" year="2025"/>
            <abstract>
              <t>The Internet Group Management Protocol (IGMP) is the protocol used by IPv4 systems to report their IP multicast group memberships to neighboring multicast routers. Version 3 of IGMP (IGMPv3) adds support for source filtering, that is, the ability for a system to report interest in receiving packets only from specific source addresses, or from all but specific source addresses, sent to a particular multicast address. That information may be used by multicast routing protocols to avoid delivering multicast packets from specific sources to networks where there are no interested receivers.</t>
              <t>This document specifies IGMPv3. It is a revised version of RFC 3376 that includes clarifications and fixes for errata, and it is backward compatible with RFC 3376.</t>
              <t>This document updates RFC 2236 and obsoletes RFC 3376.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="100"/>
          <seriesInfo name="RFC" value="9776"/>
          <seriesInfo name="DOI" value="10.17487/RFC9776"/>
        </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="16" month="March" year="2025"/>
            <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-25"/>
        </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="3" month="March" year="2025"/>
            <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-04"/>
        </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="3" month="March" year="2025"/>
            <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 typically 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-04"/>
        </reference>
        <reference anchor="I-D.ietf-ace-key-groupcomm-oscore">
          <front>
            <title>Key Management for Group Object Security for Constrained RESTful Environments (Group OSCORE) Using Authentication and Authorization for Constrained Environments (ACE)</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="11" month="April" year="2025"/>
            <abstract>
              <t>   This document defines an application profile of the Authentication
   and Authorization for Constrained Environments (ACE) framework, to
   request and provision keying material in group communication
   scenarios that are based on the Constrained Application Protocol
   (CoAP) and are secured with Group Object Security for Constrained
   RESTful Environments (Group OSCORE).  This application profile
   delegates the authentication and authorization of Clients, which 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-17"/>
        </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="3" month="March" year="2025"/>
            <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-17"/>
        </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="January" year="2025"/>
            <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-13"/>
        </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="3" month="March" year="2025"/>
            <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-27"/>
        </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="28" month="February" year="2025"/>
            <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-18"/>
        </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="3" month="March" year="2025"/>
            <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] and Service
   Bindings (SVCB, [RFC9460]) 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-08"/>
        </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="18" month="June" year="2025"/>
            <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-05"/>
        </reference>
        <reference anchor="RFC1035">
          <front>
            <title>Domain names - implementation and specification</title>
            <author fullname="P. Mockapetris" initials="P." surname="Mockapetris"/>
            <date month="November" year="1987"/>
            <abstract>
              <t>This RFC is the revised specification of the protocol and format used in the implementation of the Domain Name System. It obsoletes RFC-883. This memo documents the details of the domain name client - server communication.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="13"/>
          <seriesInfo name="RFC" value="1035"/>
          <seriesInfo name="DOI" value="10.17487/RFC1035"/>
        </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="RFC9685">
          <front>
            <title>Listener Subscription for IPv6 Neighbor Discovery Multicast and Anycast Addresses</title>
            <author fullname="P. Thubert" initials="P." role="editor" surname="Thubert"/>
            <date month="November" year="2024"/>
            <abstract>
              <t>This document updates the 6LoWPAN extensions to IPv6 Neighbor Discovery (specified in RFCs 4861 and 8505) to enable a listener to subscribe to an IPv6 anycast or multicast address. This document also updates the Routing Protocol for Low-Power and Lossy Networks (RPL) (specified in RFCs 6550 and 6553) to add a new Non-Storing multicast mode and new support for anycast addresses in Storing and Non-Storing modes. This document extends RFC 9010 to enable a 6LoWPAN Router (6LR) to inject the anycast and multicast addresses in RPL.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9685"/>
          <seriesInfo name="DOI" value="10.17487/RFC9685"/>
        </reference>
        <reference anchor="RFC9777">
          <front>
            <title>Multicast Listener Discovery Version 2 (MLDv2) for IPv6</title>
            <author fullname="B. Haberman" initials="B." role="editor" surname="Haberman"/>
            <date month="March" year="2025"/>
            <abstract>
              <t>This document specifies the Multicast Listener Discovery version 2 (MLDv2) protocol. 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.</t>
              <t>This document updates RFC 2710 and obsoletes RFC 3810.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="101"/>
          <seriesInfo name="RFC" value="9777"/>
          <seriesInfo name="DOI" value="10.17487/RFC9777"/>
        </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 1136?>

<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 resources 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 (<xref section="7" sectionFormat="of" target="RFC7252"/>), 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 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.</t>
          <t>As defined in <xref target="RFC9176"/>, a CoRE Resource Directory (RD) 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 an RD to let it be found by other devices and/or applications.</t>
          <t>As an example, the following shows two IPv6 network configurations. Both are based on the topology as shown in <xref target="fig-topology-large-room"/>. The two configurations using this topology are as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>Subnets are 6LoWPAN networks; the routers Rtr-1 and Rtr-2 are 6LoWPAN Border Routers (6LBRs) <xref target="RFC6775"/>.</t>
            </li>
            <li>
              <t>Subnets are Ethernet links; the routers Rtr-1 and Rtr-2 are multicast-capable Ethernet routers.</t>
            </li>
          </ol>
          <t>Both configurations are further specified by the following:</t>
          <ul spacing="normal">
            <li>
              <t>A large room (Room-A) with three lights (Light-1, Light-2, Light-3) controlled by a light switch (Light Switch). The devices are organized into two subnets.  In reality, there could be more lights (up to several hundreds) but, for clarity, only three are shown.</t>
            </li>
            <li>
              <t>Light-1 and the light switch are connected to a router (Rtr-1).</t>
            </li>
            <li>
              <t>Light-2 and Light-3 are connected to another router (Rtr-2).</t>
            </li>
            <li>
              <t>The routers are connected to an IPv6 network backbone (Network Backbone) that is also multicast enabled.  In the general case, this means the network backbone and Rtr-1/Rtr-2 support a PIM-based multicast routing protocol and, e.g., Multicast Listener Discovery v2 (MLDv2) for forming groups.</t>
            </li>
            <li>
              <t>A CoRE RD using CoAP (CoAP Resource Directory) is connected to the network backbone.</t>
            </li>
            <li>
              <t>The DNS server (DNS Server) is optional. If the server is there (connected to the network backbone), then certain DNS-based features are available (e.g., DNS resolution of the hostname to the IP multicast address). If the DNS server is not there, then different provisioning of the network is required (e.g., IP multicast addresses are hard-coded into devices, or manually configured, or obtained via a service discovery method).</t>
            </li>
            <li>
              <t>A controller using CoAP (CoAP Controller Client) is connected to the backbone, which is able to control various building functions including lighting.</t>
            </li>
          </ul>
          <figure anchor="fig-topology-large-room">
            <name>Network Topology of a Large Room (Room-A)</name>
            <artset>
              <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="704" width="544" viewBox="0 0 544 704" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 32,144 L 32,208" fill="none" stroke="black"/>
                  <path d="M 32,416 L 32,480" fill="none" stroke="black"/>
                  <path d="M 96,112 L 96,160" fill="none" stroke="black"/>
                  <path d="M 96,224 L 96,256" fill="none" stroke="black"/>
                  <path d="M 96,384 L 96,416" fill="none" stroke="black"/>
                  <path d="M 96,496 L 96,528" fill="none" stroke="black"/>
                  <path d="M 184,112 L 184,160" fill="none" stroke="black"/>
                  <path d="M 184,224 L 184,256" fill="none" stroke="black"/>
                  <path d="M 184,384 L 184,416" fill="none" stroke="black"/>
                  <path d="M 184,496 L 184,528" fill="none" stroke="black"/>
                  <path d="M 208,160 L 208,192" fill="none" stroke="black"/>
                  <path d="M 208,432 L 208,464" fill="none" stroke="black"/>
                  <path d="M 248,128 L 248,152" fill="none" stroke="black"/>
                  <path d="M 248,400 L 248,424" fill="none" stroke="black"/>
                  <path d="M 256,200 L 256,240" fill="none" stroke="black"/>
                  <path d="M 256,472 L 256,512" fill="none" stroke="black"/>
                  <path d="M 288,160 L 288,192" fill="none" stroke="black"/>
                  <path d="M 288,432 L 288,464" fill="none" stroke="black"/>
                  <path d="M 288,624 L 288,688" fill="none" stroke="black"/>
                  <path d="M 320,144 L 320,168" fill="none" stroke="black"/>
                  <path d="M 320,184 L 320,208" fill="none" stroke="black"/>
                  <path d="M 320,416 L 320,440" fill="none" stroke="black"/>
                  <path d="M 320,456 L 320,480" fill="none" stroke="black"/>
                  <path d="M 384,624 L 384,688" fill="none" stroke="black"/>
                  <path d="M 408,336 L 408,384" fill="none" stroke="black"/>
                  <path d="M 408,496 L 408,560" fill="none" stroke="black"/>
                  <path d="M 512,336 L 512,384" fill="none" stroke="black"/>
                  <path d="M 512,496 L 512,560" fill="none" stroke="black"/>
                  <path d="M 536,112 L 536,656" fill="none" stroke="black"/>
                  <path d="M 72,64 L 280,64" fill="none" stroke="black"/>
                  <path d="M 96,112 L 184,112" fill="none" stroke="black"/>
                  <path d="M 192,128 L 248,128" fill="none" stroke="black"/>
                  <path d="M 96,160 L 184,160" fill="none" stroke="black"/>
                  <path d="M 208,160 L 288,160" fill="none" stroke="black"/>
                  <path d="M 296,176 L 536,176" fill="none" stroke="black"/>
                  <path d="M 208,192 L 288,192" fill="none" stroke="black"/>
                  <path d="M 96,224 L 184,224" fill="none" stroke="black"/>
                  <path d="M 192,240 L 256,240" fill="none" stroke="black"/>
                  <path d="M 96,256 L 184,256" fill="none" stroke="black"/>
                  <path d="M 72,288 L 280,288" fill="none" stroke="black"/>
                  <path d="M 72,336 L 280,336" fill="none" stroke="black"/>
                  <path d="M 408,336 L 512,336" fill="none" stroke="black"/>
                  <path d="M 520,368 L 536,368" fill="none" stroke="black"/>
                  <path d="M 96,384 L 184,384" fill="none" stroke="black"/>
                  <path d="M 408,384 L 512,384" fill="none" stroke="black"/>
                  <path d="M 192,400 L 248,400" fill="none" stroke="black"/>
                  <path d="M 96,416 L 184,416" fill="none" stroke="black"/>
                  <path d="M 208,432 L 288,432" fill="none" stroke="black"/>
                  <path d="M 296,448 L 536,448" fill="none" stroke="black"/>
                  <path d="M 208,464 L 288,464" fill="none" stroke="black"/>
                  <path d="M 96,496 L 184,496" fill="none" stroke="black"/>
                  <path d="M 408,496 L 512,496" fill="none" stroke="black"/>
                  <path d="M 192,512 L 256,512" fill="none" stroke="black"/>
                  <path d="M 96,528 L 184,528" fill="none" stroke="black"/>
                  <path d="M 520,528 L 536,528" fill="none" stroke="black"/>
                  <path d="M 72,560 L 280,560" fill="none" stroke="black"/>
                  <path d="M 408,560 L 512,560" fill="none" stroke="black"/>
                  <path d="M 288,624 L 384,624" fill="none" stroke="black"/>
                  <path d="M 392,656 L 536,656" fill="none" stroke="black"/>
                  <path d="M 288,688 L 384,688" fill="none" stroke="black"/>
                  <path d="M 32,480 L 72,560" fill="none" stroke="black"/>
                  <path d="M 32,208 L 72,288" fill="none" stroke="black"/>
                  <path d="M 280,336 L 320,416" fill="none" stroke="black"/>
                  <path d="M 280,64 L 320,144" fill="none" stroke="black"/>
                  <path d="M 32,144 L 72,64" fill="none" stroke="black"/>
                  <path d="M 32,416 L 72,336" fill="none" stroke="black"/>
                  <path d="M 280,288 L 320,208" fill="none" stroke="black"/>
                  <path d="M 280,560 L 320,480" fill="none" stroke="black"/>
                  <g class="text">
                    <text x="196" y="36">................................................</text>
                    <text x="8" y="52">:</text>
                    <text x="348" y="52">Room-A</text>
                    <text x="384" y="52">:</text>
                    <text x="8" y="68">:</text>
                    <text x="384" y="68">:</text>
                    <text x="8" y="84">:</text>
                    <text x="132" y="84">Subnet-1</text>
                    <text x="384" y="84">:</text>
                    <text x="512" y="84">Network</text>
                    <text x="8" y="100">:</text>
                    <text x="384" y="100">:</text>
                    <text x="508" y="100">Backbone</text>
                    <text x="8" y="116">:</text>
                    <text x="384" y="116">:</text>
                    <text x="8" y="132">:</text>
                    <text x="136" y="132">Light</text>
                    <text x="384" y="132">:</text>
                    <text x="8" y="148">:</text>
                    <text x="140" y="148">Switch</text>
                    <text x="384" y="148">:</text>
                    <text x="8" y="164">:</text>
                    <text x="384" y="164">:</text>
                    <text x="8" y="180">:</text>
                    <text x="248" y="180">Rtr-1</text>
                    <text x="8" y="196">:</text>
                    <text x="384" y="196">:</text>
                    <text x="8" y="212">:</text>
                    <text x="384" y="212">:</text>
                    <text x="8" y="228">:</text>
                    <text x="384" y="228">:</text>
                    <text x="8" y="244">:</text>
                    <text x="144" y="244">Light-1</text>
                    <text x="384" y="244">:</text>
                    <text x="8" y="260">:</text>
                    <text x="384" y="260">:</text>
                    <text x="8" y="276">:</text>
                    <text x="384" y="276">:</text>
                    <text x="8" y="292">:</text>
                    <text x="384" y="292">:</text>
                    <text x="8" y="308">:</text>
                    <text x="384" y="308">:</text>
                    <text x="8" y="324">:</text>
                    <text x="384" y="324">:</text>
                    <text x="8" y="340">:</text>
                    <text x="384" y="340">:</text>
                    <text x="8" y="356">:</text>
                    <text x="132" y="356">Subnet-2</text>
                    <text x="384" y="356">:</text>
                    <text x="432" y="356">DNS</text>
                    <text x="476" y="356">Server</text>
                    <text x="8" y="372">:</text>
                    <text x="384" y="372">:</text>
                    <text x="460" y="372">(Optional)</text>
                    <text x="8" y="388">:</text>
                    <text x="384" y="388">:</text>
                    <text x="8" y="404">:</text>
                    <text x="144" y="404">Light-2</text>
                    <text x="384" y="404">:</text>
                    <text x="8" y="420">:</text>
                    <text x="384" y="420">:</text>
                    <text x="8" y="436">:</text>
                    <text x="384" y="436">:</text>
                    <text x="8" y="452">:</text>
                    <text x="248" y="452">Rtr-2</text>
                    <text x="8" y="468">:</text>
                    <text x="384" y="468">:</text>
                    <text x="8" y="484">:</text>
                    <text x="384" y="484">:</text>
                    <text x="8" y="500">:</text>
                    <text x="384" y="500">:</text>
                    <text x="8" y="516">:</text>
                    <text x="144" y="516">Light-3</text>
                    <text x="384" y="516">:</text>
                    <text x="436" y="516">CoAP</text>
                    <text x="8" y="532">:</text>
                    <text x="384" y="532">:</text>
                    <text x="460" y="532">Controller</text>
                    <text x="8" y="548">:</text>
                    <text x="384" y="548">:</text>
                    <text x="444" y="548">Client</text>
                    <text x="8" y="564">:</text>
                    <text x="384" y="564">:</text>
                    <text x="8" y="580">:</text>
                    <text x="384" y="580">:</text>
                    <text x="196" y="596">:..............................................:</text>
                    <text x="316" y="644">CoAP</text>
                    <text x="332" y="660">Resource</text>
                    <text x="336" y="676">Directory</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art" align="center"><![CDATA[
................................................
:                                       Room-A :
:       +++++++++++++++++++++++++++            :
:      /    Subnet-1               \           :            Network
:     /                             \          :           Backbone
:    /     +----------+              \         :                  |
:   /      |  Light   |-------+       \        :                  |
:  |       |  Switch  |       |        |       :                  |
:  |       +----------+  +---------+   |       :                  |
:  |                     |  Rtr-1  |------------------------------+
:  |                     +---------+   |       :                  |
:  |                           |       |       :                  |
:   \      +----------+        |      /        :                  |
:    \     |  Light-1 |--------+     /         :                  |
:     \    +----------+             /          :                  |
:      \                           /           :                  |
:       +++++++++++++++++++++++++++            :                  |
:                                              :                  |
:                                              :                  |
:       +++++++++++++++++++++++++++            :  +------------+  |
:      /    Subnet-2               \           :  | DNS Server |  |
:     /                             \          :  | (Optional) |--+
:    /     +----------+              \         :  +------------+  |
:   /      |  Light-2 |-------+       \        :                  |
:  |       +----------+       |        |       :                  |
:  |                     +---------+   |       :                  |
:  |                     |  Rtr-2  |------------------------------+
:  |                     +---------+   |       :                  |
:  |                           |       |       :                  |
:   \      +----------+        |      /        :  +------------+  |
:    \     |  Light-3 |--------+     /         :  | CoAP       |  |
:     \    +----------+             /          :  | Controller |--+
:      \                           /           :  | Client     |  |
:       +++++++++++++++++++++++++++            :  +------------+  |
:                                              :                  |
:..............................................:                  |
                                                                  |
                                   +-----------+                  |
                                   | CoAP      |                  |
                                   | Resource  |------------------+
                                   | Directory |
                                   +-----------+
]]></artwork>
            </artset>
          </figure>
          <t>Building on the above, an example of protocol flow for discovery of the RD for the given network (of <xref target="fig-topology-large-room"/>) is shown in <xref target="fig-rd-discovery"/>:</t>
          <ul spacing="normal">
            <li>
              <t>Light-2 is installed and powered on for the first time.</t>
            </li>
            <li>
              <t>Light-2 will then search for the local RD by sending out a group communication GET request (with the "/.well-known/core?rt=core.rd" request URI) to the site-local "All CoAP Nodes" multicast address (ff05::fd).</t>
            </li>
            <li>
              <t>This multicast message will then go to each node in Subnet-2. Rtr-2 will then forward it into the network backbone where it will be received by the RD. All other nodes in Subnet-2 will ignore the group communication GET request because it is qualified by the query string "?rt=core.rd" (which indicates it should only be processed by the endpoint if it contains a resource of type "core.rd").</t>
            </li>
            <li>
              <t>The RD will then send back a unicast response containing the requested content, which is a CoRE Link Format representation of a resource of type "core.rd".</t>
            </li>
            <li>
              <t>Note that the flow is shown only for Light-2 for clarity. Similar flows will happen for Light-1, Light-3, and Light Switch when they are first installed.</t>
            </li>
          </ul>
          <t>The RD may also be discovered by other means such as by assuming a default location (e.g., on a 6LBR), using DHCP, anycast address, etc. However, these approaches do not invoke CoAP group communication so are not further discussed here.</t>
          <t>For other discovery use cases such as discovering local CoAP servers, services, or resources, CoAP group communication can be used in a similar fashion as in the above use case. For example, link-local, realm-local, admin-local, or site-local scoped discovery can be done this way.</t>
          <figure anchor="fig-rd-discovery">
            <name>Resource Directory Discovery via Multicast Request</name>
            <artset>
              <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="384" width="552" viewBox="0 0 552 384" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 16,64 L 16,88" fill="none" stroke="black"/>
                  <path d="M 16,160 L 16,368" fill="none" stroke="black"/>
                  <path d="M 104,64 L 104,88" fill="none" stroke="black"/>
                  <path d="M 104,176 L 104,368" fill="none" stroke="black"/>
                  <path d="M 192,64 L 192,88" fill="none" stroke="black"/>
                  <path d="M 192,176 L 192,192" fill="none" stroke="black"/>
                  <path d="M 192,248 L 192,296" fill="none" stroke="black"/>
                  <path d="M 192,344 L 192,368" fill="none" stroke="black"/>
                  <path d="M 280,64 L 280,88" fill="none" stroke="black"/>
                  <path d="M 280,160 L 280,192" fill="none" stroke="black"/>
                  <path d="M 280,248 L 280,288" fill="none" stroke="black"/>
                  <path d="M 280,344 L 280,368" fill="none" stroke="black"/>
                  <path d="M 368,64 L 368,192" fill="none" stroke="black"/>
                  <path d="M 368,248 L 368,288" fill="none" stroke="black"/>
                  <path d="M 368,344 L 368,368" fill="none" stroke="black"/>
                  <path d="M 456,64 L 456,368" fill="none" stroke="black"/>
                  <path d="M 544,64 L 544,368" fill="none" stroke="black"/>
                  <path d="M 112,240 L 448,240" fill="none" stroke="black"/>
                  <path d="M 464,256 L 536,256" fill="none" stroke="black"/>
                  <path d="M 464,320 L 536,320" fill="none" stroke="black"/>
                  <path d="M 112,336 L 448,336" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="544,256 532,250.4 532,261.6" fill="black" transform="rotate(0,536,256)"/>
                  <polygon class="arrowhead" points="472,320 460,314.4 460,325.6" fill="black" transform="rotate(180,464,320)"/>
                  <polygon class="arrowhead" points="456,240 444,234.4 444,245.6" fill="black" transform="rotate(0,448,240)"/>
                  <polygon class="arrowhead" points="120,336 108,330.4 108,341.6" fill="black" transform="rotate(180,112,336)"/>
                  <g class="text">
                    <text x="288" y="36">Light</text>
                    <text x="32" y="52">Light-1</text>
                    <text x="112" y="52">Light-2</text>
                    <text x="200" y="52">Light-3</text>
                    <text x="292" y="52">Switch</text>
                    <text x="376" y="52">Rtr-1</text>
                    <text x="456" y="52">Rtr-2</text>
                    <text x="540" y="52">RD</text>
                    <text x="148" y="100">..................................</text>
                    <text x="16" y="116">:</text>
                    <text x="72" y="116">Light-2</text>
                    <text x="116" y="116">is</text>
                    <text x="168" y="116">installed</text>
                    <text x="280" y="116">:</text>
                    <text x="16" y="132">:</text>
                    <text x="56" y="132">and</text>
                    <text x="100" y="132">powers</text>
                    <text x="140" y="132">on</text>
                    <text x="168" y="132">for</text>
                    <text x="208" y="132">first</text>
                    <text x="252" y="132">time</text>
                    <text x="280" y="132">:</text>
                    <text x="148" y="148">:................................:</text>
                    <text x="132" y="212">CoAP</text>
                    <text x="168" y="212">NON</text>
                    <text x="224" y="212">Mcast(GET</text>
                    <text x="312" y="228">/.well-known/core?rt=core.rd)</text>
                    <text x="132" y="308">CoAP</text>
                    <text x="168" y="308">NON</text>
                    <text x="208" y="308">(2.05</text>
                    <text x="264" y="308">Content</text>
                    <text x="280" y="324">&lt;/rd&gt;;rt="core.rd";ct=40)</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art" align="center"><![CDATA[
                                 Light
Light-1   Light-2    Light-3     Switch     Rtr-1     Rtr-2       RD
 |          |          |          |          |          |          |
 |          |          |          |          |          |          |
 ..................................          |          |          |
 :   Light-2 is installed         :          |          |          |
 :   and powers on for first time :          |          |          |
 :................................:          |          |          |
 |                                |          |          |          |
 |          |          |          |          |          |          |
 |          |          |          |          |          |          |
 |          | CoAP NON Mcast(GET                        |          |
 |          |           /.well-known/core?rt=core.rd)   |          |
 |          |------------------------------------------>|          |
 |          |          |          |          |          |--------->|
 |          |          |          |          |          |          |
 |          |          |          |          |          |          |
 |          | CoAP NON (2.05 Content                    |          |
 |          |         </rd>;rt="core.rd";ct=40)         |<---------|
 |          |<------------------------------------------|          |
 |          |          |          |          |          |          |
 |          |          |          |          |          |          |
]]></artwork>
            </artset>
          </figure>
        </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.</t>
          <t>The following presents examples of lighting control of a set of 6LoWPAN-connected lights.</t>
          <t><xref target="fig-light-switch-control-msg"/> shows the protocol flow for a building automation lighting control scenario for the network considered in <xref target="fig-topology-large-room"/>. The network is assumed to be in a 6LoWPAN configuration. Also, it is assumed that the CoAP servers in each light are configured to suppress CoAP responses for any IP multicast CoAP requests related to lighting control. (See <xref target="sec-request-response-suppress"/> for more details on response suppression by a server.)</t>
          <t>In addition, <xref target="fig-lights-response"/> shows a protocol flow example for the case where servers do respond to a lighting control IP multicast request with (unicast) CoAP NON responses.  There are two success responses and one 5.00 error response. In this particular case, the light switch does not check that all lights in the group received the IP multicast request by examining the responses. This is because the light switch is not configured with an exhaustive list of the IP addresses of all lights belonging to the group. However, based on received error responses, it could take additional action such as logging a fault or alerting the user via its LCD display. In case a CoAP message is delivered multiple times to a light, the subsequent CoAP messages can be filtered out as duplicates, based on the CoAP Message ID.</t>
          <t>Reliability of IP multicast is not guaranteed. Therefore, one or more lights in the group may not have received the CoAP control request due to packet loss. In this use case, there is no detection nor correction of such situations: the application layer expects that the IP multicast forwarding/routing will be of sufficient quality to provide on average a very high probability of packet delivery to all CoAP endpoints in an IP multicast group. An example protocol to accomplish this using randomized retransmission is the MPL forwarding protocol for LLNs <xref target="RFC7731"/>.</t>
          <t>We assume the following steps have already occurred before the illustrated flows:</t>
          <t>1) Startup phase: 6LoWPANs are formed. IPv6 addresses are assigned to all devices. The CoAP network is formed.</t>
          <t>2) Network configuration (application independent): 6LBRs are configured with IP multicast addresses, or address blocks, to filter out or to pass through to/from the 6LoWPAN.</t>
          <t>3a) Commissioning phase (application related): The IP multicast address of the group (Room-A-Lights) has been configured in all the lights and in the light switch.</t>
          <t>3b) As an alternative to the previous step, when a DNS server is available, the light switch and/or the lights have been configured with a group hostname that each node resolves to the above IP multicast address of the group.</t>
          <t>Note for the Commissioning phase: the switch's 6LoWPAN/CoAP software stack supports sending unicast, multicast, or proxied unicast CoAP requests, including processing of the multiple responses that may be generated by an IP multicast CoAP request.</t>
          <figure anchor="fig-light-switch-control-msg">
            <name>Light Switch Sends Multicast Control Message</name>
            <artset>
              <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="496" width="560" viewBox="0 0 560 496" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 16,64 L 16,272" fill="none" stroke="black"/>
                  <path d="M 16,304 L 16,336" fill="none" stroke="black"/>
                  <path d="M 16,464 L 16,480" fill="none" stroke="black"/>
                  <path d="M 104,64 L 104,264" fill="none" stroke="black"/>
                  <path d="M 104,280 L 104,320" fill="none" stroke="black"/>
                  <path d="M 104,464 L 104,480" fill="none" stroke="black"/>
                  <path d="M 192,64 L 192,88" fill="none" stroke="black"/>
                  <path d="M 192,208 L 192,264" fill="none" stroke="black"/>
                  <path d="M 192,280 L 192,320" fill="none" stroke="black"/>
                  <path d="M 192,464 L 192,480" fill="none" stroke="black"/>
                  <path d="M 280,64 L 280,88" fill="none" stroke="black"/>
                  <path d="M 280,208 L 280,224" fill="none" stroke="black"/>
                  <path d="M 280,272 L 280,312" fill="none" stroke="black"/>
                  <path d="M 280,328 L 280,480" fill="none" stroke="black"/>
                  <path d="M 368,64 L 368,88" fill="none" stroke="black"/>
                  <path d="M 368,208 L 368,224" fill="none" stroke="black"/>
                  <path d="M 368,264 L 368,312" fill="none" stroke="black"/>
                  <path d="M 368,328 L 368,480" fill="none" stroke="black"/>
                  <path d="M 456,64 L 456,280" fill="none" stroke="black"/>
                  <path d="M 456,296 L 456,480" fill="none" stroke="black"/>
                  <path d="M 544,64 L 544,480" fill="none" stroke="black"/>
                  <path d="M 24,272 L 360,272" fill="none" stroke="black"/>
                  <path d="M 376,288 L 536,288" fill="none" stroke="black"/>
                  <path d="M 464,304 L 536,304" fill="none" stroke="black"/>
                  <path d="M 112,320 L 184,320" fill="none" stroke="black"/>
                  <path d="M 200,320 L 448,320" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="544,288 532,282.4 532,293.6" fill="black" transform="rotate(0,536,288)"/>
                  <polygon class="arrowhead" points="472,304 460,298.4 460,309.6" fill="black" transform="rotate(180,464,304)"/>
                  <polygon class="arrowhead" points="368,272 356,266.4 356,277.6" fill="black" transform="rotate(0,360,272)"/>
                  <polygon class="arrowhead" points="208,320 196,314.4 196,325.6" fill="black" transform="rotate(180,200,320)"/>
                  <polygon class="arrowhead" points="120,320 108,314.4 108,325.6" fill="black" transform="rotate(180,112,320)"/>
                  <polygon class="arrowhead" points="32,272 20,266.4 20,277.6" fill="black" transform="rotate(180,24,272)"/>
                  <g class="text">
                    <text x="288" y="36">Light</text>
                    <text x="520" y="36">Network</text>
                    <text x="32" y="52">Light-1</text>
                    <text x="112" y="52">Light-2</text>
                    <text x="200" y="52">Light-3</text>
                    <text x="292" y="52">Switch</text>
                    <text x="368" y="52">Rtr-1</text>
                    <text x="456" y="52">Rtr-2</text>
                    <text x="524" y="52">Backbone</text>
                    <text x="280" y="100">.......................</text>
                    <text x="192" y="116">:</text>
                    <text x="236" y="116">User</text>
                    <text x="280" y="116">flips</text>
                    <text x="316" y="116">on</text>
                    <text x="368" y="116">:</text>
                    <text x="192" y="132">:</text>
                    <text x="240" y="132">light</text>
                    <text x="292" y="132">switch</text>
                    <text x="332" y="132">to</text>
                    <text x="368" y="132">:</text>
                    <text x="192" y="148">:</text>
                    <text x="236" y="148">turn</text>
                    <text x="268" y="148">on</text>
                    <text x="296" y="148">all</text>
                    <text x="328" y="148">the</text>
                    <text x="368" y="148">:</text>
                    <text x="192" y="164">:</text>
                    <text x="244" y="164">lights</text>
                    <text x="284" y="164">in</text>
                    <text x="324" y="164">Room-A</text>
                    <text x="368" y="164">:</text>
                    <text x="280" y="180">:.....................:</text>
                    <text x="244" y="244">COAP</text>
                    <text x="280" y="244">NON</text>
                    <text x="340" y="244">Mcast(PUT,</text>
                    <text x="284" y="260">Payload=lights</text>
                    <text x="360" y="260">ON)</text>
                    <text x="20" y="292">ON</text>
                    <text x="108" y="340">ON</text>
                    <text x="196" y="340">ON</text>
                    <text x="16" y="356">^</text>
                    <text x="104" y="356">^</text>
                    <text x="192" y="356">^</text>
                    <text x="104" y="372">.......................</text>
                    <text x="16" y="388">:</text>
                    <text x="68" y="388">Lights</text>
                    <text x="108" y="388">in</text>
                    <text x="148" y="388">Room-A</text>
                    <text x="192" y="388">:</text>
                    <text x="16" y="404">:</text>
                    <text x="60" y="404">turn</text>
                    <text x="92" y="404">on</text>
                    <text x="136" y="404">(nearly</text>
                    <text x="192" y="404">:</text>
                    <text x="16" y="420">:</text>
                    <text x="104" y="420">simultaneously)</text>
                    <text x="192" y="420">:</text>
                    <text x="104" y="436">:.....................:</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art" align="center"><![CDATA[
                                 Light                       Network
Light-1   Light-2    Light-3     Switch    Rtr-1      Rtr-2  Backbone
 |          |          |          |          |          |          |
 |          |          |          |          |          |          |
 |          |          .......................          |          |
 |          |          :   User flips on     :          |          |
 |          |          :   light switch to   :          |          |
 |          |          :   turn on all the   :          |          |
 |          |          :   lights in Room-A  :          |          |
 |          |          :.....................:          |          |
 |          |                                           |          |
 |          |          |          |          |          |          |
 |          |          |          |          |          |          |
 |          |          |    COAP NON Mcast(PUT,         |          |
 |          |          |    Payload=lights ON)          |          |
 |<-------------------------------+--------->|          |          |
 ON         |          |          |          |-------------------->|
 |          |          |          |          |          |<---------|
 |          |<---------|<-------------------------------|          |
 |          ON         ON         |          |          |          |
 ^          ^          ^          |          |          |          |
 .......................          |          |          |          |
 :   Lights in Room-A  :          |          |          |          |
 :   turn on (nearly   :          |          |          |          |
 :   simultaneously)   :          |          |          |          |
 :.....................:          |          |          |          |
                                  |          |          |          |
 |          |          |          |          |          |          |
 |          |          |          |          |          |          |
]]></artwork>
            </artset>
          </figure>
          <figure anchor="fig-lights-response">
            <name>Lights (Optionally) Respond to Multicast CoAP Request</name>
            <artset>
              <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="336" width="560" viewBox="0 0 560 336" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 16,64 L 16,320" fill="none" stroke="black"/>
                  <path d="M 104,104 L 104,128" fill="none" stroke="black"/>
                  <path d="M 104,160 L 104,320" fill="none" stroke="black"/>
                  <path d="M 192,104 L 192,136" fill="none" stroke="black"/>
                  <path d="M 192,168 L 192,224" fill="none" stroke="black"/>
                  <path d="M 192,256 L 192,320" fill="none" stroke="black"/>
                  <path d="M 280,64 L 280,136" fill="none" stroke="black"/>
                  <path d="M 280,168 L 280,224" fill="none" stroke="black"/>
                  <path d="M 280,264 L 280,320" fill="none" stroke="black"/>
                  <path d="M 368,64 L 368,152" fill="none" stroke="black"/>
                  <path d="M 368,168 L 368,224" fill="none" stroke="black"/>
                  <path d="M 368,264 L 368,320" fill="none" stroke="black"/>
                  <path d="M 456,64 L 456,184" fill="none" stroke="black"/>
                  <path d="M 456,200 L 456,224" fill="none" stroke="black"/>
                  <path d="M 456,256 L 456,280" fill="none" stroke="black"/>
                  <path d="M 456,296 L 456,320" fill="none" stroke="black"/>
                  <path d="M 544,64 L 544,320" fill="none" stroke="black"/>
                  <path d="M 24,96 L 272,96" fill="none" stroke="black"/>
                  <path d="M 112,160 L 448,160" fill="none" stroke="black"/>
                  <path d="M 464,176 L 536,176" fill="none" stroke="black"/>
                  <path d="M 376,192 L 536,192" fill="none" stroke="black"/>
                  <path d="M 288,208 L 360,208" fill="none" stroke="black"/>
                  <path d="M 200,256 L 448,256" fill="none" stroke="black"/>
                  <path d="M 464,272 L 536,272" fill="none" stroke="black"/>
                  <path d="M 376,288 L 536,288" fill="none" stroke="black"/>
                  <path d="M 288,304 L 360,304" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="544,272 532,266.4 532,277.6" fill="black" transform="rotate(0,536,272)"/>
                  <polygon class="arrowhead" points="544,176 532,170.4 532,181.6" fill="black" transform="rotate(0,536,176)"/>
                  <polygon class="arrowhead" points="456,256 444,250.4 444,261.6" fill="black" transform="rotate(0,448,256)"/>
                  <polygon class="arrowhead" points="456,160 444,154.4 444,165.6" fill="black" transform="rotate(0,448,160)"/>
                  <polygon class="arrowhead" points="384,288 372,282.4 372,293.6" fill="black" transform="rotate(180,376,288)"/>
                  <polygon class="arrowhead" points="384,192 372,186.4 372,197.6" fill="black" transform="rotate(180,376,192)"/>
                  <polygon class="arrowhead" points="296,304 284,298.4 284,309.6" fill="black" transform="rotate(180,288,304)"/>
                  <polygon class="arrowhead" points="296,208 284,202.4 284,213.6" fill="black" transform="rotate(180,288,208)"/>
                  <polygon class="arrowhead" points="280,96 268,90.4 268,101.6" fill="black" transform="rotate(0,272,96)"/>
                  <g class="text">
                    <text x="288" y="36">Light</text>
                    <text x="520" y="36">Network</text>
                    <text x="32" y="52">Light-1</text>
                    <text x="112" y="52">Light-2</text>
                    <text x="200" y="52">Light-3</text>
                    <text x="292" y="52">Switch</text>
                    <text x="368" y="52">Rtr-1</text>
                    <text x="456" y="52">Rtr-2</text>
                    <text x="524" y="52">Backbone</text>
                    <text x="104" y="68">|</text>
                    <text x="192" y="68">|</text>
                    <text x="76" y="84">COAP</text>
                    <text x="112" y="84">NON</text>
                    <text x="152" y="84">(2.04</text>
                    <text x="212" y="84">Changed)</text>
                    <text x="116" y="148">COAP</text>
                    <text x="152" y="148">NON</text>
                    <text x="192" y="148">(2.04</text>
                    <text x="252" y="148">Changed)</text>
                    <text x="188" y="244">COAP</text>
                    <text x="224" y="244">NON</text>
                    <text x="264" y="244">(5.00</text>
                    <text x="324" y="244">Internal</text>
                    <text x="388" y="244">Server</text>
                    <text x="444" y="244">Error)</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art" align="center"><![CDATA[
                                 Light                       Network
Light-1   Light-2    Light-3     Switch    Rtr-1      Rtr-2  Backbone
 |          |          |          |          |          |          |
 |     COAP NON (2.04 Changed)    |          |          |          |
 |------------------------------->|          |          |          |
 |          |          |          |          |          |          |
 |          |          |          |          |          |          |
 |          COAP NON (2.04 Changed)          |          |          |
 |          |------------------------------------------>|          |
 |          |          |          |          |          |--------->|
 |          |          |          |          |<--------------------|
 |          |          |          |<---------|          |          |
 |          |          |          |          |          |          |
 |          |        COAP NON (5.00 Internal Server Error)         |
 |          |          |------------------------------->|          |
 |          |          |          |          |          |--------->|
 |          |          |          |          |<--------------------|
 |          |          |          |<---------|          |          |
 |          |          |          |          |          |          |
]]></artwork>
            </artset>
          </figure>
          <t>Another, but similar, lighting control use case is shown in <xref target="fig-light-switch-control-msg-2"/>. In this case, a controller connected to the network backbone sends a CoAP group communication request to turn on all lights in Room-A. Every light sends back a CoAP response to the controller after being turned on.</t>
          <figure anchor="fig-light-switch-control-msg-2">
            <name>Controller on Backbone Sends Multicast Control Message</name>
            <artset>
              <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="544" width="568" viewBox="0 0 568 544" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 16,80 L 16,160" fill="none" stroke="black"/>
                  <path d="M 16,192 L 16,208" fill="none" stroke="black"/>
                  <path d="M 16,336 L 16,528" fill="none" stroke="black"/>
                  <path d="M 104,80 L 104,152" fill="none" stroke="black"/>
                  <path d="M 104,168 L 104,192" fill="none" stroke="black"/>
                  <path d="M 104,336 L 104,352" fill="none" stroke="black"/>
                  <path d="M 104,392 L 104,528" fill="none" stroke="black"/>
                  <path d="M 192,80 L 192,152" fill="none" stroke="black"/>
                  <path d="M 192,336 L 192,352" fill="none" stroke="black"/>
                  <path d="M 192,440 L 192,528" fill="none" stroke="black"/>
                  <path d="M 288,80 L 288,184" fill="none" stroke="black"/>
                  <path d="M 288,200 L 288,400" fill="none" stroke="black"/>
                  <path d="M 288,488 L 288,528" fill="none" stroke="black"/>
                  <path d="M 376,80 L 376,136" fill="none" stroke="black"/>
                  <path d="M 376,152 L 376,392" fill="none" stroke="black"/>
                  <path d="M 376,408 L 376,448" fill="none" stroke="black"/>
                  <path d="M 376,480 L 376,528" fill="none" stroke="black"/>
                  <path d="M 464,128 L 464,528" fill="none" stroke="black"/>
                  <path d="M 536,128 L 536,528" fill="none" stroke="black"/>
                  <path d="M 472,128 L 528,128" fill="none" stroke="black"/>
                  <path d="M 296,144 L 456,144" fill="none" stroke="black"/>
                  <path d="M 24,160 L 280,160" fill="none" stroke="black"/>
                  <path d="M 112,192 L 368,192" fill="none" stroke="black"/>
                  <path d="M 24,384 L 280,384" fill="none" stroke="black"/>
                  <path d="M 296,400 L 456,400" fill="none" stroke="black"/>
                  <path d="M 472,416 L 528,416" fill="none" stroke="black"/>
                  <path d="M 112,432 L 368,432" fill="none" stroke="black"/>
                  <path d="M 384,448 L 456,448" fill="none" stroke="black"/>
                  <path d="M 472,464 L 528,464" fill="none" stroke="black"/>
                  <path d="M 200,480 L 368,480" fill="none" stroke="black"/>
                  <path d="M 384,496 L 456,496" fill="none" stroke="black"/>
                  <path d="M 472,512 L 528,512" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="536,512 524,506.4 524,517.6" fill="black" transform="rotate(0,528,512)"/>
                  <polygon class="arrowhead" points="536,464 524,458.4 524,469.6" fill="black" transform="rotate(0,528,464)"/>
                  <polygon class="arrowhead" points="536,416 524,410.4 524,421.6" fill="black" transform="rotate(0,528,416)"/>
                  <polygon class="arrowhead" points="480,128 468,122.4 468,133.6" fill="black" transform="rotate(180,472,128)"/>
                  <polygon class="arrowhead" points="464,496 452,490.4 452,501.6" fill="black" transform="rotate(0,456,496)"/>
                  <polygon class="arrowhead" points="464,448 452,442.4 452,453.6" fill="black" transform="rotate(0,456,448)"/>
                  <polygon class="arrowhead" points="464,400 452,394.4 452,405.6" fill="black" transform="rotate(0,456,400)"/>
                  <polygon class="arrowhead" points="392,144 380,138.4 380,149.6" fill="black" transform="rotate(180,384,144)"/>
                  <polygon class="arrowhead" points="376,480 364,474.4 364,485.6" fill="black" transform="rotate(0,368,480)"/>
                  <polygon class="arrowhead" points="376,432 364,426.4 364,437.6" fill="black" transform="rotate(0,368,432)"/>
                  <polygon class="arrowhead" points="304,144 292,138.4 292,149.6" fill="black" transform="rotate(180,296,144)"/>
                  <polygon class="arrowhead" points="288,384 276,378.4 276,389.6" fill="black" transform="rotate(0,280,384)"/>
                  <polygon class="arrowhead" points="208,192 196,186.4 196,197.6" fill="black" transform="rotate(180,200,192)"/>
                  <polygon class="arrowhead" points="120,192 108,186.4 108,197.6" fill="black" transform="rotate(180,112,192)"/>
                  <polygon class="arrowhead" points="32,160 20,154.4 20,165.6" fill="black" transform="rotate(180,24,160)"/>
                  <g class="text">
                    <text x="500" y="36">CoAP</text>
                    <text x="440" y="52">Network</text>
                    <text x="524" y="52">Controller</text>
                    <text x="32" y="68">Light-1</text>
                    <text x="112" y="68">Light-2</text>
                    <text x="200" y="68">Light-3</text>
                    <text x="288" y="68">Rtr-1</text>
                    <text x="376" y="68">Rtr-2</text>
                    <text x="444" y="68">Backbone</text>
                    <text x="508" y="68">Client</text>
                    <text x="464" y="84">|</text>
                    <text x="536" y="84">|</text>
                    <text x="428" y="100">COAP</text>
                    <text x="464" y="100">NON</text>
                    <text x="524" y="100">Mcast(PUT,</text>
                    <text x="468" y="116">Payload=lights</text>
                    <text x="544" y="116">ON)</text>
                    <text x="20" y="180">ON</text>
                    <text x="192" y="180">|</text>
                    <text x="108" y="212">ON</text>
                    <text x="196" y="212">ON</text>
                    <text x="16" y="228">^</text>
                    <text x="104" y="228">^</text>
                    <text x="192" y="228">^</text>
                    <text x="104" y="244">.......................</text>
                    <text x="16" y="260">:</text>
                    <text x="68" y="260">Lights</text>
                    <text x="108" y="260">in</text>
                    <text x="148" y="260">Room-A</text>
                    <text x="192" y="260">:</text>
                    <text x="16" y="276">:</text>
                    <text x="60" y="276">turn</text>
                    <text x="92" y="276">on</text>
                    <text x="136" y="276">(nearly</text>
                    <text x="192" y="276">:</text>
                    <text x="16" y="292">:</text>
                    <text x="104" y="292">simultaneously)</text>
                    <text x="192" y="292">:</text>
                    <text x="104" y="308">:.....................:</text>
                    <text x="68" y="372">COAP</text>
                    <text x="104" y="372">NON</text>
                    <text x="144" y="372">(2.04</text>
                    <text x="204" y="372">Changed)</text>
                    <text x="192" y="404">|</text>
                    <text x="140" y="420">COAP</text>
                    <text x="176" y="420">NON</text>
                    <text x="216" y="420">(2.04</text>
                    <text x="276" y="420">Changed)</text>
                    <text x="288" y="452">|</text>
                    <text x="220" y="468">COAP</text>
                    <text x="256" y="468">NON</text>
                    <text x="296" y="468">(2.04</text>
                    <text x="356" y="468">Changed)</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art" align="center"><![CDATA[
                                                            CoAP
                                                   Network  Controller
Light-1   Light-2    Light-3     Rtr-1      Rtr-2  Backbone Client
 |          |          |           |          |          |        |
 |          |          |           |          |    COAP NON Mcast(PUT,
 |          |          |           |          |    Payload=lights ON)
 |          |          |           |          |          |<-------|
 |          |          |           |<----------<---------|        |
 |<--------------------------------|          |          |        |
 ON         |          |           |          |          |        |
 |          |<----------<---------------------|          |        |
 |          ON         ON          |          |          |        |
 ^          ^          ^           |          |          |        |
 .......................           |          |          |        |
 :   Lights in Room-A  :           |          |          |        |
 :   turn on (nearly   :           |          |          |        |
 :   simultaneously)   :           |          |          |        |
 :.....................:           |          |          |        |
                                   |          |          |        |
 |          |          |           |          |          |        |
 |          |          |           |          |          |        |
 |    COAP NON (2.04 Changed)      |          |          |        |
 |-------------------------------->|          |          |        |
 |          |          |           |-------------------->|        |
 |          |  COAP NON (2.04 Changed)        |          |------->|
 |          |-------------------------------->|          |        |
 |          |          |           |          |--------->|        |
 |          |          | COAP NON (2.04 Changed)         |------->|
 |          |          |--------------------->|          |        |
 |          |          |           |          |--------->|        |
 |          |          |           |          |          |------->|
 |          |          |           |          |          |        |
]]></artwork>
            </artset>
          </figure>
        </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 request successfully that provided a notification.</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 content of this section is purely illustrative and has no ambition to be comprehensive. That is, while the methods defined in <xref target="sec-groupnaming-app"/> are presented as viable to use, further viable methods might exist and can be defined in the future. Furthermore, this section does not provide guidelines on how to choose between the different methods, for which a decision is application-specific.</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:0: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:0: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 example semantics "g.&lt;GROUPTYPE&gt;" is used for the values of the attribute "rt".</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 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 network of the client.</t>
        <t>The example semantics "g.&lt;GROUPTYPE&gt;" is used for the values of the attribute "rt".</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".</t>
      <figure anchor="fig-exchange-example">
        <name>Example of Non-confirmable group request, followed by Non-confirmable Responses</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="736" width="576" viewBox="0 0 576 736" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 32,48 L 32,192" fill="none" stroke="black"/>
              <path d="M 32,320 L 32,528" fill="none" stroke="black"/>
              <path d="M 32,608 L 32,720" fill="none" stroke="black"/>
              <path d="M 168,48 L 168,104" fill="none" stroke="black"/>
              <path d="M 168,152 L 168,192" fill="none" stroke="black"/>
              <path d="M 168,320 L 168,440" fill="none" stroke="black"/>
              <path d="M 168,456 L 168,528" fill="none" stroke="black"/>
              <path d="M 168,608 L 168,632" fill="none" stroke="black"/>
              <path d="M 168,648 L 168,720" fill="none" stroke="black"/>
              <path d="M 192,48 L 192,136" fill="none" stroke="black"/>
              <path d="M 192,152 L 192,192" fill="none" stroke="black"/>
              <path d="M 192,320 L 192,528" fill="none" stroke="black"/>
              <path d="M 192,608 L 192,632" fill="none" stroke="black"/>
              <path d="M 192,648 L 192,720" fill="none" stroke="black"/>
              <path d="M 216,48 L 216,192" fill="none" stroke="black"/>
              <path d="M 216,320 L 216,528" fill="none" stroke="black"/>
              <path d="M 216,608 L 216,720" fill="none" stroke="black"/>
              <path d="M 32,80 L 160,80" fill="none" stroke="black"/>
              <path d="M 112,112 L 184,112" fill="none" stroke="black"/>
              <path d="M 128,144 L 208,144" fill="none" stroke="black"/>
              <path d="M 40,352 L 168,352" fill="none" stroke="black"/>
              <path d="M 104,448 L 192,448" fill="none" stroke="black"/>
              <path d="M 40,640 L 216,640" fill="none" stroke="black"/>
              <path d="M 96,80 L 128,144" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="216,144 204,138.4 204,149.6" fill="black" transform="rotate(0,208,144)"/>
              <polygon class="arrowhead" points="192,112 180,106.4 180,117.6" fill="black" transform="rotate(0,184,112)"/>
              <polygon class="arrowhead" points="168,80 156,74.4 156,85.6" fill="black" transform="rotate(0,160,80)"/>
              <polygon class="arrowhead" points="112,448 100,442.4 100,453.6" fill="black" transform="rotate(180,104,448)"/>
              <polygon class="arrowhead" points="48,640 36,634.4 36,645.6" fill="black" transform="rotate(180,40,640)"/>
              <polygon class="arrowhead" points="48,352 36,346.4 36,357.6" fill="black" transform="rotate(180,40,352)"/>
              <g class="text">
                <text x="28" y="36">Client</text>
                <text x="168" y="36">A</text>
                <text x="192" y="36">B</text>
                <text x="216" y="36">C</text>
                <text x="64" y="68">GET</text>
                <text x="256" y="84">Source:</text>
                <text x="384" y="84">ADDR_CLIENT:PORT_CLIENT</text>
                <text x="276" y="100">Destination:</text>
                <text x="400" y="100">ADDR_GRP:PORT_GRP</text>
                <text x="256" y="116">Header:</text>
                <text x="304" y="116">GET</text>
                <text x="352" y="116">(T=NON,</text>
                <text x="428" y="116">Code=0.01,</text>
                <text x="520" y="116">MID=0x7d41)</text>
                <text x="168" y="132">|</text>
                <text x="252" y="132">Token:</text>
                <text x="300" y="132">0x86</text>
                <text x="264" y="148">Uri-Path:</text>
                <text x="324" y="148">"gp"</text>
                <text x="264" y="164">Uri-Path:</text>
                <text x="328" y="164">"gp1"</text>
                <text x="264" y="180">Uri-Path:</text>
                <text x="360" y="180">"temperature"</text>
                <text x="40" y="228">All</text>
                <text x="88" y="228">servers</text>
                <text x="144" y="228">reply</text>
                <text x="188" y="228">with</text>
                <text x="216" y="228">a</text>
                <text x="244" y="228">2.05</text>
                <text x="304" y="228">(Content)</text>
                <text x="384" y="228">response,</text>
                <text x="460" y="228">although</text>
                <text x="512" y="228">the</text>
                <text x="60" y="244">response</text>
                <text x="116" y="244">from</text>
                <text x="164" y="244">server</text>
                <text x="200" y="244">B</text>
                <text x="220" y="244">is</text>
                <text x="256" y="244">lost.</text>
                <text x="36" y="276">As</text>
                <text x="76" y="276">source</text>
                <text x="124" y="276">port</text>
                <text x="172" y="276">number</text>
                <text x="212" y="276">of</text>
                <text x="248" y="276">their</text>
                <text x="312" y="276">response,</text>
                <text x="384" y="276">servers</text>
                <text x="424" y="276">A</text>
                <text x="448" y="276">and</text>
                <text x="472" y="276">B</text>
                <text x="496" y="276">use</text>
                <text x="528" y="276">the</text>
                <text x="72" y="292">destination</text>
                <text x="140" y="292">port</text>
                <text x="188" y="292">number</text>
                <text x="228" y="292">of</text>
                <text x="256" y="292">the</text>
                <text x="308" y="292">request,</text>
                <text x="368" y="292">i.e.,</text>
                <text x="432" y="292">PORT_GRP.</text>
                <text x="256" y="356">Source:</text>
                <text x="352" y="356">ADDR_A:PORT_GRP</text>
                <text x="132" y="372">2.05</text>
                <text x="276" y="372">Destination:</text>
                <text x="424" y="372">ADDR_CLIENT:PORT_CLIENT</text>
                <text x="256" y="388">Header:</text>
                <text x="308" y="388">2.05</text>
                <text x="360" y="388">(T=NON,</text>
                <text x="436" y="388">Code=2.05,</text>
                <text x="528" y="388">MID=0x60b1)</text>
                <text x="252" y="404">Token:</text>
                <text x="300" y="404">0x86</text>
                <text x="260" y="420">Payload:</text>
                <text x="320" y="420">"22.3</text>
                <text x="356" y="420">C"</text>
                <text x="60" y="452">Lost</text>
                <text x="88" y="452">X</text>
                <text x="256" y="452">Source:</text>
                <text x="352" y="452">ADDR_B:PORT_GRP</text>
                <text x="132" y="468">2.05</text>
                <text x="276" y="468">Destination:</text>
                <text x="424" y="468">ADDR_CLIENT:PORT_CLIENT</text>
                <text x="256" y="484">Header:</text>
                <text x="308" y="484">2.05</text>
                <text x="360" y="484">(T=NON,</text>
                <text x="436" y="484">Code=2.05,</text>
                <text x="528" y="484">MID=0x01a0)</text>
                <text x="252" y="500">Token:</text>
                <text x="300" y="500">0x86</text>
                <text x="260" y="516">Payload:</text>
                <text x="320" y="516">"20.9</text>
                <text x="356" y="516">C"</text>
                <text x="36" y="564">As</text>
                <text x="76" y="564">source</text>
                <text x="124" y="564">port</text>
                <text x="172" y="564">number</text>
                <text x="212" y="564">of</text>
                <text x="240" y="564">its</text>
                <text x="296" y="564">response,</text>
                <text x="364" y="564">server</text>
                <text x="400" y="564">C</text>
                <text x="428" y="564">uses</text>
                <text x="464" y="564">its</text>
                <text x="496" y="564">own</text>
                <text x="532" y="564">port</text>
                <text x="52" y="580">number</text>
                <text x="112" y="580">PORT_C.</text>
                <text x="256" y="644">Source:</text>
                <text x="344" y="644">ADDR_C:PORT_C</text>
                <text x="132" y="660">2.05</text>
                <text x="276" y="660">Destination:</text>
                <text x="424" y="660">ADDR_CLIENT:PORT_CLIENT</text>
                <text x="256" y="676">Header:</text>
                <text x="308" y="676">2.05</text>
                <text x="360" y="676">(T=NON,</text>
                <text x="436" y="676">Code=2.05,</text>
                <text x="528" y="676">MID=0x952a)</text>
                <text x="252" y="692">Token:</text>
                <text x="300" y="692">0x86</text>
                <text x="260" y="708">Payload:</text>
                <text x="320" y="708">"21.0</text>
                <text x="356" y="708">C"</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![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"
   |                |  |  |

   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.

   |                |  |  |
   |                |  |  |
   |<---------------+  |  | 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"
   |                |  |  |
   | Lost 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"
   |                |  |  |

   As source port number of its response, server C uses its own port
   number PORT_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>
        </artset>
      </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".</t>
      <figure anchor="fig-exchange-example-observe">
        <name>Example of Non-confirmable Observe group request, followed by Non-confirmable Responses as Observe notifications</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="1232" width="576" viewBox="0 0 576 1232" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 32,48 L 32,208" fill="none" stroke="black"/>
              <path d="M 32,320 L 32,544" fill="none" stroke="black"/>
              <path d="M 32,624 L 32,752" fill="none" stroke="black"/>
              <path d="M 32,864 L 32,1216" fill="none" stroke="black"/>
              <path d="M 168,48 L 168,104" fill="none" stroke="black"/>
              <path d="M 168,152 L 168,208" fill="none" stroke="black"/>
              <path d="M 168,320 L 168,456" fill="none" stroke="black"/>
              <path d="M 168,472 L 168,544" fill="none" stroke="black"/>
              <path d="M 168,624 L 168,648" fill="none" stroke="black"/>
              <path d="M 168,664 L 168,752" fill="none" stroke="black"/>
              <path d="M 168,864 L 168,1000" fill="none" stroke="black"/>
              <path d="M 168,1016 L 168,1112" fill="none" stroke="black"/>
              <path d="M 168,1128 L 168,1216" fill="none" stroke="black"/>
              <path d="M 192,48 L 192,136" fill="none" stroke="black"/>
              <path d="M 192,152 L 192,208" fill="none" stroke="black"/>
              <path d="M 192,320 L 192,544" fill="none" stroke="black"/>
              <path d="M 192,624 L 192,648" fill="none" stroke="black"/>
              <path d="M 192,664 L 192,752" fill="none" stroke="black"/>
              <path d="M 192,864 L 192,1112" fill="none" stroke="black"/>
              <path d="M 192,1128 L 192,1216" fill="none" stroke="black"/>
              <path d="M 216,48 L 216,208" fill="none" stroke="black"/>
              <path d="M 216,320 L 216,544" fill="none" stroke="black"/>
              <path d="M 216,624 L 216,752" fill="none" stroke="black"/>
              <path d="M 216,864 L 216,1216" fill="none" stroke="black"/>
              <path d="M 32,80 L 160,80" fill="none" stroke="black"/>
              <path d="M 112,112 L 184,112" fill="none" stroke="black"/>
              <path d="M 128,144 L 208,144" fill="none" stroke="black"/>
              <path d="M 40,352 L 168,352" fill="none" stroke="black"/>
              <path d="M 40,464 L 192,464" fill="none" stroke="black"/>
              <path d="M 40,656 L 216,656" fill="none" stroke="black"/>
              <path d="M 40,896 L 168,896" fill="none" stroke="black"/>
              <path d="M 40,1008 L 192,1008" fill="none" stroke="black"/>
              <path d="M 40,1120 L 216,1120" fill="none" stroke="black"/>
              <path d="M 96,80 L 128,144" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="216,144 204,138.4 204,149.6" fill="black" transform="rotate(0,208,144)"/>
              <polygon class="arrowhead" points="192,112 180,106.4 180,117.6" fill="black" transform="rotate(0,184,112)"/>
              <polygon class="arrowhead" points="168,80 156,74.4 156,85.6" fill="black" transform="rotate(0,160,80)"/>
              <polygon class="arrowhead" points="48,1120 36,1114.4 36,1125.6" fill="black" transform="rotate(180,40,1120)"/>
              <polygon class="arrowhead" points="48,1008 36,1002.4 36,1013.6" fill="black" transform="rotate(180,40,1008)"/>
              <polygon class="arrowhead" points="48,896 36,890.4 36,901.6" fill="black" transform="rotate(180,40,896)"/>
              <polygon class="arrowhead" points="48,656 36,650.4 36,661.6" fill="black" transform="rotate(180,40,656)"/>
              <polygon class="arrowhead" points="48,464 36,458.4 36,469.6" fill="black" transform="rotate(180,40,464)"/>
              <polygon class="arrowhead" points="48,352 36,346.4 36,357.6" fill="black" transform="rotate(180,40,352)"/>
              <g class="text">
                <text x="28" y="36">Client</text>
                <text x="168" y="36">A</text>
                <text x="192" y="36">B</text>
                <text x="216" y="36">C</text>
                <text x="64" y="68">GET</text>
                <text x="256" y="84">Source:</text>
                <text x="384" y="84">ADDR_CLIENT:PORT_CLIENT</text>
                <text x="276" y="100">Destination:</text>
                <text x="400" y="100">ADDR_GRP:PORT_GRP</text>
                <text x="256" y="116">Header:</text>
                <text x="304" y="116">GET</text>
                <text x="352" y="116">(T=NON,</text>
                <text x="428" y="116">Code=0.01,</text>
                <text x="520" y="116">MID=0x7d41)</text>
                <text x="168" y="132">|</text>
                <text x="252" y="132">Token:</text>
                <text x="300" y="132">0x86</text>
                <text x="260" y="148">Observe:</text>
                <text x="304" y="148">0</text>
                <text x="356" y="148">(register)</text>
                <text x="264" y="164">Uri-Path:</text>
                <text x="324" y="164">"gp"</text>
                <text x="264" y="180">Uri-Path:</text>
                <text x="328" y="180">"gp1"</text>
                <text x="264" y="196">Uri-Path:</text>
                <text x="360" y="196">"temperature"</text>
                <text x="40" y="244">All</text>
                <text x="88" y="244">servers</text>
                <text x="144" y="244">reply</text>
                <text x="188" y="244">with</text>
                <text x="216" y="244">a</text>
                <text x="244" y="244">2.05</text>
                <text x="304" y="244">(Content)</text>
                <text x="396" y="244">notification</text>
                <text x="488" y="244">response.</text>
                <text x="36" y="276">As</text>
                <text x="76" y="276">source</text>
                <text x="124" y="276">port</text>
                <text x="172" y="276">number</text>
                <text x="212" y="276">of</text>
                <text x="248" y="276">their</text>
                <text x="312" y="276">response,</text>
                <text x="384" y="276">servers</text>
                <text x="424" y="276">A</text>
                <text x="448" y="276">and</text>
                <text x="472" y="276">B</text>
                <text x="496" y="276">use</text>
                <text x="528" y="276">the</text>
                <text x="72" y="292">destination</text>
                <text x="140" y="292">port</text>
                <text x="188" y="292">number</text>
                <text x="228" y="292">of</text>
                <text x="256" y="292">the</text>
                <text x="308" y="292">request,</text>
                <text x="368" y="292">i.e.,</text>
                <text x="432" y="292">PORT_GRP.</text>
                <text x="256" y="356">Source:</text>
                <text x="352" y="356">ADDR_A:PORT_GRP</text>
                <text x="132" y="372">2.05</text>
                <text x="276" y="372">Destination:</text>
                <text x="424" y="372">ADDR_CLIENT:PORT_CLIENT</text>
                <text x="256" y="388">Header:</text>
                <text x="308" y="388">2.05</text>
                <text x="360" y="388">(T=NON,</text>
                <text x="436" y="388">Code=2.05,</text>
                <text x="528" y="388">MID=0x60b1)</text>
                <text x="252" y="404">Token:</text>
                <text x="300" y="404">0x86</text>
                <text x="260" y="420">Observe:</text>
                <text x="304" y="420">3</text>
                <text x="260" y="436">Payload:</text>
                <text x="320" y="436">"22.3</text>
                <text x="356" y="436">C"</text>
                <text x="256" y="468">Source:</text>
                <text x="352" y="468">ADDR_B:PORT_GRP</text>
                <text x="132" y="484">2.05</text>
                <text x="276" y="484">Destination:</text>
                <text x="424" y="484">ADDR_CLIENT:PORT_CLIENT</text>
                <text x="256" y="500">Header:</text>
                <text x="308" y="500">2.05</text>
                <text x="360" y="500">(T=NON,</text>
                <text x="436" y="500">Code=2.05,</text>
                <text x="528" y="500">MID=0x01a0)</text>
                <text x="252" y="516">Token:</text>
                <text x="300" y="516">0x86</text>
                <text x="260" y="532">Observe:</text>
                <text x="308" y="532">13</text>
                <text x="260" y="548">Payload:</text>
                <text x="320" y="548">"20.9</text>
                <text x="356" y="548">C"</text>
                <text x="36" y="580">As</text>
                <text x="76" y="580">source</text>
                <text x="124" y="580">port</text>
                <text x="172" y="580">number</text>
                <text x="212" y="580">of</text>
                <text x="240" y="580">its</text>
                <text x="296" y="580">response,</text>
                <text x="364" y="580">server</text>
                <text x="400" y="580">C</text>
                <text x="428" y="580">uses</text>
                <text x="464" y="580">its</text>
                <text x="496" y="580">own</text>
                <text x="532" y="580">port</text>
                <text x="52" y="596">number</text>
                <text x="112" y="596">PORT_C.</text>
                <text x="256" y="660">Source:</text>
                <text x="344" y="660">ADDR_C:PORT_C</text>
                <text x="132" y="676">2.05</text>
                <text x="276" y="676">Destination:</text>
                <text x="424" y="676">ADDR_CLIENT:PORT_CLIENT</text>
                <text x="256" y="692">Header:</text>
                <text x="308" y="692">2.05</text>
                <text x="360" y="692">(T=NON,</text>
                <text x="436" y="692">Code=2.05,</text>
                <text x="528" y="692">MID=0x952a)</text>
                <text x="252" y="708">Token:</text>
                <text x="300" y="708">0x86</text>
                <text x="260" y="724">Observe:</text>
                <text x="308" y="724">23</text>
                <text x="260" y="740">Payload:</text>
                <text x="320" y="740">"21.0</text>
                <text x="356" y="740">C"</text>
                <text x="44" y="788">Some</text>
                <text x="84" y="788">time</text>
                <text x="132" y="788">later,</text>
                <text x="176" y="788">the</text>
                <text x="240" y="788">temperature</text>
                <text x="324" y="788">changes.</text>
                <text x="40" y="820">All</text>
                <text x="88" y="820">servers</text>
                <text x="140" y="820">send</text>
                <text x="168" y="820">a</text>
                <text x="196" y="820">2.05</text>
                <text x="256" y="820">(Content)</text>
                <text x="348" y="820">notification</text>
                <text x="440" y="820">response,</text>
                <text x="500" y="820">with</text>
                <text x="536" y="820">the</text>
                <text x="40" y="836">new</text>
                <text x="116" y="836">representation</text>
                <text x="188" y="836">of</text>
                <text x="216" y="836">the</text>
                <text x="288" y="836">"temperature"</text>
                <text x="380" y="836">resource</text>
                <text x="428" y="836">as</text>
                <text x="476" y="836">payload.</text>
                <text x="256" y="900">Source:</text>
                <text x="352" y="900">ADDR_A:PORT_GRP</text>
                <text x="132" y="916">2.05</text>
                <text x="276" y="916">Destination:</text>
                <text x="424" y="916">ADDR_CLIENT:PORT_CLIENT</text>
                <text x="256" y="932">Header:</text>
                <text x="308" y="932">2.05</text>
                <text x="360" y="932">(T=NON,</text>
                <text x="436" y="932">Code=2.05,</text>
                <text x="528" y="932">MID=0x60b2)</text>
                <text x="252" y="948">Token:</text>
                <text x="300" y="948">0x86</text>
                <text x="260" y="964">Observe:</text>
                <text x="304" y="964">7</text>
                <text x="260" y="980">Payload:</text>
                <text x="320" y="980">"32.3</text>
                <text x="356" y="980">C"</text>
                <text x="256" y="1012">Source:</text>
                <text x="352" y="1012">ADDR_B:PORT_GRP</text>
                <text x="132" y="1028">2.05</text>
                <text x="276" y="1028">Destination:</text>
                <text x="424" y="1028">ADDR_CLIENT:PORT_CLIENT</text>
                <text x="256" y="1044">Header:</text>
                <text x="308" y="1044">2.05</text>
                <text x="360" y="1044">(T=NON,</text>
                <text x="436" y="1044">Code=2.05,</text>
                <text x="528" y="1044">MID=0x01a1)</text>
                <text x="252" y="1060">Token:</text>
                <text x="300" y="1060">0x86</text>
                <text x="260" y="1076">Observe:</text>
                <text x="308" y="1076">18</text>
                <text x="260" y="1092">Payload:</text>
                <text x="320" y="1092">"30.9</text>
                <text x="356" y="1092">C"</text>
                <text x="256" y="1124">Source:</text>
                <text x="344" y="1124">ADDR_C:PORT_C</text>
                <text x="132" y="1140">2.05</text>
                <text x="276" y="1140">Destination:</text>
                <text x="424" y="1140">ADDR_CLIENT:PORT_CLIENT</text>
                <text x="256" y="1156">Header:</text>
                <text x="308" y="1156">2.05</text>
                <text x="360" y="1156">(T=NON,</text>
                <text x="436" y="1156">Code=2.05,</text>
                <text x="528" y="1156">MID=0x952b)</text>
                <text x="252" y="1172">Token:</text>
                <text x="300" y="1172">0x86</text>
                <text x="260" y="1188">Observe:</text>
                <text x="308" y="1188">29</text>
                <text x="260" y="1204">Payload:</text>
                <text x="320" y="1204">"31.0</text>
                <text x="356" y="1204">C"</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![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"
   |                |  |  |

   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.

   |                |  |  |
   |                |  |  |
   |<---------------+  |  | 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"

   As source port number of its response, server C uses its own port
   number PORT_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"
   |                |  |  |

   Some time later, the temperature changes.

   All servers send a 2.05 (Content) notification response, with the
   new representation of the "temperature" resource as payload.

   |                |  |  |
   |                |  |  |
   |<---------------+  |  | 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>
        </artset>
      </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.</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>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="2592" width="576" viewBox="0 0 576 2592" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 32,48 L 32,208" fill="none" stroke="black"/>
              <path d="M 32,336 L 32,688" fill="none" stroke="black"/>
              <path d="M 32,800 L 32,1344" fill="none" stroke="black"/>
              <path d="M 32,1408 L 32,1952" fill="none" stroke="black"/>
              <path d="M 32,2016 L 32,2560" fill="none" stroke="black"/>
              <path d="M 168,48 L 168,104" fill="none" stroke="black"/>
              <path d="M 168,152 L 168,208" fill="none" stroke="black"/>
              <path d="M 168,336 L 168,472" fill="none" stroke="black"/>
              <path d="M 168,488 L 168,584" fill="none" stroke="black"/>
              <path d="M 168,600 L 168,688" fill="none" stroke="black"/>
              <path d="M 168,800 L 168,1344" fill="none" stroke="black"/>
              <path d="M 168,1408 L 168,1432" fill="none" stroke="black"/>
              <path d="M 168,1448 L 168,1576" fill="none" stroke="black"/>
              <path d="M 168,1592 L 168,1704" fill="none" stroke="black"/>
              <path d="M 168,1720 L 168,1848" fill="none" stroke="black"/>
              <path d="M 168,1864 L 168,1952" fill="none" stroke="black"/>
              <path d="M 168,2016 L 168,2040" fill="none" stroke="black"/>
              <path d="M 168,2056 L 168,2184" fill="none" stroke="black"/>
              <path d="M 168,2200 L 168,2312" fill="none" stroke="black"/>
              <path d="M 168,2328 L 168,2456" fill="none" stroke="black"/>
              <path d="M 168,2472 L 168,2560" fill="none" stroke="black"/>
              <path d="M 192,48 L 192,136" fill="none" stroke="black"/>
              <path d="M 192,152 L 192,208" fill="none" stroke="black"/>
              <path d="M 192,336 L 192,584" fill="none" stroke="black"/>
              <path d="M 192,600 L 192,688" fill="none" stroke="black"/>
              <path d="M 192,800 L 192,1344" fill="none" stroke="black"/>
              <path d="M 192,1408 L 192,1952" fill="none" stroke="black"/>
              <path d="M 192,2016 L 192,2040" fill="none" stroke="black"/>
              <path d="M 192,2056 L 192,2184" fill="none" stroke="black"/>
              <path d="M 192,2200 L 192,2312" fill="none" stroke="black"/>
              <path d="M 192,2328 L 192,2456" fill="none" stroke="black"/>
              <path d="M 192,2472 L 192,2560" fill="none" stroke="black"/>
              <path d="M 216,48 L 216,208" fill="none" stroke="black"/>
              <path d="M 216,336 L 216,688" fill="none" stroke="black"/>
              <path d="M 216,800 L 216,1344" fill="none" stroke="black"/>
              <path d="M 216,1408 L 216,1952" fill="none" stroke="black"/>
              <path d="M 216,2016 L 216,2560" fill="none" stroke="black"/>
              <path d="M 32,80 L 160,80" fill="none" stroke="black"/>
              <path d="M 112,112 L 184,112" fill="none" stroke="black"/>
              <path d="M 128,144 L 208,144" fill="none" stroke="black"/>
              <path d="M 40,368 L 168,368" fill="none" stroke="black"/>
              <path d="M 40,480 L 192,480" fill="none" stroke="black"/>
              <path d="M 40,592 L 216,592" fill="none" stroke="black"/>
              <path d="M 32,832 L 160,832" fill="none" stroke="black"/>
              <path d="M 40,976 L 168,976" fill="none" stroke="black"/>
              <path d="M 32,1104 L 160,1104" fill="none" stroke="black"/>
              <path d="M 40,1248 L 168,1248" fill="none" stroke="black"/>
              <path d="M 32,1440 L 184,1440" fill="none" stroke="black"/>
              <path d="M 40,1584 L 192,1584" fill="none" stroke="black"/>
              <path d="M 32,1712 L 184,1712" fill="none" stroke="black"/>
              <path d="M 40,1856 L 192,1856" fill="none" stroke="black"/>
              <path d="M 32,2048 L 208,2048" fill="none" stroke="black"/>
              <path d="M 40,2192 L 216,2192" fill="none" stroke="black"/>
              <path d="M 32,2320 L 208,2320" fill="none" stroke="black"/>
              <path d="M 40,2464 L 216,2464" fill="none" stroke="black"/>
              <path d="M 96,80 L 128,144" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="216,2320 204,2314.4 204,2325.6" fill="black" transform="rotate(0,208,2320)"/>
              <polygon class="arrowhead" points="216,2048 204,2042.4 204,2053.6" fill="black" transform="rotate(0,208,2048)"/>
              <polygon class="arrowhead" points="216,144 204,138.4 204,149.6" fill="black" transform="rotate(0,208,144)"/>
              <polygon class="arrowhead" points="192,1712 180,1706.4 180,1717.6" fill="black" transform="rotate(0,184,1712)"/>
              <polygon class="arrowhead" points="192,1440 180,1434.4 180,1445.6" fill="black" transform="rotate(0,184,1440)"/>
              <polygon class="arrowhead" points="192,112 180,106.4 180,117.6" fill="black" transform="rotate(0,184,112)"/>
              <polygon class="arrowhead" points="168,1104 156,1098.4 156,1109.6" fill="black" transform="rotate(0,160,1104)"/>
              <polygon class="arrowhead" points="168,832 156,826.4 156,837.6" fill="black" transform="rotate(0,160,832)"/>
              <polygon class="arrowhead" points="168,80 156,74.4 156,85.6" fill="black" transform="rotate(0,160,80)"/>
              <polygon class="arrowhead" points="48,2464 36,2458.4 36,2469.6" fill="black" transform="rotate(180,40,2464)"/>
              <polygon class="arrowhead" points="48,2192 36,2186.4 36,2197.6" fill="black" transform="rotate(180,40,2192)"/>
              <polygon class="arrowhead" points="48,1856 36,1850.4 36,1861.6" fill="black" transform="rotate(180,40,1856)"/>
              <polygon class="arrowhead" points="48,1584 36,1578.4 36,1589.6" fill="black" transform="rotate(180,40,1584)"/>
              <polygon class="arrowhead" points="48,1248 36,1242.4 36,1253.6" fill="black" transform="rotate(180,40,1248)"/>
              <polygon class="arrowhead" points="48,976 36,970.4 36,981.6" fill="black" transform="rotate(180,40,976)"/>
              <polygon class="arrowhead" points="48,592 36,586.4 36,597.6" fill="black" transform="rotate(180,40,592)"/>
              <polygon class="arrowhead" points="48,480 36,474.4 36,485.6" fill="black" transform="rotate(180,40,480)"/>
              <polygon class="arrowhead" points="48,368 36,362.4 36,373.6" fill="black" transform="rotate(180,40,368)"/>
              <g class="text">
                <text x="28" y="36">Client</text>
                <text x="168" y="36">A</text>
                <text x="192" y="36">B</text>
                <text x="216" y="36">C</text>
                <text x="64" y="68">GET</text>
                <text x="256" y="84">Source:</text>
                <text x="384" y="84">ADDR_CLIENT:PORT_CLIENT</text>
                <text x="276" y="100">Destination:</text>
                <text x="400" y="100">ADDR_GRP:PORT_GRP</text>
                <text x="256" y="116">Header:</text>
                <text x="304" y="116">GET</text>
                <text x="352" y="116">(T=NON,</text>
                <text x="428" y="116">Code=0.01,</text>
                <text x="520" y="116">MID=0x7d41)</text>
                <text x="168" y="132">|</text>
                <text x="252" y="132">Token:</text>
                <text x="300" y="132">0x86</text>
                <text x="264" y="148">Uri-Path:</text>
                <text x="324" y="148">"gp"</text>
                <text x="264" y="164">Uri-Path:</text>
                <text x="328" y="164">"gp1"</text>
                <text x="264" y="180">Uri-Path:</text>
                <text x="328" y="180">"log"</text>
                <text x="256" y="196">Block2:</text>
                <text x="316" y="196">0/0/64</text>
                <text x="40" y="244">All</text>
                <text x="88" y="244">servers</text>
                <text x="144" y="244">reply</text>
                <text x="188" y="244">with</text>
                <text x="216" y="244">a</text>
                <text x="244" y="244">2.05</text>
                <text x="304" y="244">(Content)</text>
                <text x="380" y="244">response</text>
                <text x="456" y="244">including</text>
                <text x="512" y="244">the</text>
                <text x="552" y="244">first</text>
                <text x="52" y="260">block.</text>
                <text x="36" y="292">As</text>
                <text x="76" y="292">source</text>
                <text x="124" y="292">port</text>
                <text x="172" y="292">number</text>
                <text x="212" y="292">of</text>
                <text x="240" y="292">its</text>
                <text x="296" y="292">response,</text>
                <text x="356" y="292">each</text>
                <text x="404" y="292">server</text>
                <text x="452" y="292">uses</text>
                <text x="488" y="292">its</text>
                <text x="520" y="292">own</text>
                <text x="556" y="292">port</text>
                <text x="56" y="308">number.</text>
                <text x="256" y="372">Source:</text>
                <text x="344" y="372">ADDR_A:PORT_A</text>
                <text x="132" y="388">2.05</text>
                <text x="276" y="388">Destination:</text>
                <text x="424" y="388">ADDR_CLIENT:PORT_CLIENT</text>
                <text x="256" y="404">Header:</text>
                <text x="308" y="404">2.05</text>
                <text x="360" y="404">(T=NON,</text>
                <text x="436" y="404">Code=2.05,</text>
                <text x="528" y="404">MID=0x60b1)</text>
                <text x="252" y="420">Token:</text>
                <text x="300" y="420">0x86</text>
                <text x="256" y="436">Block2:</text>
                <text x="316" y="436">0/1/64</text>
                <text x="260" y="452">Payload:</text>
                <text x="324" y="452">0x0a00</text>
                <text x="368" y="452">...</text>
                <text x="256" y="484">Source:</text>
                <text x="344" y="484">ADDR_B:PORT_B</text>
                <text x="132" y="500">2.05</text>
                <text x="276" y="500">Destination:</text>
                <text x="424" y="500">ADDR_CLIENT:PORT_CLIENT</text>
                <text x="256" y="516">Header:</text>
                <text x="308" y="516">2.05</text>
                <text x="360" y="516">(T=NON,</text>
                <text x="436" y="516">Code=2.05,</text>
                <text x="528" y="516">MID=0x01a0)</text>
                <text x="252" y="532">Token:</text>
                <text x="300" y="532">0x86</text>
                <text x="256" y="548">Block2:</text>
                <text x="316" y="548">0/1/64</text>
                <text x="260" y="564">Payload:</text>
                <text x="324" y="564">0x0b00</text>
                <text x="368" y="564">...</text>
                <text x="256" y="596">Source:</text>
                <text x="344" y="596">ADDR_C:PORT_C</text>
                <text x="132" y="612">2.05</text>
                <text x="276" y="612">Destination:</text>
                <text x="424" y="612">ADDR_CLIENT:PORT_CLIENT</text>
                <text x="256" y="628">Header:</text>
                <text x="308" y="628">2.05</text>
                <text x="360" y="628">(T=NON,</text>
                <text x="436" y="628">Code=4.04,</text>
                <text x="528" y="628">MID=0x952a)</text>
                <text x="252" y="644">Token:</text>
                <text x="300" y="644">0x86</text>
                <text x="256" y="660">Block2:</text>
                <text x="316" y="660">0/1/64</text>
                <text x="260" y="676">Payload:</text>
                <text x="324" y="676">0x0c00</text>
                <text x="368" y="676">...</text>
                <text x="48" y="724">After</text>
                <text x="112" y="724">obtaining</text>
                <text x="168" y="724">the</text>
                <text x="208" y="724">first</text>
                <text x="260" y="724">block,</text>
                <text x="304" y="724">the</text>
                <text x="348" y="724">client</text>
                <text x="412" y="724">requests</text>
                <text x="464" y="724">the</text>
                <text x="520" y="724">following</text>
                <text x="52" y="740">blocks</text>
                <text x="124" y="740">separately</text>
                <text x="188" y="740">from</text>
                <text x="228" y="740">each</text>
                <text x="280" y="740">server,</text>
                <text x="324" y="740">by</text>
                <text x="360" y="740">means</text>
                <text x="396" y="740">of</text>
                <text x="440" y="740">unicast</text>
                <text x="516" y="740">exchanges.</text>
                <text x="40" y="772">The</text>
                <text x="84" y="772">client</text>
                <text x="148" y="772">requests</text>
                <text x="200" y="772">the</text>
                <text x="256" y="772">following</text>
                <text x="324" y="772">blocks</text>
                <text x="372" y="772">from</text>
                <text x="420" y="772">server</text>
                <text x="460" y="772">A.</text>
                <text x="64" y="820">GET</text>
                <text x="256" y="836">Source:</text>
                <text x="384" y="836">ADDR_CLIENT:PORT_CLIENT</text>
                <text x="276" y="852">Destination:</text>
                <text x="384" y="852">ADDR_A:PORT_A</text>
                <text x="256" y="868">Header:</text>
                <text x="304" y="868">GET</text>
                <text x="352" y="868">(T=CON,</text>
                <text x="428" y="868">Code=0.01,</text>
                <text x="520" y="868">MID=0x7d42)</text>
                <text x="252" y="884">Token:</text>
                <text x="300" y="884">0xa6</text>
                <text x="264" y="900">Uri-Path:</text>
                <text x="324" y="900">"gp"</text>
                <text x="264" y="916">Uri-Path:</text>
                <text x="328" y="916">"gp1"</text>
                <text x="264" y="932">Uri-Path:</text>
                <text x="328" y="932">"log"</text>
                <text x="256" y="948">Block2:</text>
                <text x="316" y="948">1/0/64</text>
                <text x="256" y="980">Source:</text>
                <text x="344" y="980">ADDR_A:PORT_A</text>
                <text x="132" y="996">2.05</text>
                <text x="276" y="996">Destination:</text>
                <text x="424" y="996">ADDR_CLIENT:PORT_CLIENT</text>
                <text x="256" y="1012">Header:</text>
                <text x="308" y="1012">2.05</text>
                <text x="360" y="1012">(T=ACK,</text>
                <text x="436" y="1012">Code=2.05,</text>
                <text x="528" y="1012">MID=0x7d42)</text>
                <text x="252" y="1028">Token:</text>
                <text x="300" y="1028">0xa6</text>
                <text x="256" y="1044">Block2:</text>
                <text x="316" y="1044">1/1/64</text>
                <text x="260" y="1060">Payload:</text>
                <text x="324" y="1060">0x0a01</text>
                <text x="368" y="1060">...</text>
                <text x="64" y="1092">GET</text>
                <text x="256" y="1108">Source:</text>
                <text x="384" y="1108">ADDR_CLIENT:PORT_CLIENT</text>
                <text x="276" y="1124">Destination:</text>
                <text x="384" y="1124">ADDR_A:PORT_A</text>
                <text x="256" y="1140">Header:</text>
                <text x="304" y="1140">GET</text>
                <text x="352" y="1140">(T=CON,</text>
                <text x="428" y="1140">Code=0.01,</text>
                <text x="520" y="1140">MID=0x7d43)</text>
                <text x="252" y="1156">Token:</text>
                <text x="300" y="1156">0xa7</text>
                <text x="264" y="1172">Uri-Path:</text>
                <text x="324" y="1172">"gp"</text>
                <text x="264" y="1188">Uri-Path:</text>
                <text x="328" y="1188">"gp1"</text>
                <text x="264" y="1204">Uri-Path:</text>
                <text x="328" y="1204">"log"</text>
                <text x="256" y="1220">Block2:</text>
                <text x="316" y="1220">2/0/64</text>
                <text x="256" y="1252">Source:</text>
                <text x="344" y="1252">ADDR_A:PORT_A</text>
                <text x="132" y="1268">2.05</text>
                <text x="276" y="1268">Destination:</text>
                <text x="424" y="1268">ADDR_CLIENT:PORT_CLIENT</text>
                <text x="256" y="1284">Header:</text>
                <text x="308" y="1284">2.05</text>
                <text x="360" y="1284">(T=ACK,</text>
                <text x="436" y="1284">Code=2.05,</text>
                <text x="528" y="1284">MID=0x7d43)</text>
                <text x="252" y="1300">Token:</text>
                <text x="300" y="1300">0xa7</text>
                <text x="256" y="1316">Block2:</text>
                <text x="316" y="1316">2/0/64</text>
                <text x="260" y="1332">Payload:</text>
                <text x="324" y="1332">0x0a02</text>
                <text x="368" y="1332">...</text>
                <text x="40" y="1380">The</text>
                <text x="84" y="1380">client</text>
                <text x="148" y="1380">requests</text>
                <text x="200" y="1380">the</text>
                <text x="256" y="1380">following</text>
                <text x="324" y="1380">blocks</text>
                <text x="372" y="1380">from</text>
                <text x="420" y="1380">server</text>
                <text x="460" y="1380">B.</text>
                <text x="64" y="1428">GET</text>
                <text x="256" y="1444">Source:</text>
                <text x="384" y="1444">ADDR_CLIENT:PORT_CLIENT</text>
                <text x="276" y="1460">Destination:</text>
                <text x="384" y="1460">ADDR_B:PORT_B</text>
                <text x="256" y="1476">Header:</text>
                <text x="304" y="1476">GET</text>
                <text x="352" y="1476">(T=CON,</text>
                <text x="428" y="1476">Code=0.01,</text>
                <text x="520" y="1476">MID=0x7d44)</text>
                <text x="252" y="1492">Token:</text>
                <text x="300" y="1492">0xb6</text>
                <text x="264" y="1508">Uri-Path:</text>
                <text x="324" y="1508">"gp"</text>
                <text x="264" y="1524">Uri-Path:</text>
                <text x="328" y="1524">"gp1"</text>
                <text x="264" y="1540">Uri-Path:</text>
                <text x="328" y="1540">"log"</text>
                <text x="256" y="1556">Block2:</text>
                <text x="316" y="1556">1/0/64</text>
                <text x="256" y="1588">Source:</text>
                <text x="344" y="1588">ADDR_B:PORT_B</text>
                <text x="132" y="1604">2.05</text>
                <text x="276" y="1604">Destination:</text>
                <text x="424" y="1604">ADDR_CLIENT:PORT_CLIENT</text>
                <text x="256" y="1620">Header:</text>
                <text x="308" y="1620">2.05</text>
                <text x="360" y="1620">(T=ACK,</text>
                <text x="436" y="1620">Code=2.05,</text>
                <text x="528" y="1620">MID=0x7d44)</text>
                <text x="252" y="1636">Token:</text>
                <text x="300" y="1636">0xb6</text>
                <text x="256" y="1652">Block2:</text>
                <text x="316" y="1652">1/1/64</text>
                <text x="260" y="1668">Payload:</text>
                <text x="324" y="1668">0x0b01</text>
                <text x="368" y="1668">...</text>
                <text x="64" y="1700">GET</text>
                <text x="256" y="1716">Source:</text>
                <text x="384" y="1716">ADDR_CLIENT:PORT_CLIENT</text>
                <text x="276" y="1732">Destination:</text>
                <text x="384" y="1732">ADDR_C:PORT_B</text>
                <text x="256" y="1748">Header:</text>
                <text x="304" y="1748">GET</text>
                <text x="352" y="1748">(T=CON,</text>
                <text x="428" y="1748">Code=0.01,</text>
                <text x="520" y="1748">MID=0x7d45)</text>
                <text x="252" y="1764">Token:</text>
                <text x="300" y="1764">0xb7</text>
                <text x="264" y="1780">Uri-Path:</text>
                <text x="324" y="1780">"gp"</text>
                <text x="264" y="1796">Uri-Path:</text>
                <text x="328" y="1796">"gp1"</text>
                <text x="264" y="1812">Uri-Path:</text>
                <text x="328" y="1812">"log"</text>
                <text x="256" y="1828">Block2:</text>
                <text x="316" y="1828">2/0/64</text>
                <text x="256" y="1860">Source:</text>
                <text x="344" y="1860">ADDR_B:PORT_B</text>
                <text x="132" y="1876">2.05</text>
                <text x="276" y="1876">Destination:</text>
                <text x="424" y="1876">ADDR_CLIENT:PORT_CLIENT</text>
                <text x="256" y="1892">Header:</text>
                <text x="308" y="1892">2.05</text>
                <text x="360" y="1892">(T=ACK,</text>
                <text x="436" y="1892">Code=2.05,</text>
                <text x="528" y="1892">MID=0x7d45)</text>
                <text x="252" y="1908">Token:</text>
                <text x="300" y="1908">0xb7</text>
                <text x="256" y="1924">Block2:</text>
                <text x="316" y="1924">2/0/64</text>
                <text x="260" y="1940">Payload:</text>
                <text x="324" y="1940">0x0b02</text>
                <text x="368" y="1940">...</text>
                <text x="40" y="1988">The</text>
                <text x="84" y="1988">client</text>
                <text x="148" y="1988">requests</text>
                <text x="200" y="1988">the</text>
                <text x="256" y="1988">following</text>
                <text x="324" y="1988">blocks</text>
                <text x="372" y="1988">from</text>
                <text x="420" y="1988">server</text>
                <text x="460" y="1988">C.</text>
                <text x="64" y="2036">GET</text>
                <text x="256" y="2052">Source:</text>
                <text x="384" y="2052">ADDR_CLIENT:PORT_CLIENT</text>
                <text x="276" y="2068">Destination:</text>
                <text x="384" y="2068">ADDR_C:PORT_C</text>
                <text x="256" y="2084">Header:</text>
                <text x="304" y="2084">GET</text>
                <text x="352" y="2084">(T=CON,</text>
                <text x="428" y="2084">Code=0.01,</text>
                <text x="520" y="2084">MID=0x7d46)</text>
                <text x="252" y="2100">Token:</text>
                <text x="300" y="2100">0xc6</text>
                <text x="264" y="2116">Uri-Path:</text>
                <text x="324" y="2116">"gp"</text>
                <text x="264" y="2132">Uri-Path:</text>
                <text x="328" y="2132">"gp1"</text>
                <text x="264" y="2148">Uri-Path:</text>
                <text x="328" y="2148">"log"</text>
                <text x="256" y="2164">Block2:</text>
                <text x="316" y="2164">1/0/64</text>
                <text x="256" y="2196">Source:</text>
                <text x="344" y="2196">ADDR_C:PORT_C</text>
                <text x="132" y="2212">2.05</text>
                <text x="276" y="2212">Destination:</text>
                <text x="424" y="2212">ADDR_CLIENT:PORT_CLIENT</text>
                <text x="256" y="2228">Header:</text>
                <text x="308" y="2228">2.05</text>
                <text x="360" y="2228">(T=ACK,</text>
                <text x="436" y="2228">Code=2.05,</text>
                <text x="528" y="2228">MID=0x7d46)</text>
                <text x="252" y="2244">Token:</text>
                <text x="300" y="2244">0xc6</text>
                <text x="256" y="2260">Block2:</text>
                <text x="316" y="2260">1/1/64</text>
                <text x="260" y="2276">Payload:</text>
                <text x="324" y="2276">0x0c01</text>
                <text x="368" y="2276">...</text>
                <text x="64" y="2308">GET</text>
                <text x="256" y="2324">Source:</text>
                <text x="384" y="2324">ADDR_CLIENT:PORT_CLIENT</text>
                <text x="276" y="2340">Destination:</text>
                <text x="384" y="2340">ADDR_C:PORT_C</text>
                <text x="256" y="2356">Header:</text>
                <text x="304" y="2356">GET</text>
                <text x="352" y="2356">(T=CON,</text>
                <text x="428" y="2356">Code=0.01,</text>
                <text x="520" y="2356">MID=0x7d47)</text>
                <text x="252" y="2372">Token:</text>
                <text x="300" y="2372">0xc7</text>
                <text x="264" y="2388">Uri-Path:</text>
                <text x="324" y="2388">"gp"</text>
                <text x="264" y="2404">Uri-Path:</text>
                <text x="328" y="2404">"gp1"</text>
                <text x="264" y="2420">Uri-Path:</text>
                <text x="328" y="2420">"log"</text>
                <text x="256" y="2436">Block2:</text>
                <text x="316" y="2436">2/0/64</text>
                <text x="256" y="2468">Source:</text>
                <text x="344" y="2468">ADDR_C:PORT_C</text>
                <text x="132" y="2484">2.05</text>
                <text x="276" y="2484">Destination:</text>
                <text x="424" y="2484">ADDR_CLIENT:PORT_CLIENT</text>
                <text x="256" y="2500">Header:</text>
                <text x="308" y="2500">2.05</text>
                <text x="360" y="2500">(T=ACK,</text>
                <text x="436" y="2500">Code=2.05,</text>
                <text x="528" y="2500">MID=0x7d47)</text>
                <text x="252" y="2516">Token:</text>
                <text x="300" y="2516">0xc7</text>
                <text x="256" y="2532">Block2:</text>
                <text x="316" y="2532">2/0/64</text>
                <text x="260" y="2548">Payload:</text>
                <text x="324" y="2548">0x0c02</text>
                <text x="368" y="2548">...</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![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
   |                |  |  |

   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.

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

   After obtaining the first block, the client requests the following
   blocks separately from each server, by means of unicast exchanges.

   The client requests the following blocks from server A.

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

   The client requests the following blocks from server B.

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

   The client requests the following blocks from server C.

   |                |  |  |
   |  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>
        </artset>
      </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 of forwarding 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 an 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 relationship 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-13-14">
        <name>Version -13 to -14</name>
        <ul spacing="normal">
          <li>
            <t>More context information in the abstract and introduction.</t>
          </li>
          <li>
            <t>Imported examples from RFC 7390 into Appendix A "Use Cases".</t>
          </li>
          <li>
            <t>Early mentioning Group OSCORE and source authentication of messages.</t>
          </li>
          <li>
            <t>Updated references.</t>
          </li>
          <li>
            <t>Minor fixes and editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-12-13">
        <name>Version -12 to -13</name>
        <ul spacing="normal">
          <li>
            <t>Updated author list.</t>
          </li>
          <li>
            <t>Registering Resource Type values is not strictly required.</t>
          </li>
          <li>
            <t>Highlighted what is used simply as an example.</t>
          </li>
          <li>
            <t>Added further alternative to follow-up with group requests using the Block2 Option.</t>
          </li>
          <li>
            <t>Justified importance of possibly repeating requests.</t>
          </li>
          <li>
            <t>Explicitly mentioned Observe as a reason for follow-on responses.</t>
          </li>
          <li>
            <t>Recommended use of a mitigation against abuses of the No-Response Option.</t>
          </li>
          <li>
            <t>Described the use of the Echo option like done in draft-ietf-core-oscore-groupcomm.</t>
          </li>
          <li>
            <t>Clarified possible use of CoAP over reliable transports.</t>
          </li>
          <li>
            <t>Given more context around prioritized packet forwarding in 6LoWPAN.</t>
          </li>
          <li>
            <t>Expanded considerations about replayed group requests.</t>
          </li>
          <li>
            <t>Clarifications and editorial improvements.</t>
          </li>
        </ul>
      </section>
      <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 relationship 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 relationship 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 relationship 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="Mike Bishop"/>, <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:
H4sIAAAAAAAAA+S963bjRpYu+F9PgSOvGUtVJJVSXp3dVdVypmzn6bx1Si6f
mq6zeoEkKKGSBNgAKFntynmWeZZ5stn32BEAKaXtqu4zJ3/YFAnEdceOff32
eDzeu36ePdzb68puWTzPvm3qzTp7Ua9Wm6qc5V1ZV9mibrLuqoBvq7Zr8rIq
5tnper3U3983dVfP6mV28KI+fX+4l0+nTXG9vS18am9ez6p8BT3Om3zRjcui
W4xndVOML/GtGbw0npbteJl3Rdvt7eVNkT/PXlVd0VRFt3dz+Rya+XCW/VA3
H8vqkvva+3gTnhm/xIb3oN/nWdvN99rNdFW2LQyiu11Dv6/OLr7Zq6dtvSyg
i+fZ04dfPdjbrOc5/3Xy+GSUPX3y6Hhvb1bPoYvn2QaG+Gxv77qoNsXzvSyj
kT6PluXD2fnFYrPMzqrrsqmrVVF1LTy5ysvl8wyn90840UndXOL7ZXe1mfL3
45vLo2jm0M/DH1fLk2Yxw77acllUM+p2nH1Tb6p5dv7Hb7MbaAL+M4f/wsJe
FeXlVZe162JWLspivgfrtumu6gZfw39j+X+WlRVM8mySvSz/8tG+5A05az/W
8fcw3Of4/1f1xQwmu1l2eTW7nVRLe2JWdrfPs++7pphddeFbGGfXwA9vC6Cf
ZplX89Z+LHhRCuhtMofe/qmsu8HWk0G/mWQX5bKe5cmw3+TNrE5/opF/eHV+
lp1+bV/CbhUFUMWrNl/8pW7m7WUOXWYnJ8l0/rlsu9xNZg69nJ+Nj588evQg
OweS/3hVL1f92Z7fFPOiSie6wvFNOhrfPzXlpC329qq6WcG5uKZ9/fDNi+Pj
kxP5+OjRo4f68atHj+Tjk5Nn+sCTJ1890I9Pnz6Wj0i3+hGIVz9+9fgr+/jk
qXx89sBee3b8UF979uRYO/7qgTUGH+3b4+MH4aM9cGyNffX06RP8+Gr8chLO
dd3Gx5seLtp608yKyQUcycnrsvo4uciby6KbnHZdU043XTH5Y77cwImk5Yyp
mTb31enbU/obD+7zbJEvYWHxb2Fo2kWGXWQHTfe7www7yrijzDrKuCN+l357
nl113bp9fnR0c3MzKfMqx4N7lAMTueSjfURTWucNUCBwnd7fkx+vutXyi6Yb
L6HLMTc7zrtufI2d7e2V1cKTAK7YFL+oKl60pmjXcCZ4/vF6Bm6xbuofb6MH
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
OIFyDo2YIJ35/pXVIOb2AaHEWa3j3kVXcrwKnf9dvV4HbPr0PNA7eiIsKc3t
pJ2JRrvbchRMBdt1FC6k6kCBhbKGZ1v2lXA5In4DaBqG/YAM0K/EsExbX7L6
77KDGZAfRR9K8eC3GaN97nLx3RG74OGz5UPS2ZzwsdOsUXb2JkdZ0SSuCqd7
dIaJwrMapFMiIbFxaIkBuYDLtWEdGQ8pYgnDpY8GUr2R3NoiQ/sBr3DR9lzE
oZPCpUjbxqj0ilC8uYKfy2YM7rawLULx6fzKWtWgX7Y0i1JKhbv6Db0AZYyf
J8IQ64DAS1EKTUBS75ll2+EB/Aqr0k9W4JzOu5QbQdTacelLldVCKr2Iib9r
Nq3jarEumloUejO+l9IlOBVtGk/h/BSrnvh8D/WKZa73lGpufjqTtCgF3YQP
ELFeBpxrATt1GfRL3t6FhkwNy+ec687J7ZFwxF91t+tiRDcMX0JcFxZhDVaM
S+sM21bBTT3muLbqGTA1KLJumnwcoBUFzURW0pVjSKP1JOCTJyCsayww/UNm
fokdiOuNRMDjqLaKpSIU/HQVdLYaaTmQgmT5lpdA1QgcjoUXIzLHPF93McqF
3HPRDOJw1qRgGruAVHmQDqnhYp4l2BmS7l54mT8ynNB7eUBo9qEGfJ+DKhx7
KDBJkpHYDb1Z1aGgMweTL17b4fvIeMorwzLKsqDsoXiTaW1CEa2A2FGHuJpp
AJGwPVKfiKnxBy8PL16fa/Us8y79EpJr0OvRFkZyvBKB8uyg4gJc1evx9JaA
+uzrfvWbCfE7XcwhItbMU3Sz5AFeIiYeApPbi9oa6r+UKFqz5EupT24kRqsl
nnoDiugVSQVJpZQA9FJRpZzlgrbSlQ9ibpnERidlJQeNAgetILz79BT2iFKt
dt36GRwQqamE5ecEpYQoK95EpDMLtghnXzMtZDdrLlPGJVCtJi+7A3a3FxB4
+BWtg9OvrIrML3CVGKOE7lfmx3zj461eFZq/GzlbBk+ODslNz/aV+FzCz1z0
ZIrCbPAT6gzgw6RxC6Sr5lFiRdAw2TWUOWeKX6+wVobx07qB9WO0elWIpF5p
7jVFRk/y4ci08pQDoOsR8PL19EX9jKKyNTtMDv9fe9/W3MZ1rfmuX9FFV40J
G+BNN4uOc4oiaYuJJfGQVJJTJ2dONYAm2BHQzXQDlJlY81fmef7APM1b/tjs
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

-->

</rfc>
