Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung | Letzte ÜberarbeitungBeide Seiten der Revision | ||
development:net:dns [2013-12-14 15:22] – Martin Prochnow | development: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 ==== | ||
+ | ^ 0 ^ 1 ^ 2 ^ 3 ^ 4 ^ 5 ^ 6 ^ 7 ^ 8 ^ 9 ^ 10 ^ 11 ^ 12 ^ 13 ^ 14 ^ 15 ^ | ||
+ | | ID |||||||||||||||| | ||
+ | | QR | OPCODE | ||
+ | | 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, | ||
+ | * 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 ^ | ||
+ | | [[# | ||
+ | | ::: |||||||||||||||| | ||
+ | | [[# | ||
+ | | [[# | ||
+ | |||
+ | ==== 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]]\\ ... |||||||||||||||| | ||
+ | | ::: |||||||||||||||| | ||
+ | | [[# | ||
+ | | [[# | ||
+ | | [[#TTL]]\\ [[# | ||
+ | | ::: |||||||||||||||| | ||
+ | | [[# | ||
+ | | [[# | ||
+ | | ::: |||||||||||||||| | ||
+ | |||
+ | === NAME === | ||
+ | Domain-Name als Folge von Labels, jedem Label ist seine Länge als Byte vorangestellt, | ||
+ | |||
+ | 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, | ||
+ | |||
+ | ^ 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, | ||
+ | |||
+ | ^ 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, | ||
+ | |||
+ | == NS == | ||
+ | Enthält den [[# | ||
+ | ^ 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:// | ||
+ | * https:// | ||
+ | |||
+ | {{tag> |