<?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.35 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-dnssd-tsr-02" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.33.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-02"/>
    <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="April" day="22"/>
    <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 when a set of
resource records were last updated and includes a key checksum to identify the owner of these records.</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 the time at which the TSR option is being
generated and the time of receipt of resource records for that owner name.</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 that include a TSR option</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-for-which-tsr-data-has-been-proposed">
        <name>Probing resource records on names for which TSR data has been proposed</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"/>. Handling of
responses is described in <xref target="procmes"/>.</t>
      </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
and queue them for later processing.</t>
      </section>
      <section anchor="procmes">
        <name>Processing mDNS messages thay 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 <bcp14>MUST NOT</bcp14> re-probe those RRs. 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="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 that contains known answers on an
owner name for which any RR is being probed to which a TSR option 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 of the 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. When constructing a TSR option, the registrar computes the difference between the current time and the time of
receipt, 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 '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>
            <date day="4" month="March" year="2024"/>
            <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-04"/>
        </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 699?>

<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:
H4sIAAAAAAAAA8V963IbSXbm/3yKWvYPkm0QLak1feF67GFL6mmFW5chqe11
2A5HASiQNQSqMHUhhZa14dfwv32WfRQ/yZ57nqwqUhrPRFgRMy0BqKzMkyfP
9TsnT05OQld2m+I0O3jVb7pymbdd9vz1Rbasq/WmXHZZU7T1pu/Kusr6tqyu
su66yC7LbZFdlNWyyM6LZVHeFqvs6PLi/Dh7gQ/XO/z9QcgXi6a4hbHhK/9N
tq6bbAv/PgjLvCuu6mZ/mrXdKoRVvazyLUxn1eTr7qQsuvXJqmrb1UnXNicb
+HHbhbZfbMu2hYG6/Q5++/LF5Y9Z9kWWb9oaXlZWq2JXwP9V3cEsOyhWZVc3
Zb7Bf7w8+wH+A28/eHl++eNBqPrtomhOwwpGPg2w6Lao2r49zbqmLwJM/euQ
N0V+mpVVF+7q5uaqqfsdTA/nFG6KPXy2Og3ZCS0H/wtLxf9M0A8/fiG/wv/c
FlUPL80yGfOX38PfeUW/wJuQ1r/Hb+DTbV5u5KW/Q5rM6+YKPs6b5fVpdt11
u/b0q6/wR/gJ7MZcf/QVfvDVoqnv2uIrev4rfGHZXfcLGfDk7uqrKWrD75je
8Q1Apbxr8uVN0cQ3wJZ9dd1tN9ODhLzvrusGSQQDZtm632x4hy+BZ34utkgX
+AMj5VX5a46EOs3OdrtNkb2slnP6suD1b4vNpq5+t+6v+mK+rLf0Xds1RQFz
fFMV8tjbvLnJfsn39PWy7IC3nvW7ounKqubP6hW8/1m+KYEPqzLPvv/No8dP
5au+6pAb31VlBxO86JAEWb3OzrZFA8cjjBfyor2ps+flH28mFvKyvkSmgqOV
V8v9vNr49RTw4HwFD/6urLuJn/Hc38ECl9ddOr3XBRzDZpNXqzaEqm628L5b
YqbzH589fvT1U/nrN99+80T/+t33j+Wv3337zTfy1++/+eY3pyGU1doP8vLk
+dxtZL66RfLh8T/ZNfX7/cRv2mZ30hQ74Hleegjh5OQkyxctckwXwuV12WbA
LP0WDmbW7opluS6BtnlWFXeT8mYL6wZatluSF3BkZvSXvi3gOGYgquDpOyBD
QTJJJ1nQ+GUbFgUeIZxvWaxmWZMjyeCneRV/u8pWJZC32+xnWTG/muN4Kuhy
mNR2UVbwI3j3ycXzzNGBxt1nsAHZxfnb0BRXJS60mWdntB4v7XDdxZoGgrd3
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

-->

</rfc>
