6. Rechnernetze und Internet OSI 7-Schichtenmodell Verteilte Anwendungen, allgemeines Client-Server-Modell Sockets als Kommunikationsschnittstelle Web HTTP als Verbindungsprotokoll Architektur von Webanwendungen mit client- und serverseitiger Verarbeitung Peter Sobe 1 Rechnernetze und Internet Die Vernetzung verschiedener Rechner und der darauf ablaufenden Anwendungen baut auf verschiedenen Funktionen auf, die zu einem Teil als Hardware, zum anderen als Software im Betriebssystem realisiert sind. Auch die Anwendungsprogramme tragen durch gezielte Anwendung von Netzfunktionen zum Funktionsumfang der Vernetzung bei. Hardware Systemsoftware Anwendungsprogramme Netzwerkkabel, Netzwerkkarte, Router/Switch, … TCP/IP Protokolle, Schnittstellen, Verschlüsselung, … Webbrowser, eigene programmierte Server- und Clientprogramme, … Peter Sobe 2 Ein einfaches 4-Schichten-Modell Angelehnt an TCP/IP mit Internetschicht und Transportschicht logischer Datenaustausch Rechner 1 4 3 2 1 Anwendungsschicht Transportschicht Internetschicht Netzzugangsschicht Rechner 2 http, ftp, smtp, pop, .... 4 TCP 3 IP 2 1 Anwendungsschicht Transportschicht Internetschicht http, ftp, smtp, pop, .... TCP IP Netzzugangsschicht realer Datenaustausch mit elektr. Signalen Peter Sobe 3 OSI –Modell (1) OSI-Referenzmodell: Open Systems Interconnection Reference Model Eingeführt 1983 von der ISO (Internationale Normungsorganisation) Zu dieser Zeit existierte TCP/IP bereits, das bis dahin durch ein 4-Schichtenmodell erklärt wurde. Ein Schichtenmodell ordnet verschiedenen Netzwerk-Techniken jeweils eine Schicht zu. Die oberen Schichten bauen auf der Funktionalität und den Schnittstellen der unteren Schichten auf. Peter Sobe 4 OSI –Modell (2) Peter Sobe 5 OSI –Modell (3) 1: Bitübertragungsschicht – umfasst mechanische und elektrische Elemente, das Übertragungsmedium und die übertragungstechnischen Verfahren 2: Sicherungsschicht - Techniken zum Zugriff auf das Übertragungsmedium, Datenflusskontrolle, Fehlererkennung und Fehlerkorrektur 3: Vermittlungsschicht – Weiterleitung der Datenübertragung über ein Kommunikationsnetz aus mehreren Leitungssegmenten und Schaltstellen (Router) 4: Transportschicht – Ende-zu-Ende-Steuerung für Datenströme Peter Sobe 6 OSI –Modell (4) 5: Sitzungsschicht – synchronisierter Datenaustausch, weitere Mechanismen wie z.B. RPC (Remote Procedure Call) 6: Darstellungsschicht – Herstellung einer systemunabhängigen Darstellung der Daten, ggf. Anpassung an verschiedene Darstellungsformate, Zusätzlich: Datenkompression und Verschlüsselung 7: Anwendungsschicht – verschiedene Anwendungen, wie z.B. Dateitransfer (SCP,FTP), Email, Webserver/Webbrowser Peter Sobe 7 Client-Server-Modell Wir betrachten zwei Rechner, die über das Netz verbunden sind. Auf jedem Rechner läuft eine Anwendung, die beide miteinander kooperieren, d.h. Daten austauschen. Eine Anwendung wird als Server bezeichnet, die andere als Client. Der Server stellt einen Dienst bereit und der Client ist die Anwendung, die den Dienst in Anspruch nimmt. Gefordert: Ein Protokoll, das bestimmt wie der Datenaustausch zwischen Server und Client funktioniert. Zeitliche Abfolge der Nachrichten und Regeln für Client und Server Inhalt und Format der einzelnen Nachrichten Peter Sobe 8 Client-Server-Modell Werden im Internet Dienste von allgemeinem Interesse zur Verfügung gestellt, müssen die Protokolle publiziert werden. Oft werden dann auch Clients zur Verfügung gestellt, über die solche Dienste genutzt werden können. Zugangspunkte für Dienste (Adressen) müssen bekannt sein: Adresse des Servers (IP-Adresse) Unterscheidung der Zugangspunkte, wenn ein Server mehr als einen Dienst bereit stellt (Port) Die Adressierung ist Aufgabe der Vermittlungsschicht (Schicht 3, Network Layer) im OSI-Modell IP-Schicht (Internet Schicht) im TCP/IP-Schichtenmodell Peter Sobe 9 Client-Server-Modell – Adressierung der Server Ein Dienst wird mit einer so genannten Portnummer versehen. Portnummer und Rechner (IP-Nummer) bilden ein Socket und sind im Internet eindeutig definiert. Damit gelingt es beim Datenversand im Internet durch TCP das Ziel der Daten, den Server, eindeutig zu adressieren. Server: www.htw-dresden.de IP-V4-Adr.: 141.56.16.49 WWW-Server an Port 80 FTP-Server an Ports 20,21 Peter Sobe 10 Client-Server-Modell – Adressierung der Clients Ein Client wird durch seine IP-Adresse ausgewiesen. Jede Verbindung wird clientseitig einem anderem Port zugeordnet. Damit kann der Client mehrere Verbindungen gleichzeitig aufrecht erhalten. Ports für Client-Prozesse werden durch Portmapper dynamisch vergeben. Der Client-Port wird dem Server beim Verbindungsaufbau mitgeteilt. Eine TCP-Verbindung (Socket-Verbindung) ist demnach durch das 4-Tupel (Server-IP-Addr, Server_Port, Client-IP-Addr, Client-Port) gekennzeichnet. Peter Sobe 11 Client-Server-Modell – Szenarien (1) Ein Server, mehrere Clients: Clients C1-IP-Adr, C1-Port Server Server-IP-Adr, Server-Port C2-IP-Adr, C2-Port C3-IP-Adr, C3-Port Wenn Clients auf unterschiedlichen Rechnern laufen, dann unterscheiden sich C1-IP-Adr, C2-IP-Adr und C3-IP-Adr. Wenn Clients auf dem gleichen Rechner laufen (z.B. mehrere Nutzer), dann unterscheiden sich ihre Port-Nummern, z.B. C2-Port ≠ C1-Port Peter Sobe 12 Client-Server-Modell – Szenarien (2) Ein Client, mehrere Server: Server S1-IP-Adr, S1-Port Client Client-IP-Adr, Client-Port S2-IP-Adr, S2-Port Wenn Server auf unterschiedlichen Rechnern laufen, dann unterscheiden sich S1-IP-Adr und S2-IP-Adr. Wenn verschiedene Server auf dem gleichen Rechner laufen, dann unterscheiden sich ihre Port-Nummern, z.B. S2-Port ≠ S1-Port. → Nachrichten unterschiedlicher Verbindungen sind immer unterscheidbar. Peter Sobe 13 TCP und UDP (1) TCP (Transmission Control Protocol) – Verbindungsorientiertes Protokoll aus OSI Schicht 4 setzt Adressierung und Paket-Vermittlung voraus (IP) arbeitet intern wie dargestellte Socket- und PipeKommunikation TCP garantiert Reihenfolge der Daten und Fehlerfreiheit – bei verlorenen Paketen werden diese wiederholt übertragen Auf TCP bauen viele Internetdienste auf, z.B. HTTP, FTP Peter Sobe 14 TCP und UDP (2) UDP (User Datagram Protocol) ist das verbindungslose Pendant zu TCP. Das verbindungslose UDP kann schneller sein. setzt Adressierung und Paket-Vermittlung voraus (IP) einzelne Pakete werden übertragen, ohne explizite Verbindung keine Reihenfolgegarantie Pakete können verloren gehen einige Dienste, wie z.B. Audio-Streaming verwenden UDP Peter Sobe 15 Client-Server-Kommunikation – per Socket-Verbindung (1) Eine Socket-Verbindung ist eine verbindungsorientierte Kopplung zwischen zwei Prozessen, typischerweise einem Server und einem Client. Die Verbindung wird explizit aufgebaut, danach kann bidirektional kommuniziert werden. Die Verbindung wird geschlossen, wenn sie nicht mehr benötigt wird. Vergleichbar mit Telefongespräch! Prozess-1 Peter Sobe Prozess-2 16 Client-Server-Kommunikation – per Socket-Verbindung (2) Phasen einer Socket-Verbindung als Sequenz-Diagramm Server es = socket () bind (es, address) … Angabe des Ports listen(es) Client s = socket () connect(s, address) … IP-Adresse und Port s = accept(es) write(s, …) read(s, …) write(s, …) close(s) Peter Sobe read(s, …) write(s, …) read(s, …) close(s) 17 Client-Server-Kommunikation – per Socket-Verbindung (3) • Der Server bindet eine Dienst an einen bekannten Port (bind) und akzeptiert Verbindungen (accept). • Ein Client verbindet sich mit einem Dienst an einem bekannten Port (connect). • Beide Prozesse können Daten senden und empfangen. Funktionen: write() / read() oder send() / recv() • Welcher Prozess wann sendet und wann empfängt, muss durch das Protokoll zwischen Server und Client vorab vereinbart worden sein. • Ein Server erzeugt typischerweise nach dem Annehmen einer Verbindung (accept) einen neuen Thread für die Verbindung. Der verbleibende Thread nimmt wieder neue Verbindungen an (Multi-Client Server). Peter Sobe 18 C-Quellcode des Server-Programms (1) Server source code (C language, important parts only): int entry_sock; entry_sock = socket(AF_INET,SOCK_STREAM,0); /*connect sock_address with local address and a unique port */ sock_address.sin_port = htons( (unsigned short int)(port_base + process_id*proc_inc)); sock_address.sin_addr.s_addr = INADDR_ANY; // everyone may connect sock_address.sin_family = AF_INET; rc = bind(entry_sock, (void*)&sock_address, sizeof(sock_address)); P. Sobe 19 Quellcode des Server-Programms (2) Server source code (C language, important parts only) continued: listen(entry_sock, BACKLOG); do { // wait for a new connection addrlen = sizeof(client_sock_address); new_sock = accept(entry_sock, (void*)&client_sock_address, &addrlen ); /* connection_fun starten */ params_not_copied=1; pthread_create(&connection_thread,NULL,(void*)&connection_fun,NULL); /* wait for thread until parameters got copied*/ do { } while(params_not_copied); } while(1); P. Sobe 20 Quellcode des Server-Programms (3) Server source code (C language, important parts only) continued: void connection_fun(void *param){ selected = new_sock; params_not_copied=0; … // communicate with client according a user-specified protocol read(selected,&pmessage, MSG_LEN); write(selected,&pmessage, MSG_LEN); close(selected); } P. Sobe Erklärung: pmessage ist hier die Datenstruktur, die zum Nachrichtenaustausch dient. Sie ist MSG_LEN Bytes lang. 21 Quellcode des Client-Programms Client source code (C language, important parts only): sock = socket(AF_INET,SOCK_STREAM,0); serv_addr.sin_addr.s_addr = inet_addr(server_ipaddress); serv_addr.sin_port = htons(server[i].port); serv_addr.sin_family = AF_INET; rc = connect(sock, (struct sockaddr *) &serv_addr, sizeof(serv_addr)); printf("client connected to %s:%d rc=%d \n", server_ipaddress, server[i].port, rc); write(sock, &pmessage, MSG_LEN); read(sock, &pmessage, MSG_LEN); close( sock ); P. Sobe 22 Remote Procedure Call (1) RPC: Auf Basis von Bibliotheken und Dienstverzeichnissen auf Client- und Serverseite kann ein s.g. entfernter Prozeduraufruf erfolgen (in C ist das ein Funktionsaufruf). Client Server client- und server-Stub rc=calculate(p1,p2,p3, &solution); wait … Peter Sobe calculate 23 Remote Procedure Call (2) client-stub: Stellvertreter-Prozeduren, die Parameter sammeln und eine Nachricht an den Server senden, die den Funktionsnamen und die Parameterwerte enthält. Auch Rückgabewerte werden empfangen und über die lokale Schnittstelle zurückgegeben. server stub: Empfang der Nachrichten, Aufruf der entsprechenden lokalen Funktion, Zurücksenden der Ergebnisse r = calc(a,b); Stub: receive and call local procedure Stub int calc(int x, int y) res = calc(par1,par2); OS and network stack OS and network stack P. Sobe 24 World Wide Web (auch Web) Web – basierend auf dem Internet Das Internet war bereits eher als das Web vorhanden, mit verteilten Anwendungen, Dateitransfer, NetzwerkDateisystemen (NFS) Web: entstanden durch Vorhandensein des HTTP-Protokolls, der HTML-Sprache, URLs und DNS (Distributed Name Service) Nutzung des Webs: ein klassisches Client/Server-Szenario Mit dem Web erfolgte eine Kultur- und Wirtschaftsrevolution, da sich dadurch die Verhaltensweisen der Menschen, die Organisation wirtschaftlicher Prozesse und auch politische Aspekte geändert haben. Web 2.0: kollaboratives Web, inhaltlich kein serverzentriertes Web mehr Peter Sobe 25 HTTP-Protokoll (1) Hypertext Transport Protocol, größtenteils zum Austausch von Hypertext (HTML, xHTML) benutzt Herkunft: • Das Protokoll wurde ab 1989 von Roy Fielding, Tim BernersLee und anderen am CERN entwickelt • Zusammenspiel mit den Konzepten URL und HTML. URL: Unified Ressource Locator HTML: Sprache zum Aufschreiben von Hypertext-Dokumenten → Geburt des WWW (bzw. Web) • Zur Kommunikation ist HTTP auf ein zuverlässiges Transportprotokoll angewiesen. Dafür wird in nahezu allen Fällen TCP verwendet Peter Sobe 26 HTTP Protokoll (2) Über HTTPS kann die Übertragung aber verschlüsselt erfolgen. HTTPS nutzt SSL aus Transportschicht (Secure Socket Layer) und TLS. Ein HTTPS-Dienst wird typischerweise auf Port 443 angeboten. HTTP-Eigenschaften: HTTP ist zustandslos Anfrage, Antwort, Ende: keine komplexen Kommunikationsszenarien Der Zustand eines Clients (Browsers) kann nur über s.g. Cookies verwaltet werden Typischer Protokollablauf: • Anfrage an Server: Zum Beispiel GET-Request mit Angabe des Dokumentennamen und des Servers • Antwort: OK, Infos über Server und HTML-Dokument Peter Sobe 27 HTTP-Protokoll (3) Typischer Protokollablauf: • • Anfrage an Server: GET /~sobe/Ueb_Internet/anfang.html HTTP/1.1 Host: www2.htw-dresden.de Antwort: HTTP/1.1 200 OK Date: Sun, 20 Mar 2011 11:59:21 GMT Server: Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny9 with Suhosin-Patch mod_ssl/2.2.9 OpenSSL/0.9.8g mod_perl/2.0.4 Perl/v5.10.0 Vary: Accept-Encoding Content-Length: 1538 Connection: close Content-Type: text/html; charset=iso-8859-1 < !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN„ "http://www.w3.org/TR/html4/loose.dtd" > < html> ... Peter Sobe 28 HTTP-Protokoll (4) HTTP-Operationen im Überblick: GET – Anfordern einer Ressource mit Angabe einer URL POST – Senden von Daten zum Server (z.B. für Formulare) HEAD –Anfordern eines Headers zu einer Ressource PUT – Hochladen einer Ressource, bei Webservern oft nicht implementiert DELETE – Löschen einer Ressource, bei Webservern oft nicht implementiert TRACE – Empfangen und Zurücksenden der Anforderung OPTIONS – Server liefert eine Liste der unterstützten Operationen zurück CONNECT – nur für Proxy-Server Das Hochladen von Web-Inhalten und Löschen erfolgt meistens durch andere Protokolle (z.B. SFTP Secure File Transfer Prot.) oder SSH (Secure Shell) Peter Sobe 29 HTTP-Protokoll (5) GET- Methode Die GET-Methode ist die am häufigsten eingesetzte Methode bei einer Client-Anforderung. Damit wird ein Dokument beim Webserver zum Herunterladen angefordert. Der Name des Dokumentes und eventuell sein Pfad müssen in der Request-URI angegeben sein. Beispiel: GET /beispiel.html HTTP/1.0 Antwort: Nach der Leerzeile ist der Inhalt des Body zu sehen, d.h. der Inhalt des angeforderten Dokuments in HTML. Peter Sobe 30 HTML und xHTML HTML – Hypertext Markup Language Auszeichungssprache für Web-Seiten, folgte schon dem SMGLMeta-Standard xHTML - eXtensible Hypertext Markup Language XML-konformes HTML, weitestgehend gleiche Elemente wie HTML, nun aber streng wohlgeformt Peter Sobe 31 HTML Kodierungssprache für Webseiten, aus SGML entworfen. HTML-Dokument wird im Message-Body durch HTTP übertragen Beispiel: <HTML> <HEAD><TITLE>DOM</TITLE></HEAD> <BODY BGCOLOR="yellow"> <H2>Demonstration DOM</H2> <P> <IMG SRC="Comp2.gif" /> Bild 4.1 </P> <P><I>Ende</I> </P> </BODY> </HTML> Peter Sobe 32 HTML Elemente: <TITLE>DOM</TITLE> Attribute: <IMG SRC="Comp2.gif" /> Kombination Element mit Attributen: <BODY BGCOLOR="yellow"> … </BODY> Die Elemente werden durch Tags eingefasst. und werden hierarchisch ineinander gesetzt Darstellung als Baum mit Elementen auf gleicher Ebene und unter/übergeordneten Elementen möglich. → DOM: Document Object Model eines HTML-Dokuments Peter Sobe 33 DOM (1) Element-Beziehungen im letzten Beispiel: HTML HEAD BODY TITLE H2 DOM Demonstration DOM BGCOLOR P Bild 4.1 P IMG I Ende SRC Elementknoten (Tag) Comp2.gif Attributknoten Attributwert Elementwert (Text-Knoten) Peter Sobe 34 DOM (2) DOM dient z.B. in Javascript zum Zugriff auf Elemente der dargestellten Webseite. Beispiel aus jspage.html (siehe Übung am 21.3.2013): Im Skript: <script type="text/javascript"> <!— function primzahl() { var zahl = document.Formular.Eingabe.value; … --> </script> … Peter Sobe Im HTML-Dokument: <body> … <form name="Formular" action=""> <input type="text„ name="Eingabe"="3"> … </form> </body> 35 Architektur von Web-Anwendungen (1) In HTML lassen sich JavaScript-Programme einbetten, die auf der Clientseite durch einen Interpreter ausgeführt werden. Damit lassen sich gewisse „dynamische Effekte“ bei der Anzeige eines HTMLDokumentes erreichen. Das nennt man clientseitiges Scripting. Effekte: Anzeigen neuer Bilder zeitgebergesteuerte Animationen Reaktion auf Mausereignisse, Änderung von Eigenschaften von Objekten (Farbe, Stil,…), Öffnen neuer Fenster, Message-Boxen und Dialogfenster Prüfung von Nutzereingaben auf Korrektheit, vor Absenden an Server Peter Sobe 36 Architektur von Web-Anwendungen (2) Client-seitiges Scripting (Fortsetzung): Ein JavaScript kann auf Eigenschaften von Objekten der grafischen Oberfläche zugreifen und über Methoden Manipulationen durchführen. Das wird durch ein Document Object Model (DOM) ermöglicht. Architektur-Klassen: 2-Tier: Web-Anwendung ohne Scripting, auch Webanwendungen mit clientseitigem Scripting 3-Tier: Webanwendungen mit serverseitigem Scripting 4-Tier: Webanwendungen mit serverseitigem Scripting und einer weiterer funktionalen Ebene (meistens eine Datenbank) Peter Sobe 37 Clientseitiges Scripting (1) JavaScript • auf Client-Seite ausgeführt • Script-Code wird innerhalb der HTML-Seite übertragen • Script-Code ist typischerweise im Head eingebettet • Das Script kann die Webseite dynamisch verändern, oder Nachrichtenboxen oder Dialoge initiieren Peter Sobe 38 Clientseitiges Scripting (2) JavaScript – Beispiel: … <html> <head> <title>Die Seite mit dem Datum</title> <script language=“JavaScript“> function date() { var j,m,t; var aktuellesdatum = new Date(); t = aktuellesdatum.getDate(); m = aktuellesdatum.getMonth()+1; j = aktuellesdatum.getYear()+1900; document.Formular.Datum.value=t+"."+m+"."+j; } </script> </head> Peter Sobe <body … onload=“date()“> <form name=“Formular“> <input size=10 name=“Datum“/> </form> </html> 39 Serverseitiges Scripting (1) Die Aufbereitung von Web-Inhalten kann auch durch Programmverarbeitung auf dem Server erfolgen. Typische serverseitige Skript-Technologien: CGI + „irgendetwas, das auf dem Server ausgeführt werden kann und Hypertext zurückliefert“ , typisch ist CGI in Verbindung mit einem Perl-Skript PHP – eine Sprache, die in HTML eingebettet ist. Peter Sobe 40 Serverseitiges Scripting (2) PHP - Hypertext Processor auf Server-Seite ausgeführt Die Ausgabe des Scrips erzeugt Seiteninhalt nur die Ausgabe des Scripts wird per HTTP übertragen PHP-Syntax ist an C und Perl angelehnt Beispiel: <html> … <script language=“php“> $i=1; while($i<11) { echo “<br> \n“; $i=$i+1 } </script> … </html> Peter Sobe 41 Web-Anwendungen unter Nutzung von HTTP Web-Browser Javascript Ajax-Engine HTTP, HTMLDokumente Externe Skripte und Daten Peter Sobe CGI XML WebServer PHP 42 Zusammenfassung Netzwerke erlauben, Verbindungen zwischen Anwendungsprozessen auf verschiedenen Rechnern herzustellen, z.B. durch Datagramme (UDP), SocketVerbindungen oder benannte Pipes Protokolle: Standards/Festschreibungen wie und mit welchen Nachrichtenformaten kommuniziert wird. Web: HTTP-Protokoll, transportiert wird: HTML, XML, eingebettete Inhalte, Dateien Skripte erlauben die Programmierung dynamischer Webseiten, clientseitig und/oder serverseitig durch verschiedene C-ähnliche Sprachen Peter Sobe 43