Ted Lemon wrote:
i took the words "at or below" to mean "in-bailiwick". caches that are
not organized as tree-like data structures still have to be able to find
the closest encloser, which means they do know ancestor/descendent
relationships, even if the data structure itself is otherwise flatishly
hashlike.
The most straightforward way to implement this is to say
"FOO.BAR.COM"'s closest encloser is BAR.COM, and then look BAR.COM up
in the cache. Which is fine when you _need_ to do that. It's not fine
to do it on every query even when it otherwise would not have been
necessary (which would be the vast majority of cases). But to
implement this algorithm you need to start at the room, so first look
at ".", then at "COM", then at "BAR.COM". That's three hash lookups
if there's a cached NXDOMAIN, and four if there isn't. Blech.
Ted, I think you're reading it wrong. The implementation doesn't matter
at all. As Co-Chair Woolf kindly and classily 2x4'd me last year, an RFC
should be of the form "if you want to do X, here's a way to do it
interoperably."
This specification should express the basic idea that after an NXDOMAIN
has been received from an authority server for name X, then the receiver
of that NXDOMAIN is allowed to (note: "allowed to"; this is optional,
and is just an optimization) treat it as also applying to any name that
is in-bailiwick for X. (Sometimes that will be expressed as "at or below
X" or "a subdomain of X".)
If an implementation doesn't perform this optimization, then for names
below X, it will forward queries to an authority, who WILL answer with
NXDOMAIN unless the name-below-X has actually been created in the time
since the NXDOMAIN for X itself was received.
Like all other forms of negative caching, this is just a speedup, and if
a cache is implemented in a way that makes "is there a negative cache
element for whose owner name this qname is in-bailiwick?" too expensive,
then that negative caching implementation will probably not perform this
optimization.
There is a specification clarification here: QUERY for an empty
non-terminal name must yield response RCODE=0 ANCOUNT=0 even for
QTYPE=255. I've always interpreted RFC 1034+1035 that way but not every
implementer did. This clarification is nec'y for the optimization being
described, since otherwise an empty non-terminal could hide all of its
subdomains from implementations of the optimization under discussion.
--
P Vixie
_______________________________________________
DNSOP mailing list
DNSOP@ietf.org
https://www.ietf.org/mailman/listinfo/dnsop