DNS-Records bestehen grundsätzlich aus mehreren Feldern. In diesen befinden sich alle relevanten Informationen. Der SOA-Record hat im Vergleich zu anderen sehr viele Felder:
- <name>: Name der Zone
- <class>: Netzwerkklasse
- <type>: Typ des Eintrags
- <mname>: Name des Masters
- <rname>: E-Mail-Adresse des zuständigen Administrators
- <serial>: inkrementelle Seriennummer, die die Version der Zonendatei angibt
- <refresh>: Zeitangabe, wann ein Slave die aktuelle Version des Masters anfordern muss
- <retry>: Zeitangabe, wann ein Slave einen gescheiterten Anfrageversuch nochmals durchführen soll
- <expire>: Zeitangabe, ab wann ein Slave bei ausbleibender Rückmeldung des Masters keine DNS-Informationen mehr herausgibt
- <minimum>: Zeitangabe, wie lange die Information in einem Cache gehalten werden darf
Die ersten drei Felder sind typisch für DNS-Records. Der Name der Zone ist ein Domain-Name in der Form eines Fully Qualified Domain Names (FQDN). Dies bedeutet, dass man die Angabe – anders als man es von einer URL kennt – mit einem Punkt beendet. Grund dafür: Ein FQDN stellt die komplette hierarchische Struktur der Domain dar, an deren Ende das Root-Verzeichnis steht. Dieses ist allerdings leer, weshalb nur der trennende Punkt übrig bleibt. Diese Notation findet man in allen Domain-Namen im DNS, also auch bei den Feldern MNAME und RNAME.
Das Feld bezüglich der Klasse hat nur noch historische Relevanz und wird daher in vielen Fällen einfach weggelassen. Bei der Entwicklung des DNS gab es neben dem Internet noch die beiden Projekte Hesiod (HS) und Chaos (CH). Beide sind inzwischen obsolet, weshalb nur noch das Internet mit dem Kürzel IN an dieser Stelle eingesetzt werden kann. Der Typ bezieht sich auf die Art des verwendeten DNS-Eintrags, in diesem Fall also SOA.
MNAME ist auch als Primary Master bekannt und gibt an, welcher Server über dem Slave steht. Damit ist definiert, bei welchem Nameserver sich der tiefergestellte Server um einen Zonentransfer bemühen muss. Bei der Formatierung der E-Mail-Adresse im RNAME-Feld gibt es Besonderheiten zu beachten. Ein @-Zeichen ist in der Notation nicht zugelassen. Stattdessen trennt ein Punkt den Lokalteil (z. B. der Benutzername) von der Domain. Sollte in der originalen E-Mail-Adresse vor dem @-Zeichen ein Punkt stehen, muss man diesen durch einen Backslash () kennzeichnen.
Die Seriennummer muss sich mit jeder Änderung der Zonendatei auch inkrementell erhöhen. Es haben sich zwei Varianten etabliert. Auf der einen Seite kann ein einfaches Verfahren bei 1 beginnen und mit jeder Änderung die Seriennummer um wiederum eins steigen lassen. Bei dieser Option lässt sich an der Seriennummer also auch ablesen, wie viele Änderungen es schon gegeben hat.
Die andere Möglichkeit ist, ein Datumsformat zu wählen: JJJJMMTTVV. Man beginnt mit einer vierstelligen Jahresangabe, lässt dann Monat und Tag folgen (je zwei Stellen) und beendet die Angabe mit einer wiederum zweistelligen Versionsnummer. In diesem Format erkennt man also, an welchem Datum die Version erstellt wurde. Mit jeder Änderung am gleichen Tag steigt die Versionsnummer um eins. An einem neuen Tag passt sich die Seriennummer an der entsprechenden Stelle an und die Versionsnummer wird wieder auf 00 gesetzt.
Der SOA-Record endet mit drei bis vier Zeitangaben – jeweils in Sekunden. Das erste Feld („Refresh“) gibt den zeitlichen Abstand an, bis der Slave wieder beim Master nach einer aktuellen Version der Zonendatei nachfragt. Sollte diese Anfrage nicht beantwortet werden, regelt das Feld „Retry“, wann ein erneuter Versuch durchgeführt wird. Wichtig ist, dass diese Angabe kleiner als die vorherige ist.
Bekommt der hierarchisch tiefere Server überhaupt keine Antwort mehr, legt die dritte Zeitangabe („Expire“) fest, wie lange die Zonendatei noch benutzt werden darf, bevor der Server die Herausgabe von DNS-Informationen verweigert. Würde der Server weiter die Daten der alten Zonendatei an anfragende Clients senden, könnten jene schon nicht mehr gültig sein. Dies führt zu Verbindungsproblemen und Sicherheitsrisiken.
Den Abschluss macht das Feld „Minimum“. Dieses entspricht der Time to live, wie man sie von anderen DNS-Record-Typen kennt. Sie gibt an, wie lang ein Client die angeforderten Informationen im Cache behalten darf, bevor eine erneute Anfrage gesendet werden muss. Meistens wird die TTL allerdings für die komplette Zone mit der Anweisung $TTL gesetzt. In den einzelnen Einträgen muss diese dann nicht mehr vorkommen. Der Zonenname kann ebenfalls bereits am Anfang der Datei festgelegt werden, dann mit der Anweisung $ORIGIN.
Der Eintrag erscheint immer zu Beginn der Zonendatei.