DNS-Caching
bezeichnet im
Domain Name System
(DNS) die vorubergehende Zwischenspeicherung von Ergebnissen einer
Namensauflosung
in einem lokalen
Cache
. Folgende identische DNS-Anfragen konnen aus dem Cache bedient werden ohne den
Nameserver
erneut anfragen zu mussen, wodurch die Performance erhoht wird. DNS-Caching stellt einen Kompromiss zwischen dem Aufwand der Namensauflosung, der Geschwindigkeit von Aktualisierungen von
Resource Records
und der Genauigkeit von Antworten aus dem Cache dar.
[1]
DNS-Caching verkurzt den Zeitaufwand von identischen Namensauflosungen, da eine Anfrage aus dem Cache schneller beantwortet werden kann, als erneut beim zustandigen Nameserver anzufragen. Daruber hinaus werden die Nameserver entlastet, da sie insgesamt weniger Anfragen beantworten mussen. DNS-Caching wird in
Resolvern
verwendet, also den Komponenten, die fur die DNS-Namensauflosung zustandig sind.
[2]
Es gibt jedoch auch einfache Stub-Resolver, die zugunsten einer Komplexitatsreduktion auf einen Cache verzichten. Teilweise fuhren Anwendungen ebenfalls ein DNS-Caching durch, beispielsweise der Webbrowser
Chromium
.
[3]
Die Zeitdauer, fur die ein
Resource Record
im Cache hochstens zwischengespeichert werden darf, wird durch dessen
TTL
-Wert (
englisch
time to live
;
deutsch
Lebenszeit
) bestimmt. Festgelegt wird der TTL-Wert durch den autoritativen Nameserver, der fur die
Zone
zustandig ist, in dem der Resource Record enthalten ist. Der TTL-Wert ist ein 32 Bit
Integer
und gibt die Zeitdauer in Sekunden an,
[4]
wodurch sehr große Werte (mehrere Jahrzehnte) theoretisch moglich sind. Ublich sind Werte im Bereich von einigen Minuten bis hin zu wenigen Tagen. Der Wert ?
0
“ ist moglich und bedeutet, das ein Resource Record nicht im Cache zwischengespeichert werden darf.
[4]
Der Inhalt des Caches befindet sich ublicherweise nur im fluchtigen Speicher und uberdauert nicht den Neustart der Komponente. Die Moglichkeit eine Zeitdauer von mehreren Wochen oder noch langer einzustellen hat daher kaum praktische Relevanz.
Studien zeigen, dass die TTL-Werte im Internet oft ignoriert werden.
[5]
[6]
Einige Resolver wie zum Beispiel
Unbound
ermoglichen es, sowohl den maximalen TTL-Wert als auch die minimalen TTL-Wert zu begrenzen.
[7]
Neben dem Caching von Resource Records ist es auch moglich, negative Antworten zwischenzuspeichern, also das Ergebnis, dass der angefragte
Domainname
oder Resource Record nicht existiert. Dies wird als
negatives Caching
bezeichnet und dient wie positives Caching der Einsparung von Ressourcen.
[8]
Da einem nicht vorhandenen Domainnamen oder Resource Record kein TTL-Wert zugeordnet ist, muss die maximale Cache-Zeitdauer auf andere Weise ermittelt werden. Hierzu wird das Feld ?MINIMUM“ aus dem
SOA Resource Record
verwendet, weswegen jede negative Antwort immer den SOA Resource Record enthalt. Ursprunglich hatte das ?MINIMUM“-Feld eine andere Bedeutung, die jedoch fur das negative Caching geandert wurde.
[8]
Negatives Caching ist optional auch in Situationen moglich, wo die Namensauflosung aufgrund von Fehlkonfiguration oder Nameserver-Ausfall fehlschlagt. In solchen Situationen ist eine Caching-Zeit von bis zu 5 Minuten erlaubt.
[8]
DNSSEC
fuhrt einen kryptographischen Nachweis der Nichtexistenz von Domainnamen und Resource Records ein. Dies erfolgt durch einen
NSEC
oder
NSEC3 Resource Record
, was die Nichtexistenz nicht nur eines einzelnen Domainnamens, sondern eines ganzen Bereichs zwischen zwei existierenden Domainnamen nachweist. Aus dem Bereich des zwischengespeicherten NSEC oder NSEC3 Resource Record kann ein Resolver daher negative Antworten erzeugen, selbst wenn die Anfrage vorher noch nicht gestellt wurde. Dies wird als
aggressives Caching
bezeichnet und wurde im Jahr 2017 standardisiert. Aggressives Caching erhoht die Effektivitat von negativem Caching. Dies ist insbesondere nutzlich, wenn viele Anfragen nach nichtexistierenden Domainnamen gestellt werden, beispielsweise bei einem
Denial-of-Service-Angriff
.
[9]
- ↑
RFC
1034
?
Domain Names ? Concepts and Facilities
. November 1987, Abschnitt 2.2 (englisch).
- ↑
RFC
1035
?
Domain Names ? Implementation and Specification
. November 1987, Abschnitt 2.2 (englisch).
- ↑
textslashplain.com
- ↑
a
b
RFC
1035
?
Domain Names ? Implementation and Specification
. November 1987, Abschnitt 4.1.3 (englisch).
- ↑
Jeffrey Pang, Aditya Akella, Anees Shaikh, Balachander Krishnamurthy, Srinivasan Seshan:
On the responsiveness of DNS-based network control
. Oktober 2004,
doi
:
10.1145/1028788.1028792
(
wisc.edu
[PDF]).
- ↑
Protick Bhowmick, Mohammad Ishtiaq Ashiq Khan, Casey Deccio, Taejoong Chung:
TTL Violation of DNS Resolvers in the Wild
. Marz 2023 (
github.io
[PDF]).
- ↑
nlnetlabs.nl
- ↑
a
b
c
RFC
2308
?
Negative Caching of DNS Queries (DNS NCACHE)
. Marz 1998 (englisch).
- ↑
RFC
8198
?
Aggressive Use of DNSSEC-Validated Cache
. Juli 2017 (englisch).