Brian,
Thanks for the interesting idea. Apologies for the rambling response below.
On 02/07/2020 19.16, Brian Dickson wrote:
On Thu, Jul 2, 2020 at 9:14 AM Paul Hoffman <paul.hoff...@icann.org
<mailto:paul.hoff...@icann.org>> wrote:
The interpretation of whether a partial RRset is allowed by
1035/2181 made by JohnL, PaulV, and MukundS are all plausible and
conflicting. RFC 1035 and RFC 2181 are unclear about whether an
RRset that is required in a reply can be partial.
draft-ietf-dnsop-glue-is-not-optional as it stands is probably not
the best place to update the understanding of the standards-level
relationship between partial RRsets, the TC bit, and what parts of a
response are required. Doing so is adventurous, time-consuming, and
will almost certainly cause multiple current implementations to be
out of compliance.
It is probably still worth doing, albeit carefully. A bad outcome
would be finishing the document due to exhaustion instead of consensus.
I agree with Paul H in this regard.
Here's how I see it: the update to 1035 is necessary, but not sufficient
(probably).
Note that 1035 itself predates EDNS, so advice on TC alone is good, but
for the population of DNS implementations doing EDNS, perhaps we could
take advantage of its existence?
There are a whole bunch of unused bits in the core element of the OPT RR
(the place where the DO bit exists). That would be an excellent (IMHO)
place to signal the situation here (partial glue truncation).
Such a bit would hopefully disambiguate the cases where TC=1 is set,
allowing for graceful handling (try to use the available glue, prepare
for the failure case and retry over TCP if it does fail).
Thoughts?
I guess a resolver can infer that it has a full set of glue if there are
A and AAAA records for every NS, otherwise the glue _might_ be
truncated. This is kind of suckful because many servers (most?) don't
have IPv6, and some (I run a few, .biz used to have one) don't have IPv4.
Anyway the basic approach of a resolver would be:
1. If I get back a response that has what appears to be a full set of
glue (A and AAAA for every in-bailiwick NS) then I don't have to worry
about missing glue.
2. If I get back a response that might be missing glue and there is an
EDNS option "I support glue TC" that is not set, then I don't have to
worry about missing glue.
3. If I get back a response that might be missing glue and there is an
EDNS option "I support glue TC" that is set, then:
3.a. I can optionally try the servers that are in the glue that I did
get first.
3.b. At some point I can try to get more glue using TCP.
4. If I get back a response that might be missing glue and there is no
"I support glue TC" EDNS option, then you are basically in the same
place as #3, except you might be wasting that TCP re-try because it
might not return additional glue.
Because it is so hard for a server to know if there is actually glue
missing, I think there _might_ be benefit. It could _potentially_ save a
lot of wasted queries, mostly looking for non-existent AAAA records.
OTOH since this is about an EDNS option, it seems simpler to just
realize that you've got at least 1280 bytes in the reply and that it
will mostly not need truncation. It takes a lot of NS/A/AAAA records to
fill up even a 1280 byte response (the root servers have 13 NS with A &
AAAA for each, and is between 811 and 1103 bytes, depending on who you
ask and which of their servers instances you get at any given time):
a -> 811
b -> 839
c -> 839
d -> 811
e -> 811
f -> 839
g -> 839
h -> 811
i -> 851
j -> 811
k -> 823
l -> 1003
m -> 811
I suppose it is possible that someone uses something like:
foo.example NS really-long-name.foo.example
NS different-but-still-long.foo.example
NS filling-up-dat-packet-tho.foo.example
.
.
.
And exceeds the space for glue.
Or maybe dnscurve:
bar.example NS
uz5bcx1nh80x1r17q653jf3guywz7cmyh5jv0qjz0unm56lq7rpj8l.bar.example
NS
kxmvjtvks4rr576myswk7c6hdyedarthudoorz673crgktq5n6nmaq.bar.example
NS
tn2krco3pfhogkgwgswvrvp6dkuawmezyplgnu4f7wlajqv2gppp5t.bar.example
.
.
.
Even in those cases you need a lot of NS though.
Anyway, I guess this is basically all to convince myself that:
1. We probably don't need an EDNS option to signal just glue truncation
2. We should probably set TC when we do truncate glue
Cheers,
--
Shane
_______________________________________________
DNSOP mailing list
DNSOP@ietf.org
https://www.ietf.org/mailman/listinfo/dnsop