Christian M. Amsüss
2018-02-01 15:50:44 UTC
Hello Carsten, Peter, and CoRE in general,
don't change[TimBL98].
There is no requirement in RD that only cool URIs can be registered.
More seriously, this is one of the cases where wisdom from the Browser
Web enters the discussion here that may not be applicable. We already
ran into that issue with coap+tcp://, and it seems we will run into it
again and again.
Leaving aside details of whether it's IP addresses or also host names
that have become volatile, I think that this piece of browser wisdom is
very applicable here.
Link targets, form targets, or dynamic links are all expressed as URIs.
We'll need to pack all that is required for any client to dereference it
into the URI. Otherwise, all those link targets would need sideband
information a la "The binding is to coap://[2001:db8::1]/foo, but
actually I mean whichever device is currently registered at the
example.com RD with the endpoint name node1", negating the purpose of
single-string identifiers.
The topic is as important now for the Web of Things as it was in 1999
for the browser web, maybe even more so, for back then, a user could act
even on a bad ("Sorry, the page is gone, we've moved the content")
redirect.
(and AFAICT the only such areas are IPvFuture and fake TLDs like .onion
or .arpa), then lets pick it in this URI scheme -- or do it the next
scheme.
As I see it, we're mixing two different kinds of discovery we're trying
to have the RD do:
1. Finding resources out of a pool
This may involve user interaction and is similar to the DNS-SD process
of listing the instances of a particular service in a domain.
The queries used for this look like
/rd-lookup/res?if=core.s&unit=degC and are expected to return more
than one result.
2. Getting the ephemeral address of a previous result.
Right now, if an endpoint registers without a stable host name (which
it, as you pointed out, might not even have), the lookup 1 returns an
ephemeral "uncool" URI. It will be suitable for immediate consumption,
but adding it to a batch, to a dynlink or just storing it for further
use (browsers would call this bookmarking) is bound to fail sooner or
later.
If RD is to play a role in the latter, I'm all in for that -- but there
should still be a stable URI result somewhere inbetween.
Should a plain RD assist with that? Can it, at all? Should it do so
unconditionally or only when the endpoint asks for cooler URIs?
(RD-DNS-SD might provide some answers by serving a (any) stable name
derived from the d=/ep= parameters pointing to the ephemeral address;
that's not really the DNS-SD part that helps here but just plain DNS, if
that is a suitable tool for this at all.)
To compare this to the DNS-SD processes: There, PTR lookups give the
client an instance name in something like 1, which it can then store
internally. It can not usualy use that information in a link, though.
(I've seen printer-internal URI schemes backslash-escape instance names
for use inside the authority component, but nothing official).
Step 2 is then following SRV, possibly TXT and A/AAAA records.
brand-dependant, when we expect devices to interoperate on an Internet
scale (ie. without necessarily sharing an RD)?
It just shifts it from the individual device to which
RD is used (and thus trusted with identifying endpoints).
Say we extend the CoAP URI schemes so that
coap://example.com(d=my-domain,ep=node1)/sensor/temp would be resolved
as "Find an RD at example.com, query for an endpoint with those d and ep
parameters, and use its address". This still needs DNS as initial
rendevouz point and just adds a step.
Granted, we could just expect every network to provide an RD that hooks
into a global RD network, but that'd go further than even the wild
speculation in core-rd-replication.
We could also expect devices that communicate to share an RD, but while
that migh work in an enterprise environment, it brings the danger of
vendor silo-ification to consumers.
the open questions.
The topic we're talking about here is much more a general RD, possibly
also CoRE or T2TRG issue.
(Changing the recipients list to reflect that).
How about "it should keep the RD updated, and ask the RD to hand out
something more persistent instead"? (Or can the RD infer that request
from the regiatration?)
Best regards
Christian
-IP address
An IP address may change, but the RD deals with URIs, and cool URIsdon't change[TimBL98].
More seriously, this is one of the cases where wisdom from the Browser
Web enters the discussion here that may not be applicable. We already
ran into that issue with coap+tcp://, and it seems we will run into it
again and again.
that have become volatile, I think that this piece of browser wisdom is
very applicable here.
Link targets, form targets, or dynamic links are all expressed as URIs.
We'll need to pack all that is required for any client to dereference it
into the URI. Otherwise, all those link targets would need sideband
information a la "The binding is to coap://[2001:db8::1]/foo, but
actually I mean whichever device is currently registered at the
example.com RD with the endpoint name node1", negating the purpose of
single-string identifiers.
The topic is as important now for the Web of Things as it was in 1999
for the browser web, maybe even more so, for back then, a user could act
even on a bad ("Sorry, the page is gone, we've moved the content")
redirect.
Well, we have never defined Uri-Host to carry a DNS name, but here it
indeed seems logical to use that.
If we find a spot in the literal space allowed by URIs but not by DNSindeed seems logical to use that.
(and AFAICT the only such areas are IPvFuture and fake TLDs like .onion
or .arpa), then lets pick it in this URI scheme -- or do it the next
scheme.
As I see it, we're mixing two different kinds of discovery we're trying
to have the RD do:
1. Finding resources out of a pool
This may involve user interaction and is similar to the DNS-SD process
of listing the instances of a particular service in a domain.
The queries used for this look like
/rd-lookup/res?if=core.s&unit=degC and are expected to return more
than one result.
2. Getting the ephemeral address of a previous result.
Right now, if an endpoint registers without a stable host name (which
it, as you pointed out, might not even have), the lookup 1 returns an
ephemeral "uncool" URI. It will be suitable for immediate consumption,
but adding it to a batch, to a dynlink or just storing it for further
use (browsers would call this bookmarking) is bound to fail sooner or
later.
If RD is to play a role in the latter, I'm all in for that -- but there
should still be a stable URI result somewhere inbetween.
Should a plain RD assist with that? Can it, at all? Should it do so
unconditionally or only when the endpoint asks for cooler URIs?
(RD-DNS-SD might provide some answers by serving a (any) stable name
derived from the d=/ep= parameters pointing to the ephemeral address;
that's not really the DNS-SD part that helps here but just plain DNS, if
that is a suitable tool for this at all.)
To compare this to the DNS-SD processes: There, PTR lookups give the
client an instance name in something like 1, which it can then store
internally. It can not usualy use that information in a link, though.
(I've seen printer-internal URI schemes backslash-escape instance names
for use inside the authority component, but nothing official).
Step 2 is then following SRV, possibly TXT and A/AAAA records.
Instead, IoT devices use the RD to rendezvous. They donât have
anything but their IP addresses yet, so renumbering events *will*
change those. But that is not a problem, as RD data can be updated
easily.
How does this solve the problem of DNS names being unstable oranything but their IP addresses yet, so renumbering events *will*
change those. But that is not a problem, as RD data can be updated
easily.
brand-dependant, when we expect devices to interoperate on an Internet
scale (ie. without necessarily sharing an RD)?
It just shifts it from the individual device to which
RD is used (and thus trusted with identifying endpoints).
Say we extend the CoAP URI schemes so that
coap://example.com(d=my-domain,ep=node1)/sensor/temp would be resolved
as "Find an RD at example.com, query for an endpoint with those d and ep
parameters, and use its address". This still needs DNS as initial
rendevouz point and just adds a step.
Granted, we could just expect every network to provide an RD that hooks
into a global RD network, but that'd go further than even the wild
speculation in core-rd-replication.
We could also expect devices that communicate to share an RD, but while
that migh work in an enterprise environment, it brings the danger of
vendor silo-ification to consumers.
Actually, the main reason to pursue the RD-to-DNS-SD mapping is to
have an ordered way to export RD information over to the DNS, [...]
I think that RD-DNS-SD can already do that no matter how we decide inhave an ordered way to export RD information over to the DNS, [...]
the open questions.
The topic we're talking about here is much more a general RD, possibly
also CoRE or T2TRG issue.
(Changing the recipients list to reflect that).
If a device expects to have a longer life cycle than its assigned
address, IMO it should not register with an IP literal. (This is a
general RD topic, actually).
No, it should keep simply keep its RD info updated.address, IMO it should not register with an IP literal. (This is a
general RD topic, actually).
something more persistent instead"? (Or can the RD infer that request
from the regiatration?)
Best regards
Christian
--
To use raw power is to make yourself infinitely vulnerable to greater powers.
-- Bene Gesserit axiom
To use raw power is to make yourself infinitely vulnerable to greater powers.
-- Bene Gesserit axiom