Grundlagen g der Programmierung g g1 Modul: Programmierung B-PRG Grundlagen der Programmierung 1 – Teil 4 Verteilte Systeme T il 4 – Verteilte Teil V t ilt Systeme S t 4 1 Vernetzung von Rechnern 4.1 4.2 Routing 4.3 ISO-OSI Referenzmodell 4.4 Internet: Architektur, Protokolle 4.4.1 IP-Adressen 442S 4.4.2 Sockets k t 4.4.3 TCP 4.4.4 Client / Server – Modell 4.4.5 DNS Prof. Dr. O. Drobnik Professur Architektur und Betrieb verteilter Systeme Institut für Informatik Fachbereich Informatik und Mathematik 4.1 Vernetzung von Rechnern Protokoll : Regeln für den Austausch von Nachrichten zwischen kommunizierenden Einheiten ((Prozessen)) : Verteiltes Rechnersystem (Distributed Computer System) Format, Bedeutung und Reihenfolge (Ordnung) der Nachrichten Aktionen, die zur Übertragung und/oder beim Empfang einer Nachricht oder beim Auftreten eines anderen Ereignisses durchzuführen sind. Rechner Prozess Kommunikationssystem Menge von autonomen Rechnern (kein gemeinsamer Speicher) Kommunikationssystem, das die Rechner untereinander verbindet und den Austausch von Nachrichten zwischen ihnen (bzw. Prozessen) ermöglicht (Menge von Hardware- und Software-Komponenten). Prozesse kooperieren zur Erfüllung einer gemeinsamen Aufgabenstellung ; die Kooperation erfolgt über Nachrichtenaustausch. Grundlagen der Programmierung 1 © J.W.G-Universität Frankfurt a.M. Folie 3 Rechnernetz (Computer Network) Rechner und Kommunikationssystem ermöglichen Nachrichtenaustausch (sind kommunikationsfähig) enthalten jjedoch keinerlei Mechanismen,, die eine kooperative Aufgabenbearbeitung durch mehrere Programme unterstützt. (Anmerkung : Rechnernetz ist Basis eines verteilten Systems ! ) Grundlagen der Programmierung 1 © J.W.G-Universität Frankfurt a.M. Folie 4 Vernetzungsszenarien geostationär z.B. GPS, Galileo Komponenten: Host: H t Rechner R h mit it A Anwendungssoftware d ft Router, Switch: Vermittlungsrechner, Routing-Algorithmen Mobilfunk Clients Übertragungsmedium: Leitungsgebundene Übertragung: Kupferkabel, Glasfaser Drahtlose Übertragung: WLAN Parameter: Übertragungsgeschwindigkeit [bit/s] Latenz [ms] (Verzögerungszeit) ( g g ) Vermittlungsnetze Backbone Intranet Firewall Lokales Netz (Local Area Network Network, LAN) Weitverkehrsnetz (Wide Area Network, WAN) Optisches Transportnetz (OTN) Frontend Firewall CSMA Cluster WLAN Techn. Prozesse Folie 5 © J.W.G-Universität Frankfurt a.M. Grundlagen der Programmierung 1 4.2 Routing: Kürzeste Wege Routing: Kürzeste Wege Der kürzeste Weg von einer Quelle zu anderen Knoten Greedy-Algorithmus nach Dijkstra [Sta07]: Gegeben: ein gerichteter Graph G = (V, E) mit Kosten GE : E → Nat. Der Knoten v0 V ist der Startknoten. Beginne mit S = {ø} I jedem In j d Schritt S h i wird i d ein i K Knoten v V \S zu S hinzugefügt, hi fü d dessen Ab Abstand d zu Knoten u minimal ist (minimal unter dem Knoten in V \S). Gesucht: der Weg mit minimalen Kosten von v0 zu allen anderen Knoten: kürzester Weg Dieser Knoten v läßt sich von Knoten u erreichen, indem man nur über Knoten in S läuft. läuft Es kann also keinen kürzeren Weg zu v geben, geben der über einen Knoten w V \S läuft. Beispiel: Startknoten: v0 Weg 45 v2 v1 20 15 Grundlagen der Programmierung 1 v3 10 35 Folie 6 Betrachte eine Menge S der Knoten Knoten, zu denen bereits ein kürzester Weg gefunden wurde. (Single Source Shortest Path, Path SSSP) 50 Gateway S Supercomp. © J.W.G-Universität Frankfurt a.M. Grundlagen der Programmierung 1 20 10 15 Data Warehouse Backbone Gatewayy Unterscheidung nach Grad der räumlichen Ausdehnung: v0 Backend Rechner Token Ring CSMA Fast-Ethernet Server Gigabit-Ethernet v4 30 3 1 2 3 4 v0v2 v0v2v3 v0v2v3v1 v0v4 Länge/Kosten Falls (u, · · · , w, · · · v) kürzer ist als (u, · · · , v), wäre nicht v gewählt worden, sondern w. Daher muß ß w S gelten. lt 10 25 45 45 u v5 © J.W.G-Universität Frankfurt a.M. Folie 7 Grundlagen der Programmierung 1 Es genügt also, den kürzesten Pfad ausgehend von den Knoten in S aus zu suchen suchen. © J.W.G-Universität Frankfurt a.M. Folie 8 Dictionary in Python Dictionary: Beispiel Dictionary Datentyp { key : value } k dient als Index. key Index Als Index nicht zugelassen sind Dictionaries und Listen. value ist eine beliebiges g Objekt. j Zugriff auf Elemente eines Dictionary dict: dict[k] = v: fügt den Wert v mit Index k ein. Falls Index k schon existiert, wird der alte Wert mit v überschrieben. dict[k]: liefert Wert (Objekt) mit Index k. dict.keys(): liefert Liste aller Indizes ((auch Schlüssel g genannt)) dict.values(): liefert Liste aller Werte del dict[k]: löscht Eintrag mit Index k. © J.W.G-Universität Frankfurt a.M. Grundlagen der Programmierung 1 Folie 9 >>> dict={‘Apfel‘:‘apple‘,‘Birne‘:‘pear‘} >>> p print dict {'Apfel': 'apple', 'Birne': 'pear'} oder >>> dict = {} >>> dict[‘Apfel‘]=‘apple‘ >>> dict[‘Birne‘]=‘pear‘ print t d dict ct >>> p {'Apfel': 'apple', 'Birne': 'pear'} >>> print dict[‘Apfel‘] apple >>> print dict.keys() ['Apfel', 'Birne'] >>> print i di dict.values() l () ['apple', 'pear'] >>> del dict[‘Birne‘] >>> print i t dict di t {'Apfel': 'apple'} © J.W.G-Universität Frankfurt a.M. Grundlagen der Programmierung 1 Routing: Kürzeste Wege Routing: Kürzeste Wege Variablen im Programm: Repräsentation von Graphen (vgl. Minimaler Spannbaum): g Graph g als Datenstruktur: class Graph result Liste der kürzesten Wege einschließlich der zugeordneten Kosten short h t Menge S der Knoten Knoten, zu denen bereits kürzeste Wege bestimmt worden sind. Dictionary mit Elementen: vertices Differenzmenge V \ S: Liste distance Kosten der bisher gefundenen kürzesten Wege von v zu Knoten vj in vertices über Knoten vi in short pathcost Kosten des aktuell betrachteten Weges {Ziel : (Liste der Knoten, Kosten des Weges)} Knoten aus vertices, zu dem der bisher kürzeste Weg gefunden wurde anchor h Direkter Vorgänger von nearest t in short h t Grundlagen der Programmierung 1 © J.W.G-Universität Frankfurt a.M. init: addvertex: addedge: getvertices: Erzeugen eines Graphen Hinzufügen eines Knotens Hinzufügen einer markierten Kante Liefert die Menge der Knoten cost: Liefert Kosten zu einer Kante des Graphen, sofern die Kante existiert; None: Sonst Interne Kantendarstellung: None: unendl. Kosten, keine Kante nearest Folie 10 i i[0][0] i[0][1] i[1] Folie 11 = ((v1,v2,),c) ((v1 v2 ) c) = v1 = v2 =c Grundlagen der Programmierung 1 © J.W.G-Universität Frankfurt a.M. Folie 12 Routing: Kürzeste Wege Routing: Kürzeste Wege def printshort(dict,result): ## debug-Ausgabe-Funktion print i t eins = "short = " for v in dict.keys(): print "%s '%s' : %s" % (eins,v,dict[v]) eins = " " print "result = %s" % result Grundlagen der Programmierung 1 © J.W.G-Universität Frankfurt a.M. Folie 13 Routing: Kürzeste Wege Grundlagen der Programmierung 1 © J.W.G-Universität Frankfurt a.M. Folie 14 Routing: Kürzeste Wege g = Graph() g.addvertex('v0') g.addvertex('v1') g.addvertex('v2') g.addvertex('v3') g.addvertex('v4') g.addvertex('v5') g.addedge('v0','v1',50) g.addedge('v0','v2',10) dd d (' 0' ' 2' 10) g.addedge('v2','v0',20) g.addedge('v1','v2',15) g.addedge('v2','v3',15) dd d (' 2' ' 3' 15) g.addedge('v1','v4',10) g.addedge('v3','v4',35) g addedge('v4' 'v3' 30) g.addedge('v4','v3',30) g.addedge('v5','v3',3) g.addedge('v0','v4',45) g addedge('v3' 'v1' 20) g.addedge('v3','v1',20) ergebnis = sssp(g, 'v0') Grundlagen der Programmierung 1 # SSSP nach Dijkstra def sssp(g, v): result lt = [] vertices = g.getvertices() vertices.remove(v) short = {v: ([v], 0)} printshort(short result) ### debug printshort(short,result) debug-Ausgabe Ausgabe while len(vertices) > 0: distance = None for vs in short.keys(): for vv in vertices: pathcost = g.cost(vs,vv) if pathcost <> None: pathcost = pathcost + short[vs][1] if distance == None or distance > pathcost: di t distance = pathcost th t nearest = vv anchor = vs if distance == None: break vertices.remove(nearest) short[nearest] = (short[anchor][0] + [nearest], short[anchor][1] + g.cost(anchor, nearest)) result.append((short[nearest][0], short[nearest][1])) printshort(short,result) ### debug-Ausgabe return result short = 'v0' : (['v0'], 0) result = [] short = 'v0' : (['v0'], 0) (['v0', , 'v2'], ], 10) ) 'v2' : ([ result = [(['v0', 'v2'], 10)] short = short = 'v0' : (['v0'], 0) 'v2' : (['v0', 'v2'], 10) 'v3' : (['v0', 'v2', 'v3'], 25) result = [(['v0', 'v2'], 10), (['v0', 'v2', 'v3'], 25)] 'v0' : (['v0'], 0) 'v2' : (['v0', 'v2'], 10) 'v3' : (['v0', 'v2', 'v3'], 25) 'v4' : (['v0', 'v4'], 45) result = [(['v0', 'v2'], 10), (['v0', 'v2', 'v3'], 25), ([' 0' 'v4'], (['v0', ' 4'] 45)] © J.W.G-Universität Frankfurt a.M. Folie 15 Grundlagen der Programmierung 1 © J.W.G-Universität Frankfurt a.M. Folie 16 Routing: Kürzeste Wege 4.3 ISO-OSI Referenzmodell short Das ISOISO-OSI Referenzmodell = 'v0' : (['v0'], 0) 'v1' v1 : (['v0', ([ v0 , 'v2', v2 , 'v3', v3 , 'v1'], v1 ], 45) 'v2' : (['v0', 'v2'], 10) 'v3' : (['v0', 'v2', 'v3'], 25) 'v4' : (['v0', 'v4'], 45) result = [(['v0', 'v2'], 10), (['v0', 'v2', 'v3'], 25), (['v0', ([ , 'v4'], ], 45), ), ([ (['v0', , 'v2', , 'v3', , 'v1'], ], 45)] )] Bei der Kommunikation zwischen Rechnern kommen i a mehrere Protokolle zum Einsatz, Einsatz die verschiedene i.a. Aufgaben erfüllen und aufeinander aufbauen. Elementare Protokolle realisieren Funktionen, die von höheren Protokollen verwendet er endet werden, erden um m ihrerseits neue Funktionen zu realisieren. Laufzeit: Die hier vorgestellte Implementierung besitzt eine Laufzeit der Größenordnung: |V|3 Durch bessere Datenstrukturen lässt sich eine Laufzeit in der Größenordnung von |V|log|V|+|E| erreichen. Grundlagen der Programmierung 1 © J.W.G-Universität Frankfurt a.M. Protokolle werden durch kooperierende Instanzen (Prozesse) abgewickelt. Diese tauschen Protokolldateneinheiten aus aus, die neben den zu übertragenden Daten die protokollrelevante Informationen erhalten (z.B. Sequenznummern, Prüfsummen). Prüfsummen) Folie 17 Grundlagen der Programmierung 1 © J.W.G-Universität Frankfurt a.M. ISO-OSI Referenzmodell ISO-OSI Referenzmodell Architekturmodell für Kommunikationssysteme : ISO International Organisation for Standardisation OSI Open Systems Interconnection Zerlegung Z l d des kkomplexen l K Kommunikationsvorgangs ik i iin einfachere Teilfunktionen, die weitgehend voneinander unabhängig betrachtet werden können. Folie 18 1977 – 82/83 : Int. Standard Z Zweck k dieses di M Modells d ll : Bereitstellung einer gemeinsamen konzeptuellen Basis zur Koordination der internationalen Entwicklung g von existierenden und zukünftigen g Standards für die Kommunikation zwischen Systemen im Sinne offener Systeme. Probleme : Identifikation der Teilfunktionen Zusammenwirken der Teilfunktionen zur Erfüllung des Systemzwecks Einschätzung des Werts existierender Standards Standards. Identifikation von Bereichen, in denen Standards neu entwickelt werden oder verbessert werden müssen. Kommunikation : Austausch von Informationen zwischen Partnern mittels Nachrichten über ein Medium. Flexibilität gegenüber neueren technischen Entwicklungen. zu Das Referenzmodell unterteilt die vom Kommunikationssystem y erbringenden Aufgaben in sieben aufeinander aufbauende Schichten: Grundlagen der Programmierung 1 © J.W.G-Universität Frankfurt a.M. Folie 19 Grundlagen der Programmierung 1 © J.W.G-Universität Frankfurt a.M. Folie 20 ISO-OSI Referenzmodell Anwendung (application) 4.4 Internet: Architektur, Protokolle Host Semantik der durchzuführenden Aktion Darstellung (presentation) Syntaktische Regeln für den Informationstransfer mit Umsetzung Kommunikationssteuerung (session) Organisation und Synchronisation der Kommunikation zwischen Anwendungsprozessen g p Transport (transport) Transparenter, zuverlässiger und kostengünstiger Transfer von Daten zwischen Anwendungsprozessen Vermittlung (network) Transfer von Daten zwischen Endsystemen über gekoppelte Teilstrecken oder Netze Client Bitübertragung (physical) Überwachung von Teilstrecken mit Fehlererkennung dF Fehlerkorrektur hl k kt und Port Server App X 1 Sicherung (data link) Host App Y 2 3 Logische Verbindung (TCP) TCP IP Network Access Protocol #1 (NAP 1) Bitübertragung (physical) Globale Internet Adresse © J.W.G-Universität Frankfurt a.M. 6 z.B. Ethernet Network Access Protocol #2 (NAP 2) Bitübertragung (physical) IP Jede Schicht stellt eine Menge von Funktionen bereit, die der Schnittstelle zur darüberliegenden Schicht zur Verfügung steht, und als Dienst bezeichnet wird. Ein Dienst wird an Dienstzugangspunkten bereitgestellt. Di Dienstzugangspunkte t kt werden d d durch h Ad Adressen id identifiziert. tifi i t Grundlagen der Programmierung 1 5 TCP IP Router Übergang von Bits über Medien ohne Sicherung (z.B. über Glasfaser) 4 Folie 21 Netzwerk 1 NAP 1 NAP 2 Physisch Grundlagen der Programmierung 1 Netzwerk 2 Physisch © J.W.G-Universität Frankfurt a.M. 4.4.1 IP-Adressen (1) IP-Adressen (2) IP : Internet Protocol Eine IP-Adresse der Klasse A,B oder C identifiziert eine Netzschnittstelle, nicht einen Rechner, denn ein Rechner kann mehrere Netzschnittstellen besitzen. IP ist ein verbindungsloses Protokoll. Es bietet die Basis für eine Vielzahl der im Internet verwendeten Protokolle. IP-Adressen Folie 22 Beispiel für eine IP-Adresse Die Adressen der Schicht 3 sind IP-Adressen. IP-Adressen IP-Adressen sind 32-Bit Zahlen, die meist byteweise notiert werden, z.B. 141.2.14.16. Als Beispiel dient die IP-Adresse eines Rechners im Netz der Universität Frankfurt : 141.2.14.16. IP-Adressen sind in fünf Klassen unterteilt : Grundlagen der Programmierung 1 © J.W.G-Universität Frankfurt a.M. Folie 23 Grundlagen der Programmierung 1 © J.W.G-Universität Frankfurt a.M. Folie 24 IP--Routing IP 4.4.2 TCP : Transmission Control Protocol Beim Transport eines IP-Paketes lassen sich zwei Fälle unterscheiden. TCP ist ein verbindungsorientiertes, zuverlässiges Transportprotokoll. Der Empfänger ist direkt mit dem Sender verbunden, z.B. g oder durch eine Schnittstelle zum über eine PPP-Verbindung gleichen Netz : IP-Pakete können direkt an den Empfänger gesendet werden. Der Empfänger ist nicht direkt mit dem Sender verbunden : IP-Pakete IP Pakete müssen über Netzgrenzen hinweg transportiert werden. Dazu werden die IP- Pakete an den Default-Router des lokalen Netzes gesendet, der sie auf der Basis seiner Routing-Tabellen liefert. Routing Routing Tabellen an den Empfänger liefert Protokolle (RIP, OSPF) dienen der Erstellung der Routing – Tabellen. Di K Die Kommunikation ik ti zwischen i h E Endsystemen d t erfolgt f l tb beii TCP iin d dreii Schritten Aufbau der Kommunikationsverbindung, Austausch von Daten, Abbau der Kommunikationsverbindung. TCP unterteilt Anwendungsdaten in Segmente (TCP-Segmente) (TCP Segmente), die mit IP transportiert werden. Die Größe der Segmente kann von den Kommunikationspartnern beim Verbindungsaufbau bestimmt werden. OSPF: Basiert auf Dijkstra-Algorithmus für kürzeste Wege. © J.W.G-Universität Frankfurt a.M. Grundlagen der Programmierung 1 Folie 25 Grundlagen der Programmierung 1 © J.W.G-Universität Frankfurt a.M. Folie 26 4.4.3 Sockets Sockets Die Adressen der Schicht 4 sind Sockets. Durch die feste Zuordnung eines Teils der Portnummern zu Diensten (RFC 3232 ) wird die Bereitstellung von Internetweit-verfügbaren Diensten ermöglicht. Sockets bestehen aus : IP-Adresse und Portnummer Port: Adreßkomponente, identifiziert Speicherbereich für die Daten einer Kommunikationsverbindung Portnummer: Zahl zwischen 0-65535. Schreibweise für Sockets : IP-Adresse:Port z.B. 141.2.1.1:22. Sockets erlauben die Adressierung g verschiedener Empfänger p g innerhalb eines Rechners, z.B. verschiedener Prozesse. well known ports: 0 – 1023 Port 21 : File Transfer Protocol (FTP) Port 22 : Secure Shell (SSH) Port 80 : Hypertext Transfer Protocol (HTTP) registered ports: 102 – 49151 91 1 1024 dynamic and/or private ports: 49152 – 65535 orientieren sich am Unix-Prinzip für Datei-Zugriff: Open Read Write Close Grundlagen der Programmierung 1 (ORWC) © J.W.G-Universität Frankfurt a.M. Folie 27 Grundlagen der Programmierung 1 © J.W.G-Universität Frankfurt a.M. Folie 28 4.4.4 Client / Server - Modell Schema für Client-Server Interaktion Client / Server - Modelle beruhen auf dem Grundsatz einer f kti funktionalen l Trennung T von Benutzer B t (Client) (Cli t) und d Bereitstellung B it t ll sowie Verwaltung von Betriebsmitteln / Diensten (Server). Betriebsmittel sind u. a.: Rechnerleistung, Datenbestände, Plattenspeicher, etc. Client: Server: System, das die Dienstleistung eines Servers anfordert und nutzt. Zentrales oder dezentrales System, auf dem Dienste (Services) installiert sind, die vom Client aufgerufen und genutzt werden werden. Beispiel: WWW-Browser (Client), - Server Protokoll HTTP unter Benutzung von TCP Grundlagen der Programmierung 1 © J.W.G-Universität Frankfurt a.M. Der Client sendet eine Nachrichte an den Server, in der er den zu erbringenden Dienst spezifiziert. Der Server nimmt die Nachricht entgegen und führt den Dienst aus. Falls kein Fehler aufgetreten ist, sendet der Server das Ergebnis in einer weiteren Nachricht an den Client zurück. zurück Im Fehlerfall wird ein Fehlerindikator zurückgeschickt. Der Client nimmt das Ergebnis (bzw. den Fehlerindikator) entgegen und verarbeitet b it t dies di weiter. it Anforderungen (Request) Client Server send (p) Entkopplung, ggf. weitere Aktivitäten und Anforderungen receive (p) Ergebnis (Reply) Bearbeitung von p send (r) receive (r) Folie 29 © J.W.G-Universität Frankfurt a.M. Grundlagen der Programmierung 1 Folie 30 Domain Name System (DNS) 4.4.5 DNS - Verwaltung des IPIP-Adressraums ICANN (the Internet Corporation for Assigned Names and Numbers) ist verantwortlich für : IP Adressraum Zuordnung, DNS verwendet einen hierarchischen Namensraum (Baum), ähnlich dem Unix-Dateisystem Unix Dateisystem. DNS (Domain Name System) Management, Jeder Knoten hat einen Namen (label) von bis zu 63 Zeichen. An der Wurzel des Baums befindet sich ein besonderer Knoten mit einem Namen der Länge 0. Root Server System-Managementfunktionen. Groß- und Kleinschreibung in Namen ist irrelevant. Protokollparameter Zuweisung, Der Domainname eines Knotens ist die Liste der Knotennamen beginnend mit dem Namen des Knotens selbst bis zur Wurzel,, wobei die Namen mit Punkten („ .“)) voneinander getrennt werden. DNS : DNS ist eine verteilte Datenbank u.a. zur Abbildung von Rechnernamen auf Adressen (und umgekehrt) umgekehrt). Eigenschaften: Ein Domainname, der mit einem Punkt endet, heißt absoluter oder voll qualifizierter (fully qualified oll q alifi ierter Domainname (f ll q alified domain name, FQDN), zum Beispiel: Es g gibt keine Instanz auf dem Internet,, der die kompletten p Informationen vorliegen. Nameserver stellen Daten zur Verfügung. hera.rbi.informatik.uni-frankfurt.de. hera.rbi.informatik.uni frankfurt.de. Zugang zum DNS : über Resolver (Bibliothek). (Bibliothek) Die TCP/IP-Protokolle wissen nichts über DNS. Grundlagen der Programmierung 1 © J.W.G-Universität Frankfurt a.M. (IP-Adresse: 141.2.16.36) Folie 31 Grundlagen der Programmierung 1 © J.W.G-Universität Frankfurt a.M. Folie 32 Internet-Architektur Literaturverzeichnis Internet heute [PD07] L.L. Peterson and B. Davie. Computer Networks – A System Approach, Approach 4. 4 edition, edition Morgan Kaufmann Publishers, 2007 [Sta07] W. Stallings. Data and Computer Communications. Pearson Education,, 2007 Großes Unternehmen Autonome S t Systeme Peering Point Internet Service Provider (ISP) Backbone Service Provider Peering Point Transit ISP Kl i fi Kleinfirma Grundlagen der Programmierung 1 ISP S G ß Unternehmen Großes U t h © J.W.G-Universität Frankfurt a.M. Folie 33 Grundlagen der Programmierung 1 © J.W.G-Universität Frankfurt a.M. Folie 34