<?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.39 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-dnssd-tsr-03" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="TSR EDNS option for mDNS">Multicast DNS conflict resolution using the Time Since Received (TSR) EDNS option</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-dnssd-tsr-03"/>
    <author fullname="Ted Lemon">
      <organization>Apple Inc.</organization>
      <address>
        <postal>
          <street>One Apple Park Way</street>
          <city>Cupertino</city>
          <code>California 95014</code>
          <country>United States of America</country>
        </postal>
        <email>mellon@fugue.com</email>
      </address>
    </author>
    <author fullname="Esko Dijk">
      <organization>IoTconsultancy.nl</organization>
      <address>
        <postal>
          <city>Utrecht</city>
          <country>Netherlands</country>
        </postal>
        <email>esko.dijk@iotconsultancy.nl</email>
      </address>
    </author>
    <date year="2026" month="July" day="06"/>
    <area>int</area>
    <workgroup>dnssd</workgroup>
    <keyword>mDNS</keyword>
    <keyword>TSR</keyword>
    <keyword>conflict resolution</keyword>
    <keyword>EDNS</keyword>
    <keyword>DNS</keyword>
    <abstract>
      <?line 57?>

<t>This document specifies a new conflict resolution mechanism for DNS, for use in cases where the advertisement is
being proxied, rather than advertised directly, e.g. when using a combined DNS-SD advertising proxy and SRP
registrar. A new EDNS option is defined that communicates the time at which the set of resource records on a particular
DNS owner name was most recently updated.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://datatracker.ietf.org/doc/html/draft-ietf-dnssd-tsr"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-dnssd-tsr/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        WG Working Group mailing list (<eref target="mailto:dnssd@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/dnssd/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/dnssd/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/dnssd-wg/draft-ietf-dnssd-tsr"/>.</t>
    </note>
  </front>
  <middle>
    <?line 64?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Unlike the Domain Name System <xref target="RFC1034"/>, with its authority servers and delegation of authority,
Multicast DNS has no single source of authority. Because of this, mDNS has a mechanism, conflict resolution
(<xref section="9" sectionFormat="of" target="RFC6762"/>) for detecting and fixing conflicts in mDNS advertisements.</t>
      <t>The current goal of mDNS conflict resolution is to prevent a newly advertised service from taking the place of
an existing service with the same name that is already being advertised. This goal, however, assumes that the
entity advertising an mDNS service is in fact authoritative for that service. For mDNS proxies, such as
an advertising proxy <xref target="I-D.ietf-dnssd-advertising-proxy"/>, this is not the case: the source of truth for
the service being advertised is an DNSSD Service Registration Protocol (SRP) <xref target="RFC9665"/> requester.</t>
      <t>On a link with more than one SRP registrar, an SRP requester may register with one SRP registrar, and then subsequently
update its registration on a different SRP registrar. Both SRP registrars may be acting as advertising proxies. If so, the
original SRP registrar may still be advertising the old SRP registration using mDNS. If the information in the new SRP
registration is identical to that in the old registration, this is often not a problem. However if some information has
changed (e.g., a new IP address has been added, or a TXT record updated), then the new registration will be seen to
be in conflict with the old registration. In addition, the method used in mDNS to detect conflicts can sometimes produce apparent
conflicts where no actual conflict exists because of the way records in mDNS packets are marshalled.</t>
      <t>In the case of such an apparent conflict, the current behavior of mDNS is for the older (stale) registration to win, and the
newer (current) information to be discarded. This behavior, which is entirely correct for services that are
advertising on their own behalf, is exactly wrong when a service advertisement is being proxied.</t>
      <section anchor="current-behavior">
        <name>Current Behavior</name>
        <t>When a new service is to be advertised, the registrant (the entity requesting the registration) typically registers the
service with a central mDNS registrar on the host on which it is running.  This mDNS registrar locally stores services
that have already been registered, and may detect a conflict with one of those registered services. This can be true whether
the conflicting service entry is data for which the mDNS registrar is authoritative (stored in its local registration
database), or an entry it has received via mDNS (stored in its cache).</t>
        <t>In the case of such a conflict, no network transaction is required: the mDNS registrar detects it locally. It
addresses the conflict in one of two ways. The first alternative is that the mDNS registrar will report the
conflict to the registrant as an error, which it must fix. Alternatively, if the registrant has indicated that
the mDNS registrar should automatically choose a new name for the service in case of conflict, the mDNS registrar does so
automatically, without necessarily notifying the registrant.</t>
        <t>Once any locally-detectable conflicts have been resolved, the mDNS registrar probes (see <xref section="8.1" sectionFormat="of" target="RFC6762"/>)
the local network to see if any other host has already registered a service name that conflicts with the proposed new
service name. If such a service name is present on the network, the mDNS registrar follows the same process previously
described: either report the error to the mDNS registrant or automatically choose a new name.</t>
        <t>The effect of this approach is that generally whichever registrant first registers a service under a particular name
wins. If another registrant comes along later and registers the same service name with conflicting service information,
the newcomer’s information is rejected.</t>
      </section>
      <section anchor="problem-statement">
        <name>Problem Statement</name>
        <t>The current behavior works well for registrants registering services on their own behalf. However, for example in the case of
an SRP registrar, it works poorly: an SRP registrar acting as an advertising proxy publishes the contents of its
DNS zone using mDNS. The sources of truth for this information are the SRP requesters,
not the SRP registrar itself. The SRP registrar in this case acts as a proxy for the SRP requesters.</t>
        <t>In the case of an advertising proxy publishing records originating from an SRP Update, the most recent information
is correct; the older information is simply stale, and not competing.
When the SRP requester is able to continue registering with the same SRP registrar, this works well: stale
data is automatically removed and replaced with current data. However, if more than one SRP registrar is
available, the SRP requester may wind up sending its SRP Updates to a different SRP registrar. This can happen as a result of
a network partition event, or in cases where the SRP registrar is contacted using an anycast address.</t>
        <t>When the SRP requester sends its SRP Update to a different SRP registrar, the behavior of the mDNS conflict
resolution approach without TSR is that the SRP requester's service will be given a new name, and both the old (stale)
service advertisement (A) and the new (more recent) service advertisement (A’) will be discoverable as separate services.</t>
        <t>This creates a new burden on consumers of such services: they need to parse through the whole list of services of
their type, using metadata from the TXT record in the service instance data, if possible, to determine that
service A and service A’ are the same service. If no such information is present in the TXT record, the only way
to determine that one of these two advertised services is stale is to attempt to use the advertised service, which may
no longer be reachable if, for example, the change that produced the conflict was an IP address change. When the
SRP lease for the stale service expires, that service's mDNS advertisement will be removed, and the service will no
longer be discoverable under the original name, even if its IP address hasn't changed.</t>
        <t>This document proposes an enhancement to the current conflict resolution algorithm for mDNS, which allows an mDNS
proxy to report the time at which it received the registration for DNS records it is advertising, and the source from which
these records were received.
This is done using a new Time Since Received (TSR) EDNS(0) (<xref target="RFC6891"/>) option, of which there must be exactly one
per name being advertised by the mDNS proxy.</t>
      </section>
      <section anchor="conventions-terms-and-definitions">
        <name>Conventions, Terms and Definitions</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?>

<dl>
          <dt><strong>absolute time</strong></dt>
          <dd>
            <t>a node-local timestamp that is derived from a local monotonic clock. This clock is not required to be synchronized
with any other clock, nor is it an absolute time in the sense of UTC. The clock may restart upon boot of the node but
not during regular operation.</t>
          </dd>
          <dt><strong>authoritative data</strong></dt>
          <dd>
            <t>DNS records stored in the local registration database, for which an mDNS registrar is authoritative (as defined
by <xref target="RFC6762"/>).</t>
          </dd>
          <dt><strong>cache</strong></dt>
          <dd>
            <t>each mDNS registrar maintains a cache of DNS records received from hosts on the local network, as described in <xref target="RFC6762"/>.
Information in the cache represents the mDNS registrar's current understanding of what records are advertised on the network.
Authoritative data may be present in the cache, but the presence of data in the cache does not in itself indicate that
the mDNS registrar is authoritative for that data.</t>
          </dd>
          <dt><strong>local registration database</strong></dt>
          <dd>
            <t>a database of DNS records maintained by the mDNS registrar. Records in this database are registered locally with
the mDNS registrar. The mDNS registrar is authoritative for all DNS records in this database.
When the mDNS registrar receives queries that match records in this database, the mDNS registrar can respond to these
queries with the matching records.</t>
          </dd>
          <dt><strong>mDNS registrar</strong></dt>
          <dd>
            <t>an mDNS <xref target="RFC6762"/> implementation on a host that accepts local requests for querying, advertising and registering
DNS records from one or more requesters and/or registrants. This could for example be an mDNS daemon process running
in an operating system, accepting API calls from local processes to register or update DNS records for that process.
It stores the locally-registered records in its local registration database.</t>
          </dd>
          <dt><strong>mDNS registrant</strong></dt>
          <dd>
            <t>an entity or software process that is attempting to register records for advertisement to a (local) mDNS registrar.</t>
          </dd>
          <dt><strong>mDNS requester</strong></dt>
          <dd>
            <t>an entity or software process that issues mDNS queries to a local mDNS registrar, via an API call.
The mDNS registrar is responsible for executing these queries and notifying the mDNS requester about the answer(s).</t>
          </dd>
          <dt><strong>mDNS proxy</strong></dt>
          <dd>
            <t>a host that runs an mDNS registrar and at least one mDNS registrant acting as a proxy. That is, it needs to advertise
mDNS records on behalf of one or more entities not located on the host itself.
The advertising proxy <xref target="I-D.ietf-dnssd-advertising-proxy"/> is an example of an mDNS proxy.</t>
          </dd>
          <dt><strong>SRP requester</strong></dt>
          <dd>
            <t>a client that uses the Service Registration Protocol (SRP) <xref target="RFC9665"/> to send an SRP Update to an SRP registrar.</t>
          </dd>
          <dt><strong>SRP registrar</strong></dt>
          <dd>
            <t>a server that accepts SRP Updates sent by SRP requesters using the SRP <xref target="RFC9665"/>.
DNS records registered via SRP to an SRP registrar may then be advertised by mDNS using an advertising proxy
<xref target="I-D.ietf-dnssd-advertising-proxy"/> located on the same host.
In that case, the SRP registrar process acts as an mDNS registrant towards its local mDNS registrar process.</t>
          </dd>
          <dt><strong>TSR data</strong></dt>
          <dd>
            <t>locally stored data, associated with a single DNS owner name, that keeps track of the absolute time ('TSR time') when a set of
resource records were last updated and includes a key checksum to identify the owner of these records.
It may be data proposed by an mDNS registrant's registration, or stored in the local registration database, or
extracted from a received mDNS advertisement by parsing a TSR option.</t>
          </dd>
          <dt><strong>TSR option</strong></dt>
          <dd>
            <t>an EDNS0 Time Since Received (TSR) option as defined by this specification.</t>
          </dd>
          <dt><strong>TSR time</strong></dt>
          <dd>
            <t>the (node-local) absolute time indicated by a particular TSR data.</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="tsrrr">
      <name>Time Since Received EDNS Option</name>
      <t>Each Time Since Received (TSR) EDNS option is applicable to exactly one DNS owner name. So all the records for that owner
name that appear in the answer, authority and/or additional sections of an mDNS message would be covered by a single TSR
option.</t>
      <t>The TSR EDNS option has the following format:</t>
      <artset>
        <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="208" width="528" viewBox="0 0 528 208" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
            <path d="M 8,64 L 8,192" fill="none" stroke="black"/>
            <path d="M 264,64 L 264,192" fill="none" stroke="black"/>
            <path d="M 520,64 L 520,160" fill="none" stroke="black"/>
            <path d="M 8,64 L 520,64" fill="none" stroke="black"/>
            <path d="M 8,96 L 520,96" fill="none" stroke="black"/>
            <path d="M 8,128 L 520,128" fill="none" stroke="black"/>
            <path d="M 8,160 L 520,160" fill="none" stroke="black"/>
            <path d="M 8,192 L 264,192" fill="none" stroke="black"/>
            <g class="text">
              <text x="16" y="36">0</text>
              <text x="176" y="36">1</text>
              <text x="336" y="36">2</text>
              <text x="496" y="36">3</text>
              <text x="16" y="52">0</text>
              <text x="32" y="52">1</text>
              <text x="48" y="52">2</text>
              <text x="64" y="52">3</text>
              <text x="80" y="52">4</text>
              <text x="96" y="52">5</text>
              <text x="112" y="52">6</text>
              <text x="128" y="52">7</text>
              <text x="144" y="52">8</text>
              <text x="160" y="52">9</text>
              <text x="176" y="52">0</text>
              <text x="192" y="52">1</text>
              <text x="208" y="52">2</text>
              <text x="224" y="52">3</text>
              <text x="240" y="52">4</text>
              <text x="256" y="52">5</text>
              <text x="272" y="52">6</text>
              <text x="288" y="52">7</text>
              <text x="304" y="52">8</text>
              <text x="320" y="52">9</text>
              <text x="336" y="52">0</text>
              <text x="352" y="52">1</text>
              <text x="368" y="52">2</text>
              <text x="384" y="52">3</text>
              <text x="400" y="52">4</text>
              <text x="416" y="52">5</text>
              <text x="432" y="52">6</text>
              <text x="448" y="52">7</text>
              <text x="464" y="52">8</text>
              <text x="480" y="52">9</text>
              <text x="496" y="52">0</text>
              <text x="512" y="52">1</text>
              <text x="104" y="84">OPTION-CODE</text>
              <text x="160" y="84">=</text>
              <text x="188" y="84">TBD1</text>
              <text x="376" y="84">OPTION-LENGTH</text>
              <text x="440" y="84">=</text>
              <text x="460" y="84">10</text>
              <text x="108" y="116">RR</text>
              <text x="144" y="116">Index</text>
              <text x="352" y="116">Key</text>
              <text x="404" y="116">Checksum</text>
              <text x="456" y="116">...</text>
              <text x="64" y="148">...</text>
              <text x="96" y="148">Key</text>
              <text x="148" y="148">Checksum</text>
              <text x="372" y="148">Time</text>
              <text x="420" y="148">Offset</text>
              <text x="464" y="148">...</text>
              <text x="64" y="180">...</text>
              <text x="100" y="180">Time</text>
              <text x="148" y="180">Offset</text>
            </g>
          </svg>
        </artwork>
        <artwork type="ascii-art"><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|      OPTION-CODE = TBD1       |       OPTION-LENGTH = 10      |
+-------------------------------+-------------------------------+
|           RR Index            |         Key Checksum ...      |
+-------------------------------+-------------------------------+
|     ... Key Checksum          |           Time Offset ...     |
+-------------------------------+-------------------------------+
|     ... Time Offset           |
+-------------------------------+
]]></artwork>
      </artset>
      <t>The TSR EDNS option includes three fields in the OPTION-DATA (<xref target="RFC6891"/>): 'RR Index' (two byte integer in network
byte order), 'Key Checksum' (four bytes), and 'Time Offset' (four bytes).</t>
      <t>The 'RR Index' is the number of the RR in the mDNS packet. Question RRs are not counted.  So if the message includes two
answer RRs, one authority RR and two additional RRs, an index of 0 would refer to the first answer, an index of 1 to the
second answer, and index of 2 to the single authority record, and so on. Questions are excluded because they have no
data associated with them, and so it makes no sense for them to have TSR options associated with them.</t>
      <t>If there is more than one record in the mDNS Message with the same owner name, only one TSR option is emitted for
that name, and it applies to every RR in the mDNS Message with that owner name. It is not possible in the
SRP protocol for two updates at two different times to contain records that apply to the same name: in such a
situation, the second update completely replaces the first, so all data in the first update is then rendered stale.</t>
      <t>The second field, 'Key Checksum', is a simple 32-bit checksum of the public key that the owner of the data (for example
the SRP requester) used to authenticate itself. The key checksum is computed by treating the key as a series of 32-bit
unsigned integers in network byte order, and adding these integers together to produce a 32-bit unsigned checksum.
Overflow is not considered. This checksum need not be cryptographically secure: mDNS messages are not authenticated, so
an attacker on the local link can always cause problems with mDNS by providing spurious responses. The purpose of
the checksum is simply to notice whether, for a specific owner name, two different authoritative sources have provided
information.</t>
      <t>The 'Time Offset' field contains the difference, in seconds, between the time at which the TSR option is being
generated and the time of receipt of resource records for that owner name (as encoded in TSR data).</t>
      <t>The time offset is represented in the mDNS message as a time in seconds relative to the time when the mDNS message
is sent. If this difference is greater than seven days (7 * 24 * 60 * 60), the mDNS registrar <bcp14>MUST</bcp14> use a value of seven days
rather than the larger value.  The relative time value in the TSR option is converted to an absolute (local) time when stored
in a cache or a local registration database on an mDNS registrar as TSR data, and is converted back to a relative time whenever an
mDNS message with a TSR option is generated from local data.</t>
    </section>
    <section anchor="mdns-registrar-behavior">
      <name>mDNS Registrar Behavior</name>
      <section anchor="locval">
        <name>Validating requested local RR registrations with TSR data</name>
        <t>When a local mDNS registrant asks an mDNS registrar to register one or more records on an owner name, and provides TSR data
for that name, the mDNS registrar first checks that none of the records are marked shared. If any record is marked shared,
the mDNS registrar <bcp14>MUST</bcp14> respond with an error indicating that the registration is invalid.</t>
        <t>It then checks to see if there are any records either in cache or in its local registration database
on that owner name. If no such data exists, the mDNS registrar stores the record(s) in this registration in its local
registration database and puts them in the probing state.</t>
        <t>When such data exists, the registrar <bcp14>MUST</bcp14> check to see if it has TSR data for that owner name. If it does not, or if there
is TSR data on that name but the key checksum does not match, the registrar <bcp14>MUST</bcp14> treat this registration as a conflict
and return an appropriate error to the registrant.</t>
        <t>If such data exists and the key checksums match, there are three possibilities based on the known TSR time
(from the existing data) and the proposed TSR time (from the TSR data in the registration request):</t>
        <dl>
          <dt><strong>Known TSR time is more recent</strong></dt>
          <dd>
            <t>In this case, the registrar <bcp14>MUST</bcp14> treat the requested data as stale, and return an indication to the
registrant that its registration is stale. This indication must be distinct from the "appropriate error" indication of
conflict that was defined above.</t>
          </dd>
          <dt><strong>Both TSR times are the same</strong></dt>
          <dd>
            <t>In this case, cached data (if any) on the owner name is discarded first. Then, the requested records are added to
the local registration database, updating existing records (if any). Since the requested records are considered
identical to the known records, based on TSR time, no probing or announcing is performed for these records.</t>
          </dd>
          <dt><strong>Proposed TSR time is more recent</strong></dt>
          <dd>
            <t>In this case, cached data (if any) on the owner name is discarded first.
The registrant for any existing locally-registered data is notified that
the data they had previously registered is stale, and the stale data is removed from the local registration database.
The requested records are added to the local registration database and put in the probing state,
and the TSR data is replaced by the proposed TSR data.</t>
          </dd>
        </dl>
        <t>It is in principle possible for two different mDNS registrants to ask the same mDNS registrar to publish different RRs on
the same name, some of which are shared and some of which are unique (see <xref section="2" sectionFormat="of" target="RFC6762"/>).
If an mDNS registrant tries to register an RR on a name for which the registrar already has data, cached or
authoritative, on the same name, whether of the same RR type or a different RR type, for which there is no TSR data, or for
which the key checksum in the TSR data being registered does not match what is already known, the registrar <bcp14>MUST</bcp14> treat
this as an immediate conflict, and <bcp14>MUST NOT</bcp14> add the data to its local registration database and <bcp14>MUST NOT</bcp14> probe.</t>
        <t>For the third case, as with any local mDNS registration, the mDNS registrar treats all of the records in the registration
request as tentative (that is, they are put in the probing state) until they have been probed and no conflicting answers
from other mDNS hosts have been received.</t>
      </section>
      <section anchor="probing-resource-records-on-names-with-tsr-data">
        <name>Probing resource records on names with TSR data</name>
        <t><xref section="8.1" sectionFormat="of" target="RFC6762"/> describes how an mDNS registrar probes to ensure that there is
no conflicting data for records in the probing state. The behavior for records that are in the probing state with owner names to
which no TSR data applies remains unchanged.  When there is TSR data on a name for which records are being probed,
the mDNS registar <bcp14>MUST</bcp14> include TSR options for each such name as described in <xref target="tsrrr"/> and <xref target="construct"/>. Handling of
responses is described in <xref target="procmes"/>.</t>
        <section anchor="probing-tsr-change-only">
          <name>Probing when only the TSR time has changed</name>
          <t>If the only change to the set of mDNS records advertised on a name with TSR data is the TSR time itself,
probing is not necessary and in this case an mDNS registrar <bcp14>MUST NOT</bcp14> probe.
The reason to eliminate this probe is that it avoids unnecessary multicast traffic:
in this situation the probe serves no purpose, since nothing substantive has changed and the mDNS registrar was
already authoritative for the records.</t>
        </section>
      </section>
      <section anchor="processing-mdns-questions-for-which-tsr-data-exists">
        <name>Processing mDNS questions for which TSR data exists</name>
        <t>When processing a question for which local TSR data is present, the mDNS registrar <bcp14>MUST</bcp14> first check to see if there is corresponding
data in the mDNS message being processed. In this case, before constructing a response,
the mDNS registrar <bcp14>MUST</bcp14> process the non-question records in the packet, since this could result in stale data being flushed. Processing
is performed as described in <xref target="procmes"/>.</t>
        <t>Once all non-question records have been processed, the registrar <bcp14>MUST</bcp14> respond to any questions that match
locally-registered resource records for which a known answer is not present in the query. Responses are constructed as
described in <xref target="tsrrr"/>.</t>
      </section>
      <section anchor="receiving-mdns-messages-that-may-contain-tsr-options">
        <name>Receiving mDNS messages that may contain TSR options</name>
        <t>mDNS registrars that support TSR need to compute an absolute time based on a time offset. This means that registrars need
to know when the packet was received. A naive implementation might assume that the time that the packet is read off the
input queue by the registrar is close enough. However, in practice it can be the case on a heavily
loaded system that the time of receipt and the time of processing are far enough apart to create the appearance of
staleness.</t>
        <t>To avoid this, mDNS registrars that have an API available to get the actual time of receipt of a packet should make use
of that API. For example, the SO_TIMESTAMP_CONTINUOUS socket option is available on Linux and BSD Unix platforms,
including MacOS. When such APIs are not available, another option is to receive such packets on a high priority thread,
marking a timestamp and queue them for later processing.</t>
      </section>
      <section anchor="procmes">
        <name>Processing mDNS messages that may contain TSR options</name>
        <t>mDNS registrars that support the TSR option <bcp14>MUST</bcp14> check incoming messages for the presence of an EDNS(0) option containing
TSR options. mDNS registrars that do not support TSR will not do this check, and will behave as if no TSR options are present.
For non-proxy use cases, this should make no difference, since in such cases if multiple devices advertise records
on the same owner name, these are actually in conflict. However, for the proxy use case, what this means is that two
proxies that are proxying the same data cannot interoperate if one supports TSR and the other doesn't.</t>
        <t>It is important to note that mDNS messages, particularly in the case of proxies, can contain combined information
answering multiple queries that may be outstanding, and as such, it's entirely possible for a mDNS message sent by an
mDNS registrar that supports TSR to contain some answers for which there is TSR data, and some answers for which there
is not. It's equally possible that such a registrar will send mDNS packets containing no TSR options at all.</t>
        <t>When an mDNS message contains TSR options, for each TSR option in an mDNS message, the mDNS registrar first determines
the owner name of the TSR option by assigning
an index to each non-question resource record in the mDNS message. The 'RR index' of each TSR option is then matched to the
index of a resource record, and the owner name for that resource record is applied to the TSR option. The time on the TSR
option is then computed by taking the current local clock time and subtracting from it the 'Time Offset' value in
the TSR option.</t>
        <t>If there is a TSR option in an mDNS message for which there is no matching resource record in the mDNS message, the mDNS
registrar <bcp14>MUST</bcp14> ignore that TSR option. The mDNS registrar <bcp14>MUST NOT</bcp14> use the 'RR Index' value in the TSR option to search across the
mDNS packet since such an index can easily be out of bounds.</t>
        <t>Now, for each record in the mDNS message, the mDNS registrar first determines whether the record is an OPT record, is in
the question section, or is a known answer (QD bit = 0 and it's a record in the answer section). For all such records, no
special processing is done for TSRs, since no TSR should exist in the mDNS message.</t>
        <t>For each remaining resource record in the mDNS message, the mDNS registrar <bcp14>MUST</bcp14> check to see if there is a TSR option in
the mDNS message for that owner name. If there is not, the mDNS registrar <bcp14>MUST</bcp14> check to see if there is TSR data with that
owner name locally. If there is not, the record is processed normally.</t>
        <t>If there is local TSR data for the record's owner name, but no TSR data for that owner name in the mDNS message,
the mDNS registrar checks to see if there are any resource records
in the local registration database on that name. If there are, all such records are treated as in
conflict. This conflict exists even if the locally registered records are all shared records. In cases where there are
records on the name in the cache, those records are all discarded, because they are in conflict with the new data.</t>
        <t>In the case that there is TSR data for the record in the mDNS message, and there are local records on the same owner name
for which there is no local TSR data, this always means that any
data is in conflict. How that conflict is addressed depends on the data. First, note that resource records in the answer
section of an mDNS Query (QR bit in the header is 0) are "known answers" and therefore are not relevant when adding data
to the cache. Such records can never have TSR options associated with them.  However, resource records in
the authority and additional sections of a query do need to be processed (but in the case of authority records, are not
added to the cache).</t>
        <t>In cases where the TSR data for a particular name is present both locally and in the mDNS message, the mDNS registrar
<bcp14>MUST</bcp14> compare the key checksums. If these are different, then the records are always in conflict, and are handled according
to the context of the conflict, as described in <xref section="9" sectionFormat="of" target="RFC6762"/>.</t>
        <t>In cases where the key checksums match, the mDNS registrar <bcp14>MUST</bcp14> compare the times. When the TSR time from the mDNS message
is more recent than the local TSR time, the local data in the cache is flushed.
Stale data in the local registration database is removed, and the mDNS registrant is informed that this data is stale.</t>
        <t>When the TSR times are the same, any resource records on that name in the answer section and additional section are added
to the cache.</t>
        <t>When the local TSR time is more recent, the data in the message is not added to the cache, and no action is taken with
respect to any locally-registered data.</t>
      </section>
      <section anchor="dupans">
        <name>Duplicate answer suppression behavior</name>
        <t><xref section="7.4" sectionFormat="of" target="RFC6762"/>, Duplicate Answer Suppression, describes behavior intended to prevent the redundant transmission
of duplicate answers. When an mDNS query is received for which the mDNS registrar has authoritative data, the mDNS registrar
will wait for a random amount of time before sending a response. If, during that time, a response is received that contains
all the answers it would have sent, it suppresses sending these answers, since they are redundant.
Such a response is referred to as a "pre-empting response".</t>
        <t>In the case where TSR data is present locally or in a pre-empting response, it can be the case that the data in a pre-empting
response is stale or conflicting. For this reason, an mDNS registrar <bcp14>MUST NOT</bcp14> suppress duplicate answers when:</t>
        <ul spacing="normal">
          <li>
            <t>the TSR key checksum for the owner name in a pre-empting response does not match the local TSR key checksum for that
owner name</t>
          </li>
          <li>
            <t>TSR data is present locally for that owner name but is not present in the pre-empting response</t>
          </li>
          <li>
            <t>A TSR option is present for that owner name in the pre-empting response, but local authoritative data for that owner
name is present but has no associated TSR data</t>
          </li>
          <li>
            <t>local authoritative data for that owner name is present and includes TSR data, a TSR option for that owner name is
present in the pre-empting response, but the local TSR time for that owner name is more recent than the TSR time
for that owner name in the pre-empting response</t>
          </li>
        </ul>
        <t><xref target="dupasexample"/> shows what this might look like from the perspective of an mDNS requester.</t>
      </section>
      <section anchor="suppression-of-goodbye-announcements">
        <name>Suppression of Goodbye announcements</name>
        <t>When authoritative data is removed on an mDNS registrar because an mDNS message has been received with more recent
data, the mDNS registrar <bcp14>MUST NOT</bcp14> send a "goodbye" announcement for any RR on that owner name as a result of flushing
this stale data.</t>
        <t>The reason for this is that in the case where an mDNS registrant updates one or more RRsets on an owner name covered
by TSR data, and as a result of this some records are removed, but some remain, the mDNS registrar that was directly
updated will either send "goodbye" announcement or an announcement with the cache flush bit set as specified in
<xref section="8.4" sectionFormat="of" target="RFC6762"/>. Since the mDNS registrar with the most current information has already done what is needed,
if an mDNS registrar that is flushing locally-registered data were to send a "goodbye" announcement this would at
best be redundant and hence wasteful use of multicast, and at worse might cause valid data to be flushed from the cache
on some mDNS registrar.</t>
      </section>
      <section anchor="suppression-of-redundant-probing">
        <name>Suppression of redundant probing</name>
        <t>When mDNS proxies are doing any form of replication of the records they are publishing, it can be the case that one
proxy sends its probes for a new set of records first.
If this is the case, some or all proxies on the same multicast link that receive the replicated data
may already have (at the time of probing) the correct data in their local registration database with matching TSR times,
waiting to be probed.</t>
        <t>In such case, these proxies will determine that the records in the received probe message are identical to the locally-registered
set of records, and therefore per <xref section="8.2.1" sectionFormat="of" target="RFC6762"/> no conflict is detected
and no response to the probe will be sent.
An mDNS registrar that receives a probe, for a new set of records that it has just placed in the probing state, <bcp14>MUST</bcp14>
suppress sending its own probe messages as this would be redundant: the probing
is already being performed on the link.</t>
        <t>[TBD for WG: for the above, the response to a probe in case of a true conflict (by another mDNS host) will typically
  be 'fast' with unicast as per RFC 6762. For this reason, the suppression of probing would be dangerous in the above
  case, as most of the proxies that suppress their probing would not see the actual conflict (if any).
  Unless the replication algorithm takes care of withdrawing the records on all proxies.]</t>
        <t>Conversely, it can also be the case that one proxy already sent its mDNS probes and announced the new records before
some other proxy on the same multicast link fully completed the replication process for these records.
In that case, the announced records will be stored already in the cache of this other proxy at the time that its
local mDNS registrant (i.e. the replicating proxy process) performs the registration of these records and the associated
probing.</t>
        <t>To avoid redundant probing for such cases, when an mDNS
registrant registers data with an mDNS registrar for which the same data is already cached with the same TSR key
checksum and an equal TSR time, the mDNS registrar <bcp14>MUST</bcp14> skip probing.
This requirement follows the second case ("Both TSR times are the same") in <xref target="locval"/>.</t>
        <t>[TBD for WG: the below 'recent' rule text instead of 'equal' as used in above sentence seems to conflict the section
 'locval' <xref target="locval"/> 3 cases. Only when TSR time is equal, will the probing be suppressed.</t>
        <t>Recent here should take into account network
delays: a difference of less than ten seconds between the cached TSR time and the registrant's TSR time should be
considered "recent."
]</t>
        <t>In addition, when the TSR time for a set of RRs is updated by an mDNS registrant, but nothing else changes,
the mDNS registrar does not re-probe those RRs as defined in <xref target="probing-tsr-change-only"/>.
In this situation, if some RRs are removed, then a goodbye
announcement should be sent for such RRs, but no probe is sent for RRs that are not removed.
If some RRs are added, the probing stage can be skipped because the registrar already knows it is up to date. So
the new RRs can simply be announced immediately. One can assume that updates do not happen frequently enough for
there to be competing mDNS updates being probed or announced at the same time.</t>
      </section>
      <section anchor="handling-multi-packet-mdns-advertisements">
        <name>Handling multi-packet mDNS advertisements</name>
        <t>It can happen, particularly when some sort of synchronization event occurs, such as the announcement of a new IPv6 prefix that
triggers many SRP registrations, that the mDNS records on a particular name do not all fit in the remaining space
in an mDNS packet during packet construction (see <xref target="construct"/>).
The mDNS protocol does not require that such records all be sent in the same mDNS message.
With mDNS probes and announcements that do not use TSR, this can result in conflicts when the information being announced
or probed is advertised by more than one mDNS proxy.</t>
        <t>In the case of mDNS proxies using TSR, if the TSR key checksums are the same, there is no possibility of a conflict,
and so this processing, including the simultaneous probe tiebreaking of <xref section="8.2.1" sectionFormat="of" target="RFC6762"/> and the conflict
detection of <xref section="9" sectionFormat="of" target="RFC6762"/>, need not be performed.
The TSR stale data processing defined by this document does not rely on all the records being present in a single mDNS message,
and so the stale data evaluations described in previous subsections are all that is needed to handle this case.</t>
        <t>Because of this, when an mDNS registrar is processing received mDNS records on a name with TSR data where the local and
received key checksums are identical, it <bcp14>MUST NOT</bcp14> treat a partial set of records in the received mDNS message
as a conflict or an indication of staleness.
Only the TSR time can be an indication of staleness in this case.</t>
      </section>
      <section anchor="construct">
        <name>Constructing a mDNS message with TSR options</name>
        <t>For each non-question record that is added to the mDNS message, one of three things must be true:</t>
        <ul spacing="normal">
          <li>
            <t>The mDNS registrar has locally-registered resource record(s) on that owner name, which may or may not be in the probing
state.</t>
          </li>
          <li>
            <t>It is sending an answer which is either an announcement or a response containing data it has already validated and for
which it is authoritative.</t>
          </li>
          <li>
            <t>The message is a query (QD=0) and the record is in the answer section, and is therefore a "known answer."</t>
          </li>
        </ul>
        <t>As described in <xref section="7.1" sectionFormat="of" target="RFC6762"/>, an mDNS registrar asking a question about one
or more RRs on a particular name populates the answer section of its mDNS message with the answers it already knows, to
avoid unnecessary responses. However, in this case it can't also be probing for records on the same name, because probes
are only done for unique (non-shared) records.</t>
        <t>The requirements in <xref target="locval"/> mean that there can never be an mDNS probe message that contains known answer records on an
owner name for which any RR is being probed to which TSR data applies.</t>
        <t>This means that for any particular owner name that might be represented in an mDNS packet, it must be the case either that
it is not a known answer, or that it is a known answer and no other records exist in the mDNS packet with the same owner
name to which a TSR option would apply.  That is, one of two things must be true about the set of all records with a
particular owner name being added to the mDNS packet: either a TSR option applies to all these records, or it applies to
none of the records. Furthermore, either a record is a known answer from cache, or it is a locally-registered record.</t>
        <t>When constructing an mDNS message, the mDNS registrar maintains a set of names and associated TSR data. Initially this set is
empty. When the registrar adds a record to the mDNS message, if that record is locally registered, and if the registrar
has TSR data for that name, it first checks to see if it has already added TSR data for that name to the set. If not, then
it adds a new entry to the set containing the TSR data for the owner name of the RR. The data added consists of the
owner name, the index of the record being added (since it is the first), the key checksum, and the time offset.</t>
        <t>Once the mDNS registrar has finished adding resource records to the mDNS message,
it adds an OPT record in the additional section. In this OPT record it adds a TSR option for every name in the set that
was generated when adding resource records to the message. The time of receipt is subtracted from the current time to
produce the value for the 'Time Offset' field, and this value is clamped to a maximum of seven days (604,800 seconds)
<xref target="tsrrr"/>.</t>
      </section>
    </section>
    <section anchor="the-effect-of-network-latency-on-time-computations">
      <name>The effect of network latency on time computations</name>
      <t>Because TSR computations are affected by network latency, comparisons can’t be considered accurate. It is
therefore necessary to tolerate some amount of error. In practice, however, it should generally not be the case
that two advertising proxies receive SRP updates from the same SRP requester at nearly the same time. So it should
always be the case either that there is a clear ordering to the TSR 'Time Offset' values, or that there is no conflict in the
data. For example with anycast, a retransmission could go to a different SRP registrar, but in this case both
SRP registrars would simultaneously receive identical data, so the close ordering or even equality of the TSR time offsets
should not affect the outcome.</t>
    </section>
    <section anchor="internal-handling-of-tsr-data">
      <name>Internal Handling of TSR data</name>
      <t>The TSR 'Time Offset' value that is sent on the wire is expressed in seconds relative to the time of receipt of the
registration. In order to derive this value, the mDNS registrar must remember the (local) time at
which the registration occurred. This time is recorded as an absolute time, not a relative time. We refer to this as the
time of receipt or 'TSR time'.
When constructing a TSR option, the registrar computes the difference between the current time and the TSR time,
which must always be in the past. This difference, which should be a positive integer, is converted to
seconds, and that unsigned value is then used to synthesize the TSR option.</t>
    </section>
    <section anchor="timeliness-of-conflict-resolution">
      <name>Timeliness of Conflict Resolution</name>
      <t>If a conflict exists in which some mDNS registrant(s) store stale data, it is expected that the conflict is recent,
and that it will be resolved quickly since mDNS message exchanges with TSR options cause removal of the stale data.
Different hosts may be able to record shorter or longer time offsets, depending on their implementation.
However, because of this expectation of recentness, mDNS
registrars should never need to report a TSR option 'Time Offset' value of longer than seven days.
It’s reasonable to expect that every mDNS implementation should be able to remember time intervals of at least seven days.</t>
      <t>This maximum time interval is normatively defined in <xref target="tsrrr"/>.</t>
    </section>
    <section anchor="legacy-behavior">
      <name>Legacy Behavior</name>
      <t>mDNS registrars and queriers that do not support the TSR option are expected to ignore the option, so they will behave
as if no TSR option was sent. This may result in such registrars temporarily caching stale data. However, in the
normal course of processing, more recent data will win. In cases where it does not, the Reconfirm process which
is part of <xref target="RFC6762"/> already works to clear stale data: since SRP registrars are expected to implement
TSR, by the time a Reconfirm is attempted, all authoritative stale data should have been cleared.</t>
    </section>
    <section anchor="when-to-use-tsr">
      <name>When to Use TSR</name>
      <t>There are no cases where using TSR is harmful, but in the case of individual devices advertising individual services
with mDNS, it may be of little benefit. The reason for this is that when two devices both claim the same name to
use for advertising services, their advertisements will be seen as in conflict whether or not TSR is present. In
this case, TSR does no harm, but most likely does not help.</t>
      <section anchor="use-of-tsr-with-redundant-proxies">
        <name>Use of TSR with redundant proxies</name>
        <t>Use of TSR is most beneficial in the case of redundant mDNS proxies. The reason for this is that such proxies tend
to publish data that could potentially produce name conflicts as a result of updates: when one proxy is publishing
an old version of the data and another proxy is publishing a new version of the data, and these data differ,
this can appear as a name conflict and result in renaming. So for this use case, the use of TSR is very beneficial.</t>
      </section>
      <section anchor="use-of-tsr-with-multihomed-devices">
        <name>Use of TSR with multihomed devices</name>
        <t>It can also happen that a multihomed device uses SRP to register when connected to one sort of network, and uses
mDNS to advertise the same service when connected to another sort of network. For example, the device may have
capabilities to connect to a constrained network to reduce power use, but also to occasionally connect to a WiFi
network either for backup or for bulk data transfers. In this situation we have two potentially competing mDNS
advertisements.  The first is that of the mDNS registrar on the multihomed device, which is directly advertising
its own service using mDNS. The second is the one or more advertising proxies that are advertising services
registered via SRP using mDNS. Both datasets are coming from the same source, and the advertising proxy will use TSR
to identify the source. To avoid spurious conflicts, a device that sometimes registers with SRP and sometimes
advertises with mDNS <bcp14>SHOULD</bcp14> use TSR when advertising with mDNS.</t>
      </section>
      <section anchor="tsr-in-networks-with-non-compliant-mdns-caches">
        <name>TSR in networks with non-compliant mDNS caches</name>
        <t>Some network infrastructure devices available commercially provide "mDNS cache" services or "mDNS proxy" services
that purport to allow mDNS discovery across links that are separate at the IP layer and do not share a multicast
domain. These services generally cause mDNS to become unreliable in various ways, and it would be helpful to be
able to use TSR to distinguish between stale data advertised by such devices, and fresh data advertised directly
from the device that is authoritative for that data.</t>
        <t>Unfortunately, for the most part these devices do not cache mDNS packets, but rather cache data advertised using
mDNS. As a result, if such devices do not support TSR, we get no benefit from TSR.</t>
        <t>That said, such devices <bcp14>SHOULD</bcp14> support TSR, and if they do this might prevent some of their failure modes. What
this would mean would be that any DNS RRs cached or forwarded by such devices would be accompanied by any TSR
data applicable to them. When forwarded with no time delay, the TSR data could be copied verbatim (following
the rules for generating packets with TSR given in <xref target="construct"/>).</t>
        <t>When such RRs are cached and later resent, they would also be accompanied by their TSR data. The mDNS cache service
would need to record the time at which they were received. When retransmitting such cached data, the cache
service would need to adjust the time offset in the TSR option, increasing it by the subtracting the time
at which the cached RRs were received from the current time, and then increasing the offset in the applicable
TSR option by that amount, up to the limit of 7 days.</t>
        <t>The use of such caches and forwarders is <bcp14>NOT RECOMMENDED</bcp14>. We mention the use of TSR for such use cases because
it can mitigate some of the failure modes of such caches and forwarders. However, the use of Discovery Proxy
<xref target="RFC8766"/> in such instances is preferred: as the size of the network covered by such caching and forwarding
services increases, the amount of mDNS traffic they create increases, and this is often addressed by limiting which
services are available for discovery. Discovery Proxy uses unicast DNS, and therefore does not suffer from
these limitations.</t>
      </section>
    </section>
    <section anchor="registrant-api-considerations">
      <name>Registrant API considerations</name>
      <t>When a registrant registers a service at its mDNS registrar and requests the use of a time of receipt, the registrant <bcp14>MUST</bcp14> also specify when it
received the original registration. In order to support this, the API is required not only to allow the registrant to specify
that TSR conflict resolution is wanted, but also to provide a way for the registrant to specify an absolute time at
which the original registration was received, and the key checksum used to identify the entity that's actually authoritative
for the data.</t>
      <t>This is important, for example, in the case of SRP Replication <xref target="I-D.ietf-dnssd-srp-replication"/>, where an
SRP registrar may receive a registration from a peer during startup synchronization. This registration will have
occurred at some significant amount of time in the past, and so it would be incorrect for the mDNS registrar receiving
the registration to use the time that the registrant registers the service as the time of receipt.</t>
      <section anchor="removing-data-that-is-still-valid">
        <name>Removing data that is still valid</name>
        <t>In some cases, a proxy may need to stop being a proxy, but may be proxying RRs that are also being proxied by one or
more other proxies. In this case, if the proxy sends a "goodbye" announcement for such RRs, they will be removed
from the caches of mDNS registrars that receive such announcements.</t>
        <t>To prevent this, an mDNS registrar implementation that implements TSR <bcp14>MUST</bcp14> provide a way for an mDNS registrant to indicate
that such data is being withdrawn from publication by that registrant, but is still valid. When the registrant indicates that
this is the case, the mDNS registrar <bcp14>MUST NOT</bcp14> send goodbye announcements for such data.</t>
      </section>
      <section anchor="primarysecondary-indication">
        <name>Primary/Secondary indication</name>
        <t>When more than one proxy is authoritative for a particular RR, this can generate excessive answer traffic, and also
redundant goodbye announcements. mDNS registrar implementations that support TSR <bcp14>MUST</bcp14> provide a way for a new proxy mDNS
registrant to indicate that it is primary or secondary. When an RR registered by a secondary proxy is later removed, the
mDNS registrant <bcp14>MUST NOT</bcp14> send a goodbye packet for that RR.</t>
        <t>Similarly, when an RR is registered by a registrant that indicates that it is secondary, the mDNS registrar <bcp14>MUST NOT</bcp14>
respond to the initial mDNS query for that RR. Only if a second mDNS query retransmission is received within 5 seconds
of the initial query reception, should it respond.</t>
        <t>Note that any change of indication from primary to secondary, or vice versa, while an mDNS registrant already has
records registered on the mDNS registrar is out of scope of this specification and an API to indicate such changes
is not required on the mDNS registrar.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The TSR option is an optimization: it ameliorates an edge case for mDNS proxies. A malicious host on the same link could
use the TSR option to win conflict resolution processes. However, because TSR is only used by proxies, this technique
will not work for normal mDNS service registrations: in that case, normal mDNS conflict resolution is done, and the
attacker gains no benefit from using TSR.</t>
      <t>Whether or not an mDNS registration has a recorded time of receipt, an attacker can deny service by announcing its
own conflicting data and then answering the subsequent probe as described in <xref section="9" sectionFormat="of" target="RFC6762"/>.
Because it does not include a TSR option in its authority section, it can win the simultaneous conflict resolution
process that follows its bogus announcement.</t>
      <t>So the TSR-based conflict resolution process creates no new vulnerability. Addressing the existing vulnerability is
out of scope for this document. Protocols that rely on mDNS <bcp14>MUST NOT</bcp14> assume that mDNS service is secure or
private. If security (authentication, authorization and/or secrecy) are needed, these must be provided at the
application layer, or by using DNSSEC rather than mDNS for service discovery.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>IANA is requested to allocate a new OPT RR option code from the DNS EDNS0 Option Codes (OPT) registry for the 'Time Since
Received' Option. The Name shall be 'mDNS-TSR'. The value shall be allocated by IANA. The meaning shall be
'Multicast DNS Time Since Received". Reference shall refer to this document, once published.  IANA shall determine the registration date.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC1034">
          <front>
            <title>Domain names - concepts and facilities</title>
            <author fullname="P. Mockapetris" initials="P." surname="Mockapetris"/>
            <date month="November" year="1987"/>
            <abstract>
              <t>This RFC is the revised basic definition of The Domain Name System. It obsoletes RFC-882. This memo describes the domain style names and their used for host address look up and electronic mail forwarding. It discusses the clients and servers in the domain name system and the protocol used between them.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="13"/>
          <seriesInfo name="RFC" value="1034"/>
          <seriesInfo name="DOI" value="10.17487/RFC1034"/>
        </reference>
        <reference anchor="RFC6762" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6762.xml">
          <front>
            <title>Multicast DNS</title>
            <author fullname="S. Cheshire" initials="S." surname="Cheshire"/>
            <author fullname="M. Krochmal" initials="M." surname="Krochmal"/>
            <date month="February" year="2013"/>
            <abstract>
              <t>As networked devices become smaller, more portable, and more ubiquitous, the ability to operate with less configured infrastructure is increasingly important. In particular, the ability to look up DNS resource record data types (including, but not limited to, host names) in the absence of a conventional managed DNS server is useful.</t>
              <t>Multicast DNS (mDNS) provides the ability to perform DNS-like operations on the local link in the absence of any conventional Unicast DNS server. In addition, Multicast DNS designates a portion of the DNS namespace to be free for local use, without the need to pay any annual fee, and without the need to set up delegations or otherwise configure a conventional DNS server to answer for those names.</t>
              <t>The primary benefits of Multicast DNS names are that (i) they require little or no administration or configuration to set them up, (ii) they work when no infrastructure is present, and (iii) they work during infrastructure failures.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6762"/>
          <seriesInfo name="DOI" value="10.17487/RFC6762"/>
        </reference>
        <reference anchor="RFC6891">
          <front>
            <title>Extension Mechanisms for DNS (EDNS(0))</title>
            <author fullname="J. Damas" initials="J." surname="Damas"/>
            <author fullname="M. Graff" initials="M." surname="Graff"/>
            <author fullname="P. Vixie" initials="P." surname="Vixie"/>
            <date month="April" year="2013"/>
            <abstract>
              <t>The Domain Name System's wire protocol includes a number of fixed fields whose range has been or soon will be exhausted and does not allow requestors to advertise their capabilities to responders. This document describes backward-compatible mechanisms for allowing the protocol to grow.</t>
              <t>This document updates the Extension Mechanisms for DNS (EDNS(0)) specification (and obsoletes RFC 2671) based on feedback from deployment experience in several implementations. It also obsoletes RFC 2673 ("Binary Labels in the Domain Name System") and adds considerations on the use of extended labels in the DNS.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="75"/>
          <seriesInfo name="RFC" value="6891"/>
          <seriesInfo name="DOI" value="10.17487/RFC6891"/>
        </reference>
        <reference anchor="RFC8766" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8766.xml">
          <front>
            <title>Discovery Proxy for Multicast DNS-Based Service Discovery</title>
            <author fullname="S. Cheshire" initials="S." surname="Cheshire"/>
            <date month="June" year="2020"/>
            <abstract>
              <t>This document specifies a network proxy that uses Multicast DNS to automatically populate the wide-area unicast Domain Name System namespace with records describing devices and services found on the local link.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8766"/>
          <seriesInfo name="DOI" value="10.17487/RFC8766"/>
        </reference>
        <reference anchor="RFC9665" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9665.xml">
          <front>
            <title>Service Registration Protocol for DNS-Based Service Discovery</title>
            <author fullname="T. Lemon" initials="T." surname="Lemon"/>
            <author fullname="S. Cheshire" initials="S." surname="Cheshire"/>
            <date month="June" year="2025"/>
            <abstract>
              <t>The Service Registration Protocol (SRP) for DNS-based Service Discovery (DNS-SD) uses the standard DNS Update mechanism to enable DNS-SD using only unicast packets. This makes it possible to deploy DNS-SD without multicast, which greatly improves scalability and improves performance on networks where multicast service is not an optimal choice, particularly IEEE 802.11 (Wi-Fi) and IEEE 802.15.4 networks. DNS-SD Service registration uses public keys and SIG(0) to allow services to defend their registrations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9665"/>
          <seriesInfo name="DOI" value="10.17487/RFC9665"/>
        </reference>
        <reference anchor="RFC2119" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
          <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" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
          <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.ietf-dnssd-advertising-proxy">
          <front>
            <title>Advertising Proxy for DNS-SD Service Registration Protocol</title>
            <author fullname="Stuart Cheshire" initials="S." surname="Cheshire">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Ted Lemon" initials="T." surname="Lemon">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Esko Dijk" initials="E." surname="Dijk">
              <organization>IoTconsultancy.nl</organization>
            </author>
            <date day="2" month="July" year="2026"/>
            <abstract>
              <t>   An Advertising Proxy advertises the contents of a DNS zone, for
   example maintained using the DNS-SD Service Registration Protocol
   (SRP), using multicast DNS.  This allows legacy clients to discover
   services registered with SRP using multicast DNS.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-dnssd-advertising-proxy-05"/>
        </reference>
        <reference anchor="I-D.ietf-dnssd-srp-replication">
          <front>
            <title>Automatic Replication of DNS-SD Service Registration Protocol Zones</title>
            <author fullname="Ted Lemon" initials="T." surname="Lemon">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Abtin Keshavarzian" initials="A." surname="Keshavarzian">
              <organization>Google</organization>
            </author>
            <author fullname="Jonathan Hui" initials="J." surname="Hui">
              <organization>Google</organization>
            </author>
            <date day="4" month="March" year="2024"/>
            <abstract>
              <t>   This document describes a protocol that can be used for ad-hoc
   replication of a DNS zone by multiple servers where a single primary
   DNS authoritative server is not available and the use of stable
   storage is not desirable.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-dnssd-srp-replication-02"/>
        </reference>
      </references>
    </references>
    <?line 731?>

<section anchor="dupasexample">
      <name>Duplicate Answer Suppression Example</name>
      <t>As described in <xref target="dupans"/>, it is possible that two proxies may respond to an mDNS query with answers to the same question,
where the data for a particular owner name in both answers is authoritative and unique, but where the TSR time in the
earlier message is earlier than the TSR time in the later message. In this case, we will see the data from the earlier
message added and then removed, followed by the data in the later message being added. Consider the following example
using Apple's mDNSResponder implementation.</t>
      <ol spacing="normal" type="1"><li>
          <t>mDNS requester A sends a multicast query for AAAA records on the name "example.local"</t>
        </li>
        <li>
          <t>mDNS registrar for proxy B sends a multicast response of 2001:db8:0:42::1 with TSR time T</t>
        </li>
        <li>
          <t>mDNS registrar for proxy C sends a multicast response of 2001:db8:0:17::1 with TSR time T+300</t>
        </li>
      </ol>
      <t>Note that TSR times are absolute times, but these are represented in the mDNS message as relative times, so for example
"TSR time T+300" when sent at time T+400 would be represented in the mDNS message as a time offset of 100 seconds, and
if the message in (2) were sent at nearly the same time, it would have a time offset of about 400 seconds.</t>
      <t>In between (2) and (3) we would expect mDNS Requester A to see a callback to its DNSServiceQueryRecord call, providing a
AAAA record of 2001:db8:0:42::1 with the kDNSServiceFlagsAdd bit set and the kDNSServiceFlagsMoreComing bit clear.</t>
      <t>After (3) we would expect mDNS Requester A to see two callbacks to its DNSServiceQueryRecord call. The first would provide
a AAAA record of 2001:db8:0:42::1 with the kDNSServiceFlagsAdd clear and the kDNSServiceFlagsMoreComing bit set. The
second would provide a AAAA record of 2001:db8:0:17::1 with the kDNSServiceFlagsAdd bit set and the kDNSServiceFlagsMoreComing
bit clear.</t>
      <t>Note that we would not normally see the reverse sequence:</t>
      <ol spacing="normal" type="1"><li>
          <t>mDNS requester A sends a multicast query for AAAA records on the name "example.local"</t>
        </li>
        <li>
          <t>mDNS registrar for proxy C sends a multicast response of 2001:db8:0:17::1 with TSR time T+300</t>
        </li>
        <li>
          <t>mDNS registrar for proxy B sends a multicast response of 2001:db8:0:42::1 with TSR time T</t>
        </li>
      </ol>
      <t>This is because in this case we would expect known answer suppression to result in the mDNS registrar for proxy B suppressing
its response. However, it is possible that B might not see the response from C. In that situation, A would receive both
responses, but since the TSR time on the second response is earlier than the TSR time on the first response, we would see
only one callback, providing an AAAA record of 2001:db8:0:17::1 with the kDNSServiceFlagsAdd bit set and the kDNSServiceFlagsMoreComing
bit clear.</t>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge reviewers and contributors.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA8V963LcSHbm/3wKLPsHyXaxdGmNupvrsYctqqcZbokaktpe
h+1woKpQJIZVQA2AIlUja8Ov4X/7LPsofpI99zwJgJTaMxHuCHvEqkIi8+TJ
c/3OyaOjo9CV3ao4zvbebFddOc/bLjt9e5nN62q5Kudd1hRtvdp2ZV1l27as
rrPupsiuynWRXZbVvMguinlR3hWL7ODq8uIwe40P1xv8/V7IZ7OmuIOx4Sv/
Tbasm2wNf++Fed4V13WzO87abhHCop5X+Rqms2jyZXdUFt3yaFG17eKoa5uj
p9+Edjtbl20Lg3S7Dfzu7PXVj1n2VZav2hpeVFaLYlPA/6u6vUm2VyzKrm7K
fIV/nJ38AP8Db947u7j6cS9U2/WsaI7DAqZwHGDBbVG12/Y465ptEWDa34S8
KfLjrKy6cF83t9dNvd3A1HA+4bbYwWeL45Ad0VLwf2GZ+D8jtMOPX8uv8H/u
imoLL80yGfOX38O/eUW/wJuQzr/Hb+DTdV6u5KW/Q3pM6+YaPs6b+c1xdtN1
m/b4yRP8EX4COzHVHz3BD57Mmvq+LZ7Q80/whWV3s53JgEf310/GKA2/WwFV
2i6+AaiUd00+vy2a+AbYric33Xo1PkjIt91N3SCJYMAsW25XK97dK+CXn4s1
0gX+g5HyqvxzjoQ6zk42m1WRnVXzKX1Z8PrXxWpVV79bbq+3xXRer+m7tmuK
AuZ4XhXy2Lu8uc1+yXf09bzsgK9ebTdF05VVzZ/VC3j/q3xVAg9WZZ59/5un
z17IV9uqQ058X5UdTPCyQxJk9TI7WRcNHI0wXMjr9rbOTss/3o4s5Ky+QqaC
Y5VX8920Wvn1FPDgdAEP/q6su5Gf8dzfwwLnN106vbcFHMFmlVeLNoSqbtbw
vjtiposfXz17+s0L+efLb18+139+9/0z+ed33758Kf/8/uXL3xyHUFZLP8jZ
0enUbWS+uEPy4dE/2jT1h93Ib9pmc9QUG+B5XnoI4ejoKMtnLXJMF8LVTdlm
wCzbNRzMrN0U83JZAm3zrCruR2XNGtYNtGzXJCvgyEzoH9u2gOOYgZiCp++B
DAXJI51kQeOXbZgVeIRwvmWxmGRNjiSDn+ZV/O0iW5RA3m61m2TF9HqK46mQ
y2FS61lZwY/g3UeXp5mjA427y2ADssuLd6EprktcaDPNTmg9XtLhuoslDQRv
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
CnPFAAA=

-->

</rfc>
