# DNS-Caching

DNS-Caching bezeichnet im Domain Name System (DNS) die vorübergehende Zwischenspeicherung von Ergebnissen einer Namensauflösung in einem lokalen Cache. Folgende identische DNS-Anfragen können aus dem Cache bedient werden ohne den Nameserver erneut anfragen zu müssen, wodurch die Performance erhöht wird. DNS-Caching stellt einen Kompromiss zwischen dem Aufwand der Namensauflösung, der Geschwindigkeit von Aktualisierungen von Resource Records und der Genauigkeit von Antworten aus dem Cache dar.

## Überblick

DNS-Caching verkürzt den Zeitaufwand von identischen Namensauflösungen, da eine Anfrage aus dem Cache schneller beantwortet werden kann, als erneut beim zuständigen Nameserver anzufragen. Darüber hinaus werden die Nameserver entlastet, da sie insgesamt weniger Anfragen beantworten müssen. DNS-Caching wird in Resolvern verwendet, also den Komponenten, die für die DNS-Namensauflösung zuständig sind. Es gibt jedoch auch einfache Stub-Resolver, die zugunsten einer Komplexitätsreduktion auf einen Cache verzichten. Teilweise führen Anwendungen ebenfalls ein DNS-Caching durch, beispielsweise der Webbrowser Chromium.
Die Zeitdauer, für die ein Resource Record im Cache höchstens 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 für die Zone zuständig ist, in dem der Resource Record enthalten ist. Der TTL-Wert ist ein 32 Bit Integer und gibt die Zeitdauer in Sekunden an, wodurch sehr große Werte (mehrere Jahrzehnte) theoretisch möglich sind. Üblich sind Werte im Bereich von einigen Minuten bis hin zu wenigen Tagen. Der Wert „0“ ist möglich und bedeutet, dass ein Resource Record nicht im Cache zwischengespeichert werden darf. Der Inhalt des Caches befindet sich üblicherweise nur im flüchtigen Speicher und überdauert nicht den Neustart der Komponente. Die Möglichkeit eine Zeitdauer von mehreren Wochen oder noch länger einzustellen hat daher kaum praktische Relevanz.
Studien zeigen, dass die TTL-Werte im Internet oft ignoriert werden. Einige Resolver wie zum Beispiel Unbound ermöglichen es, sowohl den maximalen TTL-Wert als auch die minimalen TTL-Wert zu begrenzen.

## Negatives Caching

Neben dem Caching von Resource Records ist es auch möglich, 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.
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 enthält. Ursprünglich hatte das „MINIMUM“-Feld eine andere Bedeutung, die jedoch für das negative Caching geändert wurde.
Negatives Caching ist optional auch in Situationen möglich, wo die Namensauflösung aufgrund von Fehlkonfiguration oder Nameserver-Ausfall fehlschlägt. In solchen Situationen ist eine Caching-Zeit von bis zu 5 Minuten erlaubt.

## Aggressives Caching

DNSSEC führt 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 erhöht die Effektivität von negativem Caching. Dies ist insbesondere nützlich, wenn viele Anfragen nach nichtexistierenden Domainnamen gestellt werden, beispielsweise bei einem Denial-of-Service-Angriff.