orm@doc-tcpip.org
|
Erstellt: Mai 2001 - Letzte Modifikation: Mai 2001
|
[ Main |
Local ]
Wie sieht ein DNS-Paket aus?
Die RFCs zum Thema
RFC 1035 (www.rfc-editor.org)
Wie es funktioniert
Die Kommunikation erfolgt über "Messages".
Diese bestehen aus 5 Sektionen:
+---------------------+
| Header |
+---------------------+
| Question | Die Anfrage an den Name Server
+---------------------+
| Answer | RRs mit Antworten auf die Frage
+---------------------+
| Authority | RRs, die auf verantwortliche Server deuten
+---------------------+
| Additional | RRs mit weiteren Informationen/Records
+---------------------+
RR steht hier für Resource Record, ein Format zur Angabe des
Mappings von IP-Adresse zu Name bzw. umgekehrt - oder weitere Information.
Resource Records sind die Einträge
in den Datenbank-Files des Name Servers.
Es müssen nicht alle Sektionen in jeder Message vorhanden sein (Eine Antwort
sieht anders aus als eine Frage...).
Der Header ist immer da:
Hier steht, welche Sektionen noch kommen, ob es eine Query (Anfrgae) oder eine
Response
(Antwort) ist, und eventuelle, andere Op-codes.
1 1 1 1 1 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ID |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|QR| Opcode |AA|TC|RD|RA| Z | RCODE |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| QDCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ANCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| NSCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ARCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
Die einzelnen Felder:
- ID: Eine 16bittige Marke, die der Sender, also der Client,
einträgt.
Der Server kopiert diese einfach in seine Antwort, um es dem Sender (Client)
zu ermöglichen, die Antworten mit den Fragen zu verbinden.
- QR: Ein Bit, um Anfrage (query, dann 0) und Antwort (response,
dann 1) zu unterscheiden.
- OPCODE: Vier Bit, die den Typ der Anfrage zeigen. Wird vom Client
gesetzt und vom Server in die Antwort kopiert. Folgende Werte/Typen gibt es:
0 ist eine normale Anfrage (QUERY), 1 eine inverse Anfrage (IQUERY) und 2
zeigt eine Status-Anfrage (STATUS) an. 3-15 sind reserviert.
- AA: Autoritäre Antwort. Diese Bit kann nur in Antworten
gesetzt werden und zeigt an, das der antwortente Server für die
angefragte Domäne autoritär, verantwortlich ist. In der Antwort-Sektion
können verschiedene Namen vorkommen, schließlich kann es Aliase geben.
Das AA Bit bezieht sich immer auf den Namen, der die Frage trifft. Oder
aber auf die erste Antwort in der Antwort Sektion.
- TC: Das "TrunCation" Bit. Zeigt an, das die Nachricht zerstückelt
werden mußte. Das Paket war größer als das entsprechende Netzwerk es
zuläßt.
- RD: Das "Recursion Desired" Bit. Wird vom Client gesetzt und zeigt
an, das der Client wünscht, das der Server rekursiv die Anfrage
weiterverfolgt. Der Client möchte sich also nicht selbst an eventuell
weitere Server wenden. Der Server muß das nicht unterstützen.
- RA: Das "Recursion Available" Bit. Wird vom Server gesetzt, wenn er
in der Lage ist, Anfragen recursiv zu behandeln. Dies ist besonders wichtig,
wenn Nameserver untereinander kommunizieren.
.
- Z: Reserviert. Muß Null sein.
- RCODE: Ist der "Response code" und gibt Informationen über die
Art der Antwort. Folgende Werte sind möglich:
0 - Kein Fehler.
1 - Ein Fehler des Formats. Die Nachricht kann nicht interpretiert werden.
2 - Server Fehler. Der Server konnte die Frage nicht bearbeiten aufgrund eines
internen Problemes.
3 - Namen Fehler. Nur aussagefähig, wenn die Antwort von einem
autoritären Server kommt. Es bedeutet dann, das der angefragte Domain-Name
nicht existiert.
4 - Nicht Implementiert. Der Server unterstützt diesen Typ Anfrage nicht.
5 - Verweigert. Der Server führt diese Anfrage aufgrund von Verboten nicht
aus. Es mag sein, das der Client nicht vertrauenswürdig ist, oder das der
Server z.B. keine Zonentransfers an diese Adresse macht.
6-15 - Reserviert.
- QDCOUNT: Ein 16 Bit Feld, das die Anzahl der Einträge (RRs) in der
Anfrage-Sektion angibt.
- ANCOUNT: Ein 16 Bit Feld, das die Anzahl der Einträge (RRs) in der
Antwort-Sektion angibt.
- NSCOUNT: Ein 16 Bit Feld, das die Anzahl der Einträge (RRs) in der
"Verantwortlicher Server" Sektion angibt.
- ARCOUNT: Ein 16 Bit Feld, das die Anzahl der Eintäge (RRs) in der
Sektion für zusätzliche Informationen angibt.
Eine Anfrage
Es gibt QDCOUNT Einträge (in der Regel nur ein Eintrag) mit folgendem Format:
1 1 1 1 1 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| |
/ QNAME /
/ /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| QTYPE |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| QCLASS |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
Die einzelnen Felder:
- QNAME: query domain name - Der Name, wonach gesucht wird.
Das erste Oktet gibt die Länge an, dann folgt der Domain-Name. Am
Schluß des Strings die Root-Domain.
- QTYPE: query type - Die Art der Anfrage (MX, NS, A...). 2 Oktets.
- QCLASS: query class - Die Klasse der Anfrage (IN im Internet).
2 Oktets.
Die verschiedenen Sektionen haben alle dasselbe Format:
Eine Anzahl von Resource Records (RR). Im Header gibt es ein Count-Field,
was die Anzahl der RRs gibt.
Ein RR sieht so aus:
1 1 1 1 1 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| |
/ /
/ NAME /
| |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| TYPE |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| CLASS |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| TTL |
| |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| RDLENGTH |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--|
/ RDATA /
/ /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
Die einzelnen Felder:
- NAME: Der Domain-Name, zu der dieser RR gehört.
- TYPE: Der RR-Typ Code. Spezifiziert die Bedeutung des Feldes
RDATA. Zwei Oktets.
- CLASS: RR-Klasse. Spezifiziert die Bedeutung des Feldes
RDATA. Zwei Oktets.
- TTL: Time To Live - eine 32-bittige Zahl, die die Anzahl der
Sekunden angibt, für die man diesen Record im Cache behalten darf.
Null bedeutet, das dieser RR nur für die aktuelle Transaktion gilt.
- RDLENGTH: Eine 16-bittige Zahl, die die Anzahl der Oktets im RDATA
Feld angibt.
- RDATA: Ein String variabler Länge (Oktets), der die Resource
beschreibt. Das Format hängt von den Setzungen in TYPE und CLASS ab.
Bei TYPE = A und CLASS = IN wäre das also eine normale 4 Oktet (32-bittige)
ARPA Internet Adresse.
Antworten sehen im Prinzip genauso aus, natürlich um die gewünschten Informationen erweitert.
[ Main | Local
]
[ Allgemein |
UNIX |
AIX |
TCP-IP |
TCP |
ROUTING |
DNS |
NTP |
NFS |
FreeBSD |
Linux |
RPi |
SMTP |
Tracing |
GPS |
LW ]
Copyright 2001-2021 by Orm Hager - Es gilt die GPL
Feedback bitte an:
Orm Hager (orm@doc-tcpip.org
)