Part of the problem is that we have one TTL value for both freshness
and don't use beyond.

This is fixable.  It is possible to specify two timer values.  It
does require adding signaling between recursive servers and
authoritative servers, on zone transfers and update requests.

You basically add a additional timer field to every record immediately
after the TTL field.  This is only returned if the client has
signalled support for the extended field, I suggest using the last
DNS header bit for this as you can determine how you will parse the
response base on whether the bit is set in the response or not.
This field is used to expire records from the cache and its value
is set to the TTL field if the server has learnt the record from
server that doesn't support the extension.

The existing TTL field is used for freshness checking.  When a query
comes in after that value has expired a freshness check is performed
similar to the existing prefetches that happen today.  A TTL of 1
is returned unless the original TTL was 0 in which case 0 is returned.

New client - new recursive server - new authservers

        example.com. 300 86400 IN A 1.2.3.4

                +300 seconds

        example.com. 1 86100 IN A 1.2.3.4
         (background query is in process)

Old client - new recursive server - new authservers

        example.com. 300 IN A 1.2.3.4

                +300 seconds

        example.com. 1 IN A 1.2.3.4
         (background query is in process)

New client - new recusive server - old auth servers

        example.com. 300 300 IN A 1.2.3.4

                +300 seconds
         (record has expired from cache,
          new query is performed)

        example.com. 300 300 IN A 1.2.3.4

For UPDATE a replacement opcode would be cleanest way to signal the
new format is being used.  NOTIMP should be returned by servers
that don't support the new opcode.

There will be a few broken servers that just echo back the new
header bit.

This way the authoritative servers still control how long records
are stored for.  Dead servers will get a little bit of traffic until
the the refresh completes.  If the authorative servers are under
attack the clients still see a answer.

The alternative is to perform the refresh query and if it fails to
complete within X milliseconds return the cached data rather than
returning the cached data and doing the refresh in the background.

Mark

-- 
Mark Andrews, ISC
1 Seymour St., Dundas Valley, NSW 2117, Australia
PHONE: +61 2 9871 4742                 INTERNET: ma...@isc.org

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

Reply via email to