Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/03183.jsonl.gz/104

Im letzten Semester haben wir eine Web-Anwendung programmiert. Dabei haben wir Bilder, Text- und Python-Dateien auf einen Webserver geladen. Per Browser haben wir diese Webseite dann aufgerufen. Sowohl beim Veröffentlichen der Dateien (FTP) als auch beim Anschauen der Webseite im Browser (HTTP) muss unserer eigener Computer und der Webserver miteinander kommunizieren. Die verschiedenen Kommunikations-Möglichkeiten und der genaue Ablauf einer solchen Kommunikation ist in der Anwendungsschicht des TCP/IP-Modells geregelt.
Protokoll und Hostname/IP
z.B.
http://www.gymkirchenfeld.ch,
ftp://ftp.kinet.ch oder
smtp://<ip-pii>
Die Protokolle auf der Anwendungsschicht des TCP/IP-Modells legen die Kommunikation zwischen Client und Server fest. Je nach Web-Dienst kommen unterschiedliche Protokolle zum Einsatz. Man kann sich so ein Protokoll wie ein Chat zwischen zwei Programmen vorstellen.
Im vorhergehenden Chat meldet sich der Client, worauf der Server mit dem aktuellen Datum und der Uhrzeit meldet. Anschliessend ist der Chat bereits wieder beendet. So ein Protokoll könnte verwendet werden um die Uhr des eigenen Computers mit einer exakten Uhr im Internet zu synchronisieren1.
Ein ganz simples Protokoll welches aktuelles Datum und aktuelle Uhrzeit liefert ist das Daytime-Protokoll.
Vor der Kontaktaufnahme durch den Client muss der Server bereits am Zuhören sein (Bereitschaft). Verbindet sich der Client erfolgreich mit dem Server, so sind beide miteinander verbunden und Daten können ausgetauscht werden. Der Server wartet aber nicht auf irgendwelche Daten des Clients. Er schickt einfach Datum und Uhrzeit an den Client zurück. Danach schliesst der Server die Verbindung und wartet auf einen neuen Client.
Die Protokolle definieren den Ablauf der Kommunikation und die möglichen Befehle welche sich Client und Server gegenseitig schicken können. Bei einfachen Protokollen gibt es keine eigentlichen Befehle, die Kommunikation wird nur durch Aufbau seitens des Clients, Datenübermittlung und Schliessen der Verbindung durch Client oder Server geregelt. Bei komplexeren Protokollen sind verschiedene Anfragen möglich. So ist beim HTTP-Protokoll der GET-Request zum Anfordern einer bestimmter Seite nur einer von verschiedenen Befehlen, die der Client an den Server richten kann.
HTTP ist ein Protokoll zur Übertragung von Daten über ein Rechnernetz. Man verwendet es primär um Webseiten in einem Webbrowser anzuzeigen. Es kann aber auch verwendet werden um beliebige Dateien zu übertragen.
Das Protokoll definiert verschiedene Typen von requests. Der am meisten verwendete ist ein
GET-request. Mit ihm kann der Client eine Datei um Server anfordern. Daneben gibt es
POST-,
HEADER-,
DELETE- und weitere
-requests.
Wenn wir im Browser die fiktive URL
http://www.föteli.ch/gallery1/set1.html anfordern, dann läuft in etwa die folgende Kommunikation:
Der Client stellt eine Verbindung zur IP des Webserver www.föteli.ch und sendet die folgenden 3 Zeilen:
GET /gallery1/set1.html HTTP/1.1 Host: www.föteli.ch
set1.htmlim Unterordner
gallery1. Verwendet wird HTTP-Version 1.1.
Der Server liefert Infos zum request (unter anderem den Status-Code) und die HTML-Datei (falls diese existiert). Der Browser schaut sich den Code an, lädt weitere Dokumente (z.B. verlinkte Skripts und Stylesheets, aber auch Bilder, Videos und Sound) in weiteren GET-requests nach und stellt die Seite dann dar. Das Anzeigen einer Seite besteht in der Regel aus zahlreichen HTTP-GET-Requests.
Der Webserver liefert immer in der Antwort auch einen HTTP-Status mit. Diese sind mit einer dreistelligen Zahl codiert:
Das Domain Name System ist ein wichtiger Dienst des Internets. In einer weltweit verteilten hierarchischen Datenbank werden Hostnamen und zugewiesene IP-Adressen verwaltet. Durch Anfrage an einen sogenannten Nameserver können Hostnamen in IP-Adressen aufgelöst werden (forward lookup) oder es kann zu einer IP-Adresse die zuständige Domäne und der dazugehörige Hostname gefunden werden (backward lookup):
Da wir uns Telefonnummern nicht gut merken können, speichern wir sie im Telefonbuch unter einem Kontakt ab.
Wenn man z.B. im Browser die Webseite des Gymers Kirchenfeld besuchen möchte, so gibt man im Adressfenster
www.gymkirchenfeld.ch ein. Da die Verbindung zum Webserver nur bei bekannter IP-Adresse hergestellt werden kann, wird zuerst eine DNS-Anfrage an den zuständigen Nameserver geschickt. Falls dieser die Anfrage nicht beantworten kann, leitet er sie weiter an den nächsthöheren Nameserver. Falls der Hostname existiert, erhält der Browser die IP-Adresse als Antwort und kann nun den Kontakt zum Webserver aufbauen.
Wir schlagen einen Namen im Telefonbuch nach und erhalten eine Telefonnummer! Unser Telefonbuch speichert pro Namen höchstens eine Nummer!
Wenn man herausfinden möchte welcher Computer die IP-Adresse
<ip-pii> besitzt, kann man in der Eingabeaufforderung das Programm
nslookup starten (beim Programmaufruf liefert man gleich die IP-Adresse durch einen Leerschlag getrennt mit). So kann manuell eine Anfrage an den zuständigen Nameserver gerichtet werden. Kennt dieser den zur IP-Adresse gehörenden Hostnamen, wird das Ergebnis in der Eingabeaufforderung ausgegeben. Wenn er ihn nicht kennt, leitet er die Anfrage an den in der Hierarchie nächsthöheren Nameserver weiter.
Jemand ruft uns an. Anstatt die Nummer anzuzeigen – die wir wahrscheinlich nicht erkennen – zeigt uns das Telefondisplay den zugehörigen Namen an. Dieser muss nicht eindeutig sein!
Welcher Hostname befindet sich unter der IP
<ip-pii>? Verwende dazu das Kommandozeilen-Tool
nslookup. Mit einem anderen Tool namens
WHOIS kann man weitere Informationen zu einer Domäne herausfinden. Leider ist das Tool bei Windows nicht installiert. Versuche trotzdem weitere Infos zu dieser IP und dem zugehörigen Hostnamen herauszufinden.
Wenn man ein selbst ein Client-Server-Programm erstellen möchte, kann man ein eigenes Protokoll festlegen. Dieses definiert den Kommunikationsablauf zwischen Client- und Server-Programm. Wenn sich der Client nicht daran hält, versteht der Server nicht was der Client will – und umgekehrt.
Wir möchten ein Chat-Applikation programmieren. Dazu müssen wir die Kommunikation zwischen Client und Server in einem Protokoll festlegen.
a) Welche Abläufe müsste das Protokoll berücksichtigen.
b) Wir schreiben für die einzelnen, in Teilaufgabe 1 definierten Abläufe, in Gruppen ein genaueres Protokoll
Tatsächlich ist das heute zu diesem Zweck verwendete Protokoll etwas komplizierter: Um die Uhrzeit exakt zu synchronisieren, werden mehrere Server abgefragt und der Client berücksichtigt jeweils die Dauer zwischen verschickter Anfrage und erhaltener Antwort. ↩