Internet-Grundlagen für Programmierer
Transcription
Internet-Grundlagen für Programmierer
Jürgen Bayer Internet-Grundlagen für Programmierer Grundlagen des Internet aus der Sicht des Programmierers Inhaltsverzeichnis 1 Der Aufbau des Internet 1 1.1 Backbones 1 1.2 Adressierung 3 1.3 Router 3 1.4 Intranet und Extranet 4 2 RFCs 5 3 Die IP-Adresse 6 3.1 Die Klasseneinteilung der IP-Adressen 6 3.2 Subnetze und Subnetzmasken 7 3.3 Vergabe von IP-Adressen 7 4 IP-Namensauflösung 8 4.1 Der Name-Service in lokalen Netzen 8 4.2 Der Domain Name Service (DNS) 9 5 IP-Ports 10 6 URIs, URLs und URNs 11 7 Internet-Medientypen und MIME 12 8 Die (für Programmierer) wichtigsten Internetdienste 14 8.1 Das World Wide Web 14 8.2 FTP 15 8.3 Mail 15 9 Einfache Internetprotokolle 16 9.1 Das IP-Protokoll 16 9.2 Das UDP-Protokoll 17 9.3 Das TCP-Protokoll 18 10 Socket-Dienste 20 11 Die wichtigsten höheren Protokolle 21 11.1 Tools zum Testen der Kommunikation 21 11.1.1 Ein Paket-Sniffer zum Auslesen der IP-Kommunikation 21 11.1.2 Telnet 23 11.1.3 Ein simpler IP-Client für TCP und UDP 24 11.2 Das HTTP-Protokoll 25 11.2.1 Grundsätzlicher Aufbau einer HTTP-Nachricht 25 11.2.2 Die Anforderung 28 11.2.3 Die Antwort 29 11.3 Das FTP-Protokoll 31 11.3.1 Statuscodes 32 11.3.2 Datenverbindung 32 11.4 Das SMTP-Protokoll 34 11.4.1 Empfänger, CC, BCC, Datum und Betreffzeile 36 11.4.2 Statuscodes des Servers 37 12 Index 38 Eine wichtige Voraussetzung für die Internetprogrammierung ist, dass Sie den Aufbau des Internet verstehen. Wahrscheinlich ist das bei Ihnen bereits der Fall, für den anderen Fall finden Sie in diesem Abschnitt die notwendigen Informationen. Das Internet ist ein Zusammenschluss unzähliger lokaler Netzwerke. Diese Netzwerke werden von Privatunternehmen wie T-Online und AOL, von Universitäten und von staatlichen Organen wie z. B. der NASA betrieben. Über leistungsfähige Datenleitungen und Satellitenverbindungen werden lokale Netzwerke oft zu regionalen Netzen zusammengeschlossen. Diese Netze sind meist über Großrechenzentren mit so genannten Backbones (Rückraten) verbunden. Zahlreiche staatliche Unternehmen wie beispielsweise die NASA und private Firmen wie IBM, die als Backbone-Provider bezeichnet werden, betreiben eigene leistungsfähige Netzwerke mit Datenleitungen, Satellitenverbindungen und anderen Kommunikationstechnologien, die jedes für sich größere Städte, oft in der ganzen Welt, miteinander verbinden. Ein solches Netz mit leistungsfähigen Datenleitungen wird als Backbone1 (Rückgrat) bezeichnet. Der Worldcom-Backbone verbindet beispielsweise fast alle größeren Städte der USA und Europas mit Datenleitungen, die eine Leistung bis zu 10 Gbps2 besitzen. Abbildung 1.1 zeigt diesen Backbone. 1 Als Backbone wird machmal auch nur eine einzige leistungsfähige Datenverbindung bezeichnet. Im Internet ist ein Backbone aber die Summe aller Datenverbindungen eines Backbone-Providers oder, auf einer höheren Ebene, auch die Summe aller leistungsfähigen Datenleitungen in einer Region. 2 Gigabyte pro Sekunde Der Aufbau des Internet 1 Abbildung 1.1: Der Backbone von http://www1.worldcom.com/global/about/network/maps/europe) Worldcom Informationen zu den Backbones in Europa finden http://www.ispworld.com/isp/bb/europe.htm. in Sie Europa auf der (Quelle: Seite Die Backbone-Provider nutzen übrigens meist die bereits vorhandenen Datenverbindungen von Telekommunikationsunternehmen wie der Telekom, die dazu einfach angemietet werden. Spezielle neutrale Austauschpunkte, die als Knoten (Node), CIX (Commercial Internet Exchange3) oder auch als DSE (Telecommunication Data Switching Exchange) bezeichnet werden, sichern den Übergang zwischen den Backbones verschiedener Betreiber. Diese Austauschpunkte stellen sicher, dass die Kommunikation zwischen verschiedenen Regionen, die an Backbones unterschiedlicher Betreiber angeschlossen sind, nicht über unnötig weite Wege ausgeführt wird. Viele Gesellschaften wie z. B. Internet-Service-Provider (ISP) sind direkt an einen Backbone angeschlossen um ihren Kunden eine möglichst hohe Performance bieten zu können. Privatkunden oder Firmen, die nicht direkt an einen Backbone angeschlossen sind, werden über TelefonWählleitungen, DSL oder andere Medien wie z. B. Stromnetze mit einem Rechner des Internetproviders verbunden. Diese als PoP (Point of Precence4) bezeichneten Rechner sind Teil eines lokalen Netzwerkes des Rechenzentrums des Providers. Über einen oder mehrere Backbone-Router ist dieses Netzwerk an den Backbone angeschlossen. Es kann natürlich auch sein, dass kleinere Provider 3 Kommerzieller Internetaustauschpunkt 4 Einwahlknoten Der Aufbau des Internet 2 nicht direkt an einen Backbone angeschlossen, sondern über Standleitungen mit dem Netzwerk eines größeren Providers verbunden sind. Um die einzelnen an das Internet angeschlossenen Rechner adressieren zu können, besitzt jeder Rechner eine weltweit eindeutige IP-Adresse. IP-Adressen sind zwar eigentlich ganz normale 32-BitZahlen, werden aber zur besseren Übersicht normalerweise so dargestellt, dass die vier Bytewerte der Zahl erkennbar sind. Eine typische IP-Adresse ist z. B. 207.46.197.101. Wie Sie es in Kapitel 3 noch genauer erfahren, adressiert ein Teil der IP-Adresse das lokale Netzwerk, an das der Rechner direkt angeschlossen ist. Der zweite Teil adressiert den einzelnen Rechner im Netzwerk. Bei der Beispieladresse stehen die linken drei Byte für das Netzwerk, das rechte Byte adressiert den Rechner im Netz. Router sind Rechner, die ein lokales Netz mit einem anderen Netz oder einem Backbone verbinden. Ein Router kennt alle Rechner, die in seinem Netz angeschlossen sind, und ist in der Lage, hereinkommende Daten an den richtigen Rechner zu senden. Router kennen zusätzlich noch den Weg zu anderen Netzen oder können diesen ermitteln. Sie verbinden damit lokale Netzwerke mit der Außenwelt. Zudem arbeiten Router an allen Netzknoten im Internet. Jeder Router verwaltet eine Routing-Tabelle, in der die Router aller Netzwerke eingetragen sind, die direkt mit dem eigenen Netzwerk verbunden sind. Erhält ein Router Daten, extrahiert er den Netzwerkteil der Ziel-IP-Adresse (die jedem Datenpaket beigefügt ist). Erkennt er, dass die Daten für sein eigenes Netz bestimmt sind, extrahiert er die Rechneradresse aus der IP-Adresse und sendet die Daten direkt zum entsprechenden Rechner. Im anderen Fall schaut er in seiner Routing-Tabelle nach der Netzwerk-Zieladresse und ermittelt den Router, der für diese Adresse zuständig ist. Für den Fall, dass die Netzwerk-Zieladresse unbekannt ist, ist in der Routing-Tabelle ein Default-Router eingetragen, in dessen Routing-Tabelle wieder andere Router eingetragen sind. Dieser Router übernimmt den Weitertransport der Daten nach demselben Schema. Über ein spezielles Protokoll tauschen benachbarte Router Routing-Informationen untereinander aus. Dabei werden komplexe Optimierungsverfahren eingesetzt, so dass jeder Router versucht, den optimalen Weg zum Zielnetz zu finden. So werden die Daten im Internet von Router zu Router versendet, bis sie schließlich am Zielrechner angekommen sind. Ein anderer in diesem Zusammenhang häufig verwendeter Begriff ist Gateway. Ein Gateway ist eigentlich ein Rechner, der zwei verschiedene Netzwerke, beispielsweise ein Microsoft- und ein Apple-Netz, miteinander verbindet. Ein Gateway ist kein Router, aber ein Router kann auch ein Gateway sein. In der heutigen Zeit werden die Begriffe Router und Gateway häufig vermischt, besonders deswegen, weil Microsoft in der TCP/IPKonfiguration den Standardrouter als Standardgateway bezeichnet. Abbildung 1.2 zeigt eine schematische Darstellung des Routing im Internet. Der Aufbau des Internet 3 Abbildung 1.2: Schematische Darstellung des Routing im Internet Ein Intranet ist ein Internet im Kleinen. Schon wenn Sie nur zwei Rechner über Netzwerkkarten miteinander verbinden und das TCP/IP-Protokoll installieren, besitzen Sie bereits ein Intranet. Normalerweise läuft in einem Intranet aber mindestens ein Web- und/oder FTP-Server. Die von diesem Server verwalteten Dateien können – genau wie im Internet – von jedem angeschlossenen Rechner aus abgerufen werden. Ist das Intranet (über einzelne Rechner oder Router) mit dem Internet verbunden, verhindern meist so genannte Firewalls, dass Personen von außen Zugriff auf das Intranet erhalten. Die meisten Firmen arbeiten heutzutage mit Intranets. Die Internet-Standards erleichtern den Informationsfluss innerhalb der Firma. Auf dem Webserver sind häufig alle wichtigen Firmeninformationen gespeichert. Jeder Mitarbeiter kann diese Informationen über einen einfachen Webbrowser abrufen. Viele Firmen bauen zudem Wissensdatenbanken auf, in die Mitarbeiter besondere Erfahrungen eintragen können. Flexible Suchmechanismen wie z. B. die des Microsoft Index Servers, helfen dabei, das firmeninterne Wissen zu verbreiten. Ein weiteres Einsatzgebiet für Intranets ist das, wegen dem Sie dieses Buch lesen. Moderne Firmen verlagern immer mehr firmeninterne Softwarelösungen ins Intranet. Die Vorteile gegenüber klassischen Lösungen habe ich ja bereits in Kapitel 1 genannt. Das Intranet ist damit ein weites Betätigungsfeld für Programmierer. Der Aufbau des Internet 4 Ein Extranet verbindet die Intranets einzelner Firmen oder Filialen miteinander, schließt aber das Internet dabei aus. So können die Vorteile des Intranets über verschiedene Firmen bzw. Firmenstandorte genutzt werden, wobei die Gefahren des Internet (Spionage, Zerstörung von Daten durch Hacker etc.) ausgeschlossen werden. Firmen, die keine direkte Datenverbindung besitzen, nutzen dazu meist spezielle Extranet-Dienste von Internetprovidern. Alles, was irgendwie mit dem Internet zusammenhängt, wird in technischen Dokumenten beschrieben, die als »RFC« (Request For Comment5) bezeichnet werden. Neben Diskussionen über neue Forschungsprojekte, Berichten über den Zustand des Internet und anderem werden dort auch die Internet-Protokolle sehr ausführlich dokumentiert. RFC-Dokumente werden einfach nummeriert. RFC 791 beschreibt z. B. das IP-Protokoll. Beim Verleger der RFCs, dem RFC-Editor, finden Sie eine Möglichkeit, die einzelnen RFCs einzusehen. Gehen Sie dazu zur Seite www.rfc-editor.org/overview.html. Klicken Sie auf den SEARCH-Link und geben Sie auf der Suchseite einen Suchbegriff wie z. B. die RFC-Nummer ein. Da die Webseite des RFC-Editors oft recht langsam ist und die Seiten einiger Dokumente manchmal erst gar nicht angezeigt werden, finden Sie eine gute und schnelle Alternative bei der Internet Engineering Task Force (IETF): www.ietf.org/rfc.html. Im weiteren Verlauf nehme ich immer wieder Bezug auf RFC-Dokumente. Beachten Sie, dass RFCs kontinuierlich weiterentwickelt werden. Finden Sie bei der Suche auf der RFC-Editor-Seite im rechten Bereich des Suchergebnisses einen Eintrag »Obsoleted by«, ist das betreffende RFC-Dokument mittlerweile durch ein neues ersetzt worden. Im RFC 2800 (zum Zeitpunkt der Drucklegung dieses Buchs aktuell) finden Sie eine Übersicht über die RFCs, die die Internetprotokolle betreffen. 5 Aufforderung, Kommentare zur beschriebenen Technologie einzusenden RFCs 5 Jeder Rechner, der an das Internet oder an ein Intranet angeschlossen ist, besitzt eine eindeutige IPAdresse. Eigentlich handelt es sich dabei um eine einfache 32-Bit-Zahl. IP-Adressen werden aber an sich immer so dargestellt, dass die einzelnen Bytes dieser Zahl durch Punkte getrennt angegeben werden. Abweichend von der normalen Zahl-Darstellung wird das erste Byte aber links angegeben (das erste Byte ist normalerweise das kleinere und müsste folglich rechts angegeben werden). Eine typische IP-Adresse wird z. B. so dargestellt: 128.66.12.1. Dieses Beispiel steht für die Zahl 17580672. Wenn Sie einmal eine als Zahl dargestellte IP-Adresse umrechnen wollen (oder müssen), konvertieren Sie die Zahl in einen Hexadezimalwert (für das Beispiel: 10C428016), drehen die einzelnen Bytes um (8016.4216.0C16.0116) und rechnen diese in Dezimalwerte zurück. Ein Teil der Adresse adressiert das lokale Netzwerk, an das der Rechner angeschlossen ist. Der andere Teil adressiert den Rechner. Im Beispiel steht 128.66 für das Netzwerk und 12.1 für den Rechner. !" " IP-Adressen werden in verschiedene Klassen eingeteilt. Abhängig von der Klasse der Adresse werden unterschiedliche Teile als Netzwerk- bzw. Rechneradresse gewertet. Welcher Klasse einer IP-Adresse angehört, wird an den ersten Bits erkannt: • Ist das linke Bit einer IP-Adresse 0, handelt es sich um eine Klasse-A-Adresse. Da es sich bei diesem Bit eigentlich um Bit 8 des linken Byte handelt, kann man auch sagen, dass ein Wert kleiner als 128 im linken Byte eine solche Adresse bezeichnet. Bei einer Klasse-A-Adresse steht das linke Bit für die Klasse, die nächsten sieben Bit identifizieren das Netzwerk. Die restlichen drei Bytes bezeichnen einen Rechner im lokalen Netz. Damit existieren maximal 127 Klasse-AAdressen, die jedoch jede für sich Millionen von angeschlossenen Rechnern adressieren können. • Wenn das linke Bit einer IP-Adresse gesetzt ist und das folgende nicht, handelt es sich um eine Klasse-B-Adresse. Alternativ kann man sagen, dass ein Wert von 128 bis 191 im linken Byte eine solche Adresse kennzeichnet. Bei einer Klasse-B-Adresse stehen die linken zwei Bit für die Klasse, die nächsten 14 Bit bezeichnen das Netzwerk, die restlichen 16 Bit den Rechner. Damit sind 16.383 Netze der Klasse B möglich, die jedes für sich 65.535 Rechner enthalten können. • Wenn die linken drei Bit einer Adresse 110 sind (bzw. wenn im linken Byte ein Wert von 192 bis 223 gespeichert ist), handelt es sich um eine Klasse-C-Adresse. Bei einer solchen Adresse bestimmen die linken drei Bit die Klasse, die folgenden 21 Bit das Netzwerk und die restlichen acht Bit den Rechner. Damit sind 2.097.152 Klasse-C-Netze möglich, die jedes für sich maximal 255 Rechner enthalten können. • Adressen, die mit 111 beginnen (bzw. im linken Byte einen Wert größer als 223 speichern), sind für besondere Zwecke reserviert und gehören zu keinem speziellen Netzwerk. Momentan werden in diesem Bereich so genannte Multicast-Adressen verwaltet. Über diese Adressen können Gruppen von Computern adressiert werden, die ein gemeinsames Protokoll benutzen. • Ein besonderer Klasse-C-Adressbereich ist 192.168.0.x. Diese Adressen sind für private Zwecke reserviert und werden im Internet nicht verwendet. Wenn Sie ein einfaches privates Intranet aufbauen, können Sie den Bereich dieser Adresse sehr gut nutzen, um Ihren Rechnern festen Adressen zuzuteilen und dabei nicht mit Adressen im Internet in Konflikt zu geraten, wenn die Rechner mit dem Internet verbunden sind. • Die Adresse 127.0.0.1 bezeichnet immer das lokale System. Für diese Adresse existiert immer auch der Alias localhost. Die IP-Adresse 6 # $ # $% Ein Subnetz ist ein Teil eines Netzes, der nur über einen Router oder ähnliche Rechner Verbindung mit den Rechnern anderer Subnetze besitzt und der über einen eigenen Bereich von IP-Adressen adressiert wird. Subnetze werden häufig eingesetzt, um die Administration eines großen Netzes zu verteilen oder um Teile eines Gesamtnetzes (aus Sicherheitsgründen) von anderen abzuschotten. Um diese Subnetze zu adressieren, kann der Administrator Teile der Bits verwenden, die in einer IPAdresse zur Rechneridentifikation gedacht sind. Dazu werden so genannte Subnetzmasken verwendet. Klasse-B-Netzwerke arbeiten beispielsweise normalerweise mit der Subnetzmaske 255.255.0.0. Eine Subnetzmaske wird so interpretiert, dass jedes gesetzte Bit in der Maske die Netzwerkadresse identifiziert. Im Beispiel stehen also die Bits der zwei linken Bytes für die Netzwerkadresse (was bei einer Klasse-B-Adresse ja normal ist). Der Router, der das Netzwerk mit der Außenwelt verbindet, arbeitet mit genau dieser Subnetzmaske. Enthält das Netzwerk Subnetze, arbeiten die internen Router häufig mit der Subnetzmaske 255.255.255.0. Das bedeutet nun, dass das dritte Byte zur Adressierung des Subnetzes verwendet wird (die ersten beiden stehen ja für das Hauptnetz). Das rechte Byte adressiert dann innerhalb des Subnetzes die angeschlossenen Rechner. In einem solchen Netz können also maximal 255 Subnetze existieren, die jedes für sich maximal 255 Rechner enthalten können. Subnetzmasken müssen nicht wie im Beispiel ein komplettes Byte einbeziehen. Wenn weniger Subnetze vorhanden sind, die mehr Rechner adressieren sollen, kann der Administrator auch weniger Bits des Rechnerteils der IP-Adresse für die Adressierung der Subnetze verwenden. Bei einer KlasseC-Adresse erlaubt die Subnetzmaske 255.255.255.192 beispielsweise vier Subnetze mit jeweils 64 angeschlossenen Rechnern. Nur damit Sie diese Rechnung verstehen: 192 entspricht binär 110000002. Die linken zwei Bit werden also für die Adressierung des Subnetzes verwendet, und daraus ergeben sich eben genau vier Möglichkeiten. Die restlichen sechs Bit gehören zur Rechneradresse, und das ergibt 64 Möglichkeiten. & ' In einem Intranet ohne direkten Zugang zum Internet können Sie IP-Adressen ohne weiteres frei vergeben. Sie müssen lediglich darauf achten, dass der Typ der Adresse (Klasse A, B oder C) und die Subnetzmaske gleich ist. Ist einer der Rechner indirekt (z. B. über eine ISDN-Karte oder ein DSLModem) an das Internet angeschlossen, sollten Sie den Adressbereich für private Adressen (192.168.0.0 bis 192.168.0.255) verwenden, um keine Konflikte mit vorhandenen IP-Adressen zu verursachen. Für Rechner, die direkt am Internet angeschlossen sind, müssen Sie eine IP-Adresse beziehen. Privatpersonen oder kleinere Firmen erhalten diese über den Internet-Service-Provider. Größere Firmen und Internet-Service-Provider beziehen ganze Adressbereiche von einem der drei InternetRegistrations-Unternehmen. Für Europa ist das die Firma RIPE NCC (www.ripe.net). Für den amerikanischen Raum ist das Unternehmen ARIN zuständig, für den asiatischen Raum die Firma APNIC. IP-Adressen müssen eben weltweit eindeutig sein. Rechner, die über einen Router oder Provider an das Internet angeschlossen sind, werden auch häufig dynamisch über einen DHCP-Server mit einer IP-Adresse versorgt. Das ist beispielsweise der Fall, wenn Sie Ihren Rechner mit dem PoP des Providers über das DFÜ-Netzwerk von Windows verbinden. Ein DHCP-Server beim Provider ermittelt eine freie IP-Adresse in dem (Sub-)Netzbereich des Providers und übermittelt diese an Ihren Rechner. Dieser ist dann unter zwei IP-Adressen erreichbar: Im lokalen Netz unter seiner privaten und über das Internet über die zugeteilte Adresse. Die IPAdressen Ihres Rechners können Sie übrigens über das Programm ipconfig abfragen. Die IP-Adresse 7 ( % " ) Zur Kommunikation in einem IP-Netz werden ausschließlich die IP-Adressen der angeschlossenen Rechner verwendet. Wie Sie ja sicher schon wissen, können Sie zur Adressierung eines Rechners aber auch den Rechnernamen eingeben. In der einfachsten Form ist dies in einem Intranet der bloße Name des Rechners. In komplexen Intranets und im Internet werden zudem Domänen6 verwendet, die die Identifikation der Rechner vereinfachen. Bei dem Namen »www.addison-wesley.de« steht »de« beispielsweise für die Top-Level-Domäne de (Deutschland), »addison-wesley« bezeichnet die untergeordnete Domäne von Addison-Wesley und »www« ist der Name des Rechners, der in dieser Domäne verwaltet wird. Domänennamen werden von NICs (Network Information Centers) vergeben und verwaltet. Für Deutschland ist das DE-NIC zuständig (www.nic.de). Wenn Sie nun einen solchen Rechnernamen in einem Programm verwenden, das eine IPKommunikation aufbaut, muss der Name in die passende IP-Adresse umgewandelt werden. Dazu stehen zwei Verfahren zur Verfügung. Bei der einfachen und älteren Variante verwaltet eine spezielle Tabelle im Rechner die Namen der benachbarten Rechner mit deren IP-Adresse. Dies ist häufig auf Unix-Systemen üblich. Windows-Rechner fragen in einem einfachen Internet die IP-Adressen allerdings ganz einfach über das normale Windows-Netzwerk ab. Das neuere Verfahren nutzt eine verteilte Datenbank, den so genannten Domain Name Service (DNS). ( % # ' " " ( $ Für die Adressierung einzelner Rechner in lokalen Netzen können Sie meist problemlos deren Namen an Stelle der IP-Adresse verwenden. Eine Webserver im Intranet sprechen Sie im Webbrowser z. B. einfach mit »http://Zaphod« an (wobei »Zaphod« der Rechnername ist). Für den lokalen Webserver können Sie auch den Alias localhost verwenden: »http://localhost«. Das System setzt den angegebenen Namen automatisch in die IP-Adresse des angesprochenen Rechners um. Wird der lokale Rechner angesprochen, setzt das System den Rechnernamen (bzw. localhost) immer in die Adresse 127.0.0.1 um. Werden entfernte Rechner angesprochen, fordert das System in einfachen Windows-Netzen die IPAdresse über das Windows-Netzwerk direkt vom anderen Rechner an. Auf kleineren Unix-Systemen wird zur Ermittlung der IP-Adresse allerdings häufig eine Rechnertabelle verwendet, die in Form einer einfachen Textdatei meist im Ordner etc/hosts gespeichert ist. Diese Tabelle enthält die einzelnen Rechnernamen und die dazugehörigen IP-Adressen. Größere Netze nutzen dagegen meist einen Nameserver, der die Rechnernamen der angeschlossenen Netze mit den IP-Adressen verbindet. Auf Windows-Systemen ist dies der WINS (Microsoft Windows Name Service), der auf den Server-Versionen von NT, 2000 und XP läuft. Nameserver sind in der Lage, sich mit benachbarten Nameservern auszutauschen, so dass ein Nameserver auch die IPAdressen der Rechner benachbarter (Sub-)Netzwerke kennt. Außerdem ist die Administration gegenüber einer Rechnertabelle (die normalerweise manuell gepflegt wird) erheblich vereinfacht. 6 Der Begriff »Domäne« (englisch »Domain« = »Gebiet«) bezeichnet im Allgemeinen einen Wissens- oder einen Steuerungsbereich. Im Internet ist mit einer Domäne ein Bereich von IP-Adressen gemeint, die geographisch oder thematisch zusammengehören. Auf Windows-Systemen ist eine Domäne zudem eine Gruppierung von Computern und Betriebsmitteln, die zu einer Gruppe Benutzer gehören. IP-Namensauflösung 8 % ( % # ' * (#+ Genau wie im Intranet sind IP-Adressen auch im Internet sehr unhandlich. Deshalb werden im Internet (und in größeren Intranets) Namen verwendet, die in Domänen eingeteilt sind. Der Name www.addison-wesley.de besteht beispielsweise aus der Toplevel-Domäne de, der die Subdomäne addison-wesley untergeordnet ist, und dem in dieser Domäne verwalteten Rechner www. Toplevel-Domänen bezeichnen einzelne Länder (wie de für Deutschland oder at für Österreich) oder Geschäftsbereiche (wie com für kommerzielle Unternehmen, edu für Ausbildungsunternehmen und net für Netzwerkdienste). Mittlerweile sind die Toplevel-Domänen aber etwas durcheinander geraten, da prinzipiell jeder eine Internetadresse in einer nahezu beliebigen Toplevel-Domäne beantragen kann. Subdomänen bezeichnen das Zielnetzwerk, an das der adressierte Rechner angeschlossen größere Netzwerke können innerhalb einer Subdomäne noch weitere Subdomänen verwaltet Der Webserver im Netzwerk des »Marshal Space Flight Center« der Nasa wird z. www.msfc.nasa.gov adressiert. msfc steht hier für eine untergeordnete Subdomäne, die der NASA-Subdomäne ist. ist. Für werden. B. mit ein Teil Innerhalb der untergeordneten Domäne kann eine Firma oder eine Privatperson nahezu beliebig viele Rechner verwalten. Die meisten Rechner für das World Wide Web heißen wohl www, die für den FTP-Dienst werden meist ftp genannt. Prinzipiell sind aber auch alle anderen denkbaren (und gültigen Namen) möglich. Der Suchserver von Microsoft (search.micosoft.com) oder der Übersetzungsdienst von Altavista (babelfish.altavista.com) sind Beispiele dafür. Diese Domänennamen müssen, wie auch im Intranet, vor dem Senden von Daten in die IP-Adresse des Zielrechners umgewandelt werden. Dazu werden DNS-Server verwendet. Ein DNS-Server verwaltet in einer Datenbank Rechnernamen und die zugehörigen IP-Adressen. Erhält ein DNS-Server eine Anfrage nach einem unbekannten Namen, leitet er diese an einen so genannten autorativen DNSServer weiter. Ein autorativer DNS-Server ist ein beliebiger DNS-Server, der Informationen für die Subdomäne bereithält. Kennt der autorative DNS-Server den angeforderten Namen nicht, leitet er die Anfrage an einen Primary-Nameserver weiter, der Informationen für die Toplevel-Domäne bereithält. Der Primary-Nameserver für die de-Domäne läuft beispielsweise beim DE-NIC. Der Primary-Nameserver kennt zwar nicht die Namen der einzelnen Rechner der Toplevel-Domäne, aber er kennt die dieser Domäne untergeordneten autorativen Server. Er leitet die Anfrage deshalb einfach an den nächsten passenden autorativen DNS-Server weiter. Kann der autorative DNS-Server den Namen auflösen, sendet er das Ergebnis zum ursprünglich angesprochenen DNS-Server zurück. Dieser speichert den Namen und die IP-Adresse dann in seinem Cache, damit zukünftige Anfragen direkt beantwortet werden können, und sendet das Ergebnis zu der IP-Adresse, die die Anfrage gestartet hat. Kann ein Name nicht aufgelöst werden, antwortet ein DNS-Server einfach nicht. Die Internetanwendung meldet dann nach einer gewissen Wartezeit, dass der Name nicht aufgelöst werden kann (was auch eine Falschmeldung sein kann, nämlich dann, wenn die Anfrage sehr viel Zeit in Anspruch nimmt). In der IP-Konfiguration eines Rechners ist entweder die Adresse eines DNS-Servers fest eingetragen oder festgelegt, dass diese Adresse bei der Einwahl in den PoP des Internet-Providers automatisch übertragen wird. Wenn beispielsweise ein Browser ein HTML-Dokument anfordert, kennt das System die IP-Adresse eines DNS-Servers, kann diesen nach der IP-Adresse des angegebenen Domänennamens fragen und die Anforderung dann an die so ermittelte IP-Adresse senden. IP-Namensauflösung 9 , Im Internet oder in einem Intranet laufen die verschiedensten Dienste. Die bekanntesten sind wohl der WWW-, der FTP- und der SMTP-Dienst. Diese Dienste können über separate Serveranwendungen auf einem einzelnen Rechner ausgeführt werden, was beispielsweise unter Windows der Fall ist, wenn Sie den IIS installieren. Aber auch spezielle Server oder Anwendungen, die über das Internet mit anderen Anwendungen kommunizieren, müssen auf einem Rechner identifiziert werden. Genau dazu werden die so genannten IP-Ports verwendet. Ein Port ist einfach eine 16-BitDezimalzahl, die einen Dienst oder ein Programm identifiziert. Es gibt reservierte, so genannte »Well Known Ports«, mit einer Nummer unterhalb von 256. Diese Ports adressieren bekannte Dienste wie WWW, SMTP und FTP. Der WWW-Dienst eines Webservers wird z. B. immer über den Port 80 adressiert, der FTP-Dienst verwendet den Port 21. Wenn Sie in einem Webbrowser eine Webadresse wie z. B. http://www.addison-wesley.de eingeben, erweitert Ihr Webbrowser diese Adresse implizit um den Port des angesprochenen Dienstes: http://www.addison-wesley.de:80. Der Port wird über einen Doppelpunkt von der eigentlichen Adresse getrennt. Der Browser erkennt den anzusprechenden Port übrigens mehr oder weniger automatisch am eingegebenen Namen. Beginnt der Name mit »ftp://« oder »ftp.«, würde er den Port 21 anhängen. Beim Senden der Daten wird der Zielport als Teilinformation eines Datenpakets mitgesendet. Daraus erkennt das Betriebssystem auf dem Server, welcher Dienst anzusprechen ist. Beim Port 80 übergibt das Betriebssystem beispielsweise die eingegangenen Daten an den Webserver, der diesen Port für sich beim Betriebssystem reserviert hat. Ports mit einer Nummer größer als 255 können beliebig verwendet werden7. Programme und Dienste, die nicht zum Internet-Standard gehören, wie z. B. der Microsoft SQL Server, nutzen eine solche freie Portnummer. Aber nicht nur Server-, sondern auch Clientanwendungen werden über einen Port identifiziert. Der Server muss angeforderte Daten ja schließlich zum Client zurücksenden. Dazu reserviert sich jede Clientanwendung beim Start normalerweise eine dynamisch vergebene, freie Portnummer. Beim Senden einer Anforderung wird – wie Sie beim UDP- und beim TCP-Protokoll in Abschnitt 9.2 und 9.3 noch sehen – auch diese Portnummer mit im Datenpaket übertragen, sodass der Server weiß, wohin er die angeforderten Daten senden soll. Deshalb ist es auch problemlos möglich, mit mehreren Instanzen eines Webbrowsers gleichzeitig zu arbeiten, ohne dass diese durcheinander geraten. 7 Früher waren noch die Ports 256 bis 1024 für UNIX-typische Dienste reserviert, was aber heute nicht mehr gilt. IP-Ports 10 - . /. 0 . ( URIs (Uniform Resource Identifier) werden im Internet zur Identifikation von Ressourcen verwendet. Eine Ressource ist im Allgemeinen etwas, das unter einem eindeutigen Namen angesprochen werden kann, beispielsweise eine Mailbox, eine Datei, ein Dienst oder ein Programm. URIs beschreiben typischerweise den Mechanismus, der verwendet wird, um die Ressource anzusprechen (z. B. http:// für das HTTP-Protokoll), den Namen des Computers, der die Ressource verwaltet, und den Namen der Ressource selbst. Das Schema eines URIs ist für die einzelnen Protokolle festgelegt und weicht auch manchmal vom allgemeinen Schema ab. Die Adresse eines HTML-Dokuments sieht beispielsweise so aus: http://www.boarder-magazin.de/index.htm Eine über FTP erreichbare Datei wird prinzipiell identisch adressiert: ftp://ftp.is.co.za/rfc/rfc1808.txt Die URI zur Adressierung einer Mailbox oder einer Newsgroup sieht aber etwas anders aus: mailto:juergen.bayer@addison-wesley.de news:microsoft.public.dotnet.languages.csharp URLs (Uniform Resource Locator) sind eine Unterordnung von URIs, die eine Datei bezeichnen, die über das Internet angesprochen werden kann. URLs sind Strings, die das zu verwendende Protokoll, die Adresse oder den Domänennamen und optional den Port, den Pfad und Argumente angeben: Protokoll://Host[:Port][Absoluter Pfad[?Argumente]] Für das HTTP-Protokoll sieht eine URL beispielsweise so aus: http://www.boarder-magazin.de/index.htm http://www.boarder-magazin.de:80/index.htm http://www.microsoft.com/Data http://search.microsoft.com?siteid=us/dev Falls beim HTTP-Protokoll Argumente angegeben sind, werden diese meist von ASP(.NET)- oder CGI-Programmen ausgewertet. Falls bei einer URL keine Angabe der anzusprechenden Ressource (Datei) erfolgt, verwendet der Server die Ressource, die als Standard für den angesprochenen Ort eingestellt ist. URNs sind eine andere Art URIs, die Ressourcen bezeichnen, deren Ort unbestimmt ist, die aber über spezielle Dienste identifiziert werden können. Eine E-Mail-Adresse ist ein bekanntes Beispiel für eine URN. Der Speicherort der damit angesprochenen Mailbox kann nahezu beliebig (innerhalb der Domäne der Adresse) wechseln, die Adresse bleibt aber immer dieselbe. URNs garantieren Eindeutigkeit und eine endlose Lebenszeit. URIs, URLs und URNs 11 1 2 34 2 2 Wenn Programmierer über das Internet reden, fällt häufig der Begriff Medientyp bzw. MIME. Auch in diesem Buch kommt der Begriff MIME häufiger vor. Deshalb sollten Sie wissen, worum es sich dabei handelt. Mime ist die Kurzform für »Multipurpose Internet Mail Extensions« (Mehrzweck-Internet-MailErweiterungen). MIME ist von der ursprünglichen Bedeutung her ein Standard, der es ermöglicht, dass E-Mails und angehängte (oft binäre) Daten in einer Datei gemeinsam versendet werden können. Um dem Empfänger den Typ der angehängten Daten mitteilen zu können (damit dieser die Daten korrekt interpretieren kann), werden spezielle Medientyp-Bezeichnungen verwendet. Der Typ text/html spezifiziert beispielsweise ein HTML-Dokument. Da sich herausgestellt hat, dass diese Medientypen auch zu anderen Zwecken im Internet nützlich sind, werden MIME-Typen mittlerweile sehr häufig zur Spezifizierung des Typs gesendeter Daten verwendet. Wenn ein Medientyp gemeint ist, müsste eigentlich auch der (allgemeinere) Begriff »Medientyp« verwendet werden, was auch in den offiziellen Schriften der Fall ist. Im normalen Sprachgebrauch wird aber meist der Begriff »MIME-Typ« verwendet. Eine Medientyp-Angabe besteht aus einem Haupttyp, einem optionalen Untertyp und einer ebenfalls optionalen Angabe des Zeichensatzes, falls es sich um einen Texttyp handelt. Haupttyp und Untertyp werden durch einen Schrägstrich getrennt angegeben. Tabelle 7.1 listet die zurzeit existierenden Medien-Haupttypen auf. Medien-Haupttyp spezifiziert text Textdaten image Grafikdateien video Videodateien audio Sounddateien application Dateien, die an ein bestimmtes Programm gebunden sind multipart mehrteilige Daten message Nachrichten model Dateien, die mehrdimensionale Strukturen repräsentieren Tabelle 7.1: Die Medien-Haupttypen Für jeden Haupttyp existieren meist recht viele Untertypen. Der text-Typ wird beispielsweise in comma-separated-values, css, html, javascript, plain und andere Untertypen unterteilt. Tabelle 7.2 gibt eine Übersicht über die wichtigsten Medientypen. Medientyp Bedeutung application/zip zip-Archivdateien application/rtf RTF-Dateien application/msword Word-Dateien application/msexcel Excel-Dateien application/pdf PDF-Dateien audio/basic Basis-Audiodateien (.au, .snd) audio/x-midi Midi-Dateien audio/x-mpeg MPEG 2-Dateien (.mp2) Internet-Medientypen und MIME 12 audio/x-pn-realaudio Real-Audio-Dateien (.ram, .ra) audio/x-wav Wav-Dateien (.wav) image/gif Bilddateien im GIF-Format (.gif) image/jpeg Bilddateien im JPEG-Format (.jpg, .jpeg, .jpe) image/tiff Bilddateien im TIFF-Format (.tiff, .tif) message/http Mail im HTTP-Format message/news Mail im Format für Newsgroups multipart/byteranges Mehrteilige (Mail-)Nachricht im Byte-Format multipart/encrypted Mehrteilige, verschlüsselte (Mail-)Nachricht multipart/form-data Mehrteilige HTTP-Nachricht mit den Daten eines HTML-Formulars text/comma-separatedvalues Textdatei mit kommabegrenzten Feldwerten (.csv) text/css Cascading Style Sheets-Datei (.css) text/html HTML-Datei (.htm, .html) text/javascript JavaScript-Datei (.js) text/plain Normale Textdatei (.txt) text/richtext RTF-Datei (.rtf) text/tab-separatedvalues Textdatei mit durch Tabulatoren begrenzten Feldwerten (.tsv) video/mpeg Videodateien im MPEG-Format (.mpeg, .mpg, .mpe) video/x-msvideo Videodateien im AVI-Format (.avi) x-world/x-vrml VRML-Dateien (.wrl) Tabelle 7.2: Die wichtigsten Medientypen Eine vollständigere Liste finden Sie unter selfhtml.teamone.de/diverses/mimetypen.htm. Auf www.isi.edu/in-notes/iana/assignments/media-types finden Sie ein offizielles Verzeichnis der Medientypen. Das MIME-Format wird in den RFCs 2045, 2046 und 2077 beschrieben. Für Texttypen kann zusätzlich der Zeichensatz angegeben werden, wenn die Textdaten in einem anderen als dem ISO-8859-1-Zeichensatz codiert sind. Dazu wird das charset-Attribut durch ein Semikolon getrennt an den Medientyp angehängt: text/plain; charset=ISO-8859-2 Internet-Medientypen und MIME 13 5 *6 5 9 %% "9 +7 8 9 Das World Wide Web setzt sich aus unzähligen Webservern im Internet zusammen. Diese Server verwalten HTML-Dokumente, Grafiken, Multimedia-Dateien, Internetprogramme und andere Dateien. Ein Webserver ist ein relativ einfacher Dienst. Er horcht auf dem Port 80 auf eingehende HTTPNachrichten und wertet diese aus. Ein Client sendet über das HTTP-Protokoll (RFC 2616, siehe in Abschnitt 11.2), das auf TCP/IP aufsetzt, eine Anforderung an den Server. Darin wird der Server aufgefordert, entweder eine bestimmte Datei zum Client zu senden, gesendete Daten als Datei abzuspeichern oder ein Programm auszuführen. Multimediale Inhalte, die oft mit HTML-Dokumenten verknüpft sind, werden wie HTML-Dokumente selbst einfach zum Client gesendet. Der Webbrowser auf dem Client ist dafür zuständig, die empfangenen Daten korrekt zu interpretieren und darzustellen. Die meisten Webserver können zudem Programme ausführen, die auf dem Server gespeichert sind. Die unterschiedlichen Server unterstützen dazu verschiedene Technologien, wie CGI, Perl, PHP, JSP und ASP. Ein serverseitiges Programm erzeugt bei der Ausführung meist HTML-Code als Ergebnis und sendet diesen an den Client zurück. Der Webserver ermöglicht damit u. a. die Erstellung dynamischer Webseiten, die – im Gegensatz zu statischen Webseiten – immer aktuelle Informationen beinhalten (sofern die zugrunde liegenden Datenquellen auf dem Webserver gepflegt werden). Mit diesem Thema beschäftigt sich das Buch ab Kapitel 9 noch sehr ausführlich. Ein Webserver ist mit verschiedenen Ordnern verknüpft, die die Webdateien enthalten. Wenn der Server läuft, kann ein Client diese Dateien über die IP-Adresse oder den Namen des Servers (sofern die IP-Namensauflösung möglich ist) abrufen. Eine Datei default.htm, die direkt im Root-Ordner des Servers Trillian (im Intranet) gespeichert ist, wird z. B. im Webbrowser so abgerufen: http://Trillian/default.htm Webdateien werden ausgehend von einem logischen Root-Ordner (der in der Konfiguration des Webservers angegeben ist) in physikalischen oder virtuellen Unterordnern verwaltet. Beim Zugriff auf Webdateien müssen die Unterordner deshalb in vielen Fällen in der URL angegeben werden. Eine Datei, die in einem Unterordner mit Namen Shop gespeichert ist, wird beispielsweise so abgerufen: http://Trillian/Shop/default.htm Wenn die Namensauflösung nicht funktioniert (z. B. weil einem Rechner im Internet noch kein Domänenname zugeordnet wurde), können Sie natürlich auch alternativ die IP-Adresse angeben: http://192.168.0.1/Shop/default.htm Jeder Rechner, der an das Internet angeschlossen ist, kann einen Webserver ausführen. Dazu ist lediglich die Installation des Webservers selbst (z. B. der Internet Informationsdienste bei Windows 2000) und eine Internetanbindung notwendig. Wenn Sie auf einem an das Internet angeschlossenen Rechner einen Webserver betreiben, kann jeder Internetnutzer die dort verwalteten HTML-Dokumente und Programme über die IP-Adresse Ihres Rechners abrufen. Probieren Sie dies einfach einmal aus, wenn Sie die Internet Informationsdienste auf einem Rechner installiert haben, der eine Internetverbindung besitzt. Öffnen Sie die Internetverbindung, lesen Sie die meist dynamisch vergebene IP-Adresse über das Programm ipconfig aus (das Sie in der Konsole starten können), besuchen Sie einen Freund oder eine Freundin mit Internetanschluss und geben Sie in deren Webbrowser die IP-Adresse Ihres Rechners ein. Sie sehen dann die Startseite Ihres Webservers. Die (für Programmierer) wichtigsten Internetdienste 14 5 : Der FTP-Dienst des Internet setzt sich ähnlich dem WWW-Dienst aus einer Vielzahl von FTP8Servern zusammen. Jeder an das Internet angeschlossene Rechner kann einen FTP-Server verwalten. Ein solcher Server arbeitet ähnlich einem Webserver. Der Unterschied ist, dass eine Clientanwendung lediglich freigegebene Dateien von einem FTP-Server abrufen kann (die Ausführung von Programmen ist über FTP-Server nicht möglich). Zudem erlauben FTP-Server auch den einfachen Upload von Dateien zum Server und das Erstellen und Löschen von Dateien und Ordnern. Da der Dateidownload und auch der Upload mittlerweile immer mehr über Webserver realisiert wird, nimmt die Bedeutung von FTP zunehmend ab. 5 2 " Für das Versenden von E-Mails werden SMTP-Server verwendet. Ein im Netzwerk des Netzbetreibers laufender SMTP-Server übernimmt normalerweise das Weitersenden von E-Mails, nachdem ein Mailclient die Mail zu diesem Server übertragen hat. Der Server verwendet dabei das Simple Mail Transfer Protocol (SMTP), das auf TCP/IP aufsetzt und ein einfaches textbasiertes Protokoll ist. Dieses Protokoll ist im RFC 821 definiert. In Abschnitt 11.4 beschreibe ich die Grundlagen von SMTP. In einem Netzwerk eingegangene Mails werden meist auf einem POP-Server gespeichert. Dieser Server ermöglicht einem Client, die Mails über das POP-Protokoll (Post Office Protocol) abzufragen. Ein Problem von POP-Servern ist allerdings, dass ein Mailclient die Mails herunterladen und auf dem lokalen Rechner speichern muss. Will ein Anwender seine gespeicherten Mails von einem anderen Rechner aus abrufen, ist dies mit einem POP-Server prinzipiell nicht möglich. Dieses Problem lösen Server, die mit dem IMAP-Protokoll (Internet Message Access Protocol) arbeiten. Bei diesen Servern bleiben eingegangene Mails auf dem Server gespeichert und können deshalb auch von beliebigen Rechnern aus mehrfach abgerufen werden. 8 File Transfer Protocol Die (für Programmierer) wichtigsten Internetdienste 15 ; 8 4 " " Das Internet basiert auf der untersten Ebene auf dem IP-Protokoll. Alle Daten werden über dieses Protokoll versendet. Die Protokolle UDP und TCP setzen auf IP auf und erweitern diese Protokolle um wichtige Features, wie beispielsweise Angaben zum Port des Clients und zum Zielport. Höhere Protokolle, wie z. B. HTTP und SMTP, basieren auf UDP oder TCP. Die folgenden Abschnitte beschreiben die niedrigen Protokolle, die höheren werden im Kapitel 11 beschrieben. ; " " Damit die Kommunikation zwischen den verschiedensten Rechnern im Internet überhaupt funktioniert, werden Daten im Internet über das standardisierte IP9-Protokoll versendet. Eine ausführliche Beschreibung dieses Protokolls finden Sie im RFC 791. Beim IP-Protokoll werden die zu sendenden Daten in Pakete, die so genannten Datagramme, verpackt und mit zusätzlichen Informationen versehen. Ein Datagramm besteht aus einem Header, der Kontrollinformationen und die Ursprungs- und Zieladresse speichert, und aus den zu versendenden Daten. Die Größe des Headers kann fünf oder sechs 32-Bit-Wörter betragen, die aus einzelnen Feldern bestehen. Das sechste Wort ist optional. Deswegen verwaltet das Feld IHL (Internet Header Length) die aktuelle Größe des Headers. Abbildung 9.1 zeigt die schematische Darstellung eines IPDatagramms. Abbildung 9.1: Format von IP-Datagrammen Anhand der Zieladresse im Header können Router die einzelnen Datagramme durch das Internet leiten. Die Ursprungsadresse wird vom empfangenden Dienst dazu verwendet, eventuelle Ergebnisdaten zurückzusenden. Beim Senden der Daten kommt es vor, dass einzelne Datagramme für ein Netzwerk, das dieses Datagramm übertragen soll, zu groß sind. Die recht großen Pakete eines Ethernet-Netzes können in einem X.25-Netz beispielsweise nicht direkt versendet werden. Der Gateway dieses Netzwerks teilt die Datagramme dann in kleinere Fragmente auf. Diese Fragmente besitzen dasselbe Format wie das gesamte Datagramm. Das Feld Identifikation speichert dann eine Information, zu welchem Datagramm das Fragment gehört, im Feld Fragmentierungs-Offset wird die Position des Fragments im Datagramm verwaltet. Im Feld Flags verwaltet IP eine Information darüber, ob ein Fragment das letzte eines Datagramms ist. 9 Internet Protocol Einfache Internetprotokolle 16 Damit Datenpakete nicht endlos durch das Internet geroutet werden, wenn der Empfänger nicht erreichbar ist, verwaltet das Feld Time to Live einen Wert, der von jedem Router um den Wert 1 reduziert wird. Erkennt ein Router, dass dieser Wert 0 ist, verwirft er das Paket einfach. Die Anwendung, die das Datenpaket gesendet hat, erkennt nach einer gewissen Zeit an der fehlenden Antwort, dass der Empfänger nicht verfügbar ist. Das IP-Protokoll besitzt keine Möglichkeit, die Zustellung der Daten zu garantieren, empfangene Daten auf Fehler zu überprüfen (lediglich die Header-Informationen können an Hand der HeaderPrüfsumme überprüft werden) und Prozesse auf dem Zielrechner zu adressieren. Die maximale Länge der Daten ist zudem beschränkt, weil ein Datagramm nur eine für das Quellnetzwerk maximale Größe annehmen kann. Eine Einschränkung entsteht daraus aber nicht, weil das IP-Protokoll lediglich auf der untersten Ebene arbeitet. Programme, die über das Internet kommunizieren wollen, können IP nicht direkt nutzen. Dazu stehen die höheren Protokolle UDP und TCP zur Verfügung, die die Einschränkungen von IP aufheben. ; . " " Das UDP-Protokoll (User Datagram Protocol) setzt auf dem IP-Protokoll auf und erweitert dieses um Informationen über den Ursprungs- und den Zielport, um eine weitere Prüfsumme und um eine Längenangabe für die eigentlichen Daten. Diese Informationen werden in den ersten beiden 32-BitWörtern des IP-Datenbereichs gespeichert. Abbildung 9.2 stellt diesen Bereich dar (ohne die HeaderFelder des IP-Datagramms). Abbildung 9.2: Format von UDP (ohne IP-Headerfelder) Mit UDP kann ein Programm Daten an einen definierten Zielport senden und den eigenen Port für die Antwort zum Server übermitteln. Eine Überprüfung der Daten auf das korrekte Versenden ist nicht möglich. Die Prüfsumme im UDP-Header wird lediglich zur Kontrolle der Headerinformationen verwendet. Zudem ist die Größe der Daten auf die Maximalgröße der Datagramme beschränkt. UDP sendet die Daten ohne zu überprüfen, ob der Empfänger überhaupt zum Empfang bereit ist. Ist der Empfänger nicht bereit, gehen die gesendeten Daten einfach verloren. UDP wird für eine performante Übertragung geringer Datenmengen verwendet. Um eine relative Übertragungssicherheit zu ermöglichen, geben Serverdienste, die UDP verwenden, möglichst immer eine Antwort auf eine Anforderung. Geht eine Antwort beim Client ein, wird das als erfolgreiche Übertragung gewertet. Geht keine Antwort ein, wird die Anforderung einfach erneut gesendet. Das bei TCP wesentlich aufwändigere Verpacken der Daten und der Verbindungsaufbau vor dem Senden erfordern oft mehr Verwaltungsaufwand als das eventuell erneute Senden bei UDP. Eine Beschreibung des UDP-Protokolls finden Sie im RFC 768. Einfache Internetprotokolle 17 ; : " " Das wesentlich häufiger verwendete TCP-Protokoll (Transmission Control Protocol) setzt wie UDP ebenfalls auf IP auf. TCP erweitert IP um: • eine Überprüfung der Bereitschaft des Empfängers, • eine Überprüfung der empfangenen Daten über eine Prüfsumme, • eine relativ sichere Zustellung der Daten • und die Fähigkeit, große Datenmengen in mehrere Pakete aufgeteilt zu versenden. Wie bei UDP verwaltet das TCP-Protokoll zusätzliche Headerinformationen im IP-Datenbereich. Abbildung 9.3: Format des TCP-Protokolls Die zu sendenden Daten werden in kleine Pakete aufgeteilt. Jedes Paket erhält eine Sequenznummer. Der Empfänger kann die einkommenden Pakete an Hand dieser Nummer in der richtigen Reihenfolge zusammensetzen. Da jedes Paket zusätzlich mit einer Prüfsumme versehen ist, kann der Empfänger überprüfen, ob die Daten auf ihrem Weg eventuell beschädigt wurden. Erhält der Empfänger beschädigte Pakete oder sind Pakete verloren gegangen, fordert er die fehlenden Pakete einfach nach einer gewissen Zeit vom Sender nach. Damit ist die Zustellung von Daten bei TCP sehr sicher. Um das Versenden der Daten von Rechner A zu Rechner B zu garantieren, baut TCP zunächst eine Verbindung zum Zielrechner auf. Dazu sendet TCP zunächst ein Segment an Rechner B mit der Aufforderung, die Sequenznummern der folgenden Pakete zu synchronisieren. Der Zielrechner erkennt dies als Verbindungswunsch, liest die Startsequenznummer10 des Senders aus und antwortet mit einem Segment, in dem er Rechner A die Startsequenznummer der Pakete seiner potenziellen Antwort mitteilt. Daran erkennt Rechner A die Bereitschaft und beginnt mit dem Senden der Daten. Die einzelnen Pakete können dabei in loser Reihenfolge versendet werden und gehen häufig unterschiedliche Wege durchs Internet. Die Reihenfolge, in der die Pakete ankommen, ist also nicht festgelegt. An Hand der Sequenznummern kann der Zielrechner die Daten korrekt zusammensetzen. Nach dem Senden der Daten sendet TCP ein Segment mit der Information, dass keine Daten mehr folgen. Der Zielrechner sendet daraufhin das Ergebnis der Anforderung (vielleicht eine HTML-Seite), natürlich wieder in Pakete unterteilt. Danach wird die Verbindung mit dem Senden eines Segments abgeschlossen, das wiederum Rechner A mitteilt, dass keine Daten mehr folgen. 10 Die Startsequenznummer wird von TCP nicht vorgeschrieben, ist aber meistens die 1. Einfache Internetprotokolle 18 Dieser Handshake zwischen den beteiligten Rechnern sichert ab, dass die Daten beim jeweiligen Zielrechner ankommen. Wie bei UDP wird der Dienst des Zielrechners und die Anwendung auf dem Client über Ports adressiert, die den TCP-Paketen beigefügt werden. Das TCP-Protokoll wird im RFC 793 beschrieben. Einfache Internetprotokolle 19 <# Auf Rechnern, die an das Internet oder an ein Intranet angeschlossen sind, sorgen so genannte SocketDienste dafür, dass die zu sendenden und empfangenen Daten entsprechend dem TCP- bzw. dem UDP-Protokoll verarbeitet werden. Socket heißt übersetzt »Steckdose«. Ein Socket verbindet wie eine Steckdose zwei entfernte Geräte miteinander, ohne dass man wissen muss, wie die Verbindung physikalisch realisiert wird. Unter Windows übernimmt diese Aufgabe die Winsock-Schnittstelle, die ein Teil des Windows API11 ist. Diese Schnittstelle können Sie direkt über das Windows-API nutzen, was allerdings recht komplex ist. Einfacher ist die Verwendung von speziellen Komponenten, die meist Bestandteil einer Programmiersprache sind. Unter Visual Basic 6 nutzen Sie dazu z. B. das Winsock-Steuerelement, unter C#, Visual Basic.NET und anderen .NET-Sprachen nutzen Sie die Socket-Klasse (die Sie im Namespace System.Net finden). Damit können Sie eigene Server und Clients entwickeln, die über TCP oder UDP miteinander kommunizieren, ohne sich mit den komplexe Protokollen auseinandersetzen zu müssen. Kapitel 19 beschreibt, wie Sie eine eigene TCP- oder UDPKommunikation aufbauen. 11 API = Application Interface. Eine Schnittstelle zu den Funktionen einer Applikation, meist in Form von klassischen DLL-Dateien oder COM-Komponenten. Das Windows-API beinhaltet ca. 1000 Funktionen, die Programme nutzen können, um auf die Funktionalität von Windows zurückzugreifen. Socket-Dienste 20 7 8 8)8 " " Neben den bereits beschriebenen Protokollen IP, TCP und UDP (Kapitel 9) werden im Internet noch einige weitere Protokolle verwendet. E-Mails werden z. B. über das SMTP-Protokoll versendet, HTML-Seiten über das HTTP-Protokoll. Die für Programmierer wichtigsten Protokolle beschreibe ich in den folgenden Abschnitten. Wenn Sie diese Protokolle grundlegend kennen, verstehen Sie die Kommunikation zwischen einem Internetserver und einem Client wesentlich besser und können sich viele Fragen selbst beantworten. Die Frage, wie ein Programm, das auf einem Webserver ausgeführt wird, den Browsertyp erkennt, ist beispielsweise damit beantwortet, dass der Browser Informationen über sich selbst im Header der HTTP-Nachricht mitsendet. : "$% : ! %% Wenn Sie die IP-Protokolle einmal selbst erforschen oder ausprobieren wollen, helfen Ihnen wahrscheinlich die drei Tools, die ich hier kurz vorstelle: Ein Paket-Sniffer überwacht die Netzwerkkarte und zeigt die empfangenen und gesendeten IP-Pakete an, Telnet hilft dabei, die höheren Protokolle einmal selbst auszuprobieren. Statt dem recht einfachen Telnet können Sie auch den von mir programmierten IP-Client verwenden, dessen Quellcode und Installationsversion Sie auf der Buch-CD finden. # $% " ! %% Wenn Sie die IP-Protokolle selbst einmal erforschen wollen, empfiehlt sich ein Paket-Sniffer. Ein solches Tool fängt alle Pakete ab, die über das Netzwerk gesendet werden, und zeigt diese an. Ein hervorragender (weil sehr einfacher) Sniffer ist der Shareware-Sniffer von Ufasoft (www.ufasoft.com/sniffer). Die Shareware-Version läuft ohne Einschränkungen. Die Vollversion kostet 20 Dollar. Eine kostenfreie Alternative ist das Freeware-Tool Ethereal (www.ethereal.com/distribution/win32/). Dieser Sniffer besitzt mehr Möglichkeiten, ist jedoch auch komplizierter zu konfigurieren und besitzt keine Möglichkeit, die Pakete im Klartext anzuzeigen. Die wichtigsten höheren Protokolle 21 Abbildung 11.1: Der Sniffer von Ufasoft Der Ufasoft-Sniffer ist einfach zu bedienen. Im Menü Tools / Select Adapter können Sie die Netzwerkkarte auswählen, die überwacht werden soll (falls mehrere installiert sind). Im linken oberen Fensterbereich stellen Sie ein, welche Protokolle überwacht werden sollen. Für die Überwachung der höheren Protokolle stellen Sie TCP ein. Wenn Sie den PACKETS-Eintrag im Protokoll-Ordner aktivieren, können Sie noch einstellen, ob alle oder nur bestimmte Ports überwacht werden sollen. Wenn Sie nur HTTP-Anforderungen und -Antworten überwachen wollen, sollten Sie hier nur den Port 80 einstellen. Ansonsten erhalten Sie viele Pakete, die uninteressant sind. Mit (F5) starten Sie die Überwachung. Die gesendeten und empfangenen Pakete können Sie anschauen, indem Sie im linken oberen Bereich auf das Protokoll klicken. Über das VIEW-Menü können Sie die Ansicht der Pakete zwischen Hex-Werten und Text umschalten. Beachten Sie, dass die mir vorliegende Version 3.0 Build 72 die eingefangenen Pakete nur dann direkt anzeigt, wenn Sie den Eintrag PAKETS aktivieren. Ist dieser Eintrag nicht aktiviert, werden die Pakete erst angezeigt, wenn Sie kurz ein anderes Protokoll und danach wieder das TCP-Protokoll auswählen. Ein Sniffer überwacht den Netzwerkverkehr auf der Netzwerkkarte. Deshalb funktioniert ein Sniffer nur dann korrekt, wenn er auf dem Server installiert ist und die Anfragen von einem anderen Rechner aus über das Netzwerk erfolgen. Wenn Sie z. B. einen Webbrowser auf demselben Rechner verwenden, dessen Netzwerkkarte der Sniffer überwacht (Sniffer können auch entfernte Netzwerkkarten überwachen), werden Sie kein Ergebnis erhalten. Die lokale Kommunikation läuft eben nicht über die Netzwerkkarte. Sie benötigen also zumindest zwei Rechner, um die Netzwerkpakete abfangen zu können (oder einen Trick, den ich allerdings nicht kenne ...). Die wichtigsten höheren Protokolle 22 :" Bei der Beschäftigung mit Protokollen ist es sehr hilfreich, wenn Sie die Protokolle selbst ausprobieren können. Dazu können Sie einfach den Telnet-Client verwenden, der bei Windows beiliegt. Telnet nutzt das spezielle Telnet-Protokoll und wird eigentlich dazu verwendet, entfernte Rechner fernzuwarten. Aber Sie können eben auch die höheren Internetprotokolle über Telnet verwenden. Der Microsoft-Telnet-Client ist leider nicht allzu benutzerfreundlich. In Windows NT scheiterten meine Versuche schon daran, dass ich meine eingegebenen Daten nicht sah (weil das lokale Echo ausgeschaltet war, aber ich nicht wusste, wie ich dies einschalten sollte). In Windows 2000 ist Telnet allerdings (wieder) ein einfaches Konsolenprogramm, das leichter anzuwenden ist. Rufen Sie Telnet über die Kommandozeile auf, indem Sie idealerweise zunächst kein Befehlszeilenargument angeben (alternativ können Sie Telnet so starten, dass die Verbindung zum Server direkt aufgebaut ist). Nur dann können Sie nämlich das lokale Echo einschalten, das dazu führt, dass Sie Ihre Eingaben sehen: C:> Telnet Microsoft Telnet> set local_echo Danach können Sie die Verbindung über den open-Befehl aufbauen, dem Sie den Server und den Port übergeben. Für eine HTTP-Sitzung auf dem Rechner »Zaphod« sieht der Aufruf z. B. so aus: open zaphod 80 Ist die Verbindung aufgebaut, sehen Sie ein leeres Konsolenfenster. Hier geben Sie Ihre Anforderungen ein. Einzelne Zeilen werden gesendet, indem Sie die Return-Taste betätigen. Abbildung 11.2 zeigt eine erfolgreiche Telnet-HTTP-Sitzung. Abbildung 11.2: Eine Telnet-HTTP-Sitzung Beachten Sie, dass HTTP 1.1 erwartet, dass Sie den Namen des angesprochenen Servers im HOST-Header mit angeben, wie es Abbildung 11.2 zeigt. Ohne Host-Header erhalten Sie als Ergebnis nur den HTTP-Status »400 − Bad Request«. Die wichtigsten höheren Protokolle 23 %4" " 6 : . Leider ist Telnet nicht allzu benutzerfreundlich. Mit Telnet fühlte ich mich in die Computer-Steinzeit zurückversetzt. Nervig ist schon allein, dass Sie alle Eingaben immer wieder neu schreiben müssen, wenn Sie diese wiederholen wollen. Um die Telnet-Probleme zu lösen habe ich einfach mit Visual Basic 6 und C# je einen einfachen IP-Client entwickelt, der die Protokolle TCP und UDP unterstützt. Sie finden diesen Client im Quellcode und als Setup auf der Buch-CD. Abbildung 11.3 zeigt eine HTTP-Sitzung mit meinem kleinen IP-Client. Abbildung 11.3: Der einfache IP-Client mit einer ausgeführten HTTP-Anforderung Die wichtigsten höheren Protokolle 24 =:: " " Das HTTP-Protokoll wird für die Kommunikation mit Webservern verwendet. Über dieses Protokoll kann ein Client Daten vom Server abfragen, Prozesse starten und Dateien uploaden. Der Server sendet angeforderte Daten ebenfalls über HTTP zum Client. Das HTTP-Protokoll besteht aus einem HTTP-Header und einem optionalen Datenbereich. Der HTTP-Header enthält einen der möglichen HTTP-Befehle (Get, Put, Post etc.) mit Argumenten und weitere Daten, wie z. B. Informationen über den Browser. Der Datenbereich enthält das HTMLDokument bzw. Daten, die der Client zum Server hochladen will. Das HTTP-Protokoll wird im RFC 2616 beschrieben. Eine HTTP-Sitzung besteht aus einem »Request« (der Anforderung) und einem »Response« (der Antwort). Ein Client fordert den Server in einem Request auf, entweder Ressourcen (HTML-Dokumente, Bilder etc.) zu liefern, Programme auszuführen oder Dateien hochzuladen. Der Server antwortet mit einem Response auf diese Anforderung. > ? $" 8 =:: ( 8 8 HTTP-Nachrichten bestehen aus einzelnen Zeilen, die jeweils mit einem Carriage Return/Linefeed (CRLF = Unicode-Zeichen 13 + 10) abgeschlossen sind. Die erste Zeile enthält einen HTTP-Befehl (der auch als »HTTP-Methode« bezeichnet wird). Danach folgen einzelne Felder, die zusätzliche Informationen zum Befehl liefern. Dieser HTTP-Header wird mit einer leeren Zeile abgeschlossen. Danach folgt der optionale Datenbereich. In diesem Bereich sendet der Server angeforderte Ressourcen, z. B. ein HTML-Dokument, zum Client. Bei einem Datei-Upload sendet der Client diese Datei ebenfalls im Datenbereich zum Server. Tabelle 11.1 beschreibt die Befehle der HTTP-Version 1.1. Methode Bedeutung GET URI HTTP-Version Über GET fordert ein Client eine Ressource an, deren Adresse in einem URI angegeben ist. GET kann mit If-Feldern im Header erweitert werden. If-Modified-Since bewirkt beispielsweise, dass nur Dokumente abgerufen werden, die ein neueres Datum besitzen, als in diesem Feld angegeben ist. HEAD URI HTTP-Version HEAD ist zunächst identisch mit GET mit dem Unterschied, dass der OPTIONS URI HTTP-Version OPTIONS fragt die Möglichkeiten der Kommunikation zwischen POST URI HTTP-Version POST wird verwendet, um Daten vom Client zum Server zu PUT URI HTTP-Version Mit PUT kann ein Client Daten an den Server übertragen, die dieser unter dem im URI angegebenen Dateinamen speichern soll (vorausgesetzt, der Benutzer besitzt das Schreibrecht auf dem Server keine Daten in der Antwort übertragen darf. Damit können Informationen über die angeforderte Ressource ausgelesen werden ohne die Ressource selbst zu übertragen. Client und Server für einen bestimmten URI ab. Der Server antwortet mit einer Liste der möglichen HTTP-Methoden. übertragen, die zu dem angegebenen URI gehören. Ein ausgefülltes HTML-Formular wird z. B. über POST an ein Programm auf dem Server übertragen (das im URI angegeben ist) und dort ausgewertet. Die wichtigsten höheren Protokolle 25 Ordner). DELETE URI HTTP-Version Mit dieser Methode kann ein Client eine Datei auf dem Server löschen, sofern das entsprechende Recht vorliegt. TRACE URI HTTP-Version Trace führt dazu, dass der Server die übertragenen Daten wieder CONNECT Diese spezielle Methode wird mit Proxy-Servern verwendet, die dynamisch zu einem »Tunnel« umgeschaltet werden können (was immer das auch ist ...). zurücksendet. Diese Methode wird verwendet, um in fehlerhaften Systemen herauszufinden, welche Daten der Server wirklich erhält. Tabelle 11.1: Die Methoden von HTTP 1.1 Header-Felder, die der Befehlszeile folgen, übermitteln spezifische Informationen oder erweitern den Befehl. Einige Header-Felder werden in Anforderungen und Antworten gemeinsam verwendet, andere gelten nur für Anforderungen oder Antworten. Tabelle 11.2 beschreibt die (für Internetprogrammierer) wichtigsten gemeinsamen Felder, Tabelle 11.3 die wichtigsten Felder einer Anforderung und Tabelle 11.4 die wichtigsten einer Antwort. Feld Bedeutung Connection In diesem Feld kann der Sender spezifizieren, ob er die Verbindung nach dem Senden der Daten noch aufrechterhalten oder schließen wird. Mit dem Wert KeepAlive signalisiert der Sender, dass er die Verbindung aufrechterhält, was immer dann verwendet wird, wenn der Empfänger Daten zum Sender zurücksenden soll. Mit dem Wert Close signalisiert der Sender, dass die Verbindung seinerseits geschlossen wurde und der Empfänger keine Daten zurücksenden sollte. Content-Type spezifiziert den MIME-Typ der gesendeten Daten. Für HTML-Dokumente wird in diesem Feld beispielsweise der Typ text/html angegeben. Date Dieses Feld speichert das Datum, an dem die Nachricht generiert wurde. Via In diesem Feld legt ein Proxy oder Gateway Informationen ab, wenn er eine HTTPNachricht weiterleitet. Da dieses Feld mehrfach vorkommen kann, kann der Empfänger daraus den Weg einer HTTP-Nachricht nachvollziehen. Tabelle 11.2: Die wichtigsten allgemeinen HTTP-Header-Felder Feld Bedeutung Accept definiert die akzeptierten Medientypen für die Antwort. Accept-Charset definiert die akzeptierten Zeichensätze für die Antwort. Accept-Encoding definiert die akzeptierten Verschlüsselungen für die Antwort. Accept-Language definiert die akzeptierten Sprachen für die Antwort. Authorization enthält die (einfach verschlüsselten) Logindaten des Benutzers für geschützte Webs. Cookie sendet ein zuvor vom Webserver an den Browser gesendetes Cookie zum Webserver zurück. Ein Cookie ist eine Informationseinheit, die ein HTMLDokument auf dem Rechner des Anwenders ablegen kann und die im HTTPHeader zum Webserver zurückgesendet wird, wenn der Anwender dieses Dokument noch einmal abruft. Cookies erlauben das persistente Speichern von Daten in einer Internetanwendung und werden häufig verwendet, um den Anwender zu identifizieren. From kann verwendet werden, um die E-Mail-Adresse des Benutzers oder spezielle Logging-Informationen an den Server zu übertragen. Die wichtigsten höheren Protokolle 26 Host enthält die Hostadresse und den Port des Servers. If-Modified-Since definiert, dass die angeforderte Ressource nur dann übertragen werden soll, wenn diese seit dem angegebenen Datum modifiziert wurde. If-UnmodifiedSince wie If-Modified-Since, nur negiert ProxyAuthorization enthält Informationen, die den Client gegenüber einem Proxy identifizieren. Referer definiert die URL des Aufrufers. »Referer« ist übrigens falsch geschrieben und müsste eigentlich »Referrer« heißen. User-Agent enthält Informationen über den Client wie z. B. den Browsertyp und die Version. Tabelle 11.3: Die wichtigsten HTTP-Header-Felder einer Anforderung Feld Bedeutung Accept-Ranges Über dieses Feld teilt der Server dem Client mit, ob und welche Bereichsanforderungen er erlaubt. Die einzigen Werte für dieses Feld nach HTTP 1.1 sind byte und none. Sind Byte-Bereichsanforderungen erlaubt, kann der Client nur einen Teil (einen Bereich) einer Ressource abfragen, damit nicht die gesamte Ressource gesendet werden muss. Das ist beispielsweise der Fall, wenn in einem zuvor abgebrochenen Download bereits ein Teil einer Datei im Cache des Client gespeichert ist. Content-Location Wenn die angeforderte Ressource an einem anderen Ort gespeichert ist, als in der URI der Anforderung angegeben, kann der Server in diesem Feld den tatsächlichen Ort zum Client zurückmelden. Last-Modified enthält das Datum der letzten Änderung der angeforderten Datei. Dieses Feld wird vom Browser verwendet, um zu kontrollieren, ob er ein eventuell zuvor gecachtes Dokument neu cachen muss. Location Location wird verwendet, um den Client auf eine andere URL umzulenken (Redirect). Der Client erhält eine Antwort mit dem Status »302 − Object moved« mit der Angabe der URL der Ressource, auf die umgeleitet wurde, im Feld Location. Der Client reagiert normalerweise darauf, indem er die Ressource über die neue URL neu anfordert. Server Dieses Feld enthält Informationen über den Server. Set-Cookie Dieses Feld teilt dem Browser mit, dass er ein Cookie speichern soll. WWW-Authenticate Dieses Feld wird in einer HTTP-Nachricht mit dem Status 401 (Access denied) gesendet und definiert die möglichen Authentifizierungs-Methoden für den Client. Tabelle 11.4: Die wichtigsten HTTP-Header-Felder einer Antwort Die wichtigsten höheren Protokolle 27 Im Header einer Anforderung (dem Request) sendet ein Client in der ersten Zeile einen HTTP-Befehl zum Server. Bei den meisten Befehlen wird die verwendete HTTP-Version mit angegeben. In den folgenden Zeilen übergibt der Client in einzelnen HTTP-Feldern zusätzliche Informationen, die z. B. definieren, welche Grafikdateitypen, Sprachen und Codierungen akzeptiert werden, und Felder mit Informationen zum Client und zum Server. Das folgende Beispiel zeigt eine typische HTTP-Anforderung in einem Intranet. Angefordert wird die Datei default.htm im Stammordner des Webservers auf dem Rechner Zaphod. Client ist der Internet Explorer 6.02 (der sich allerdings als Version 5.01 ausgibt): GET /default.htm HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.msexcel, application/msword, application/vnd.ms-powerpoint, */* Accept-Language: de Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) Host: Zaphod Connection: Keep-Alive Der Client muss nicht alle Felder spezifizieren, wie es im Beispiel oben der Fall ist. Normalerweise genügt die Angabe der Befehlszeile und des Host: GET /default.htm HTTP/1.1 Host: Zaphod Die Angabe des Host ist Pflicht bei HTTP 1.1. Geben Sie dieses Feld nicht an, erhalten Sie die HTTPStatusmeldung »400 - Bad Request« zurück. Bei Befehlen, die zu einer Antwort führen, sollte der Client die Verbindung aufrechterhalten und dem Server dies über das Connection-Feld mitteilen: GET /default.htm HTTP/1.1 Host: Zaphod Connection: Keep-Alive Ruft der Client ein Dokument ab, das bereits in seinem Cache gespeichert ist, enthält die HTTPAnforderung normalerweise im If-Modified-Since-Feld eine Angabe darüber, dass nur neuere Dokumente zurückgeliefert werden sollen: GET /default.htm HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.msexcel, application/msword, application/vnd.ms-powerpoint, */* Accept-Language: de Accept-Encoding: gzip, deflate If-Modified-Since: Sat, 23 Feb 2002 15:20:30 GMT If-None-Match: "30f488578c16c11:87d" User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) Host: Zaphod Connection: Keep-Alive Die wichtigsten höheren Protokolle 28 7 Auf eine Anforderung (Request) antwortet der Server mit einem Response. Diese Antwort besteht wieder aus einem Header und einem Datenbereich. Der Header beginnt mit einer Statuszeile, die die HTTP-Version und Informationen über den Erfolg bzw. über Fehler enthält, die bei der Abarbeitung der Anforderung aufgetreten sind. Danach folgen Header-Felder, die z. B. den Server identifizieren und das auf dem Server aktuelle Datum enthalten. Antwortet der Server z. B. auf eine GETAnforderung, sieht die Antwort des Servers etwa so aus wie im folgenden Beispiel, falls alles in Ordnung ist: HTTP/1.1 200 OK Server: Microsoft-IIS/5.0 Content-Location: http://zaphod/Default.htm Date: Sat, 23 Feb 2002 15:48:30 GMT Content-Type: text/html Accept-Ranges: bytes Last-Modified: Sat, 23 Feb 2002 15:47:18 GMT ETag: "c0f7ee5f81bcc11:abc" Content-Length: 297 <html> <head> <title>Zaphods Web</title> </head> <body bgcolor="silver" > <h1>Zaphods Web</h1> <h2>Willkommen auf Zaphods Web.</h2> <p>Hier finden Sie Beispiele für die verschiedenen Techniken der Internetprogrammierung.</p> <p><a href="index.htm">Treten Sie ein</a>.</p> </body> </html> Treten Fehler auf, antwortet der Server mit einer HTTP-Fehlermeldung (deren HTML-Text Sie in der Administration des IIS selbst definieren können). Die Anforderung einer Datei, die nicht vorhanden ist, wird z. B. mit dem HTTP-Fehler 404 beantwortet: HTTP/1.1 404 Object Not Found Server: Microsoft-IIS/5.0 Date: Sat, 23 Feb 2002 15:55:03 GMT Connection: close Content-Length: 3238 Content-Type: text/html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <html dir=ltr> <head> ... Der hier nicht dargestellte Teil der Antwort enthält den Rest des HTML-Dokuments (das bei »<!DOCTYPE« beginnt). Bei einer Anforderung mit dem If-Modified-Since-Feld antwortet der Server mit dem Status »304 – Not Modified«, wenn die Ressource nicht geändert wurde: HTTP/1.1 304 Not Modified Server: Microsoft-IIS/5.0 Date: Sat, 23 Feb 2002 15:57:03 GMT Content-Location: http://Trillian/Default.htm ETag: "30f488578c16c11:87d" Content-Length: 0 Die wichtigsten höheren Protokolle 29 Tabelle 11.5 zeigt die wichtigsten Statuscodes. Statuscode Text Bedeutung 200 OK Eine Anforderung, eine Ressource zu senden, wurde erfolgreich verarbeitet. Die angeforderte Ressource befindet sich im Datenbereich der Antwort. 201 Created Eine Anforderung, eine Ressource zu erstellen, wurde erfolgreich verarbeitet. 202 Accepted Eine Anforderung, einen Prozess auszuführen, wurde erfolgreich verarbeitet. Der Prozess kann allerdings zum Zeitpunkt der Antwort noch laufen. 302 Object moved Die angeforderte Ressource wurde verschoben. Wird zurückgegeben, wenn die angeforderte Ressource eine Weiterleitung (Redirect) enthält. Das Feld Location enthält dann den neuen URI. 304 Not modified Die angeforderte Ressource wurde (bezogen auf das im Request übertragene Dateidatum) zwischenzeitlich nicht geändert und muss deshalb nicht übertragen werden. 400 Bad Request Die Anforderung konnte vom Server aufgrund einer deformierten Syntax nicht verstanden werden. 401 Unauthorized Die Anforderung erfordert eine Autorisation des Benutzers, die nicht übergeben wurde. 403 Forbidden Der Zugriff auf die Ressource ist abgesichert und kann im aktuellen Benutzerkontext nicht erfolgen. 404 Not found Die angeforderte Ressource wurde nicht gefunden. 405 Method not allowed Die in der Anforderung angegebene Methode ist (zum gegenwärtigen Zeitpunkt) nicht erlaubt. Dieser Fehler wird z. B. dann erzeugt, wenn ein HTML-Formular abgesendet wird und der in Action angegebene Dateiname falsch ist (das muss man erst einmal herausfinden ...). 408 Request Timeout Einige Server-Antworten, wie z. B. »401 – Unauthorized«, ermöglichen dem Client eine erneute Anforderung zu senden. Antwortet der Client nicht in der Zeit, die der Server als Timeout definiert hat, antwortet der Server mit dem Status 408. 505 HTTP Version not supported Die HTTP-Version der Anforderung wird nicht unterstützt. Tabelle 11.5: Die wichtigsten HTTP-Statuscodes Die wichtigsten höheren Protokolle 30 : " " Das FTP-Protokoll erlaubt über einen FTP-Server die Arbeit mit einem entfernten Dateisystem. Mit einem FTP-Client kann ein Anwender von einem entfernten Rechner Dateien hoch- und herunterladen, Dateien und Ordner löschen, Ordner erzeugen etc. FTP basiert auf TCP/IP und ist (wie HTTP) ein relativ einfaches, textbasiertes Protokoll. Die Möglichkeiten von FTP sind aber so groß, dass ich hier nur die Grundlagen erläutern kann. Das FTP-Protokoll wird im RFC 959 beschrieben. Eine FTP-Sitzung besteht aus Anfragen des Clients und Antworten des Servers. Der Client baut eine Verbindung zum Port 21 des Rechners auf, der den FTP-Server ausführt. Der Server meldet den erfolgreichen Verbindungsaufbau mit einer Statusmeldung. Daraufhin sendet der Client den Befehl USER mit dem Benutzernamen und den Befehl PASS mit dem Passwort an den Server. FTP-Server erfordern immer einen Login mit Username und Passwort (die Dateien auf dem Server sind benutzerabhängig geschützt). Die meisten Server ermöglichen aber auch einen anonymen Login, meist über den Usernamen Anonymous mit der E-Mailadresse des Benutzers als Passwort. Das folgende Beispiel zeigt den Beginn einer FTP-Kommunikation mit dem Server ftp.microsoft.com. Die Kommunikation habe ich über meinen IP-Client ausgeführt. Server: 220 CPMSFTFTPA05 Microsoft FTP Service (Version 5.0). Client: USER anonymous Server: 331 Anonymous access allowed, send identity (e-mail name) as password. Client: PASS juergen.bayer@addison-wesley.de Server: 230-This is FTP.MICROSOFT.COM Please see the dirmap.txt 230-file for more information. 230 Anonymous user logged in. FTP kennt einige Befehle, mit denen die unterschiedlichsten Aktionen ausgeführt werden können. Der Befehl NLST ruft beispielsweise eine Dateiliste eines Verzeichnisses ab. Über RETR können Sie Dateien downloaden, DELE löscht Dateien auf dem Server etc. Tabelle 11.6 listet die wichtigsten dieser Befehle auf. Befehl Bedeutung CDUP Wechsel ins übergeordnete Verzeichnis CWD Verzeichnis Wechsel zu einem anderen Verzeichnis DELE Dateiname Löschen einer Datei HELP [Befehl] Hilfe anfordern LIST [Verzeichnis] Anforderung einer ausführlichen Dateiliste eines Verzeichnisses MKD Verzeichnis Verzeichnis erstellen MODE Moduskürzel Festlegung der Art des Datentransfers NLST [Verzeichnis] Anforderung einer einfachen Dateiliste eines Verzeichnisses PASS Passwort Angabe des Passworts des Benutzers PASV Umschaltung zum passiven Datentransfer. Der Server meldet eine IP-Adresse und eine Portnummer zurück. Der Client muss eine separate Verbindung zu diesem Port an der angegebenen Adresse aufbauen, um Daten zu empfangen. PORT Adressangabe Festlegung der IP-Adresse und des Ports des Clients für einen folgenden Datentransfer. Der Client muss eine separate Verbindung zum Server über diese Portnummer aufbauen, damit der Server Daten senden kann. Die wichtigsten höheren Protokolle 31 PWD Ausgabe des aktuellen Verzeichnisnamens QUIT FTP-Verbindung beenden RETR Dateiname Anforderung einer Datei RMD Verzeichnis Verzeichnis löschen RNFR Dateiname Datei umbenennen STAT [Dateiname] Abfrage des Status der Verbindung oder eines Dateitransfers STOR Dateiname Datei auf dem Server ablegen STOU Datei auf dem Server ablegen, wobei dieser einen eindeutigen Namen vergibt TYPE Typkürzel Festlegung des Transfer-Typs (ASCII, EBCDIC oder binär) USER Benutzername Angabe des Benutzernamens für den Login Tabelle 11.6: Die wichtigsten FTP-Befehle nach RFC 959 # Der FTP-Server antwortet auf jeden Befehl mit einem Statuscode. Die erste Ziffer dieses Codes steht für die Art der Antwort. Eine 1 steht für eine neutrale Antwort und Statusmeldungen, die unaufgefordert gesendet wurden. Eine 2 steht für eine positive Antwort auf einen Befehl, der erfolgreich ausgeführt wurde. Eine 3 steht dafür, dass ein Befehl einer Befehlsfolge korrekt ausgeführt wurde. Die Ziffer 4 spezifiziert eine negative Antwort. Der zurzeit nicht ausführbare Befehl kann aber noch einmal wiederholt aufgerufen werden. Ist die erste Ziffer 5, wurde der Befehl nicht ausgeführt und eine Wiederholung dieses Befehls macht keinen Sinn. In der Referenz finden Sie eine Liste der wichtigsten Statuscodes. ' Wenn Befehle Daten zurückliefern, erwartet FTP eine separate TCP/IP-Verbindung für das Senden der Daten. Die erste Verbindung wird als Steuerungsverbindung bezeichnet, die andere als Datenverbindung. Vor dem Abruf der Daten wird die Datenverbindung geöffnet und automatisch nach dem Abruf wieder geschlossen. Da der Server den Port des Clients kennen muss, an den die Daten gesendet werden sollen, muss der Client vor dem Abruf entweder den Befehl PORT oder PASV ausführen. Über PORT teilt der Client dem Server seine IP-Adresse und den Port mit, über den die Verbindung aufgebaut werden soll. Dazu muss der Port natürlich vorher bekannt sein. Mit PASV wird der so genannte passive Modus eingeschaltet. Der Server reserviert einen Port für die geplante Datenverbindung und meldet diesen Port zurück. Der Client kann dann einfach eine Verbindung zu diesem Port aufnehmen. Die Angabe der IP-Adresse und des Ports erfolgt in sechs Byte, die kommabegrenzt angegeben werden. Das folgende Beispiel zeigt eine solche Adressangabe: 207,46,133,140,19,131. Die ersten vier Byte stehen für die IP-Adresse, im Beispiel ist das also die Adresse 207.46.133.140. Die letzten zwei Byte stellen das niederwertige und das höherwertige Byte der 16-Bit-Portnummer dar. Die Umrechnung dieses Werts in eine Portnummer ist etwas aufwändig. Ich gehe dabei so vor: Ich rechne die beiden Bytewerte in Hexadezimalwerte um, füge diese zusammen und rechne daraus wieder den Dezimalwert aus. Im Beispiel führt 19,131 zu den Hexadezimalwerten 1316 und 8316, woraus sich 138316 ergibt, was wiederum der Portnummer 4995 entspricht. Die wichtigsten höheren Protokolle 32 Das folgende Beispiel zeigt eine FTP-Verbindung mit der Aufforderung, den passiven Datentransfermodus einzuschalten: Server: 220 CPMSFTFTPA04 Microsoft FTP Service (Version 5.0). Client: USER anonymous Server: 331 Anonymous access allowed, send identity (e-mail name) as password. Client: PASS juergen.bayer@addison-wesley.de Server: 230-This is FTP.MICROSOFT.COM. Please see the dirmap.txt file for more information. 230 Anonymous user logged in. Client: PASV Server: 227 Entering Passive Mode (207,46,133,140,19,131). Danach sollte der Client über den TYPE-Befehl den Transfer-Typ einstellen. Standardmäßig steht dieser auf ASCII. Tabelle 11.7 zeigt die verfügbaren Kürzel. Befehl Datenformat A [N|T|C] ASCII in den Modi Non Print, Telnet oder Carriage Control E [N|T|C] EBCDIC in den Modi Non Print, Telnet oder Carriage Control I Binär mit 8-Bit (I ist von Image abgeleitet) Ln Binär mit n Bit Tabelle 11.7: Die Kürzel zur Einstellung des Transfer-Typs bei FTP Für den binären Datenaustausch muss der Client die Dateien in passende Byteströme umwandeln, was hier gar nicht demonstriert werden soll (weil es dafür fertige Steuerelemente bzw. Klassen gibt). Für den einfachen Austausch von ASCII-Dateien reicht der ASCII-Modus aus: Client: TYPE A N Server: 200 Type set to A. Der Client muss dann eine Verbindung zum ermittelten Transfer-Port des Servers aufbauen. Ich verwende für das Beispiel einfach eine weitere Instanz meines IP-Clients. Danach kann der Client einen der Befehle aufrufen, die Daten abfragen. Das Beispiel ruft den LIST-Befehl auf: Client: LIST Server: 125 Data connection already open; Transfer starting. Server: 226 Transfer complete. Der Server sendet die Daten dann zu der Portnummer der Datenverbindung und schließt diese danach automatisch. Bei meinem Beispiel erhält die zweite Instanz des IP-Client die Daten (Abbildung 11.4). Die wichtigsten höheren Protokolle 33 Abbildung 11.4: Empfang von FTP-Daten über eine separate Datenverbindung #2: " " Über das SMTP-Protokoll werden E-Mails zwischen Client und SMPT-Server und zwischen SMPTServern selbst versendet. Das SMTP-Protokoll ist weniger komplex als HTTP, kennt aber dennoch viele Möglichkeiten. Deshalb zeige ich wie beim HTTP-Protokoll nur die Grundlagen. Der RFC 2821 beschreibt das SMPT-Protokoll ausführlich. Eine SMTP-Sitzung besteht aus einigen Client-Anforderungen und Antworten des Servers. Der Client baut zunächst über TCP/IP eine Verbindung zum Port 25 des Rechners auf, der den SMTP-Server ausführt. Dieser antwortet mit der Statusmeldung »250 OK«, wenn alles in Ordnung ist. SMPT kennt wie HTTP verschiedene Befehle. Um das Senden einer E-Mail einzuleiten, sendet der Client zunächst den Befehl EHLO oder HELO mit der Hostadresse des Ziels zum Server um sich zu identifizieren. Dieser antwortet wieder mit einer Statusmeldung, worauf der Client den Befehl MAIL FROM: mit der E-Mailadresse der Quelle sendet. Nach der OK-Meldung des Servers sendet der Client den Befehl RCPT TO und leitet danach über den Befehl DATA das Senden der eigentlichen E-Mail ein. Der Text der E-Mail kann wieder einen Header mit einigen speziellen Feldern enthalten, die ich später erläutere. Das Feld Subject definiert die Betreffzeile. Der Header des Nachrichtentextes wird über eine Leerzeile vom eigentlichen Text getrennt. In den folgenden Zeilen folgt der Text der E-Mail. Abgeschlossen wird dieser über einen Punkt, der alleine in einer Zeile steht. Das folgende Beispiel einer SMTP-Sitzung demonstriert dieses Hin und Her von Daten wahrscheinlich besser als eine weitere Erläuterung. Der Anfangszustand ist der nach dem Aufbau einer TCP/IP-Verbindung zum Port 25 des Servers mailto.t-online.de. Die Kommunikation habe ich über meinen einfachen IP-Client (Abschnitt 11.1.3) ausgeführt. Die wichtigsten höheren Protokolle 34 Server: 220 fwd05.sul.t-online.com T-Online ESMTP receiver fsmtpd ready. Client: HELO addison-wesley.de Server: 250 Ok. Client: MAIL FROM: <juergen.bayer@addison-wesley.de> Server: 250 Ok. Client: RCPT TO: <zaphod@galaxy.com> Server: 250 Ok. Client: DATA Server: 354 Ok, start with data. Client: Subject: Party? Hey Zaphod, hast Du Lust zu einer Party im Restaurant am Ende des Universums? . Server: 250 Message accepted. Client: QUIT Server: 221 fwd05.sul.t-online.com closing. Tabelle 11.8 zeigt die im RFC 2821 beschriebenen SMTP-Befehle. Befehl Bedeutung DATA leitet das Senden der eigentlichen Maildaten ein. EHLO Identifikation Über diesen Befehl beginnt ein Client das Senden einer oder mehrerer E-Mails. Im Argument gibt er eine Information zur seiner Identifikation an. HELO Identifikation Normalerweise ist dies der komplette IP-Domänenname, wenn dieser verfügbar ist. Ist dieser nicht bekannt, reicht auch die Angabe eines Kürzels und der Toplevel- und der Subdomäne. Der Server antwortet mit einer Statusmeldung 250, wenn er bereit ist, die E-Mail(s) zu empfangen. Über den älteren HELO-Befehl beginnt der Client eine Sitzung zum Senden einer normalen 7-Bit-Mail, der erweiterte Befehl EHLO (Extended HELO) beginnt eine Sitzung, die erweiterte SMTP-Fähigkeiten wie MIME12 nutzt (sofern der Server dies zulässt). EXPAND Adresse fragt den Server, ob es sich bei der Adresse um eine Mailingliste handelt, und fordert diesen auf, die einzelnen Empfänger dieser Liste zurückzugeben. HELP Befehl führt zu der Rückgabe von Informationen zum angegebenen Befehl. MAIL FROM: Dieser Befehl initiiert das Senden einer separaten Mail innerhalb der Sitzung. Die optionale Rücksendeadresse wird vom Server für eine Rückantwort verwendet, wenn die Mail nicht zugestellt werden kann. Um eine FehlerRückmeldung zu vermeiden, kann die Rücksendeadresse weggelassen werden. [Rücksendeadresse] NOOP steht für »keine Operation« und wird verwendet, um zu prüfen, ob die Verbindung noch besteht. QUIT beendet die Verbindung. RCPT TO: Empfängeradresse legt die Empfänger fest. Dieser Befehl kann mehrfach angegeben werden um mehrere Empfänger zu spezifizieren. RSET setzt den Protokoll-Status zurück. VRFY Adresse führt zu einer Prüfung der angegebenen Adresse. Tabelle 11.8: Die SMTP-Befehle nach RFC 2821 Erwartet ein Befehl eine Adresse, so wird diese normalerweise in spitze Klammern eingeschlossen: <juergen.bayer@addison-wesley.de>. Eine leere Adresse besteht dann nur aus diesen Klammern: <>. 12 Die Multimedia Internet Mail Extension ist eine Erweiterung des E-Mail-Formats zur Übertragung von 8-BitTexten und zum Anhängen von binären Dateien an Mails. Die wichtigsten höheren Protokolle 35 %4 ? / / / % $ " Die Empfänger der Mail werden über den Befehl RCPT TO: festgelegt, der auch mehrfach angegeben werden kann. Kann die Mail an einen dieser Empfänger nicht ausgeliefert werden, sendet der zuständige Mailserver eine entsprechende Fehlermeldung an die über MAIL FROM: angegebene Rücksendeadresse (falls diese angegeben ist). Sofern der Körper der Mail keine weiteren Informationen enthält, werden die Empfänger und der tatsächliche Sender in den Informationsfeldern der Mail eingetragen (den Inhalt dieser Felder sehen Sie meist im oberen Bereich, wenn Sie eine E-Mail in einem E-Mail-Client öffnen). Sie können den Mailkörper jedoch auch mit speziellen Informationen versehen. Dazu verwenden Sie die Felder Date, From, To, Cc und Subject. Diese Felder werden in den ersten Zeilen der Mail angegeben und über eine Leerzeile von dem eigentlichen Text der Mail getrennt. Über Date können Sie das Datum bestimmen. Wenn Sie dieses nicht angeben, trägt der Server das aktuellen Datum ein. Im From-Feld können Sie die E-Mail-Adresse oder einen beliebigen Namen eintragen, der im entsprechenden Feld der Nachricht ausgegeben werden soll. Im To-Feld tragen Sie die normalen Empfänger der Mail ein. Einzelne Empfänger trennen Sie durch Semikola. Das Feld Cc (Carbon Copy) spezifiziert die Empfänger, die lediglich eine Kopie der Nachricht erhalten (was nur als Information für die Empfänger gedacht ist) und folglich nicht darauf reagieren müssen. Eine blinde Kopie einer Mail (Bcc = Blind Carbon Copy) erreichen Sie, indem Sie den Empfänger wohl über RCPT TO: angeben, diesen aber nicht im To- oder Cc-Feld aufführen. Den Betreff der Nachricht geben Sie schließlich im Subject-Feld an. Ein typischer Körper einer Mail an drei Empfänger sieht dann etwa so aus: From: juergen.bayer@addison-wesley.de To: zaphod@galaxy.com;ford@galaxy.com Cc: trillian@galaxy.com Subject: Mal wieder Zeit für eine Reise Hallo Zaphod, hallo Ford, ich will mal wieder irgendwo im Universum snowboarden. Lust mitzukommen? . Die wichtigsten höheren Protokolle 36 # # ' Der SMTP-Server antwortet auf jeden Befehl mit einem Statuscode in der Form Nummer Text. Statuscodes, die mit der Ziffer 2 beginnen, signalisieren eine positive Rückmeldung bei einfachen Befehlen, Statuscodes, die mit 3 beginnen, eine positive Rückmeldung bei mehrstufigen Befehlen. Beginnt der Statuscode mit der Ziffer 4, handelt es sich um einen vorübergehenden Server-Fehler, der eine eventuelle Wiederholung ermöglicht. Die Ziffer 5 signalisiert einen allgemeinen Fehler, der keine Wiederholung des Befehls erlaubt. Tabelle 11.9 zeigt die wichtigsten SMTP-Statuscodes. Statuscode Bedeutung 211 liefert den aktuellen Systemstatus nach NOOP oder eine Antwort auf den HELP-Befehl. 220 wird als Begrüßungsmeldung nach einem HELO oder EHLO gemeldet um anzuzeigen, dass der Server bereit ist. 221 wird als Bestätigung des QUIT-Befehls gemeldet um anzuzeigen, dass der Server die Verbindung geschlossen hat. 250 wird gesendet, wenn ein Befehl erfolgreich abgesetzt wurde. 354 wird nach DATA gesendet, um anzuzeigen, dass das Senden der Nachricht nun beginnen kann. 421 zeigt an, dass der SMTP-Dienst zurzeit nicht verfügbar ist. Das kann der Fall sein, wenn der Server gerade heruntergefahren wird. 450 zeigt an, dass die Mailbox des Empfängers zurzeit nicht erreichbar ist, was der Fall sein kann, wenn die Mailbox gerade sehr beschäftigt ist. 500 zeigt einen Syntaxfehler in der Befehlszeile an. 501 zeigt einen Syntaxfehler in den Argumenten der Befehlszeile an. Tabelle 11.9: Die wichtigsten SMTP-Statuscodes nach RFC 2821 Die wichtigsten höheren Protokolle 37 Autorativer DNS-Server 9 LIST (FTP) 31 CDUP (FTP) 31 localhost 6 CIX 2 MAIL FROM CONNECT (HTTP) 26 (SMTP) 35 CWD (FTP) 31 Medientyp 12 DATA (SMTP) 35 Methoden (HTTP) 25 Datagramm 16 MKD (FTP) 31 DELE (FTP) 31 MODE (FTP) 31 DELETE (HTTP) 26 Name Service 8 DE-NIC 8 Nameserver 8 DNS 9 NIC 8 DNS-Server 9 NLST (FTP) 31 Domain Name Service 9 NOOP (SMTP) 35 DSE 2 OPTIONS (HTTP) 25 EHLO (SMTP) 35 Paket-Sniffer 21 E-Mails PASS (FTP) 31 Grundlagen 15 PASV (FTP) 31 über SMTP versenden 34 Point of Precence 2 EXPAND (SMTP) 35 PoP 2 Extranet 5 POP-Server 15 Fragmentierung 16 PORT (FTP) 31 FTP 15 Ports 10 FTP-Protokoll 31 POST (HTTP) 25 Gateway 3 Primary-Nameserver 9 Gateways 3 Private IP-Adressen 6 GET (HTTP) 25 Protokolle HEAD (HTTP) 25 FTP 31 HELO (SMTP) 35 HTTP 25 HELP (FTP) 31 IP 16 HELP (SMTP) 35 SMTP 34 HTTP TCP 18 Anforderung 28 Antwort 29 UDP 17 PUT (HTTP) 25 HTTP-Protokoll 25 PWD (FTP) 32 IMAP-Server 15 QUIT (FTP) 32 Intranet 4 QUIT (SMTP) 35 IP-Adresse 6 RCPT TO IP-Adressklassen 6 IP-Namensauflösung 8 (SMTP) 35 Request (HTTP) 25 IP-Ports 10 Response 29 IP-Protokoll 16 Response (HTTP) 25 Klasse-A/B/C-Adresse 6 RETR (FTP) 32 Index 38 RMD (FTP) 32 Telnet 23 RNFR (FTP) 32 Toplevel-Domäne 9 Router 3 TRACE (HTTP) 26 RSET (SMTP) 35 Transfer-Typ (FTP) 33 Simple Mail Transfer Protocol 15 Transmission Control Protocol 18 SMTP 15 TYPE (FTP) 32 SMTP-Protokoll 34 UDP-Protokoll 17 SMTP-Server 15 URI 11 Sniffer 21 URL 11 Socket-Dienste 20 URN 11 STAT (FTP) 32 USER (FTP) 32 STOR (FTP) 32 User Datagram Protocol 17 STOU (FTP) 32 VRFY (SMTP) 35 Subnetze 7 Well Known Port 10 Subnetzmasken 7 Winsock-Schnittstelle 20 TCP-Protokoll 18 World Wide Web 14 Index 2