Das Domain-Name-System Lieber Leser, wie bereits in meinem Text über IP-Adressen erklärt, dreht sich im Netzwerk so ziemlich alles um die IP. Jeder Rechner lässt sich anhand seiner IP eindeutig identifizieren, und kann durch das Internet Protocol angesprochen werden. Doch wer merkt sich schon mehrere Ips? Ein bisschen viel verlangt;-) Aus diesem Grunde erfand man bald das DNS-System neben der IP soll der Rechner nun auch über einen Namen erreichbar werden. ================================================================ Inhalt: 1) Hostname Resolution 2) Die Domains 3) Namelookup mit DNS auf der Suche nach dem Namen 4) Die DNS-Datenbank ================================================================ 1) Hostname Resolution Jeder Rechner, auch, wenn er nicht an ein Netzwerk angeschlossen ist, verfügt über einen eigenen Hostnamen. Diesen Namen kannst Du ihm selbst geben Computertaufe *g* . Nehmen wir für einen Computer nun einmal den Namen LittleMistake an. Der Computer lässt sich jetzt im Netzwerk über zwei Wege erreichen: Einmal seine IP (die wäre in unserem Falle nun einfach mal 192.132.45.127), und über seinen Namen eben LittleMistake. Unter beiden Varianten kannst Du Deinen Rechner nun ansprechen. Versuch am besten, ihn mal anzupingen. Beim ersten Male gibst Du den Befehl ping 192.132.45.127, beim zweiten Male ping LittleMistake. Beides ist möglich. Der Rechner muss also in der Lage sein, einem bestimmten Hostnamen eine IP zuzuweisen. Dieser Prozess wird als Hostname Resolution bezeichnet. Soll der Hostname eines Rechner anhand seiner IP ermittelt werden, bedient sich der Computer zweier Bibliotheksfunktionen: Der gethostbyname und der gethostbyaddr. Diese Funktionen sind in einer eigenen Linux-Bibliothet gespeichert, und zwar in der Standardbibliothek libc. Das Verwalten dieser Bibliotheken und das Zuweisen der Hostnamen ist kein Problem zumindest nicht, solange es sich nur um eine Handvoll Rechner handelt. Alle Informationen werden in der Datei /etc/hosts abgespeichert. Willst Du einen neuen Rechner zum Netzwerk hinzufügen oder einen anderen vom Netzwerk abkoppeln, musst Du dazu die entsprechenden Einträge in dieser Datei verändern. Was geschieht jedoch bei größeren Netzwerken? Man wird mit einer Datenmasse überflutet, die nur sehr schwer zu verwalten ist. Anfangs verwaltete die NIC (Network Information Center) alle diese Daten in einer riesigen Datenbank der hosts.txt. Tja, das Netz wurde größer, und alles wurde unübersichtlicher. Man suchte nach einer neuen Lösung und fand sie auch: Nämlich 1984 im Domain Name System. 2) Die Domains Zuerst einmal musste die eine, riesige Datenbank aufgeteilt werden in mehrere kleine. Das sollte zu einer besseren Übersichtlichkeit führen. Man wies nun die Hosts in verschiedene Gruppen ein, nämlich in Domänen, oder englisch: domains. Rechner, die sich in einer Gruppe befanden, hatten immer eine Gemeinsamkeit: Entweder geographisch (sie hatten denselben Standort) oder aber sie gehörten alle einem großen Netzwerk an. Es gibt Top-Level, Second-Level und Third-Level Domains. Das hängt davon ab, an welcher Stelle der Name in der Hierarchie zu finden ist. Einige der folgenden Top_Level-Domains werden Dir sicherlich bekannt vorkommen: Com ----> Kommerzielle Organisationen/Großunternehmen Net ----> Gateways und administrative Hosts, die einem Netzwerk angehören Org ----> Nicht-kommerzielle Organisationen, zum Beispiel private UUCP-Netzwerke Edu ----> Bildungseinichtungen wie beispielsweise Universitäten Es muss gesagt werden, dass jedes Land über seine eigene Top_Level-Domain verfügt. Deutschland benutzt also die Endung .de, Frankreich .fr und Australien .au. Die untergeordneten Second-Level-Domains können von jedem Land nach freiem Willen organisiert werden. Australien beispielsweise hängt einfach die länderspezifische Domain hintendran: Z.B.: edu=Universität, edu.au=Uni in Australien. Wir Deutschen müssen natürlich wieder alles komplizieren *g* . Namen wie ftp.geschichte.uni-würzburg.de sind keine Seltenheit ;-) 3) NameLookup mit DNS auf der Suche nach dem Namen Verflixt, ist das alles kompliziert! Viele, viele,viele Hosts, eingeteilt nach Zonen, Standort, Netzwerken...puh! Woher soll dann mein armer Rechner wissen, welcher Name zu welcher IP gehört? Wie soll da eine einzige Anwendung schlau draus werden? Ja, es stimmt. Die Datenbank mit der Liste der Namen und IP’s ist riesengroß. Doch setzt sich das DNS-System zusammen aus mehreren Nameservern für eine Region (ein Netzwerk beispielsweise, eine Zone) müssen mindestens (!) zwei Nameserver zuständig sein. Diese Nameserver beinhalten sämtliche Informationen über die Hostnamen und Adressen der einzelnen Hosts. Wenn wir also die IP-Adresse eines Hosts wissen wollen, müssen wir uns an den zugehörigen Nameserver wenden, der sagt uns dann schon bescheid;-) Naja, klingt ja ganz einfach! Aber stellen wir uns mal vor, wir suchen die IP des Rechners „Hades“ in einem riesigen Netzwerk. Wir wissen auch, dass wir den zuständigen Nameserver danach fragen müssen, doch welcher Rechner >>ist<< denn nun der zuständige Nameserver?! Auch hierbei hilft Dir das DNS-System! Wenn Deine Anwendung nach dem Rechner Hades suchen soll, wendet sie sich erst einmal an den lokalen Nameserver. Dieser wiederum sucht jetzt nach Hades, indem er eine bestimmte Technik anwendet, die sich iterative Anfrage nennt. Er startet eine Anfrage an einen Nameserver nach der root-Domain, also der Hauptdomain. Der Nameserver merkt schnell, dass dies nicht in seinen Zuständigkeitsbereich fällt, und schickt Dir eine Liste mit Namen und Adressen der Rechner, die in der Lage wären, Hades ausfindig zu machen. Na prima! Der lokale Server hat nun alle nötigen Informationen und spricht einen der zuständigen Rechner an. Die suchen nach Hades und schicken endlich (!) die gesucht IP an Deinen Rechner zurück. Stell Dir das mal anhand eines Beispieles vor: Du bist in einem Supermarkt einkaufen und suchst eine ganz bestimmte Sorte Waschmittel. Es laufen Hunderte von Verkäufern herum, aber Du weißt nicht, welchen Du fragen sollst. Also sprichst Du irgendeinen an. Der ist aber leider zuständig für die Getränkeabteilung, hat aber keine Ahnung von Waschmittel. Aber er kennt seine Mitarbeiter und kann Dir sagen, wie der Verkäufer heißt, der für Dein Problem zuständig ist. Du gehst nun zu diesem Verkäufer hin und fragst ihn nach dem Waschmittel und bekommst die richtige Information (vorausgesetzt, dass das Waschmittel vorrätig ist*g* ). Ok, der Vergleich hinkt ein wenig, aber ich denke, man kann sich das System so ganz gut vorstellen! Das ganze Verfahren wirkt ungeheuer umständlich wieviele Rechner da angesprochen werden müssen, nur um so eine blöde IP herauszufinden...Aber dieser Arbeitsaufwand ist nichts im Vergleich zu dem Chaos, das ausbrechen würde, wenn ein paar tausend Server gleichzeitig auf die Hosts.txt zugreifen würden...;) Damit sich diese hundert Anfragen nicht bei jedem nslookup wiederholen, werden die Informationen auch hier in einer Cache-Datei gespeichert. Doch dieser wird, genau wie beim ARP, nach einer gewissen Zeit wieder gelöscht, um Fehler zu vermeiden. 4) Die DNS-Datenbank Die DNS-Datenbank enthält, wie Du gesehen hast, nicht nur die nötigen Informationen über IP’s und Hostnamen, sondern auch Infos über zuständige Nameserver und Einiges mehr. Eine einzelne Information in dieser Datenbank wird als Resource Record bezeichnet. Jedem dieser Records wird einmal ein Typ zugewiesen (er beschreibt, was das für Daten sind, die in der Datei enthalten sind) und eine Klasse (sie beschreibt den Netzwerktyp, um den es sich handelt). Es gibt sehr viele verschiedene Arten und Klassen von Ressource Records, die alle verschiedene Aufgaben haben, aber ein Ziel erfüllen sollen: Den Datentransfer zu beschleunigen, und eine fehlerfreie Auskunft zu garantieren ;-) Wie Du sicher gemerkt hast, gilt ein großer Teil dieses Textes nicht alleine für Linux-Systeme, sondern auch für NT, *nix, etc. Aber ich denke, dass es sich beim DNS um ein wichtiges Thema handelt, und man schonmal darüber diskutieren kann;-) Liebe Grüße und bis zum nächsten Mal! DieFuechsin 2000