Schicht 4: Anwendung

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://86.118.137.202

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.

Daytime-Protokoll

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.

Hypertext Transfer Protocol (HTTP)

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.

GET-request

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
  • Zeile 1: Es handelt sich um einen GET-request. Gewünscht wird die Datei set1.html im Unterordner gallery1. Verwendet wird HTTP-Version 1.1.
  • Zeile 2: Wir geben nochmals den Host-Namen mit. Dies weil mehrere Hosts auf derselben IP-Adresse laufen können. So können auf einem Webserver mehrere Webseiten gehostet werden.
  • Zeile 3: Wir schliessen den Request ab mit einer Leerzeile.

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.

HTTP-Status-Codes

Der Webserver liefert immer in der Antwort auch einen HTTP-Status mit. Diese sind mit einer dreistelligen Zahl codiert:

  • 200 OK - Erfolgreicher HTTP-request, alles paletti
  • 301 Moved Permanently - Die geforderte Resource wurde verschoben
  • 403 Forbidden - Keine Berechtigung, bitte authentifizieren
  • 404 Not Found - Die gewünschte Resource existiert nicht
  • und etwa 60 weitere...

Domain Name System (DNS)

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 192.168.9.1 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 130.92.250.18? 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.

Ein eigenes Protokoll?

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


  1. 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.