On Tue, May 11, 2021 at 11:12 AM Ben Schwartz <bemasc=
40google....@dmarc.ietf.org> wrote:

>
>
> On Tue, May 11, 2021 at 10:32 AM Joe Abley <jab...@hopcount.ca> wrote:
>
>> On 11 May 2021, at 12:32, Ben Schwartz <bem...@google.com> wrote:
>>
>> > On Tue, May 11, 2021 at 9:20 AM Joe Abley <jab...@hopcount.ca> wrote:
>> >> On 11 May 2021, at 12:08, Ben Schwartz <bemasc=
>> 40google....@dmarc.ietf.org> wrote:
>> >> ..
>> >>> * It saves at least 11 bytes of overhead per parameter by avoiding
>> repetition of
>> >>>   the name, type, class, TTL, and inter-pair binding ID.
>> >
>> > ... but it inflates response volume in the case where a separate
>> SvcParams RRSet is able to be cached significantly longer than the SVCB
>> RRSet.
>> >
>> > It sounds like you're proposing a design in which the information in
>> one SVCB record is not just spread across multiple records in an RRSet, but
>> actually across multiple RRSets.
>>
>> Yes, that's what I tried to sketch out before. The SvcParams in an SVCB
>> RR becomes a pointer to a second RRSet with a different RRType. So the
>> SvcParams information is spread across multiple records in a a different
>> RRSet from the SVCB RRRSet. If it's still not clear what I mean, I can try
>> again.
>>
>> Note that I'm not proposing a change to the spec, just illustrating that
>> different design choices were possible that avoid the need for delimiters
>> or escaping.
>>
>
>>
> This design choice, like many aspects of SVCB, was constrained by latency
> and efficiency considerations.
>

I have a question (or maybe several) about the latency issue(s)... see
below for context and the question(s).


>
>
>> What are the concrete syntactical structure and the abstract conceptual
>> structures? If those are terms of art I apologise; I'm not familiar with
>> them.
>>
>
> The concrete wire-format syntax is an octet sequence containing a
> TargetName and some SvcParam key-value pairs.
>
> The abstract structure is a "binding" comprising a TargetName and a
> key-value map that is associated with that TargetName.
>

Also related to the latency question(s) is (are) the questions about
TargetName and associated values.... see below...


>
> What are you comparing the client implementation to in your final comment?
>> What other design option was found to be more complex to implement on the
>> client side?
>>
>
> I was comparing it to designs where the TargetName and params are
> separated into different RRs, or mixed into an RRSet with other bindings.
> In such designs, the client must perform additional work to fetch,
> associate, or reconstruct these different components that are encoded or
> delivered separately but are only usable as a unit.
>

Here's where the related questions begin (and also include the client
activities for fetching data, but also relate to publication of data being
fetched....)

I think there are design details (or maybe architecture is a better term)
on the components of the binding, and the origin of those components, that
is worth exploring in greater detail.

I'll start with what I think are the relevant entities/parties, and how
those relate to the HTTPS parts, and the DNS parts that support those (and
for which the SVCB and HTTPS records are intending to improve).

I believe the highest-level entities would be:

   - One (or more) Web hosting and/or CDN providers, which include some DNS
   components specific to the domain (the domain which is the owner name of
   the HTTPS record)
   - A DNS operator (either DNS hosting provider, or possibly the domain
   owner doing their own DNS)
   - From the perspective of a client, a DNS resolver (which may or may not
   have been upgraded to do anything special for handing of HTTPS or SVCB)
   - The client itself (web browser which is doing the appropriate queries
   including HTTPS or SVCB)

If I understand things correctly, each Web hosting or CDN provider would
supply the appropriate (corresponding) SvcParameters that are associated
with the particular TargetName to the domain owner.
Another way to put it is, the SvcParameters are actually bound to the
TargetName, not the owner name of the HTTPS record, and the Web/CDN
provider is (semantically speaking, not DNS-speaking) "authoritative" for
those parameters.

Is this accurate?

So, the binding (of TargetName to SvcParams) is the thing that optimizes
the HTTPS connections (e.g. H2/H3 etc),
And, the placement of the binding parameters at the DNS record that
references the TargetName, is an optimization to reduce DNS lookup latency.

In the current design, the domain owner needs to, in effect, do a
copy/paste from each Web/CDN providers' information into the domain owner's
own DNS zone, including the TargetName and SvcParameters.
The domain owner then would assign Priority values to each such record,
thus prioritizing and/or balancing records provided by multiple Web/CDN
providers.

There is a potential for errors to be produced when the domain owner does
this copy/paste.
And the issue of managing any expansion of key,value pairs as different
records in the RRset is the result of the copy/paste mechanism (i.e.
copy/paste without having to understand or adjust any DNS record elements),
and the potential for conflicting values from combining the records from
multiple Web/CDN providers.

I believe each TargetName still needs to be queried for A/AAAA records,
although the "hints" from the SVCB/HTTPS records are (I believe) intended
to allow the client to at least attempt to avoid the need for that query.

The following would be very different from the existing SVCB/HTTPS proposal:

   - Publish SvcParameters as some sort of RRtype at (or below) each
   corresponding TargetName in the Web/CDN provider's own DNS zone
   - Or, have each Web/CDN provider publish a set of common parameters at
   some namespace within that Web/CDN providers DNS space, and have the
   SvcParams added to the HTTPS (or SVCB) record, by name rather than
   including the values.

Either method (plus optional address hints) could reduce the complexity of
what the domain owner would need to include, simplifying the parsing and
allowing validation of names used (by doing DNS checks in addition to
syntax checks).

If the parameter sets were managed by the Web/CDN provider, and given a
distinct DNS name (and referenced by name rather than value), the
scalability of the bindings would likely improve, e.g. reference via CNAMEs
(with the CNAME targets being long-lived and cacheable).
This would also reduce or eliminate errors, by only having the SvcParams
published by the party that is actually authoritative for them (i.e. the
Web/CDN provider).

The DNS latency issue is quite possibly a separate issue, depending on what
the respective RTTs are for these different DNS relationships:

   - Client - Resolver (RTTc)
   - Resolver - Web/CDN DNS auth server (RTTw)
   - Resolver - Domain Owner DNS auth server (RTTd)

I.e. if RTTc is small (local resolver near the client), and the cache is
populated, I think the multiple-lookup thing becomes a non-issue.
And, conversely, if RTTc is large, I think the wrong problem is being
solved via adding SvcParams to the record in the domain owners' zone.
I'm not sure if the latency changes much (or at all) if the resolver is
HTTPS/SVCB-aware...

These are observations and suggestions, hopefully helpful in keeping the
conversation moving in a productive direction.

Brian
_______________________________________________
DNSOP mailing list
DNSOP@ietf.org
https://www.ietf.org/mailman/listinfo/dnsop

Reply via email to