Re: [dnssd] CoAP resource discovery and DNS-SD

Ted Lemon <mellon@fugue.com> Wed, 18 May 2022 00:01 UTC

Return-Path: <mellon@fugue.com>
X-Original-To: dnssd@ietfa.amsl.com
Delivered-To: dnssd@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id D6BD0C15E6E0 for <dnssd@ietfa.amsl.com>; Tue, 17 May 2022 17:01:25 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.894
X-Spam-Level:
X-Spam-Status: No, score=-1.894 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_BLOCKED=0.001, RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001, URIBL_DBL_BLOCKED_OPENDNS=0.001, URIBL_ZEN_BLOCKED_OPENDNS=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=fugue-com.20210112.gappssmtp.com
Received: from mail.ietf.org ([50.223.129.194]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 1K4IP1_7V5_K for <dnssd@ietfa.amsl.com>; Tue, 17 May 2022 17:01:22 -0700 (PDT)
Received: from mail-oi1-x231.google.com (mail-oi1-x231.google.com [IPv6:2607:f8b0:4864:20::231]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 1B8F0C157B5F for <dnssd@ietf.org>; Tue, 17 May 2022 17:01:21 -0700 (PDT)
Received: by mail-oi1-x231.google.com with SMTP id n24so775372oie.12 for <dnssd@ietf.org>; Tue, 17 May 2022 17:01:21 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fugue-com.20210112.gappssmtp.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=1QSIXTQM/lPSjeID6VZm7mhBkNyL6rOtfY1IsrmnC3k=; b=QQLOYd93sJ1EkfCbC0w1yTJ0Je/Csa5hLnq4LxVXRb2O1MbADugA2pnAtMquWMdW+g +xEbOdV4rHm1E195uw7dR50kL2/4uR18VgYhxahZC6U/Dv0Qsw5gQCc5KBsbLPPQaf6F kRzGToFYxbULbwaVTplRWNEkUrDxxSvSm73YvL9VU1fROS7NXuNFjsNk7lOMqQ1HUfaD XrX+W4BNTRHlto9zwgSVWFk8rr+MO3Eu8w4K4iZqkx39132TQBtvEwbRw7aaUFIY+y3R hOGTxjIOhhoQ+XXqUH9vyvDoxptOo3a9tsuPl/2bY/GfrdMjAyOk8ZpuA079IMupR2Ap 8oQg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=1QSIXTQM/lPSjeID6VZm7mhBkNyL6rOtfY1IsrmnC3k=; b=tnve5WZ1fjH1pkVuEojjqGZoARgQNcIv79Aku7e2YspKJys//emTdLuX2W3AY4ADXi HEpLEaYyJlNxOvGPzTDHqj3FKkPyYJbgZZxbwtPgyK2zbrLfnhAlCV923e27uq2m95IN rAWUsqjEb6c+7f6ErjgUnRpUXJ//uz9XiX0Mwq0HZ2nnFUWwfcxlwQW/n707HBtN1Os9 sHegVG/EG3WEy5DjcqP1JQaMaf/I0UVlotXcw330pFgJ/lxCAK+PwezOGbmQXn/cAq7Z CD8g8sbhw77DJMfwCBhExRUPIHxPuO+E+rdOjTHBe69WFURg1jybNXMYFuK+xMNQZwVq JmDA==
X-Gm-Message-State: AOAM530D37T4tcM8oq3S7WxzQSqO1G5pKsx3gIQTTVnccSJ3bklSoygY twZxTcJxOaIjLGdleiXswTE/vQkLUm/JXnFFD5OhNZ+mngyPOg==
X-Google-Smtp-Source: ABdhPJw7ZAFo2VBbRpgseLx7F2piVqS81pxec0pH6sxx2WyGBv/idvYYaItSTNRMcYsrzoxTlkdLz4ICWi4G8QGi/GA=
X-Received: by 2002:aca:f188:0:b0:326:160e:590a with SMTP id p130-20020acaf188000000b00326160e590amr11590962oih.209.1652832080714; Tue, 17 May 2022 17:01:20 -0700 (PDT)
MIME-Version: 1.0
References: <Yn7nnX096f0LdonI@faui48e.informatik.uni-erlangen.de> <CAPt1N1n7Pd7yZ1jzBGMWCv-Vkf1iT_nLPmHrNYvDkwVjE7QmhA@mail.gmail.com> <Yn7wWNAeLWz/qZlG@faui48e.informatik.uni-erlangen.de> <CAPt1N1mWerc9ddoeZJ6WcPck_w5xe_7fkWK7NVWbDGgzXwN+Xw@mail.gmail.com> <Yn+2Y78egBWD925Y@faui48e.informatik.uni-erlangen.de> <DU0P190MB197836BA08D266A927F3ADE4FDCF9@DU0P190MB1978.EURP190.PROD.OUTLOOK.COM> <DU0P190MB197822C80CCC94B45CD47448FDCE9@DU0P190MB1978.EURP190.PROD.OUTLOOK.COM> <YoQTgdRVv+DZfjF1@faui48e.informatik.uni-erlangen.de>
In-Reply-To: <YoQTgdRVv+DZfjF1@faui48e.informatik.uni-erlangen.de>
From: Ted Lemon <mellon@fugue.com>
Date: Tue, 17 May 2022 20:01:09 -0400
Message-ID: <CAPt1N1msNPCc8jSc70nMUQmRgvKSO7Dr1UCqbT4BMO+LVDuDvQ@mail.gmail.com>
To: Toerless Eckert <tte@cs.fau.de>
Cc: Esko Dijk <esko.dijk@iotconsultancy.nl>, "dnssd@ietf.org" <dnssd@ietf.org>
Content-Type: multipart/alternative; boundary="0000000000000b735205df3df5c2"
Archived-At: <https://mailarchive.ietf.org/arch/msg/dnssd/N2KCvZiufOkx8QhhacvVF4q9NQw>
Subject: Re: [dnssd] CoAP resource discovery and DNS-SD
X-BeenThere: dnssd@ietf.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: "Discussion of extensions to DNS-based service discovery for routed networks." <dnssd.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/dnssd>, <mailto:dnssd-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/dnssd/>
List-Post: <mailto:dnssd@ietf.org>
List-Help: <mailto:dnssd-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/dnssd>, <mailto:dnssd-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 18 May 2022 00:01:25 -0000

Bear in mind that with dns name compression, you don’t repeat any domain
name—you just store a pointer for each subsequent repetition of the same
terminal label sequence. So default.service.arpa is a little longer, but
doesn’t multiply.

On Tue, May 17, 2022 at 17:28 Toerless Eckert <tte@cs.fau.de> wrote:

> Thanks, Esko
>
> Actually a client would discover a new service instance with quering the
> PTR RR,
> so rfc6763 12.1. is relevant, but yes, it does  ask to include all
> dependent RRs.
> Here is what i think is the minimum generic case for a single service
> instance with one locator address.
>
> _service-name._udp.local                        PTR
>  service-instance-name._service-name._udp.local
>  service-instance-name._service-name._udp.local SRV   prio weight port
> service-instance-locator.local
>  service-instance-name._service-name._udp.local TXT   'key=value;...'
>  service-instance-locator.local                 AAAA  IPv6-addr
>
> I have not tried to figure out how many bits that would be, especially in
> comparison
> to coap/core-link encoding.
>
> Actually, when one uses only unicast DNS and SRP, i guess you wouldn't
> use .local, but .default.service.arpa, which would make all the messages
> somewhat bigger
> (thinking about how the ANIMA REST URLs where explicitly shortened, but
> then DNS
>  adds the overhead back ...). I wonder how much of those details are
> better defined
> in the ANIMA drafts so that we do ensure interoperability...
>
> Cheers
>     Toerless
>
> On Tue, May 17, 2022 at 04:08:48PM +0000, Esko Dijk wrote:
> > Toerless, there was also the below point in your mail:
> >
> > > In coap, like in GRASP, we can map all necessary service elements into
> > > a single message, so we know it is a single request/reply exchange
> >
> > As I understand, it can be the same for DNS-SD. A good implementation
> would return the SRV record for found services and also the associated AAAA
> records to have a single request/response. RFC 6763 12.2 defines this.
> > I would add to such behaviour that if the number of answers is high then
> the implementation can shorten the response by leaving out the AAAA
> records. Something that a DNS-SD server / SRP server suitable for mesh
> networks use could do.
> >
> > (Of course it has the downside that in any case a client still MUST be
> prepared for the case that it doesn't receive the AAAA records in the first
> response. So in that sense client complexity is a bit higher than for e.g.
> CoAP / GRASP(?) )
> >
> > Regards
> > Esko
> >
> > -----Original Message-----
> > From: Esko Dijk
> > Sent: Monday, May 16, 2022 09:59
> > To: Toerless Eckert <tte@cs.fau.de>; Ted Lemon <mellon@fugue.com>
> > Cc: dnssd@ietf.org
> > Subject: RE: [dnssd] CoAP resource discovery and DNS-SD
> >
> > Hello Toerless,
> >
> > Ted was referring to the Service Registration Protocol (SRP) for DNS-SD
> as defined by
> https://datatracker.ietf.org/doc/html/draft-ietf-dnssd-srp-13 .
> > This enables registration and discovery over generic services over
> unicast, similar to what a CoRE Resource Directory can do for CoAP
> resources.  A single request/reply exchange can be used to register a
> device's services.
> > Querying is the same as in unicast DNS-SD.
> >
> > For SRP you need of course a way to get an IP address of the / a SRP
> server before you can use SRP registration/querying. In OpenThread, this is
> done by e.g. including such address in mesh-network-wide  configuration
> data. So then all devices that may need this, have it.
> > See GetNextDnsSrpUnicastInfo()
> https://github.com/openthread/openthread/blob/main/src/core/thread/network_data_service.cpp#L262
> for details.
> >
> > There's also the possibility to include a more compact set of
> configuration data that enables a device (client) to reach an SRP server
> over an anycast address ; see e.g. FindPreferredDnsSrpAnycastInfo()
> https://github.com/openthread/openthread/blob/main/src/core/thread/network_data_service.cpp#L196
> .
> > Anycast reachability is useful for redundancy if multiple SRP servers
> are available and are kept synchronized (using e.g.
> https://datatracker.ietf.org/doc/html/draft-lemon-srp-replication-01).
> >
> > Some of the functions you mention may already be supported by the above
> approach. E.g. Thread defines mesh-local IPv6 addresses (described in the
> 'Thread Network Fundamentals' white paper) which would enable a device to
> advertise a particular service only in mesh scope, while other services
> could be advertised with greater scope by using a global or ULA IPv6
> address. And the proxy function you mention may not be needed if multiple
> synchronized SRP servers are used, or a single SRP server that serves all
> mesh networks plus all regular non-constrained networks in an installation
> site.
> > Note that proxying between mDNS devices and SRP-using devices is
> provided for (by
> https://datatracker.ietf.org/doc/html/draft-sctl-advertising-proxy and
> rfc8766). Such that on-mesh constrained devices don't have to use multicast
> / mDNS.
> >
> > Regards
> > Esko
> >
> >
> > -----Original Message-----
> > From: dnssd <dnssd-bounces@ietf.org> On Behalf Of Toerless Eckert
> > Sent: Saturday, May 14, 2022 16:02
> > To: Ted Lemon <mellon@fugue.com>
> > Cc: dnssd@ietf.org
> > Subject: Re: [dnssd] CoAP resource discovery and DNS-SD
> >
> >
> > To discover a service via mDNS is not not necessarily quite LLN friendly.
> >
> > You need to query/reply for all the RR involved in a service, which is
> > if i remember AAAA, SRV, PTR, TXT and maybe CNAME. Admittedly
> > i have not tried to work out how many bits this is, but there is
> > also the question of how many packets this will end up being in the
> > widey deployed implementations and who takes care of
> minimizing/optimizing
> > that. So there is a cost to this more comples layering. RRs, messages,
> packets.
> >
> > In coap, like in GRASP, we can map all necessary service elements into
> > a single message, so we know it is a single request/reply exchange.
> >
> > Yes, i would definitely prefer to minimize the amount of multicast,
> > especially given how those LLN can really only flood them across
> > the whole network, but both DNS and COAP could be on par in that
> > department.
> >
> > Due to the proprietary nature of Thread i have not been able to figure
> > out how it proposes to instantiate and discover the server instances
> > of DNS or COAP that should be used. But thatss also where another
> > complexity can come in:
> >
> >                                     coap/dns
> >                                     server
>  coap/dns
> >       client .... 802.15.4-net .... border-rtr .... ent-networks .....
> server
> >                                                        ...
> >                                                      service-server
> >
> > The server we may want to discover on the client may not necessarily be
> > connected to the 802.15.4 network, but the enterprise network behind it,
> > (most simple designs would hope/expect for the service we want to use to
> >  be running on the border-rtr).
> >
> > So, it seems to me i need some form of scoping of service/resource
> > request/replies from clients between those that should be only
> > resolved within the 802.15.4 network, and those that should resolve
> > (also) across the ent-network behind it. I am not quite sure how
> > to most easily do this, but off the top of my head it looks as
> > if i wanted some simple proxy function on the border router which
> > on a per-service/resource basis decides whether to forward the request
> > upstream to the coap/dns server in the enterprise network or not.
> > And with coap i can see how that proxy function is easily implemented,
> > and the concept of such a proxy is discussed in coap.
> >
> > Replicating that functionality in DNS would be quite more complex i fear.
> >
> > Cheers
> >     Toerless
> >
> > On Fri, May 13, 2022 at 08:01:37PM -0400, Ted Lemon wrote:
> > > The registry/mapping problem is where we fell down. Why are you trying
> to
> > > use Core for this anyway? DNS-SD works fine—that’s what we’re using for
> > > Thread, for example. You can just do a DNS UDP query or use DNS Push
> rather
> > > than using multicast if you use SRP to update the DNS server.
> > >
> > > On Fri, May 13, 2022 at 19:57 Toerless Eckert <tte@cs.fau.de> wrote:
> > >
> > > > Thanks, Ted
> > > >
> > > > Any pointer to Kerry's work in this regard ? I was looking through
> her
> > > > expired
> > > > draft, but i didn't see anything getting to that exact point
> > > > (draft-doi-core-parameter-option looks like related, but i can't
> really
> > > >  make heads or tails out of it).
> > > >
> > > > So lets say:
> > > >
> > > > REQ: GET /.well-known/core?rt=<resource>
> > > >
> > > >      RES: 2.05 Content
> > > >      Content-Format: 40
> > > >      Payload:
> > > >      </b>;rt=<resource>;p=<prio>;w=<weight>;proto=<string>,
> > > >      ...
> > > >
> > > > I am just defining in the spec for my resource that it has additional
> > > > option
> > > > link-target attributes. p= for a numeric priority value, w= for a
> numeric
> > > > weight attribute and proto= for a string enumerating protocol
> details.
> > > > And these are the same parameters as what i'd use for the same
> resource
> > > > (oops: service) when using DNS-SD.
> > > >
> > > > It seems as if rfc6690 didn't actually create a registry for those
> > > > link-targets
> > > > but simply created rt= and if= link-targets and just created a
> registry for
> > > > the values of rt= and if=. Which raises the question if i could
> simply
> > > > specify p/w/proto to be normative in the context of the specific
> resource,
> > > > and if not whether those addtiional link-targets would have to be
> > > > specified as
> > > > updated to rfc6690...
> > > >
> > > > Cheers
> > > >     Toerless
> > > >
> > > > On Fri, May 13, 2022 at 07:22:41PM -0400, Ted Lemon wrote:
> > > > > We were never able to figure that out either. The mapping from
> Core RD in
> > > > > particular to DNS-SD is something that the DNS-SD working group
> actually
> > > > > pursued for a while (Kerry Lynn worked on this pretty heavily for
> about a
> > > > > year).
> > > > >
> > > > > On Fri, May 13, 2022 at 7:20 PM Toerless Eckert <tte@cs.fau.de>
> wrote:
> > > > >
> > > > > > Dear CoAP WG
> > > > > >
> > > > > > I am trying to figure out how to use CoAP discovery as specified
> in
> > > > RFC7252
> > > > > > (and expanded in rfc6690 and rfc7390),  but i can not figure out
> how
> > > > > > one would encode basic parameters of a resource, such as those
> > > > supported
> > > > > > in DNS-SD, rfc6763:
> > > > > >
> > > > > > When discovering more than one instance of a resource, such as
> > > > possible,
> > > > > > when using multicast discovery as on rfc7252, clients will have
> to
> > > > figure
> > > > > > out,
> > > > > > which instance of a resource to select. DNS-SSD has priority and
> weight
> > > > > > parameters associated with each instance. How would one
> describe/encode
> > > > > > such instance and weight ?
> > > > > >
> > > > > > When discovering one or more instance via DNS-SD, the discoering
> client
> > > > > > may further select the best instance in terms of
> interoperability,
> > > > > > functionality
> > > > > > and performance based on one or more key=value property pairs
> > > > describing
> > > > > > the instance. How is this done in CoAP ?
> > > > > >
> > > > > > Thanks a lot!
> > > > > >
> > > > > > Toerless
> > > > > >
> > > > > > _______________________________________________
> > > > > > dnssd mailing list
> > > > > > dnssd@ietf.org
> > > > > > https://www.ietf.org/mailman/listinfo/dnssd
> > > > > >
> > > >
> > > > --
> > > > ---
> > > > tte@cs.fau.de
> > > >
> >
> > --
> > ---
> > tte@cs.fau.de
> >
> > _______________________________________________
> > dnssd mailing list
> > dnssd@ietf.org
> > https://www.ietf.org/mailman/listinfo/dnssd
>
> --
> ---
> tte@cs.fau.de
>