rfc9665v2.txt | rfc9665.txt | |||
---|---|---|---|---|
skipping to change at line 250 ¶ | skipping to change at line 250 ¶ | |||
information. Once published, these services can be readily | information. Once published, these services can be readily | |||
discovered by DNS-SD clients using standard DNS lookups. | discovered by DNS-SD clients using standard DNS lookups. | |||
Section 10 of the DNS-SD specification [RFC6763] briefly discusses | Section 10 of the DNS-SD specification [RFC6763] briefly discusses | |||
ways that servers can advertise the services they provide in the DNS | ways that servers can advertise the services they provide in the DNS | |||
namespace. In the case of mDNS, it allows servers to advertise their | namespace. In the case of mDNS, it allows servers to advertise their | |||
services on the local link, using names in the "local." namespace, | services on the local link, using names in the "local." namespace, | |||
which makes their services directly discoverable by peers attached to | which makes their services directly discoverable by peers attached to | |||
that same local link. | that same local link. | |||
DNS-SD [RFC6763] also allows clients to discover services using the | DNS-SD [RFC6763] also allows clients to discover services by using | |||
DNS protocol over traditional unicast [RFC1035]. This can be done by | the DNS protocol over traditional unicast [RFC1035]. This can be | |||
having a system administrator manually configure service information | done by having a system administrator manually configure service | |||
in the DNS; however, manually populating DNS authoritative server | information in the DNS; however, manually populating DNS | |||
databases is costly and potentially error-prone and requires a | authoritative server databases is costly and potentially error-prone | |||
knowledgeable network administrator. Consequently, although all | and requires a knowledgeable network administrator. Consequently, | |||
DNS-SD client implementations of which we are aware support DNS-SD | although all DNS-SD client implementations of which we are aware | |||
using DNS queries, in practice it is used much less frequently than | support DNS-SD using DNS queries, in practice it is used much less | |||
mDNS. | frequently than mDNS. | |||
The Discovery Proxy [RFC8766] provides one way to automatically | The Discovery Proxy [RFC8766] provides one way to automatically | |||
populate the DNS namespace but is only appropriate on networks where | populate the DNS namespace but is only appropriate on networks where | |||
services are easily advertised using mDNS. The present document | services are easily advertised using mDNS. The present document | |||
describes a solution more suitable for networks where multicast is | describes a solution more suitable for networks where multicast is | |||
inefficient, or where sleepy devices are common, by supporting the | inefficient, or where sleepy devices are common, by supporting the | |||
use of unicast for both the offering of and the discovery of | use of unicast for both the offering of and the discovery of | |||
services. | services. | |||
2. Conventions and Terminology Used in This Document | 2. Conventions and Terminology Used in This Document | |||
skipping to change at line 410 ¶ | skipping to change at line 410 ¶ | |||
instructions. These instructions are made up of DNS Update Resource | instructions. These instructions are made up of DNS Update Resource | |||
Records (RRs) that are either adds or deletes. The types of records | Records (RRs) that are either adds or deletes. The types of records | |||
that are added, updated, and removed in each of these instructions, | that are added, updated, and removed in each of these instructions, | |||
as well as the constraints that apply to them, are described in | as well as the constraints that apply to them, are described in | |||
Section 3.3. An SRP Update is a DNS Update message [RFC2136] that is | Section 3.3. An SRP Update is a DNS Update message [RFC2136] that is | |||
constructed so as to meet the constraints described in that section. | constructed so as to meet the constraints described in that section. | |||
The following is a brief overview of what is included in a typical | The following is a brief overview of what is included in a typical | |||
SRP Update: | SRP Update: | |||
* Service Discovery PTR RR(s) for service(s), which map from a | * Service Discovery PTR RR(s) for service(s), which map from a | |||
generic service type (or subtype(s)) to a specific Service | generic service type (or subtype(s)) to a specific service | |||
Instance Name [RFC6763]. | instance name [RFC6763]. | |||
* For each Service Instance Name, an SRV RR, one or more TXT RRs, | * For each service instance name, an SRV RR, one or more TXT RRs, | |||
and a KEY RR. Although, in principle, DNS-SD Service Description | and a KEY RR. Although, in principle, DNS-SD Service Description | |||
records can include other record types with the same Service | records can include other record types with the same service | |||
Instance Name, in practice, they rarely do. Currently, SRP does | instance name, in practice, they rarely do. Currently, SRP does | |||
not permit other record types. The KEY RR is used to support FCFS | not permit other record types. The KEY RR is used to support FCFS | |||
Naming and has no specific meaning for DNS-SD lookups. SRV | Naming and has no specific meaning for DNS-SD lookups. SRV | |||
records for all services described in an SRP Update point to the | records for all services described in an SRP Update point to the | |||
same hostname. | same hostname. | |||
* There is always exactly one hostname in a single SRP Update. A | * There is always exactly one hostname in a single SRP Update. A | |||
DNS Update containing more than one hostname is not an SRP Update. | DNS Update containing more than one hostname is not an SRP Update. | |||
The hostname has one or more address RRs (AAAA or A) and a KEY RR | The hostname has one or more address RRs (AAAA or A) and a KEY RR | |||
(used for FCFS Naming). Depending on the use case, an SRP | (used for FCFS Naming). Depending on the use case, an SRP | |||
requester may be required to suppress some addresses that would | requester may be required to suppress some addresses that would | |||
skipping to change at line 442 ¶ | skipping to change at line 442 ¶ | |||
The DNS-Based Service Discovery specification [RFC6763] describes the | The DNS-Based Service Discovery specification [RFC6763] describes the | |||
details of what each of these RR types mean, with the exception of | details of what each of these RR types mean, with the exception of | |||
the KEY RR, which was defined in the specification for how to store | the KEY RR, which was defined in the specification for how to store | |||
Diffie-Hellman Keys in the DNS [RFC2539]. These specifications | Diffie-Hellman Keys in the DNS [RFC2539]. These specifications | |||
should be considered the definitive sources for information about | should be considered the definitive sources for information about | |||
what to publish; the reason for summarizing this here is to provide | what to publish; the reason for summarizing this here is to provide | |||
the reader with enough information about what will be published that | the reader with enough information about what will be published that | |||
the service registration process can be understood at a high level | the service registration process can be understood at a high level | |||
without first learning the full details of DNS-SD. Also, the | without first learning the full details of DNS-SD. Also, the | |||
"Service Instance Name" is an important aspect of FCFS Naming, which | "service instance name" is an important aspect of FCFS Naming, which | |||
we describe later on in this document. | we describe later on in this document. | |||
3.2.2. Where to Publish It | 3.2.2. Where to Publish It | |||
Multicast DNS (mDNS) uses a single namespace, "local.". Subdomains | Multicast DNS (mDNS) uses a single namespace, "local.". Subdomains | |||
of "local." are specific to the local link on which they are | of "local." are specific to the local link on which they are | |||
advertised. This convenience is not available for DNS-SD using the | advertised. This convenience is not available for DNS-SD using the | |||
DNS protocol: Services must exist in some specific DNS namespace that | DNS protocol: Services must exist in some specific DNS namespace that | |||
is chosen either by the network operator or automatically. | is chosen either by the network operator or automatically. | |||
skipping to change at line 734 ¶ | skipping to change at line 734 ¶ | |||
In some use cases, a requester may need to remove a specific service | In some use cases, a requester may need to remove a specific service | |||
without removing its other services. For example, a device may shut | without removing its other services. For example, a device may shut | |||
down its remote screen access (_rfb._tcp) service while retaining its | down its remote screen access (_rfb._tcp) service while retaining its | |||
command-line login (_ssh._tcp) service. This can be accomplished in | command-line login (_ssh._tcp) service. This can be accomplished in | |||
one of two ways: | one of two ways: | |||
1. To simply remove a specific service, the requester sends a valid | 1. To simply remove a specific service, the requester sends a valid | |||
SRP Update with a Service Description Instruction | SRP Update with a Service Description Instruction | |||
(Section 3.3.1.2) containing a single "Delete All RRsets From A | (Section 3.3.1.2) containing a single "Delete All RRsets From A | |||
Name" update to the Service Instance Name. The SRP Update SHOULD | Name" update to the service instance name. The SRP Update SHOULD | |||
include Service Discovery Instructions (Section 3.3.1.1) | include Service Discovery Instructions (Section 3.3.1.1) | |||
consisting of "Delete An RR From An RRset" updates [RFC2136] that | consisting of "Delete An RR From An RRset" updates [RFC2136] that | |||
delete any Service Discovery PTR records whose target is the | delete any Service Discovery PTR records whose target is the | |||
Service Instance Name. However, even in the absence of such | service instance name. However, even in the absence of such | |||
Service Discovery Instructions, the SRP registrar MUST delete any | Service Discovery Instructions, the SRP registrar MUST delete any | |||
Service Discovery PTR records that point to the deleted Service | Service Discovery PTR records that point to the deleted service | |||
Instance Name. | instance name. | |||
2. When deleting one service instance while simultaneously creating | 2. When deleting one service instance while simultaneously creating | |||
a new service instance with a different service instance name, an | a new service instance with a different service instance name, an | |||
alternative is to perform both operations using a single SRP | alternative is to perform both operations using a single SRP | |||
Update. In this case, the old service is deleted as in the first | Update. In this case, the old service is deleted as in the first | |||
alternative. The new service is added, just as it would be in an | alternative. The new service is added, just as it would be in an | |||
update that wasn't deleting the old service. Because both the | update that wasn't deleting the old service. Because both the | |||
removal of the old service and the add of the new service | removal of the old service and the add of the new service | |||
consists of a valid Service Discovery Instruction and a valid | consists of a valid Service Discovery Instruction and a valid | |||
Service Description Instruction, the update as a whole is a valid | Service Description Instruction, the update as a whole is a valid | |||
SRP Update and will result in the old service being removed and | SRP Update and will result in the old service being removed and | |||
the new one added; or, to put it differently, the SRP Update will | the new one added; or, to put it differently, the SRP Update will | |||
result in the old service being replaced by the new service. | result in the old service being replaced by the new service. | |||
It is perhaps worth noting that if a service is being updated without | It is perhaps worth noting that if a service is being updated without | |||
the Service Instance Name changing (for example, when only the target | the service instance name changing (for example, when only the target | |||
port in the SRV record is being updated), then that SRP Update will | port in the SRV record is being updated), then that SRP Update will | |||
look very much like the second alternative above. The PTR record in | look very much like the second alternative above. The PTR record in | |||
the Service Discovery Instruction will be the same for both the | the Service Discovery Instruction will be the same for both the | |||
"Delete An RR From An RRset" update and the "Add To An RRset" update | "Delete An RR From An RRset" update and the "Add To An RRset" update | |||
[RFC2136]. Since the removal of the old service and the addition of | [RFC2136]. Since the removal of the old service and the addition of | |||
the new service are both valid SRP Update operations, the combined | the new service are both valid SRP Update operations, the combined | |||
operation is a valid SRP Update operation. The SRP registrar does | operation is a valid SRP Update operation. The SRP registrar does | |||
not need to include code to recognize this special case and does not | not need to include code to recognize this special case and does not | |||
need to take any special actions to handle it correctly. | need to take any special actions to handle it correctly. | |||
skipping to change at line 812 ¶ | skipping to change at line 812 ¶ | |||
is specified for the SRP Update. | is specified for the SRP Update. | |||
3.3.1.1. Service Discovery Instruction | 3.3.1.1. Service Discovery Instruction | |||
An instruction is a Service Discovery Instruction if it: | An instruction is a Service Discovery Instruction if it: | |||
* consists of exactly one "Add To An RRSet" or exactly one "Delete | * consists of exactly one "Add To An RRSet" or exactly one "Delete | |||
An RR From An RRSet" RR update (Section 2.5 of the DNS Update | An RR From An RRSet" RR update (Section 2.5 of the DNS Update | |||
specification [RFC2136]), | specification [RFC2136]), | |||
* which updates a PTR RR, | * which updates a PTR RR, | |||
* the target of which is a Service Instance Name | * the target of which is a service instance name | |||
* for which name a Service Description Instruction is present in the | * for which name a Service Description Instruction is present in the | |||
SRP Update, and: | SRP Update, and: | |||
- if the Service Discovery Instruction is an "Add To An RRSet" | - if the Service Discovery Instruction is an "Add To An RRSet" | |||
instruction, that Service Description Instruction contains a | instruction, that Service Description Instruction contains a | |||
"Delete All RRsets From A Name" instruction for that Service | "Delete All RRsets From A Name" instruction for that service | |||
Instance Name followed by "Add To An RRset" instructions for | instance name followed by "Add To An RRset" instructions for | |||
the SRV and TXT records describing that service; or | the SRV and TXT records describing that service; or | |||
- if the Service Discovery Instruction is a "Delete An RR From An | - if the Service Discovery Instruction is a "Delete An RR From An | |||
RRSet" instruction, that Service Description Instruction | RRSet" instruction, that Service Description Instruction | |||
contains a "Delete All RRsets From A Name" instruction for that | contains a "Delete All RRsets From A Name" instruction for that | |||
Service Instance Name with no following "Add To An RRset" | service instance name with no following "Add To An RRset" | |||
instructions for the SRV and TXT records describing that | instructions for the SRV and TXT records describing that | |||
service. | service. | |||
Note that there can be more than one Service Discovery Instruction | Note that there can be more than one Service Discovery Instruction | |||
for the same service name (the owner name of the Service Discovery | for the same service name (the owner name of the Service Discovery | |||
PTR record) if the SRP requester is advertising more than one | PTR record) if the SRP requester is advertising more than one | |||
instance of the same service type or is changing the target of a PTR | instance of the same service type or is changing the target of a PTR | |||
RR. When subtypes are being used (Section 7.1 of the DNS-SD | RR. When subtypes are being used (Section 7.1 of the DNS-SD | |||
specification [RFC6763]), each subtype is a separate Service | specification [RFC6763]), each subtype is a separate Service | |||
Discovery Instruction. For each such PTR RR add or delete, the above | Discovery Instruction. For each such PTR RR add or delete, the above | |||
constraints must be met. | constraints must be met. | |||
3.3.1.2. Service Description Instruction | 3.3.1.2. Service Description Instruction | |||
An instruction is a Service Description Instruction if, for the given | An instruction is a Service Description Instruction if, for the given | |||
Service Instance Name, all of the following are true: | service instance name, all of the following are true: | |||
* It contains exactly one "Delete All RRsets From A Name" update for | * It contains exactly one "Delete All RRsets From A Name" update for | |||
the Service Instance Name (Section 2.5.3 of the DNS Update | the service instance name (Section 2.5.3 of the DNS Update | |||
specification [RFC2136]). | specification [RFC2136]). | |||
* It contains zero or one "Add To An RRset" KEY RRs that, if | * It contains zero or one "Add To An RRset" KEY RRs that, if | |||
present, contains the public key corresponding to the private key | present, contains the public key corresponding to the private key | |||
that was used to sign the message (if present, the KEY RR MUST | that was used to sign the message (if present, the KEY RR MUST | |||
match the KEY RR given in the Host Description). | match the KEY RR given in the Host Description). | |||
* It contains zero or one "Add To An RRset" SRV RR. | * It contains zero or one "Add To An RRset" SRV RR. | |||
* If an "Add To An RRSet" update for an SRV RR is present, there | * If an "Add To An RRSet" update for an SRV RR is present, there | |||
MUST be at least one "Add To An RRset" update for the | MUST be at least one "Add To An RRset" update for the | |||
corresponding TXT RR, and the target of the SRV RR MUST be the | corresponding TXT RR, and the target of the SRV RR MUST be the | |||
hostname given in the Host Description Instruction in the SRP | hostname given in the Host Description Instruction in the SRP | |||
skipping to change at line 930 ¶ | skipping to change at line 930 ¶ | |||
SRP update, it MAY process the update as normal DNS Update [RFC2136], | SRP update, it MAY process the update as normal DNS Update [RFC2136], | |||
including access control checks and constraint checks, if supported. | including access control checks and constraint checks, if supported. | |||
Otherwise, the SRP registrar MUST reject the DNS Update with the | Otherwise, the SRP registrar MUST reject the DNS Update with the | |||
Refused RCODE. | Refused RCODE. | |||
If the definitions of each of these instructions are followed | If the definitions of each of these instructions are followed | |||
carefully and the update requirements are validated correctly, many | carefully and the update requirements are validated correctly, many | |||
DNS Update messages that look very much like SRP Updates nevertheless | DNS Update messages that look very much like SRP Updates nevertheless | |||
will fail to validate. For example, a DNS update that contains an | will fail to validate. For example, a DNS update that contains an | |||
"Add To An RRset" instruction for a Service Name and an "Add to an | "Add To An RRset" instruction for a Service Name and an "Add to an | |||
RRset" instruction for a Service Instance Name where the PTR record | RRset" instruction for a service instance name where the PTR record | |||
added to the Service Name does not reference the Service Instance | added to the Service Name does not reference the service instance | |||
Name is not a valid SRP Update but may be a valid DNS Update. | name is not a valid SRP Update but may be a valid DNS Update. | |||
3.3.3. FCFS Name and Signature Validation | 3.3.3. FCFS Name and Signature Validation | |||
Assuming that the SRP registrar has confirmed that a DNS Update | Assuming that the SRP registrar has confirmed that a DNS Update | |||
message is a valid SRP Update (Section 3.3.2), it then checks that | message is a valid SRP Update (Section 3.3.2), it then checks that | |||
the name in the Host Description Instruction exists in the zone being | the name in the Host Description Instruction exists in the zone being | |||
updated. If so, then the registrar checks to see if the KEY record | updated. If so, then the registrar checks to see if the KEY record | |||
on that name is the same as the KEY record in the Host Description | on that name is the same as the KEY record in the Host Description | |||
Instruction. The registrar performs the same check for the KEY | Instruction. The registrar performs the same check for the KEY | |||
records in any Service Description Instructions. For KEY records | records in any Service Description Instructions. For KEY records | |||
skipping to change at line 1019 ¶ | skipping to change at line 1019 ¶ | |||
attempt to validate the RRs in the response, it might reject such a | attempt to validate the RRs in the response, it might reject such a | |||
response, since it would contain RRs but probably not a set of RRs | response, since it would contain RRs but probably not a set of RRs | |||
identical to what was sent in the SRP Update. | identical to what was sent in the SRP Update. | |||
3.3.6. Optional Behavior | 3.3.6. Optional Behavior | |||
The SRP registrar MAY add a Reverse Mapping PTR record (described for | The SRP registrar MAY add a Reverse Mapping PTR record (described for | |||
IPv4 in Section 3.5 of [RFC1035] of the DNS specification [RFC1035] | IPv4 in Section 3.5 of [RFC1035] of the DNS specification [RFC1035] | |||
and for IPv6 in Section 2.5 of [RFC3596] of the later document | and for IPv6 in Section 2.5 of [RFC3596] of the later document | |||
updating DNS for IPv6 [RFC3596]) that corresponds to the Host | updating DNS for IPv6 [RFC3596]) that corresponds to the Host | |||
Description. This is optional because the reverse mapping PTR record | Description. This is optional: The reverse mapping PTR record serves | |||
serves no essential protocol function, but it may be useful for | no essential protocol function. One reason to provide reverse | |||
debugging, for example, in annotating network packet traces or logs. | mappings is that they can be used to annotate logs and network packet | |||
In order for the registrar to do a reverse mapping update, it must be | traces. In order for the registrar to do a reverse mapping update, | |||
authoritative for the zone that would need to be updated or have | it must be authoritative for the zone that would need to be updated | |||
credentials to do the update. The SRP requester MAY also do a | or have credentials to do the update. The SRP requester MAY also do | |||
reverse mapping update if it has credentials to do so. | a reverse mapping update if it has credentials to do so. | |||
The SRP registrar MAY apply additional criteria when accepting | The SRP registrar MAY apply additional criteria when accepting | |||
updates. In some networks, it may be possible to do out-of-band | updates. In some networks, it may be possible to do out-of-band | |||
registration of keys and only accept updates from preregistered keys. | registration of keys and only accept updates from preregistered keys. | |||
In this case, an update for a key that has not been registered SHOULD | In this case, an update for a key that has not been registered SHOULD | |||
be rejected with the Refused RCODE. When use of managed keys is | be rejected with the Refused RCODE. When use of managed keys is | |||
desired, there are at least two benefits to doing this in conjunction | desired, there are at least two benefits to doing this in conjunction | |||
with SRP rather than simply performing traditional DNS Updates using | with SRP rather than simply performing traditional DNS Updates using | |||
SIG(0) keys: | SIG(0) keys: | |||
skipping to change at line 1052 ¶ | skipping to change at line 1052 ¶ | |||
Note that the semantics of using SRP in this way are different from | Note that the semantics of using SRP in this way are different from | |||
the semantics of typical implementations of DNS Update. The KEY used | the semantics of typical implementations of DNS Update. The KEY used | |||
to sign the SRP Update only allows the SRP requester to update | to sign the SRP Update only allows the SRP requester to update | |||
records that refer to its Host Description. Implementations of a | records that refer to its Host Description. Implementations of a | |||
traditional DNS Update [RFC2136] do not normally provide a way to | traditional DNS Update [RFC2136] do not normally provide a way to | |||
enforce a constraint of this type. | enforce a constraint of this type. | |||
The SRP registrar could also have a dictionary of names or name | The SRP registrar could also have a dictionary of names or name | |||
patterns that are not permitted. If such a list is used, updates for | patterns that are not permitted. If such a list is used, updates for | |||
Service Instance Names that match entries in the dictionary are | service instance names that match entries in the dictionary are | |||
rejected with a Refused RCODE. | rejected with a Refused RCODE. | |||
4. TTL Consistency | 4. TTL Consistency | |||
All RRs within an RRset are required to have the same TTL (required | All RRs within an RRset are required to have the same TTL (required | |||
by Section 5.2 of the DNS Clarifications document [RFC2181]). In | by Section 5.2 of the DNS Clarifications document [RFC2181]). In | |||
order to avoid inconsistencies, SRP places restrictions on TTLs sent | order to avoid inconsistencies, SRP places restrictions on TTLs sent | |||
by requesters and requires that SRP registrars enforce consistency. | by requesters and requires that SRP registrars enforce consistency. | |||
Requesters sending SRP Updates MUST use consistent TTLs in all RRs | Requesters sending SRP Updates MUST use consistent TTLs in all RRs | |||
skipping to change at line 1487 ¶ | skipping to change at line 1487 ¶ | |||
with the description "DNS-SD Service Registration Protocol Special- | with the description "DNS-SD Service Registration Protocol Special- | |||
Use Domain" and lists this document as the reference. | Use Domain" and lists this document as the reference. | |||
10.3. Subdomains of "service.arpa." | 10.3. Subdomains of "service.arpa." | |||
This document only makes use of the "default.service.arpa." subdomain | This document only makes use of the "default.service.arpa." subdomain | |||
of "service.arpa." Other subdomains are reserved for future use by | of "service.arpa." Other subdomains are reserved for future use by | |||
DNS-SD or related work. IANA has created the "service.arpa. | DNS-SD or related work. IANA has created the "service.arpa. | |||
Subdomain" registry [SUB]. The IETF has change control for this | Subdomain" registry [SUB]. The IETF has change control for this | |||
registry. New entries may be added either as a result of Standards | registry. New entries may be added either as a result of Standards | |||
Action or with IESG Approval, provided that a specification exists | Action (Section 4.9 of [RFC8126]) or with IESG Approval (Section 4.10 | |||
[RFC8126]. | of [RFC8126]), provided that the values and their meanings are | |||
documented in a permanent and readily available public specification, | ||||
in sufficient detail so that interoperability between independent | ||||
implementations is possible. | ||||
IANA has grouped the "service.arpa. Subdomain" registry with the | IANA has grouped the "service.arpa. Subdomain" registry with the | |||
"Locally-Served DNS Zones" group. The registry is a table with three | "Locally-Served DNS Zones" group. The registry is a table with three | |||
columns: the subdomain name (expressed as a fully qualified domain | columns: the subdomain name (expressed as a fully qualified domain | |||
name), a brief description of how it is used, and a reference to the | name), a brief description of how it is used, and a reference to the | |||
document that describes its use in detail. | document that describes its use in detail. | |||
This initial contents of this registry are as follows: | This initial contents of this registry are as follows: | |||
+=======================+=================+===========+ | +=======================+=================+===========+ | |||
End of changes. 18 change blocks. | ||||
39 lines changed or deleted | 42 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |