<?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.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-groupcomm-bis-18" category="std" consensus="true" submissionType="IETF" obsoletes="7390" updates="7252, 7641" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.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-18"/>
    <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="2026" month="February" day="10"/>
    <area>Internet</area>
    <workgroup>CoRE Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 129?>

<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 133?>

<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 to all servers in a group. Within a given group, multiple clients can 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.</t>
      <t>Both unsecured and secured CoAP group communication are covered in this document.</t>
      <t>Unsecured group communication relies on the NoSec mode, whose use is strongly discouraged and is limited to specific cases (see <xref target="chap-unsecured-groupcomm"/>).</t>
      <t>Secured group communication 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 is a Standards Track specification that replaces and obsoletes the Experimental specification <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. By using such a transport protocol, any client in a group can send a multicast CoAP request message to all servers in the group. That is, "one-to-many" refers to the delivery of a given message from one sender to multiple recipients, and the sender, the recipients, or both can change on a per-message basis. Such solutions are desirable for applications that need a request message to be delivered with low latency and/or in a synchronous way to multiple recipient servers at once.</t>
        <t>For applications that do not have those requirements, 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"/>. Only the Any Source Multicast (ASM) mode of IP multicast operation is in scope, as defined in <xref target="RFC1112"/> and referred by that name in <xref target="RFC8085"/>. This means that there is no restriction on the source node that sends (originates) CoAP group messages to an IP multicast group (corresponding to a "CoAP Group" in this document, see <xref target="sec-groupdef-coapgroup"/>). For example, the source node may or may not be part of the IP multicast group. Also, there is no restriction on the number of source nodes.</t>
        <t>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, it is expected that 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>
        <t>Finally, this document defines the foundation of how proxies operate in a group communication scenario (see <xref target="sec-proxy"/>) and compiles related issues and limitations to account for (see <xref target="sec-issues-forward-proxies"/> and <xref target="sec-issues-reverse-proxies"/>). While further details that are relevant to operate such proxies are not defined here, other specifications can build on the common denominator provided by this document and define specific realizations of proxies that operate in a group communication scenario. For example, a possible realization of proxy for CoAP group communication is specified in <xref target="I-D.ietf-core-groupcomm-proxy"/>.</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 together with mitigations against those (see <xref target="ssec-amplification"/>).  </t>
            <t>
This is a major advancement from <xref target="RFC7390"/>, which defined CoAP group communication based on IP multicast to operate in CoAP NoSec mode, until a future group security solution was developed.</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>
            <t>
This is a major advancement from <xref target="RFC7390"/>, which at that time could not rely on a group security solution to protect group communication for CoAP.</t>
          </li>
        </ul>
        <t>This document updates <xref target="RFC7252"/> as follows.</t>
        <ul spacing="normal">
          <li>
            <t>With reference to <xref section="8.2" sectionFormat="of" target="RFC7252"/>, it updates the request/response layer for group communication, as to response suppression (see <xref target="sec-request-response-suppress"/> of the present document).</t>
          </li>
          <li>
            <t>With reference to <xref section="5.3.1" sectionFormat="of" target="RFC7252"/>, it updates the token requirements on request/response matching, as to token reuse time (see <xref target="sec-token-reuse"/> of the present document).</t>
          </li>
          <li>
            <t>With reference to <xref section="8.2.1" sectionFormat="of" target="RFC7252"/>, 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"/> of the present document).</t>
          </li>
          <li>
            <t>With reference to the measures against congestion risk specified in Sections <xref target="RFC7252" section="5.2.3" sectionFormat="bare"/>, <xref target="RFC7252" section="8.1" sectionFormat="bare"/>, <xref target="RFC7252" section="8.2" sectionFormat="bare"/> and <xref target="RFC7252" section="11.3" sectionFormat="bare"/> of <xref target="RFC7252"/>, it defines such measures to be applicable also to alternative transports (other than IP multicast) and defines additional requirements to reduce congestion risks (see <xref target="sec-congestion"/> of the present document). It also defines new values for the transmission parameter DEFAULT_LEISURE that account for secure communication with Group OSCORE (see <xref target="sec-leisure"/> of the present document).</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, with reference to <xref section="12.8" sectionFormat="of" target="RFC7252"/>, it recommends that an IPv6 CoAP server supports at least the link-local (2), admin-local (4), and site-local (5) scopes with the "All CoAP Nodes" IPv6 multicast addresses (see <xref target="sec-udptransport"/> of the present document). 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"/> of the present document).</t>
          </li>
        </ul>
        <t>This document updates <xref target="RFC7641"/> as follows.</t>
        <ul spacing="normal">
          <li>
            <t>With reference to Sections <xref target="RFC7641" section="3" sectionFormat="bare"/> and <xref target="RFC7641" section="4" sectionFormat="bare"/> of <xref target="RFC7641"/>, 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"/> of the present document).</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>This is aligned with the notion of CoAP endpoint as identified by an IP address and a UDP port number, both for unsecure group communication using the NoSec mode and secure group communication using Group OSCORE. In either case, the default port number is 5683.</t>
          <t>An endpoint may be a member of multiple CoAP groups, e.g., 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 combinations of IP address and UDP port. 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, which can contain a UDP port number in the authority component (see <xref target="terminology"/>). If no UDP port number is present, then the port number used to identify the CoAP group is the default port number 5683.</t>
          <t>Consequently, a configuring entity can choose to rely only on IP multicast addresses (or corresponding hostnames) in order to practically identify different CoAP groups, without specifying port numbers. As a result, those CoAP groups will be identified by a pair (IP address, port number), where different CoAP groups use a different IP multicast address and all use the same default port number 5683.</t>
          <t>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>Between CoAP groups and application groups, there can be a many-to-many, one-to-many, many-to-one, or one-to-one relationship.
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>Between CoAP groups and security groups, there can be a many-to-many, one-to-many, many-to-one, or one-to-one relationship. Also, between application groups and security groups, there can be a many-to-many, one-to-many, many-to-one, or one-to-one relationship. Configuring entities can establish relationships between groups of different types as appropriate for the specific deployment and with no restriction by design. Endpoints that are members of security groups are expected to support all such relationships, which 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>It is strongly discouraged to have unsecure group communication through the NoSec mode (see <xref target="chap-unsecured-groupcomm"/>), whose possible exceptional use ought to be limited to specific circumstances (see <xref target="chap-unsecured-groupcomm"/> and <xref target="chap-security-considerations-nosec-mode"/>). When the NoSec mode is nevertheless used, 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 a subset of these security groups, e.g., selected according to a local policy or determined by a local configuration. This subset needs to be consistent with the security algorithms that the client supports. A CoAP server in the application group has to join all of the security groups, in order to successfully process group requests from any CoAP clients that have been configured to use the application group. This particular case can be useful if different CoAP clients have different, incompatible requirements for the security algorithms that can be supported.</t>
          <t>Beyond this particular case, applications should be careful in associating a single application group to multiple security groups. In particular, different security groups are not meant to reflect different access policies, e.g., for enforcing access control to resources that are hosted at servers in the same application group. Therefore, it is <bcp14>NOT RECOMMENDED</bcp14> to simply take into account memberships to security groups as a way to enforce access control within an application group, which instead should rely on separate means.</t>
          <t>Being a member of a security group 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 <xref target="UML"/>. When creating groups (see <xref target="sssec-group-creation"/>), a configuring entity follows and maintains the view depicted in <xref target="fig-group-relation"/>. 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="344" y="84">1...N</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="288" y="116">1...N</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      |
|..............................|              |....................|
|                              |        1...N |                    |
| [ - Application group name ] +--------------+ - IP mcast address |
|                              | 1...N        | - 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 multicast IP address ff05::db8:0: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 two properties: an IP multicast address and a 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.
If the hostname resolves to multiple multicast addresses, then the authority component of the group URI identifies (names) multiple CoAP groups: one for each resolved address.</t>
            <t>It follows that one name can be used for multiple CoAP groups.
Conversely, a single CoAP group might also have multiple names, which can be simultaneously and interchangeably used within a network. For example, if the two hostnames group1.example and group1.alias.example both resolve to the IP multicast address [ff05::db8:0:1], 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>[ff05::db8:0:1]: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>[ff05::db8:0:1]</t>
              </li>
              <li>
                <t>group1.example:5683</t>
              </li>
              <li>
                <t>group1.alias.example:5683</t>
              </li>
              <li>
                <t>[ff05::db8:0:1]: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, to avoid network load due to name resolution queries. In fact, an infrastructure providing a name resolution service, such as DNS, may not be deployed in some constrained networks. In such cases, using an IP multicast address literal is the only viable option for the configuring entity that creates a CoAP group.</t>
            <t>If a group hostname is configured, it can be uniquely mapped to an IP multicast address via a name resolution service. For example, this can rely on the DNS resolution process, 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.
For all these example CoAP groups, the associated port number is the default CoAP port number 5683.</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 also possible. For example, when using an IPv6 multicast address, the reverse mapping can rely on DNS and the IP6.ARPA domain (see <xref section="2.5" sectionFormat="of" target="RFC3596"/>). 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>
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>
The CoAP group is also defined by the same authority component (see <xref target="sec-groupnaming-coap"/>). If the authority component of the Group URI is an IP address literal, then the identified application group is associated with exactly one CoAP group. But if the authority component of the Group URI is a hostname, then the identified application group can be associated with one or more CoAP groups as per the result of the name resolution process (see <xref target="sec-groupnaming-coap"/>). See <xref target="sec-groupdef-grouprelations"/> for further background on group relationships.  </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 omit the application group name from 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. <xref section="A" sectionFormat="of" 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 multicast address identifying the CoAP group 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 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>This section discusses the creation of different types of groups, as entrusted to a "configuring entity". The same configuring entity can be responsible for creating groups of different types, e.g., both CoAP groups and application groups.</t>
          <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, the configuring entity 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>Note that, for some use cases, multiple CoAP groups can be created to serve the same purpose. For example, to accommodate dual-stack group members, the configuring entity can define one CoAP group with an IPv4 multicast address and another one with an IPv6 multicast address, which can be interchangeably used by CoAP clients. Another example consists of creating multiple CoAP groups using multicast IPv6 addresses of different scopes.</t>
          <t>A 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. In general, the creation of a CoAP group can involve multiple configuring entities that might be of different types. If the configuring entities are different from the ones entrusted with the device deployment, care has to be taken in order to avoid configurations that are conflicting or stale.</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, this document does not suggest or recommend any particular multicast address ranges from which group addresses can be taken. It is up to network operators and managers to appropriately select addresses from the multicast address space with the intended multicast address scope. Guidelines for selecting and assigning IPv6 multicast addresses are compiled in <xref target="RFC3307"/>.</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 can 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 for Group OSCORE is entrusted to the Group Manager responsible for the security group (see <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. These configurations are likely performed by different configuring entities, possibly with minimal or no coordination. Therefore, it is important that means are available and supported for controlling, retrieving, updating, and retiring configurations, as well as for performing related troubleshooting procedures. Further details on such means are out of the scope of this document.</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 <xref section="A" sectionFormat="of" target="RFC9176"/>.</t>
            <t>In particular, an application group can be registered to the RD, specifying the reference IP multicast address(es) of its associated CoAP group(s). 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. Alternatively, the GET request may be sent to the "All CoAP Nodes" IPv4 multicast address 224.0.1.187 or IPv6 multicast address ff0x::fd (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 (see <xref section="4.1" sectionFormat="of" target="RFC6690"/>), 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. When discussing the different methods, the two assumptions below hold:</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(s) 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 an "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(s). 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(s); 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(s) 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 an "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(s) 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(s); 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(s) 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 an "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(s) are 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 performed 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 must be Non-confirmable (NON), see <xref section="8.1" sectionFormat="of" target="RFC7252"/>. Although a corresponding response should be returned in a Non-confirmable message as well, clients must be prepared to receive Confirmable responses in reply to those requests, see <xref section="5.2.3" 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>
          <t>When using CoAP group communication, an amplification attack becomes more harmful than when sending a unicast request to a single server. That is, by spoofing the source IP address of a designated victim in the group request sent via IP multicast, the attack could result in multiple servers within the CoAP group sending responses to the victim. This is further discussed in <xref target="ssec-amplification"/>, together with available mitigations.</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. Such exceptions are application-specific and defined by corresponding application policies.</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="sec-repeating-request">
          <name>Repeating a Request</name>
          <t>Group requests sent over IP multicast can have much higher loss rates than messages sent over unicast, particularly when using a constrained network. Therefore, having a strategy in place for handling the loss of group requests is even more important than one for handling the loss of unicast responses. To this end, a CoAP client <bcp14>MAY</bcp14> repeat a group request by relying on the following two approaches.</t>
          <t>The first approach is supported already by all CoAP stacks and is used by default. That is, it <bcp14>SHOULD</bcp14> be used in case the implementer has no explicit preference or reason to use the alternative approach described further below. When using this first approach, the application implements a custom retransmission logic that can trigger a new API request for transmission (of a CoAP request) to the CoAP stack, if less responses than expected were received.
The CoAP client then sends this 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 with a new Message ID. 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>
          <t>The second approach requires specific support in the CoAP stack and <bcp14>MAY</bcp14> be implemented. When using this second approach, the application layer also implements a custom retransmission logic that can trigger a new API request to the stack, if less responses than expected were received.
If this specific API request is made, the CoAP client repeats a group request using the same Token value and same Message ID value. This ensures 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/application 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>In summary, even though the CoAP message is Non-confirmable, the CoAP stack now provides a mechanism to retransmit the CoAP message, which is normally never done for Non-confirmable messages.</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>
          <t>Note that some responses to a group request might be filtered out and not reach the client if a NAT device is used with restrictive filtering in place. For example, this can be the case if the NAT device employs "Address-Dependent Filtering" or "Address and Port-Dependent Filtering" (see <xref section="5" sectionFormat="of" target="RFC4787"/>).</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>To meet this requirement, a client can simply 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 can safely 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>An alternative method that meets the requirement above consists in instantiating multiple CoAP clients at multiple UDP ports on the same host. This is consistent with what is defined in <xref section="5.3.1" sectionFormat="of" target="RFC7252"/>, i.e., Token values currently in use only have to be unique for a given source/destination endpoint pair.</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. As an example, this is accomplished when using the forward-proxying method provided by the realization of proxy specified 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>The client in the case above can use different possible methods to determine the CoAP servers that are currently members of the CoAP group. For example, consistent with enforced policies, the client can retrieve that information from the group's configuring entity, or the client may be able to monitor group joining protocol exchanges. The specific method used by the client is out of the scope of this document.</t>
          <t>For caching at proxies, a possible freshness model is defined as part of the realization of proxy specified in <xref target="I-D.ietf-core-groupcomm-proxy"/>.</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 section="8.2.1" sectionFormat="of" target="RFC7252"/> by allowing a group request to contain ETag Options as specified below.</t>
          <t>For validation at proxies, a possible validation model is defined as part of the realization of proxy specified in <xref target="I-D.ietf-core-groupcomm-proxy"/>.</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>A client that uses the ETag Option for validating stored responses <bcp14>SHOULD</bcp14> perform the following actions, in order to avoid problems caused by identical ETag values.</t>
            <ul spacing="normal">
              <li>
                <t>The client repeats 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 value. It can be either a group request or a unicast request to the particular server.</t>
              </li>
              <li>
                <t>The client marks a cached ETag value as "duplicated - not to be used for revalidation" as soon as another server responds with the same ETag value.</t>
              </li>
            </ul>
            <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 <xref target="Port.Number"/>, or alternatively another non-default UDP port number if configured. If any is assigned in the future, a UDP port number designated for multicast applications can be used as the group's port number (e.g., see <xref target="I-D.ietf-intarea-multicast-application-port"/>).</t>
        <t>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 by all CoAP clients when sending group requests to the CoAP group, thus addressing all CoAP servers that are members of that group.</t>
        <t>It is <bcp14>NOT RECOMMENDED</bcp14> to create multiple CoAP groups by using different UDP ports with the same IP multicast address. An allowed exception is the presence of constrained devices whose network stack only supports a limited number of multicast address subscriptions. The use of such an approach for creating CoAP groups 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 <xref target="Port.Number"/> and <bcp14>MUST NOT</bcp14> be used for any CoAP group communication.</t>
        <t>For a CoAP server node that offers resources for resource discovery (see <xref section="2.4" sectionFormat="of" target="RFC7252"/>), the default port number 5683 must be supported (see <xref section="7.1" sectionFormat="of" target="RFC7252"/>) for the "All CoAP Nodes" IP multicast addresses (see <xref section="12.8" sectionFormat="of" target="RFC7252"/>), as detailed in <xref target="sec-transport"/>.</t>
      </section>
      <section anchor="sec-proxy">
        <name>Proxy Operation</name>
        <t>This section defines the foundation of how proxies operate in a group communication scenario.</t>
        <t>In particular, forward-proxies and reverse-proxies are separately considered in <xref target="sec-proxy-forward"/> and <xref target="sec-proxy-reverse"/>, respectively. Furthermore, <xref target="multicasting-to-proxies"/> discusses the case where a client sends a group request to multiple proxies at once. When sending a CoAP group request over UDP/IP multicast, a proxy <bcp14>MUST</bcp14> conform to the congestion control requirements compiled in <xref target="sec-congestion"/> of this document. Security considerations that apply when using a proxy are discussed later in <xref target="chap-proxy-security"/>.</t>
        <t>Further details that are relevant to operate such proxies are not defined here. Other specifications can build on the common denominator provided by this document and define specific realizations of proxies that operate in a group communication scenario. As an example, a realization of such proxy is specified in <xref target="I-D.ietf-core-groupcomm-proxy"/>.</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"/>. The forward-proxying method provided by the realization of proxy specified in <xref target="I-D.ietf-core-groupcomm-proxy"/> uses this approach and addresses such issues and limitations.</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>The forward-proxying method for HTTP-to-CoAP proxies provided by the realization of proxy specified in <xref target="I-D.ietf-core-groupcomm-proxy"/> addresses such issues and limitations.</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 UDP/IP 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"/>. The reverse-proxying method provided by the realization of proxy specified in <xref target="I-D.ietf-core-groupcomm-proxy"/> uses this approach and addresses such issues and limitations.</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). If the client does so, 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>The last two paragraphs of <xref target="sec-proxy-forward"/> also apply for the operation of HTTP-to-CoAP 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., leveraging the approach used by the realization of proxy specified 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, by leveraging the replay protection provided by Group OSCORE, 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 verified 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 could 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 <bcp14>SHOULD</bcp14> be conservatively controlled.</t>
        <t>CoAP <xref target="RFC7252"/> reduces IP multicast-specific congestion risks through the following measures, which the present document inherits and extends as appropriate:</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 (see <xref section="11.3" sectionFormat="of" target="RFC7252"/>).</t>
          </li>
          <li>
            <t>An IP multicast request must be Non-confirmable (see <xref section="8.1" sectionFormat="of" target="RFC7252"/>).</t>
          </li>
          <li>
            <t>A response to an IP multicast request should be Non-confirmable (see <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 (see <xref section="8.2" sectionFormat="of" target="RFC7252"/>). The transmission parameter DEFAULT_LEISURE <bcp14>MAY</bcp14> be used to define a Leisure period when it cannot be computed otherwise (see <xref target="sec-leisure"/>).</t>
          </li>
        </ul>
        <t>This document also defines these measures to be applicable to alternative transports (other than IP multicast), if not defined otherwise. Updates related to Leisure are done in <xref target="sec-leisure"/>.</t>
        <t>CoAP also defines non-multicast-specific congestion control measures that also apply to the IP multicast case:</t>
        <ul spacing="normal">
          <li>
            <t>The transmission parameter NSTART defined in <xref section="4.7" sectionFormat="of" target="RFC7252"/> limits "the number of simultaneous outstanding interactions to a given server". For the IP multicast case, "given server" is to be understood as a "given CoAP group", i.e., 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 (see <xref target="sec-groupdef-coapgroup"/>). The same default value of NSTART=1 (<xref section="4.8" sectionFormat="of" target="RFC7252"/>) applies for the group communication case.</t>
          </li>
          <li>
            <t>The transmission parameter PROBING_RATE (<xref section="4.7" sectionFormat="of" target="RFC7252"/>) limits the average data rate in sending to another endpoint that does not respond, e.g., to a Non-confirmable request such as a group request. Therefore, an average transmission 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. The same default value of PROBING_RATE=1 byte/second (<xref section="4.8" sectionFormat="of" target="RFC7252"/>) applies for the group communication case.</t>
          </li>
        </ul>
        <t>Note that the transmission parameter values for NSTART, DEFAULT_LEISURE, and PROBING_RATE may be configured to values specific to the application environment (including dynamically adjusted values); however, the configuration method is out of the scope of this document. This is unchanged from <xref section="4.8.1" sectionFormat="of" target="RFC7252"/>.</t>
        <t>Independently of the transport used, additional requirements 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 anchor="sec-leisure">
          <name>Default Leisure Updates</name>
          <t>The Leisure time period as defined in <xref section="8.2" sectionFormat="of" target="RFC7252"/> is preferably computed or configured on the CoAP server with a value suitable for the specific use case. The equation from that section for computing a rough lower bound for Leisure is:</t>
          <artwork><![CDATA[
    lb_Leisure = S * G / R
]]></artwork>
          <t>for a group size estimate G, a target data transfer rate R (which both should be chosen conservatively), and an estimated response size S. Note that S is the estimated average response size for all responding servers for the given group request, not necessarily the known response size of the server's own response to the request. If the Leisure is not computed, then a configured/predefined value is used, which <bcp14>MAY</bcp14> be the default value DEFAULT_LEISURE in case no better or more suitable value is known. In <xref target="RFC7252"/>, the default is calculated based on a baseline IEEE 802.15.4 <xref target="IEEE802.15.4"/> 6LoWPAN network situation with G=50, S=100, and R=1000, although this is not explicitly written down.</t>
          <t>This document updates the calculation for DEFAULT_LEISURE, by modifying the estimated response size (S) parameter to account for responses protected with Group OSCORE (see <xref target="chap-group-oscore"/>). In particular, the two cases of group mode and pairwise mode are considered.</t>
          <t>When the group mode is used to protect a response, it is largely cautious to account for additional 100 bytes of security overhead, so that S becomes 200. When the pairwise mode is used to protect a response, it is largely cautious to account for additional 30 bytes of overhead is expected, so that S becomes 130. Using these new values for S in the calculation yields the following new default parameter values:</t>
          <ul spacing="normal">
            <li>
              <t>DEFAULT_LEISURE = 20 seconds, if the OSCORE group is set to use (also) the group mode.</t>
            </li>
            <li>
              <t>DEFAULT_LEISURE = 13 seconds, if the OSCORE group is set to use only the pairwise mode.</t>
            </li>
          </ul>
          <t>Obviously, the requirement to insert a random leisure period as described above does not apply to retransmissions of a Confirmable separate response (see <xref section="5.2.2" sectionFormat="of" target="RFC7252"/>), but only to the initial CoAP message transmission when the CoAP retransmission counter is 0 (see <xref section="4.2" sectionFormat="of" target="RFC7252"/>).</t>
        </section>
      </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. Repeating a request is discussed in more detail in <xref target="sec-repeating-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>When responding, a server <bcp14>SHOULD</bcp14> apply the Leisure period defined in <xref section="8.2" sectionFormat="of" target="RFC7252"/> (if DEFAULT_LEISURE is used, it is computed as defined in <xref target="sec-leisure"/> of this document). This holds not only for the first response to the multicast Observe request, but also for the subsequent Observe notifications. The Observe notifications in this case are the "further responses" mentioned in that section:</t>
        <blockquote>
          <t>If further responses need to be sent based on the same multicast address membership, a new leisure period starts at the earliest after the previous one finishes.</t>
        </blockquote>
        <t>This implies that, while a server is still waiting for the random point in time chosen to send an Observe notification within a leisure period, a new Observe notification cannot be sent yet and remains pending, if it is related to a different observation but to the same CoAP group.</t>
        <t>Throughout the lifetime of an observation, a server <bcp14>MUST</bcp14> verify the aliveness of its observing clients and the continued interest of these clients in receiving the Observe notifications. To this end, the server occasionally sends a notification to a given observing client in a Confirmable message (see Sections <xref target="RFC7641" section="4.5" sectionFormat="bare"/> and <xref target="RFC7641" section="7" sectionFormat="bare"/> of <xref target="RFC7641"/> for details). This requirement overrides the regular behavior of sending Non-confirmable notifications in response to a Non-confirmable request. Obviously, the requirement to insert a random leisure period as described above does not apply to retransmissions of a Confirmable notification, but only to the initial CoAP message transmission when the CoAP retransmission counter is 0 (see <xref section="4.2" sectionFormat="of" target="RFC7252"/>).</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>When combining CoAP group communication and Observe as described above, an amplification attack can become particularly harmful. That is, by spoofing the source IP address of a designated victim in the group request conveying the Observe Option, the attack could result in multiple servers within the CoAP group sending multiple Observe notifications to the victim, throughout the observation lifetime. This is further discussed in <xref target="ssec-amplification"/>, together with available mitigations.</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 realization of proxy specified 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. In such a situation, unless the implementer of the server is aware that its clients do not support Block-wise transfer, the server <bcp14>SHOULD</bcp14> use Block-wise transfer at its own initiative.</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. Besides addressing such issues, a future solution for group/multicast block-wise transfer using the Block1 Option needs to conform to the congestion control requirements compiled in <xref target="sec-congestion"/> of this document.</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. A network might support IPv6 multicast 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 offers resources for resource discovery as defined in <xref section="2.4" sectionFormat="of" target="RFC7252"/>, the default port number 5683 must be supported as per <xref section="7.1" sectionFormat="of" target="RFC7252"/> for the "All CoAP Nodes" IPv6 multicast addresses (see <xref section="12.8" sectionFormat="of" target="RFC7252"/>). An IPv6 CoAP server <bcp14>SHOULD</bcp14> support the "All CoAP Nodes" IPv6 multicast addresses with at least the 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) <xref target="IEEE802.15.4"/>.</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 "All CoAP Nodes" IPv6 multicast address (see <xref target="sec-udptransport"/>) with realm-local scope, 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 offers resources for resource discovery as defined in <xref section="2.4" sectionFormat="of" target="RFC7252"/>, the default port number 5683 must be supported as per <xref section="7.1" sectionFormat="of" target="RFC7252"/> for the "All CoAP Nodes" IPv4 multicast address (see <xref section="12.8" sectionFormat="of" target="RFC7252"/>).</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. Further details about such alternative transports and their use for CoAP group communication are out of scope for this document.</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 IPv6 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, i.e., without using application-layer and transport-layer security mechanisms.</t>
      <t>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 <bcp14>SHOULD</bcp14> still be avoided whenever possible.</t>
      <t>The NoSec mode uses the "coap" scheme, and is defined in <xref section="9" sectionFormat="of" target="RFC7252"/>. The NoSec mode does not require and does not make use of a security group (see <xref target="sec-groupnaming-sec"/>).</t>
      <t>A CoAP server <bcp14>MUST NOT</bcp14> be accessible for group communication in NoSec mode through the public Internet.</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 mentioned in <xref target="I-D.ietf-core-oscore-groupcomm"/>, a CoAP endpoint can join an OSCORE group through the realization of a Group Manager specified 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"/>. For example, they can be performed 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 <bcp14>SHOULD</bcp14> 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>The realization of proxy specified in <xref target="I-D.ietf-core-groupcomm-proxy"/> provides further details on using Group OSCORE for all the above cases.</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 harmful, 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 (in which unsecured communication is required or is not harmful for specific, well-defined "unsecured steps"), 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>Thanks to the handling of protected group requests on the server side, Group OSCORE limits the feasibility and impact of amplification attacks (see <xref section="11.3" sectionFormat="of" target="RFC7252"/>).  </t>
              <t>
Upon receiving a group request protected with Group OSCORE, a server verifies whether the request is not a replay and 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>
With respect to amplification attacks, such a message processing on the server limits an external adversary to being on-path and leveraging an intercepted group request protected with Group OSCORE, by altering the source address of the request 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>
Amplification attacks are further discussed in <xref target="ssec-amplification"/>, together with available mitigations.</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>
The server may additionally rely on the Echo Option for CoAP defined in <xref target="RFC9175"/>, in order to verify the reachability of the client sending a request from a particular IP address. As discussed in <xref target="ssec-amplification"/>, this also helps mitigate amplification attacks.  </t>
              <t>
Note that 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"/>).  </t>
              <t>
Using the Echo Option together with Group OSCORE also allows a CoAP server in the OSCORE group to verify the freshness of CoAP requests received from other members in the group (see <xref section="9" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>), thereby verifying the aliveness of CoAP clients sending those requests.</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 is 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>In particular, an adversary can send a group request via IP multicast to a CoAP group, spoofing the source IP address to be the one of a designated victim (within the local network or on the Internet).</t>
        <t>After receiving the group request, each of the servers in the group may reply to the victim with a response that is likely larger in size than the group request. In terms of attack impact, an adversary sending a single group request may therefore achieve a large amplification factor, i.e., a high ratio between the total size of the responses sent to the attack victim and the size of the corresponding group request.</t>
        <t>When performing such an attack, the amplification factor would become even larger if CoAP group communication is combined with resource observation <xref target="RFC7641"/>, as described in <xref target="sec-observe"/> of this document. That is, a single group request conveying the Observe Option may result in multiple notification responses from each of the responding servers in the CoAP group, throughout the observation lifetime.</t>
        <t>Further discussion and examples of amplification attacks using CoAP are provided in <xref target="I-D.irtf-t2trg-amplification-attacks"/>.</t>
        <t>Consistent with the mitigations defined in <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; and</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 provided.</t>
          </li>
        </ul>
        <t>Furthermore, when CoAP group communication is combined with resource observation <xref target="RFC7641"/>, a server in a CoAP group <bcp14>MUST</bcp14> strictly limit the number of notifications it sends between receiving CoAP Acknowledgements that confirm the actual interest of the client in continuing the observation (see <xref section="7" sectionFormat="of" target="RFC7641"/>). That is, any notifications sent in Non-confirmable messages <bcp14>MUST</bcp14> be interspersed with Confirmable messages. Note that an adversary may still spoof the CoAP Acknowledgements, e.g., if it is on-path and can read the Message ID values, or if the time when Confirmable messages are sent by the server and their Message ID values are sufficiently predictable.</t>
        <t><xref target="ssec-amplification-echo"/> describes how amplification attacks can be mitigated by using the Echo Option for CoAP defined in <xref target="RFC9175"/>.</t>
        <t>Evidently, it is especially easy to perform an amplification attack when the NoSec mode is used (see <xref target="chap-unsecured-groupcomm"/>). 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 to the above rule 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 anchor="ssec-amplification-echo">
          <name>Mitigation with the Echo Option</name>
          <t>As a further mitigation against amplification attacks, a server can also rely on the Echo Option for CoAP <xref target="RFC9175"/>, including it in a response to a group request. By doing so, the server can verify whether the alleged sender of the group request is indeed reachable at the claimed source address of the group request.</t>
          <t>In particular, <xref section="2.6" sectionFormat="of" target="RFC9175"/> updates <xref section="11.3" sectionFormat="of" target="RFC7252"/> as normatively recommending that CoAP servers use the Echo Option to mitigate amplification attacks, by replying to unauthenticated CoAP clients with a 4.01 (Unauthorized) response including an Echo Option.</t>
          <t>Consistent with the above, a server in a CoAP group <bcp14>SHOULD</bcp14> mitigate potential amplification attacks, by replying to unauthenticated CoAP clients with a 4.01 (Unauthorized) response including an Echo Option, as described in <xref section="2.3" sectionFormat="of" target="RFC9175"/> and in item 3 in <xref section="2.4" sectionFormat="of" target="RFC9175"/>.</t>
          <t>In the limited, exceptional cases where the NoSec mode is used (see <xref target="chap-unsecured-groupcomm"/>), relying on the Echo Option makes it possible to mitigate amplification attacks launched by an off-path adversary.</t>
          <t>When using secure communications protected with Group OSCORE, source authentication of messages is ensured. Hence, upon receiving a valid group request, a server always authenticates the CoAP client that has sent the request.</t>
          <t>Nevertheless, also when using Group OSCORE, a server in a CoAP group <bcp14>SHOULD</bcp14> mitigate potential amplification attacks by using the Echo Option. In particular, the server does so after having successfully decrypted and verified an incoming group request by using an OSCORE Recipient Context that is not associated with a validated network address, or is associated with a validated network address different from the source address of the present group request.</t>
          <t>The server uses the Echo Option as specified in <xref section="2.3" sectionFormat="of" target="RFC9175"/> and in item 3 in <xref section="2.4" sectionFormat="of" target="RFC9175"/>. In particular, the 4.01 (Unauthorized) response including the Echo Option is protected with Group OSCORE and <bcp14>MUST</bcp14> be an inner option (i.e., it is also protected by means of Group OSCORE).</t>
          <t>If the server receives a new request conveying the Echo Option and recognizes the stored option value as associated with the source address of the present request, then the server associates that source address with the OSCORE Recipient Context used to process the request, after having successfully decrypted and verified it with Group OSCORE.</t>
          <t>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.</t>
          <t>Note that the above is achieved also when the server uses the Echo Option due to other reasons, when running the challenge-response method defined in <xref section="9" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>.</t>
          <t>When using Group OSCORE, relying on the Echo Option makes it possible to mitigate amplification attacks launched by an external on-path adversary (see also <xref target="chap-security-considerations-sec-mode-attacks"/>) or by an internal off-path adversary. Instead, it is not effective against attacks launched by an internal on-path adversary.</t>
          <t>Note that an internal adversary, being a member of the security group, considerably exposes itself in an identifiable and accountable way, due to the source authentication of the protected requests that it sends. This raises the chances that such an adversary is detected and consequently evicted from the security group, i.e., through group rekeying (see <xref target="chap-security-considerations-sec-mode-key-mgmt"/>).</t>
          <t>Although CoAP responses including the Echo Option may still result in amplification, this is limited in volume compared to when all servers in a CoAP group reply with larger, full responses.</t>
        </section>
      </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 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
   <bcp14>SHOULD</bcp14> 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>
      <t>As per the IANA considerations of <xref target="RFC7390"/>, the Resource Type (rt=) Link Target Attribute Value "core.gp" and the media type "application/coap-group+json" were registered.</t>
      <t>Those registrations were made in the interest of the experimental protocol defined in <xref target="RFC7390"/> for configuring memberships of CoAP groups for unsecured group communication. As noted in <xref target="sssec-group-creation"/> of the present document, that protocol has not been considered for deployment and use.</t>
      <t>The two registrations mentioned above remain in place, although the Resource Type Link Target Attribute Value "core.gp" and the media type "application/coap-group+json" are not expected to be used by applications and are not used by the present document.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC1112">
          <front>
            <title>Host extensions for IP multicasting</title>
            <author fullname="S.E. Deering" initials="S.E." surname="Deering"/>
            <date month="August" year="1989"/>
            <abstract>
              <t>This memo specifies the extensions required of a host implementation of the Internet Protocol (IP) to support multicasting. Recommended procedure for IP multicasting in the Internet. This RFC obsoletes RFCs 998 and 1054. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="5"/>
          <seriesInfo name="RFC" value="1112"/>
          <seriesInfo name="DOI" value="10.17487/RFC1112"/>
        </reference>
        <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="RFC8085">
          <front>
            <title>UDP Usage Guidelines</title>
            <author fullname="L. Eggert" initials="L." surname="Eggert"/>
            <author fullname="G. Fairhurst" initials="G." surname="Fairhurst"/>
            <author fullname="G. Shepherd" initials="G." surname="Shepherd"/>
            <date month="March" year="2017"/>
            <abstract>
              <t>The User Datagram Protocol (UDP) provides a minimal message-passing transport that has no inherent congestion control mechanisms. This document provides guidelines on the use of UDP for the designers of applications, tunnels, and other protocols that use UDP. Congestion control guidelines are a primary focus, but the document also provides guidance on other topics, including message sizes, reliability, checksums, middlebox traversal, the use of Explicit Congestion Notification (ECN), Differentiated Services Code Points (DSCPs), and ports.</t>
              <t>Because congestion control is critical to the stable operation of the Internet, applications and other protocols that choose to use UDP as an Internet transport must employ mechanisms to prevent congestion collapse and to establish some degree of fairness with concurrent traffic. They may also need to implement additional mechanisms, depending on how they use UDP.</t>
              <t>Some guidance is also applicable to the design of other protocols (e.g., protocols layered directly on IP or via IP-based tunnels), especially when these protocols do not themselves provide congestion control.</t>
              <t>This document obsoletes RFC 5405 and adds guidelines for multicast UDP usage.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="145"/>
          <seriesInfo name="RFC" value="8085"/>
          <seriesInfo name="DOI" value="10.17487/RFC8085"/>
        </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="23" month="December" 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 messages exchanged with the Constrained Application
   Protocol (CoAP) 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 each 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-28"/>
        </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="20" month="October" 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.

   The design spaces for the new CoAP Options proposed to represent
   these responses are now sufficiently understood that they can be
   developed to standards-track specifications, either in this document
   or by transferring the specification for an Option to a document that
   that Option closely works with.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-core-responses-06"/>
        </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="September" year="2025"/>
            <abstract>
              <t>   This document defines a specific realization of proxy intended for
   scenarios that use group communication for the Constrained
   Application Protocol (CoAP).  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-05"/>
        </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="24" month="January" year="2026"/>
            <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-19"/>
        </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="September" 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-18"/>
        </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="1" month="February" year="2026"/>
            <abstract>
              <t>   Group communication for the Constrained Application Protocol (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 for 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-14"/>
        </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="18" month="October" 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-29"/>
        </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="7" month="July" 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-09"/>
        </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="I-D.ietf-intarea-multicast-application-port">
          <front>
            <title>The Multicast Application Port</title>
            <author fullname="Nathan Karstens" initials="N." surname="Karstens">
              <organization>Garmin International, Inc.</organization>
            </author>
            <author fullname="Stuart Cheshire" initials="S." surname="Cheshire">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Mike McBride" initials="M." surname="McBride">
              <organization>Futurewei</organization>
            </author>
            <date day="14" month="January" year="2026"/>
            <abstract>
              <t>   This document discusses the drawbacks of the current practice of
   assigning a UDP port to each multicast application.  Such assignments
   are redundant because the multicast address already uniquely
   identifies the data.  The document proposes assigning a UDP port
   specifically for use with multicast applications and lists
   requirements for using this port.  This method does not require
   modification to existing protocol stacks, though recommended updates
   to make the port easier to use are included.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-intarea-multicast-application-port-03"/>
        </reference>
        <reference anchor="RFC3307">
          <front>
            <title>Allocation Guidelines for IPv6 Multicast Addresses</title>
            <author fullname="B. Haberman" initials="B." surname="Haberman"/>
            <date month="August" year="2002"/>
          </front>
          <seriesInfo name="RFC" value="3307"/>
          <seriesInfo name="DOI" value="10.17487/RFC3307"/>
        </reference>
        <reference anchor="RFC3596">
          <front>
            <title>DNS Extensions to Support IP Version 6</title>
            <author fullname="S. Thomson" initials="S." surname="Thomson"/>
            <author fullname="C. Huitema" initials="C." surname="Huitema"/>
            <author fullname="V. Ksinant" initials="V." surname="Ksinant"/>
            <author fullname="M. Souissi" initials="M." surname="Souissi"/>
            <date month="October" year="2003"/>
            <abstract>
              <t>This document defines the changes that need to be made to the Domain Name System (DNS) to support hosts running IP version 6 (IPv6). The changes include a resource record type to store an IPv6 address, a domain to support lookups based on an IPv6 address, and updated definitions of existing query types that return Internet addresses as part of additional section processing. The extensions are designed to be compatible with existing applications and, in particular, DNS implementations themselves. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="88"/>
          <seriesInfo name="RFC" value="3596"/>
          <seriesInfo name="DOI" value="10.17487/RFC3596"/>
        </reference>
        <reference anchor="RFC4787">
          <front>
            <title>Network Address Translation (NAT) Behavioral Requirements for Unicast UDP</title>
            <author fullname="F. Audet" initials="F." role="editor" surname="Audet"/>
            <author fullname="C. Jennings" initials="C." surname="Jennings"/>
            <date month="January" year="2007"/>
            <abstract>
              <t>This document defines basic terminology for describing different types of Network Address Translation (NAT) behavior when handling Unicast UDP and also defines a set of requirements that would allow many applications, such as multimedia communications or online gaming, to work consistently. Developing NATs that meet this set of requirements will greatly increase the likelihood that these applications will function properly. 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="127"/>
          <seriesInfo name="RFC" value="4787"/>
          <seriesInfo name="DOI" value="10.17487/RFC4787"/>
        </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="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="UML" target="https://www.omg.org/spec/UML/2.5.1/PDF">
          <front>
            <title>OMG Unified Modeling Language (OMG UML) Version 2.5.1</title>
            <author>
              <organization>Object Management Group Standards Development Organization</organization>
            </author>
            <date year="2017" month="December"/>
          </front>
          <seriesInfo name="OMG Document Number" value="formal/2017-12-05"/>
        </reference>
        <reference anchor="IEEE802.15.4" target="https://ieeexplore.ieee.org/document/10794632">
          <front>
            <title>802.15.4-2024 - IEEE Standard for Low-Rate Wireless Networks</title>
            <author>
              <organization>IEEE</organization>
            </author>
            <date year="2024" month="December"/>
          </front>
          <seriesInfo name="DOI" value="10.1109/IEEESTD.2024.10794632"/>
        </reference>
        <reference anchor="Port.Number" target="https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml">
          <front>
            <title>Service Name and Transport Protocol Port Number Registry</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date/>
          </front>
        </reference>
      </references>
    </references>
    <?line 1271?>

<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 and no alternative name resolution service is available to use, 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" IP 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>It is assumed that 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 or an alternative name resolution service 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 that resolves to the IPv6 address ff05::db8:8000:1. Its members are CoAP servers listening to the associated IP multicast address ff05::db8: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://[ff05::db8: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 leftmost label of the registered 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.
In the examples, the group hostname grp.example resolves to a single IP address, hence "grp.example:5685" identifies a single CoAP group.</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.
If an address literal is returned, it identifies exactly one CoAP group. Instead, in the case that a hostname is returned (as in the example), it potentially identifies multiple CoAP groups.</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(s) associated with those application groups.
Note that, because a hostname "grp.example" is returned, this may potentially resolve to multiple multicast IP addresses, hence multiple CoAP 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(s)</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(s) 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.
Also, the group hostname grp2.example resolves to a single IP address, hence "grp2.example" identifies a single CoAP group.</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(s)</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 block-wise transfer.</t>
      <figure anchor="fig-exchange-example-blockwise">
        <name>Example of Non-confirmable group request starting a block-wise 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 UDP/IP 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 it is not necessarily needed that the client's request explicitly indicates the time duration that the reverse-proxy has to use (e.g., like it is indicated when using the realization of proxy specified in <xref target="I-D.ietf-core-groupcomm-proxy"/>). 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-17-18">
        <name>Version -17 to -18</name>
        <ul spacing="normal">
          <li>
            <t>Clearly stated that this document has no actions for IANA.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-16-17">
        <name>Version -16 to -17</name>
        <ul spacing="normal">
          <li>
            <t>Clarifications in Section 1.0 and 1.3:  </t>
            <ul spacing="normal">
              <li>
                <t>This is a Standards Track document that replaces and obsoletes the Experimental specification RFC 7390.</t>
              </li>
              <li>
                <t>Highlighted advancement from RFC 7390.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Explicit mentioning of the implications of the Any Source Multicast (ASM) mode of IP multicast operation.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-15-16">
        <name>Version -15 to -16</name>
        <ul spacing="normal">
          <li>
            <t>Updated group relationship model: multiple CoAP groups can be associated with the same application group.</t>
          </li>
          <li>
            <t>Added pointers to updated sections of RFC 7252 and RFC 7641.</t>
          </li>
          <li>
            <t>Recommended approach for re-sending group requests.</t>
          </li>
          <li>
            <t>Recommended use of block-wise at the server's initiative for large responses.</t>
          </li>
          <li>
            <t>Mentioned possible port numbers designated for multicast applications.</t>
          </li>
          <li>
            <t>CoAP groups with same address and different port number are not recommended.</t>
          </li>
          <li>
            <t>Use of IP addresses:  </t>
            <ul spacing="normal">
              <li>
                <t>Use IPv6 addresses intended for examples in documentation.</t>
              </li>
              <li>
                <t>Reference to guidelines, but no suggestion/recommendation on multicast addresses to use.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Clarifications:  </t>
            <ul spacing="normal">
              <li>
                <t>Meaning of "One-to-many".</t>
              </li>
              <li>
                <t>A CoAP endpoint is identified by (IP address, port number).</t>
              </li>
              <li>
                <t>Use of port number for identifying CoAP groups.</t>
              </li>
              <li>
                <t>Operational considerations on relationships with security groups.</t>
              </li>
              <li>
                <t>Generalization about configuring entities.</t>
              </li>
              <li>
                <t>Possible impact of a NAT employing "Endpoint-Dependent Filtering".</t>
              </li>
              <li>
                <t>A hostname in a Group URI might identify multiple CoAP groups (following the name resolution process).</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Preserve IANA registrations specified in RFC 7390.</t>
          </li>
          <li>
            <t>Updated references:  </t>
            <ul spacing="normal">
              <li>
                <t>For "ASM", used normative references to RFC 1112 and RFC 8085, instead of to RFC 5110.</t>
              </li>
              <li>
                <t>Added references to UML, IEEE 802.15.4, and the IANA registry "Service Name and Transport Protocol Port Number Registry".</t>
              </li>
              <li>
                <t>Moved implementation references to the Datatracker page.</t>
              </li>
              <li>
                <t>Changed the reference to the "Resource Type (rt=) Link Target Attribute Values" IANA registry from normative to informative.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Improved use of normative/non-normative language about congestion control.</t>
          </li>
          <li>
            <t>Avoid normative language for inherited, already defined behavior.</t>
          </li>
          <li>
            <t>Minor clarifications and editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-14-15">
        <name>Version -14 to -15</name>
        <ul spacing="normal">
          <li>
            <t>DNS is only one possible name resolution service.</t>
          </li>
          <li>
            <t>DNS and IP6.ARPA can be used for IPv6 reverse mapping.</t>
          </li>
          <li>
            <t>Appropriate use of normative language.</t>
          </li>
          <li>
            <t>Discouraged the NoSec mode already in Section 1.</t>
          </li>
          <li>
            <t>Clarifications:  </t>
            <ul spacing="normal">
              <li>
                <t>Only Any Source Multicast (ASM) is in scope.</t>
              </li>
              <li>
                <t>Scope of the document about proxy operations.</t>
              </li>
              <li>
                <t>Strategies for repeating a group request.</t>
              </li>
              <li>
                <t>Interspersing confirmable Observe notifications.</t>
              </li>
              <li>
                <t>How the leisure period applies to Observe notifications.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Revised definitions of parameters for congestion control.</t>
          </li>
          <li>
            <t>More content on amplification attacks:  </t>
            <ul spacing="normal">
              <li>
                <t>Early heads-up and forward pointers.</t>
              </li>
              <li>
                <t>Revised presentation of attacks and mitigations.</t>
              </li>
              <li>
                <t>New section on mitigating the attacks with the Echo option.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Updated references.</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
        </ul>
      </section>
      <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="Claudio Allocchio"/>, <contact fullname="Christian Amsüss"/>, <contact fullname="Mike Bishop"/>, <contact fullname="Carsten Bormann"/>, <contact fullname="Mohamed Boucadair"/>, <contact fullname="Roman Danyliw"/>, <contact fullname="Roni Even"/>, <contact fullname="Gorry Fairhurst"/>, <contact fullname="Thomas Fossati"/>, <contact fullname="Brian Haberman"/>, <contact fullname="Rikard Höglund"/>, <contact fullname="Jaime Jiménez"/>, <contact fullname="Erik Kline"/>, <contact fullname="John Preuß Mattsson"/>, <contact fullname="Jim Schaad"/>, <contact fullname="Jon Shallow"/>, <contact fullname="Petr Špaček"/>, <contact fullname="Ketan Talaulikar"/>, <contact fullname="Sean Turner"/>, <contact fullname="Gunter Van de Velde"/>, <contact fullname="Éric Vyncke"/>, and <contact fullname="Magnus Westerlund"/> for their comments and feedback.</t>
      <t>The work on this document has been partly supported by the Sweden's Innovation Agency VINNOVA and the Celtic-Next projects CRITISEC and CYPRESS; and by the H2020 projects SIFIS-Home (Grant agreement 952652) and ARCADIAN-IoT (Grant agreement 101020259).</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
ywf/P90tUYGNlgMA

-->

</rfc>
