Verteilte Systeme Prof. Dr. Stefan Fischer. Übersicht. Interprozess-Kommunikation. TU Braunschweig Institut für Betriebssysteme und Rechnerverbund



Ähnliche Dokumente
4-2. Generelle Mechanismen aufsetzend auf. TCP und UDP Clients und Server in Java. Kapitel 4: Interprozesskommunikation. Kodierung von Daten im Netz

Verteilte Systeme Prof. Dr. Stefan Fischer

Systemarchitekturen für Verteilte Anwendungen. Implementierungsvarianten

Programmiermethodik. Übung 13

FOPT 5: Eigenständige Client-Server-Anwendungen (Programmierung verteilter Anwendungen in Java 1)

Programmieren II. Timer. Vorlesung 11. Handout S. 1. Martin Schultheiß. Hochschule Darmstadt Sommersemester Timer. Sockets.

Anwendungsprotokolle: HTTP, POP, SMTP

Übungen zu Softwaretechnik

Wiederholung: Beginn

Programmieren II. Sockets. Vorlesung 16. Handout S. 1. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester Sockets.

Kontrollfragen: Internet

Programmieren I. Kapitel 15. Ein und Ausgabe

Transmission Control Protocol (TCP)

Python Programmierung. Dipl.-Ing.(FH) Volker Schepper

Client-Server mit Socket und API von Berkeley

OP-LOG

Informationen zum neuen Studmail häufige Fragen

4. Network Interfaces Welches verwenden? 5. Anwendung : Laden einer einfachen Internetseite 6. Kapselung von Paketen

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Kurzanleitung SEPPmail

ICMP Internet Control Message Protocol. Michael Ziegler

Objektorientierte Programmierung

Programmierkurs Java

ARCHITEKTUR VON INFORMATIONSSYSTEMEN

Guide DynDNS und Portforwarding

Man liest sich: POP3/IMAP

Objektorientierte Programmierung. Kapitel 12: Interfaces

Web Sockets mit HTML5. Quelle:

mysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank

Lexware professional und premium setzen bis einschließlich Version 2012 den Sybase SQL-Datenbankserver

Wie richten Sie Ihr Web Paket bei Netpage24 ein

icloud nicht neu, aber doch irgendwie anders

Rechnernetzwerke. Rechnernetze sind Verbünde von einzelnen Computern, die Daten auf elektronischem Weg miteinander austauschen können.

Einführung in die Java- Programmierung

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Folgende Voraussetzungen für die Konfiguration müssen erfüllt sein:

2. Kommunikation und Synchronisation von Prozessen 2.2 Kommunikation zwischen Prozessen

Virtual Private Network

STRATO Mail Einrichtung Mozilla Thunderbird

Pakete dienen dazu, die Software eines Projektes in größere inhaltlich zusammengehörige Bereiche mit eigenem Namen einzuteilen (siehe Java API).

Das Handbuch zu KNetAttach. Orville Bennett Übersetzung: Thomas Bögel

Konfigurationsanleitung Access Control Lists (ACL) Funkwerk. Copyright Stefan Dahler Oktober 2008 Version 1.0.

Folgende Einstellungen sind notwendig, damit die Kommunikation zwischen Server und Client funktioniert:

Gliederung Grundlagen Schlüsselworte try-catch Fehlerobjekte Fehlerklassen Schlüsselwort finally Schlüsselwort throws selbst erstellte Exceptions

Programmieren in Java

Grundlagen von Python

ITF2XML. Transferservice. Version 1.1. Tel.: 044 / Fax: 044 / CH-8005 Zürich

Mail-Account Unimail mit der Einstellungen für Outlook Express 5.0

Remote Method Invocation

WebService in Java SE und EE

SAP NetWeaver Gateway. 2013

Anbindung des eibport an das Internet

Log xmllog textlog Log() start(filename) add(message) end() instance() Abbildung 7-10: Die Protokollierungs-API mit einer einfachen Fassade

Übersicht. Was ist FTP? Übertragungsmodi. Sicherheit. Öffentliche FTP-Server. FTP-Software

ICS-Addin. Benutzerhandbuch. Version: 1.0

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7

Folge 19 - Bäume Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

Softwareentwicklung in verteilten Umgebungen, Teil 3 Interprocess Communication (Coulouris et al., Kapitel 3) Dieter Schmalstieg

Sicherer Datenaustausch mit Sticky Password 8

TeamSpeak3 Einrichten

Leitfaden zur Nutzung von binder CryptShare

Websites mit Dreamweaver MX und SSH ins Internet bringen

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Webmail. V Christof Rimle

How-to: Webserver NAT. Securepoint Security System Version 2007nx

Inhaltverzeichnis 1 Einführung Zugang zu den Unifr Servern Zugang zu den Druckern Nützliche Links... 6

Dokumentation zur Versendung der Statistik Daten

Web Services stellen eine Integrationsarchitektur dar, die die Kommunikation zwischen verschiedenen Anwendungen

PC-Kaufmann Supportinformation - Proxy Konfiguration für Elster

MCRServlet Table of contents

msm net ingenieurbüro meissner kompetent - kreativ - innovativ

Lizenzen auschecken. Was ist zu tun?

Java Enterprise Architekturen Willkommen in der Realität

Themen. Web Service - Clients. Kommunikation zw. Web Services

Verteilte Systeme CS5001

DELFI. Benutzeranleitung Dateiversand für unsere Kunden. Grontmij GmbH. Postfach Bremen. Friedrich-Mißler-Straße Bremen

Flashfragen in ILIAS Test & Assessment. Helmut Schottmüller

Benutzerhandbuch. Leitfaden zur Benutzung der Anwendung für sicheren Dateitransfer.

Swisscom TV Medien Assistent

Einrichten eines Postfachs mit Outlook Express / Outlook bis Version 2000

IMAP Backup. Das Programm zum Sichern, Synchronisieren, Rücksichern und ansehen von gesicherten Mails. Hersteller: malu-soft

FAQ IMAP (Internet Message Access Protocol)

Eine Anleitung, wie Sie Mozilla Thunderbird 2 installieren und konfigurieren können. Installation Erstkonfiguration... 4

ANLEITUNG NETZEWERK INSTALATION

Seite Out-Of-Band-Authentifizierung (OOBA) 8.1 Einleitung

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Klicken Sie mit einem Doppelklick auf das Symbol Arbeitsplatz auf Ihrem Desktop. Es öffnet sich das folgende Fenster.

Einführung in die Netzwerktechnik

Step by Step Remotedesktopfreigabe unter Windows Server von Christian Bartl

Proxy. Krishna Tateneni Übersetzer: Stefan Winter

Security. Stefan Dahler. 4. Internet Verbindung. 4.1 Einleitung

RT Request Tracker. Benutzerhandbuch V2.0. Inhalte

Netzwerkprogrammierung & Threads

Workflow, Business Process Management, 4.Teil

Übungen zur Softwaretechnik

Fernzugriff auf Kundensysteme. Bedienungsanleitung für Kunden

Konfiguration Firewall (Zyxel Zywall 10) (von Gruppe Schraubenmeier)

Transkript:

TU Braunschweig Institut für Betriebssysteme und Rechnerverbund Übersicht Interprozess-Kommunikation Direkte Nutzung des Netzwerk-API vs. Middleware TCP und UDP Sockets TCP und UDP Clients und Server in Java Generelle Mechanismen aufsetzend auf dieser Schnittstelle Request-Reply-Protokolle Gruppenkommunikation Kodierung von Daten im Netz 4-2 Interprozess-Kommunikation Anwendungsprogramme leben in Prozessen. Ein Prozess ist ein Objekt des Betriebssystems, durch das Anwendungen sicheren Zugriff auf die Ressourcen des Computers erhalten. Einzelne Prozesse sind dazu gegeneinander isoliert. Damit zwei Prozesse Informationen austauschen können, müssen sie Interprozesskommunikation (interprocess communication, IPC) einsetzen. IPC basiert auf dem Austausch von Nachrichten (= Bitfolgen) Eine Nachricht wird von dem einem Prozess geschickt (dem Sender). Sie wird von einem anderen Prozess empfangen (dem Empfänger). 4-3

Synchroner vs. Asynchroner IPC Synchron: Sender und Empfänger blockieren beim Senden bzw. Empfangen, d.h., wenn ein Senden ausgeführt wird, kann der Prozess nur weiterarbeiten, nachdem das zugehörige Empfangen im anderen Prozess ausgeführt wurde. Wenn ein Empfangen ausgeführt wird, wartet der Prozess so lange, bis eine Nachricht empfangen wurde. Weniger effizient, aber leicht zu implementieren (Synchronisation beim Ressourcenzugriff wird gleich miterledigt). Asynchron: Das Senden findet nicht-blockierend statt, d.h., der Prozess kann nach dem Senden der Nachricht sofort weiterarbeiten. Empfangen kann blockierend oder nichtblockierend sein. Etwas komplizierter zu implementieren (Warteschlangen), aber effizienter. 4-4 Implementierung vert. Anwendungen Anwendung Middleware Standard- Dienste (FTP, Email, vor allem WWW) TCP/UDP über IP 4-5 Netzprogrammierung vs. Middleware Direkte Netzprogrammierung Direkte Kontrolle aller Transportparameter größere Flexibilität bei der Entwicklung neuer Protokolle Kann in vielen Fällen bessere Performance bringen Grosses Problem: Datenrepräsentation Middleware Sehr bequemer Weg zur Entwicklung von Anwendungen Datenrepräsentation, Objektlokalisierung etc. muss nicht von der Anwendung gemacht werden Oft viel Overhead Netzwerkprogrammierung ist Thema dieses Kapitels. Middleware betrachten wir im nächsten Kapitel. 4-6

Schichten des Kommunikationssystems Middleware API Anwendungen RMI und RPC Nächstes Kapitel Socket API Komplexere Protokolle (Request-Reply) Datenrepräsentation, Marshalling TCP/UDP /Rechnernetz) Dieses Kapitel 4-7 Das TCP/UDP API: Sockets Das Internet-API über der Transportschicht wird als Sockets bezeichnet. Ein Socket kann als Endpunkt einer Kommunikationsbeziehung betrachtet werden. Daten werden in Sockets abgelegt und durch Sockets empfangen. Es gibt in der Socket-Schnittstelle zwei grundlegende Typen von Sockets: Ein Socket, der wie das Ende einer Telefonverbindung funktioniert Ein Socket, der wie ein Briefkasten funktioniert Was bedeutet das? Sockets sind mehr oder weniger in jeder Programmiersprache erhältlich, u.a. in Java. 4-8 Sockets und TCP/UDP-Ports Ein Socket wird vor der Kommunikation mit einer TCP/UDP-Portnummer und einer IP-Adresse assoziiert. Dadurch kann ein bestimmter Prozess auf einem Rechner identifiziert werden. socket any port agreed port socket client Internet address = 138.37.94.248 message other ports server Internet address = 138.37.88.249 4-9

UDP oder Datagram Sockets Eine Nachricht, die durch einen UDP-Socket geschickt wird, wird nicht bestätigt bzw. bei Verlust automatisch erneut geschickt. Paketfehler können deshalb zum Verlust der Nachricht führen, ohne dass es die Anwendung bemerkt. Maximale Grösse der Nachricht: 2 16-1 KByte; grössere Nachrichten müssen in der Anwendung segmentiert bzw. re-assembliert werden! UDP-Sockets verwenden nicht-blockierendes Senden und blockierendes Empfangen. 4-10 Java API für UDP-Sockets Zwei wichtige Klassen: DatagramPacket DatagramSocket DatagramPacket enthält die zu sendende Information. DatagramSocket besitzt vor allem die Methoden send(datagrampacket) receive(datagrampacket) mit der offensichtlichen Funktionalität. Mehr Informationen finden sich in der API- Beschreibung unter http://java.sun.com/j2se/1.4.1/docs/api/ in der net- Package. 4-11 Typische Struktur von UDP-Programmen Client create UDP socket create datagram Server create UDP socket create datagram buffer send datagram create datagram buffer receive datagram create and send datagram receive datagram 4-12

Ein UDP-Client import java.net.*; import java.io.*; public class UDPClient{ public static void main(string args[]){ try { DatagramSocket asocket = new DatagramSocket(); byte [] m = args[0].getbytes(); InetAddress ahost = InetAddress.getByName(args[1]); int serverport = 6789; DatagramPacket request = new DatagramPacket(m, args[0].length(), ahost, serverport); asocket.send(request); byte[] buffer = new byte[1000]; DatagramPacket reply = new DatagramPacket(buffer, buffer.length); asocket.receive(reply); System.out.println("Reply: " + new String(reply.getData())); asocket.close(); catch (SocketException e){system.out.println("socket: " + e.getmessage()); catch (IOException e){system.out.println("io: " + e.getmessage()); 4-13 Ein UDP-Server import java.net.*; import java.io.*; public class UDPServer{ public static void main(string args[]){ try{ DatagramSocket asocket = new DatagramSocket(6789); byte[] buffer = new byte[1000]; while(true){ DatagramPacket request = new DatagramPacket(buffer, buffer.length); asocket.receive(request); DatagramPacket reply = new DatagramPacket(request.getData(), request.getlength(), request.getaddress(), request.getport()); asocket.send(reply); catch (SocketException e){system.out.println("socket: " + e.getmessage()); catch (IOException e) {System.out.println("IO: " + e.getmessage()); 4-14 TCP oder Stream Sockets TCP-Sockets gestatten eine Datenstrom-orientierte Kommunikation. Daten werden in einem Strom geschrieben, der vom Partner in derselben Reihenfolge empfangen wird. Paketverluste werden von TCP abgefangen, d.h., Anwendungen erhalten Daten erst, wenn Sie wirklich korrekt (in der Reihenfolge) sind. Vor dem eigentlichen Datenaustausch muss zunächst eine Verbindung zwischen Client und Server aufgebaut werden. Verbindungen werden über die Port/IP- Adressinformation identifiziert. 4-15

Das TCP-Socket-API in Java Zwei wichtige Klassen: ServerSocket Socket Ein ServerSocket ist passiv und wartet nach dem Aufruf der accept-methode auf Verbindungsaufbauwünsche von Clients. Ein Socket wird vom Client genutzt. Mittels des Konstruktors wird implizit eine Verbindung zu einem Server aufgebaut. Bei beiden Klassen kann man sich eine Referenz auf den Ein- bzw. Augabedatenstrom geben lassen. Datenströme können dann nach dem ganz normalen Java-Schema genutzt werden. 4-16 Typische Struktur von TCP-Programmen Client create Stream socket Server create Server socket connect write data on stream wait for connection read data from stream write data on stream read data from stream 4-17 Ein TCP-Client import java.net.*; import java.io.*; public class TCPClient { public static void main (String args[]) { // arguments supply message and hostname of destination try{ int serverport = 7896; Socket s = new Socket(args[1], serverport); DataInputStream in = new DataInputStream( s.getinputstream()); DataOutputStream out = new DataOutputStream( s.getoutputstream()); out.writeutf(args[0]); // UTF is a string encoding see Sn 4.3 String data = in.readutf(); System.out.println("Received: "+ data) ; s.close(); catch (UnknownHostException e){ System.out.println("Sock:"+e.getMessage()); catch (EOFException e){system.out.println("eof:"+e.getmessage()); catch (IOException e){system.out.println("io:"+e.getmessage()); Prof. Dr. Stefan Fischer 4-18

Ein TCP-Server import java.net.*; import java.io.*; public class TCPServer { public static void main (String args[]) { try{ int serverport = 7896; ServerSocket listensocket = new ServerSocket(serverPort); while(true) { Socket clientsocket = listensocket.accept(); Connection c = new Connection(clientSocket); catch(ioexception e) {System.out.println("Listen :"+e.getmessage()); // this figure continues on the next slide 4-19 TCP Server (Forts.) class Connection extends Thread { DataInputStream in; DataOutputStream out; Socket clientsocket; public Connection (Socket aclientsocket) { try { clientsocket = aclientsocket; in = new DataInputStream( clientsocket.getinputstream()); out =new DataOutputStream( clientsocket.getoutputstream()); this.start(); catch(ioexception e) {System.out.println("Connection:"+e.getMessage()); public void run(){ try { // an echo server String data = in.readutf(); out.writeutf(data); clientsocket.close(); catch(eofexception e) {System.out.println("EOF:"+e.getMessage()); catch(ioexception e) {System.out.println("IO:"+e.getMessage()); Prof. Dr. Stefan Fischer 4-20 Weitere Aufgaben des Programmierers Sockets stellen nur die grundlegenden Mechanismen zur Verfügung, es bleibt noch einiges zu tun: Implementierung komplexerer Systemmodelle wie Request- Reply (bei Client-Server) oder Gruppenkommunikation Vor allem aber die Notwendigkeit der homogenen Datenrepräsentation in heterogenen Umgebungen Dies sind die grundlegenden Techniken für komplexere Middleware wie RPC Java RMI CORBA 4-21

Request-Reply-Kommunikation Client Server dooperation (wait) (continuation) Request message Reply message getrequest select object execute method sendreply 4-22 Operationen des Request-Reply-Protokolls public byte[] dooperation (RemoteObjectRef o, int methodid, byte[] arguments) sends a request message to the remote object and returns the reply. The arguments specify the remote object, the method to be invoked and the arguments of that method. public byte[] getrequest (); acquires a client request via the server port. public void sendreply (byte[] reply, InetAddress clienthost, int clientport); sends the reply message reply to the client at its Internet address and port. 4-23 Nachrichtenstruktur bei Request-Reply messagetype requestid objectreference methodid arguments int (0=Request, 1= Reply) int RemoteObjectRef int or Method array of bytes 4-24

HTTP: ein typisches Request-Reply-Protokoll HTTP ist ein text-orientiertes Protokoll, das auf TCP- Sockets basiert. Wenn Sie auf einen Link in Ihrem Browser klicken, wird zunächst eine TCP-Verbindung zum entsprechenden Web-Server aufgebaut und dann eine HTTP-Request-Nachricht generiert und an den Server geschickt. Der Server liest die Nachricht, führt die entsprechenden Arbeiten aus und schickt eine HTTP-Reply-Nachricht an den Cleint, typischerweise inclusive einer HTML-Datei. Der Client (Browser) liest die Nachricht und stellt die Datei im Browserfenster dar. 4-25 HTTP-Nachrichtenformate Request Message method URL or pathname HTTP version headers message body GET //www.dcs.qmw.ac.uk/index.html HTTP/ 1.1 Reply Message HTTP version status code reason headers message body HTTP/1.1 200 OK resource data 4-26 Multicast-Kommunikation Bei modernen Multimediaanwendungen wie Videokonferenzen oder gemeinsamem Editieren von Dokumenten wird eine effiziente Gruppenkommunikation immer wichtiger. Gruppenkommunikation zwischen n Mitgliedern könnte durch den Aufbau von (n-1) 1-zu-1-Verbindungen realisiert werden. Das ist sehr ineffizient warum? Die Standardlösung heißt Multicast und stellt eine 1-zu-n- Kommunikation zur Verfügung: Die Anwendung muss nur eine Verbindung pro Gruppe verwalten. Ressourcen im Netz werden effizienter genutzt. 4-27

IP Multicast Bereits seit Anfang der 90er Jahre gibt es Vorschläge für eine Multicast-Lösung im Internet (S. Deering). IP Multicast verwendet eine spezielle Form von IP- Adressen, um Gruppen zu identifizieren (eine Klasse- D-Adresse). Wenn eine Nachricht an diese Adresse geschickt wird, erhalten sie alle Mitglieder, die ihre Zugehörigkeit zu der dazugehörigen Gruppe erklärt haben. Java stellt ein API für IP multicast zur Verfügung. Es erlaubt Beitreten (join) und Verlassen (leave) der Gruppe Senden von Paketen an die Gruppe Empfang von Paketen, die an die Gruppe geschickt wurden 4-28 Beispiel für Java Multicast import java.net.*; import java.io.*; public class MulticastPeer{ public static void main(string args[]){ // args give message contents & destination multicast group (e.g. "228.5.6.7") try { InetAddress group = InetAddress.getByName(args[1]); MulticastSocket s = new MulticastSocket(6789); s.joingroup(group); byte [] m = args[0].getbytes(); DatagramPacket messageout = new DatagramPacket(m, m.length, group, 6789); s.send(messageout); // this figure continued on the next slide 4-29 Java Multicast (Forts.) // get messages from others in group byte[] buffer = new byte[1000]; for(int i=0; i< 3; i++) { DatagramPacket messagein = new DatagramPacket(buffer, buffer.length); s.receive(messagein); System.out.println("Received:" + new String(messageIn.getData())); s.leavegroup(group); catch (SocketException e){system.out.println("socket: " + e.getmessage()); catch (IOException e){system.out.println("io: " + e.getmessage()); 4-30

Datenrepräsentation und Marshalling Die meisten Anwendungen bzw. Middleware- Ansätze nutzen ein gemeinsames Datenformat. Notwendig wegen der Heterogenität der Umgebungen Unterschiedliche Hardwarearchitektur Verschiedene Betriebssysteme Verschiedene Programmiersprachen Unter Marshalling versteht man den Prozess der Transformation einer beliebigen Datenstruktur in eine übertragbare Nachricht: planieren der Datenstruktur (in eine zusammenhängende Nachricht) Übersetzung in das gemeinsame Format 4-31 Abbildung von Datenstrukturen auf Nachrichten Ein Nachricht steht zusammenhängend im Speicher und kann so übertragen werden. F I S C H E R \0 1 5 C A M P U S U 1 Eine Datenstruktur kann über den Speicher verteilt sein und so nicht übertragen werden. F I S C H E R \0 1 5 C A M P U S U 1 4-32 Datenrepräsentation Es gibt eine Reihe bekannter Ansätze für ein gemeinsames Netzdatenformat. Idee: Definiere eine Menge von abstrakten Datentypen und eine Kodierung (ein genaues Bit-Format) für jeden dieser Typen Stelle Werkzeuge zur Verfügung, die die abstrakten Datentypen in Datentypen der verwendeten Programmiersprache übersetzen Stelle Prozeduren zur Verfügung, die die lokalen Darstellungen der Datentypen in das kodierte Format übersetzen Zur Laufzeit: wenn ein bestimmter Datentyp übertragen werden soll, rufe die Kodierfunktion auf und übertarge das Ergebnis Auf der Empfängerseite: dekodiere den Bit-String und erzeuge eine neue lokale Repräsentation des empfangenen Typs 4-33

Abbiildungsfunktionen Abstrakte Datentypen Abstrakte Datentypen Übersetzung in Sprache X Übersetzung in Sprache Y Programm in Sprache X Programm in Sprache X Kommunikation? Programm in Sprache Y Programm in Sprache Y Kodiere Nachricht Dekodiere Nachricht Nachricht in kodiertem Format 4-34 Bekannte Formate ASN.1 (ISO OSI) XDR (Internet RPC) CDR (CORBA) Java object serialization XML Zwei unterschiedliche Ansätze: Übertragung in binärer Form Übertragung als ASCII Beispiel ASN.1: 5 65 12 61 This is the content Tag: Typ ID Länge der Daten Wert: kann selbst wieder strukturiert sein 4-35 Die Realität Zuerst die schlechte Nachricht: das sieht alles ziemlich kompliziert aus, und es ist es auch. Als Socket-Programmierer muss man sich um diese Dinge selbst kümmern. Die gute Nachricht: die Aufgabe einer Middleware ist es, genau diese komplizierten Mechanismen automatisch zu erledigen. Der Anwendungsprogrammierer sieht davon nichts mehr. Mehr dazu im nächsten Kapitel. 4-36

Weitere Literatur Douglas Comer et al.: Internetworking with TCP/IP, 3. Band, Prentice Hall, 2000. Dick Steflik, Prashant Sridharan: Advanced Java Networking, 2nd ed., Prentice Hall, 2000 Stefan Fischer, Walter Müller: Netzwerkprogrammierung mit Linux und Unix, 2. Auflage, Carl Hanser Verlag, 1999. 4-37