Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Letzte ÜberarbeitungBeide Seiten der Revision
development:net:dns [2013-12-14 15:22] Martin Prochnowdevelopment:net:dns [2014-04-22 17:41] – [Links] Martin Prochnow
Zeile 1: Zeile 1:
 +====== 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)  |
 +| **[[#Resource_Records|Answer]]** (RR mit der Antwort) |
 +| **[[#Resource_Records|Authority]]** (RR der auf eine Authority zeigt)  |
 +| **[[#Resource_Records|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 ====
 +^  0  ^  1  ^  2  ^  3  ^  4  ^  5  ^  6  ^  7  ^  8  ^  9  ^  10  ^  11  ^  12  ^  13  ^  14  ^  15  ^
 +|  [[#NAME|QNAME]]\\ ...  ||||||||||||||||
 +| :::  ||||||||||||||||
 +|  [[#TYPE|QTYPE]]  ||||||||||||||||
 +|  [[#CLASS|QCLASS]]  ||||||||||||||||
 +
 +==== 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
 +
 +^  0  ^  1  ^  2  ^  3  ^  4  ^  5  ^  6  ^  7  ^  8  ^  9  ^  10  ^  11  ^  12  ^  13  ^  14  ^  15  ^
 +|  [[#NAME]]\\ ...  ||||||||||||||||
 +|  :::  ||||||||||||||||
 +|  [[#TYPE]]  ||||||||||||||||
 +|  [[#CLASS]]  ||||||||||||||||
 +|  [[#TTL]]\\ [[#TTL]]  ||||||||||||||||
 +|  :::  ||||||||||||||||
 +|  [[#RDLENGTH]]  ||||||||||||||||
 +|  [[#RDATA]]\\ ...  ||||||||||||||||
 +|  :::  ||||||||||||||||
 +
 +=== 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 [[#NAME|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  ||||
 +
 +===== Links =====
 +  * https://tools.ietf.org/html/rfc1035
 +  * https://tools.ietf.org/html/rfc2671
 +
 +{{tag>DNS Protokoll}}
  • Zuletzt geändert: 2017-04-05 11:10