Domain Name Service
Dies ist keine vollständige Dokumentation des DNS-Protokolls. Für einen kompletten Überblick verweise ich auf die entsprechenden RFCs.
Protokoll
Bei Integern, die aus mehr als einem Byte bestehen, wird das MSB zuerst übertragen (entspricht Big Endian).
Aufbau der Nachrichten
Header |
Question (Anfrage an Name-Server) |
Answer (RR mit der Antwort) |
Authority (RR der auf eine Authority zeigt) |
Additional (RR mit zusätzlichen Informationen) |
Header
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ID | |||||||||||||||
QR | OPCODE | AA | TC | RD | RA | Z | RCODE | ||||||||
QDCOUNT | |||||||||||||||
ANCOUNT | |||||||||||||||
NSCOUNT | |||||||||||||||
ARCOUNT |
- ID - 16 Bit, wird von Anfrage in Antwort übernommen
- QR - 0 ⇒ Query, 1 ⇒ Response
- OPCODE - 4 Bits, Art der Anfrage, wird von Anfrage in Antwort kopiert
- 0 - Standard Query
- 1 - Inverse Query
- 2 - Server Status Query
- 3 - 15 - Reserviert
- AA - Authoritive Answer, Bit wird in Antworten gesetzt, wenn der antwortende Name-Server eine Authority for the Domain-Namen im Question-Abschnitt ist
- TC - TrunCation - Nachricht wurde abgeschnitten
- RD - Recursion Desired - kann in einer Anfrage gesetzt sein und wird in die Antwort kopiert, Anfrage soll rekursiv ausgeführt werden, Unterstützung dieses Features ist optional
- RA - Recursion Available - Bit ist in Antwort gesetzt, wenn Rekursive Anfragen durch Name-Server unterstützt werden
- Z - Reserviert, muss immmer auf 0 stehen
- RCODE - Response Code, 4 Bits, werden in der Antwort gesetzt
- 0 - Kein Fehler
- 1 - Name-Server konnte Anfrage nicht interpretieren
- 2 - Server Failure, Anfrage konnte durch ein Problem mit dem Name-Server nicht durchgeführt werden
- 3 - Name Error, kann von einem Authoritive-Name-Server gesetzt werden, wenn der angefragte Domain-Name nicht existiert
- 4 - Not implemented, der Art der Anfrage wird von dem Name-Server nicht unterstützt
- 5 - Refused, Anfrage wurde von Name-Server abgewiesen
- 6 - 15 - Reserviert
- QDCOUNT - 16 Bit Unsigned Integer, Anzahl der Einträge im Question-Abschnitt
- ANCOUNT - 16 Bit Unsigned Integer, Anzahl der Einträge im Answer-Abschnitt
- NSCOUNT - 16 Bit Unsigned Integer, Anzahl der Einträge im Authority-Abschnitt
- ARCOUNT - 16 Bit Unsigned Integer, Anzahl der Einträge im Additional-Abschnitt
Question
Resource Records
Die Answer-, Authority- und Additional-Abschnitte haben alle den gleichen Aufbau. Sie bestehen aus einer variablen Anzahl von Resource Records, deren Anzahl in den entsprechenden Feldern im Header angegeben ist
NAME
Domain-Name als Folge von Labels, jedem Label ist seine Länge als Byte vorangestellt, abgeschlossen durch ein 0-Byte.
Beispiel:
0x03 | w | w | w | 0x0F | m | a | r | t | i | n | - | p | r | o | c | h | n | o | w | 0x02 | d | e | 0x00 |
Dabei gelten folgende Beschränkungen:
- Label dürfen maximal 63 Byte groß sein
- Namen dürfen maximal 255 Byte groß sein
Es gibt einen Kompressionsmechanismus, um die unnötige mehrfache Angabe desselben Domain-Namens zu vermeiden.
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 1 | Offset |
Der Offset gibt die Position vom Start der Nachricht an.
TYPE
2 Byte, Typ des Resource Records (nicht mehr genutzte und experimentelle Typen sind hier nicht aufgelistet)
- 1 - A - Host-Address
- 2 - NS - Authoritive-Name-Server
- 5 - CNAME - Kanonischer Name für ein Alias
- 6 - SOA - Markiert den Start einer Zone-Authority
- 11 - WKS - Well known service description
- 12 - PTR - Domain name pointer
- 13 - HINFO - Host Information
- 14 - MINFO - Mailbox- oder Mail-Listen-Information
- 15 - MX - Mail exchange
- 16 - TXT - Text string
CLASS
2 Bytes, Klasse des Resource Records (nicht mehr genutzte Klassen sind hier nicht aufgelistet)
- 1 - IN - Internet
- 3 - CH - CHAOS class
- 4 - HS - Hesiod [Dyer 87]
- 255 - beliebige Klasse
TTL
32 Bit Unsigned Integer, Zeit in Sekunden, die der Resource Record ge-cached werden soll/kann
RDLENGTH
16 Bit Integer, gibt die Länge des RDATA-Feldes in Byte an
RDATA
Enthält die Beschreibung der Ressource, abhängig von TYPE und CLASS
CNAME
Domain-Name, siehe NAME
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
CNAME … |
MX
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PREFERENCE | |||||||||||||||
EXCHANGE … |
- PREFERENCE - 16 Bit Integer, Priorität
- EXCHANGE - Domain-Name, siehe NAME
NS
Enthält den Domain-Namen des Name-Servers, der für die angegebene Domain verantwortlich ist.
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
NSDNAME … |
TXT
Enthält Text - nicht mehr und nicht weniger
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
TXT-DATA … |
A
IPv4-Adresse der angegebenen Domain
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Byte 1 | Byte 2 | Byte 3 | Byte 4 |