5. Netzwerkprogrammierung Schichtenmodelle Netzkommunikation - Sockets - RPCs - Server-Modelle Systemprogrammierung WS 2008/09 Netzwerkprogrammierung © H. Weber, FH Wiesbaden Folie 1 5.1 Schichtenmodelle - Definitionen Schichtenmodelle zerlegen Aufgaben in verschiedene Abstraktionsebenen Jede Ebene und die Weiterleitung/Schnittstelle von einer Ebene in die nächste Ebene ist definiert Ziel des OSI Schichtenmodells: Referenzmodell für die „Verbindung offener Systeme“ Interoperabilität zwischen Herstellern (Hardware und Software) Unterteilung des Kommunikationsprozesses in eine Reihe von separaten Schichten, wobei sich die der jeweiligen Schicht zugewiesenen Funktionen auf die Funktionen der benachbarten Schicht stützen Interner Aufbau der Schicht ist offen (Entwicklern überlasses Detail), Funktion der Schicht und die Schnittstellen zwischen den Schichten sind definiert Unterteilung in Funktionsgruppen: Hardware Schichten (inkl. Treiber) Logische Schichten (Bildung von Netzen und virtuellen Verbindungen über Netzwerkgrenzen hinaus) Anwendungsschichten (bedient sich des Netzes, ohne daß die verwendete Hardware von Bedeutung ist) Systemprogrammierung WS 2008/09 Netzwerkprogrammierung © H. Weber, FH Wiesbaden Folie 2 5.1 Schichtenmodelle - Aufbau Kommunikation Arbeitsstation Arbeitsstation Application Terminal Emulation Anwendung Presentation Telnet Protokoll Darstellung Session Telnet Daten Sitzung Transport Network Data Link LLC-Header 802.x-Header LLC-Header TCP-Header Telnet Daten Transport IP-Header TCP-Header Telnet Daten Netzwerk IP-Header TCP-Header Telnet Daten IP-Header TCP-Header Telnet Daten 802.x Trailer Physical Datenübertragung Sicherung Physikalische Schicht Beispiel: Telnetsession Systemprogrammierung WS 2008/09 Netzwerkprogrammierung © H. Weber, FH Wiesbaden Folie 3 5.1 Schichtenmodelle - Erklärung Physikalische Schicht (Physical Layer) Übergabe und Empfang des Bitstroms an physikalisches Medium (Draht, LWL,...) Definition der elektrischen Signale der Hardware Ethernet, Standleitungen,... (802.x) Spezifikation der Verbindungsleitungen Datenübertragungs-, Sicherungsschicht (Data Link Layer) Verantwortlich für fehlerfreie Kommunikation zwischen zwei Netzknoten Z.B. MAC Adressen bei Ethernet oder Token Ring Treiber für Betriebssystem MTU (Maximum Transfer Unit) Netzwerkschicht (Network Layer) Verbindung der Netzknoten zwischen den Rechnern zu einem Netzwerk (über die Netzwerkgrenzen hinweg) Routing und Flußkontrolle Logische Adressen für die einzelnen Netzwerkschnittstellen (NIC) Zerlegung des Datenstroms in Datagramme passender Größe (Fragmentierung, entsprechend dem verwendeten Protokoll, bsp. MTU – Ethernet 1518 Byte) Systemprogrammierung WS 2008/09 Netzwerkprogrammierung © H. Weber, FH Wiesbaden Folie 4 5.1 Schichtenmodelle - Erklärung Transportschicht (Transport Layer) Bereitstellung von Transportprotokollen für Anwendungsentwickler Verbindungsorientierte und verbindungslose Portokolle Sitzungsschicht (Session Layer) Definition der Datenstrukturen Ende-zu-Ende Kommunikationsprozeß (aktiver Prozeß des einen Hosts kommuniziert mit aktivem Prozeß des anderen kommunizierenden Hosts) In TCP/IP beschreiben Ports und Sockets den Weg, über den Applikationen kommunizieren Authentisierung und Verrechnung Darstellungsschicht (Presentation Layer) Definition des Formats der eigentlichen Daten Bspw. Kompression, Zeichencodeumsetzung (ASCII, EBCDIC, usw.), Verschlüsselung (Veschlüsselung und Entschlüsselung der Übertragung; z. B. DES) Anwendungsschicht (Application Layer) Definition des eigentlichen anwendungsspezifischen Protokolls Bsp: SMTP, FTP, TFTP, HTTP(S), Telnet, DNS, SNMP, ... Systemprogrammierung WS 2008/09 Netzwerkprogrammierung © H. Weber, FH Wiesbaden Folie 5 5.1 Schichtenmodelle - ARPA Anfang der 70er Jahre entwickelte die Advanced Research Projects Agency ein Schichtenmodell zur Beschreibung der Kommunikation von Rechnersystemen bestehend aus vier Schichten. Dieses Modell ist die Grundlage für die TCP/IP Protokollimplementierung. Application Session Transport Process/ Application Network Host-to-Host Data Link Internet Physical Network Interface Systemprogrammierung WS 2008/09 Netzwerkprogrammierung ARPA Schichtenmodell OSI Schichtenmodell Presentation Schichten 5 bis 7 werden in der Prozeß- und AnwendungsSchicht zusammengefaßt Schicht 4 (TCP und UDP) entspricht der Host-to-Host Schicht Schicht 3 (IP, ICMP) entspricht der Internet-Schicht Schicht 1 und 2 werden als Netzwerkschnittstellen-Schicht (Network Access Layer, Local Network Layer) bezeichnet © H. Weber, FH Wiesbaden Folie 6 5.1 Schichtenmodelle – Internet-Schicht Internet-Schicht: Übertragung von Paketen von einem Host zu einem anderen Host Pakete enthalten die Adressinformation für die Datenübertragung durch das Netzwerk Realisierung durch das Internet Protokoll (RFC 791); definiert werden: Quell- und Zieladresse Time to Live (TTL) Flags (z.B. DF – don‘t fragment) Fragment Offset Versionsnummer Protokollnumer Zerlegung und Wiederzusammenführung von Paketen Keine Sicherstellung des Empfangs Pakete, die einen Fehler verursachen, werden ignoriert und verworfen Systemprogrammierung WS 2008/09 Netzwerkprogrammierung © H. Weber, FH Wiesbaden Folie 7 5.1 Schichtenmodelle – Internet-Schicht 8 Version IHL 16 Type of Service 31 Bitstelle Total Length Flags Identifier Time to Live 24 Protocol Fragment Offset Header Checksum Source Address IP Header 0 Destination Address IP Data Options & Padding Data ... Systemprogrammierung WS 2008/09 Netzwerkprogrammierung ... © H. Weber, FH Wiesbaden Folie 8 5.1 Schichtenmodelle – Internet-Schicht IP Header: Versionsnummer: 4 Bit – meist Version 4 (IPv4), wird zukünftig durch Version 6 (IPv6) abgelöst Länge des Headers: 4 Bit – Festlegung der durch die verschiedenen Optionen variablen Länge des Headers (in 4 Byte-Einheiten) Type of Service: 8 Bit – definiert die Priorität eines IP Pakets Gesamtlänge: 2 Byte – von IP Header und Daten (2 Byte definieren maximale Paketgröße auf 65536 Byte = 64 kByte) Identification: 16 Bit – für Zusammensetzen fragmentierter IP Pakete genutzt Flags: 3 Bit – Fragmentierungsinformation; erstes Bit ohne Bedeutung; zweites Bit (DF) 0=fragmentierbar, 1=nicht fragmentierbar; drittes Bit (MF) 0=letztes Fragment, 1=mehr Fragmente folgen Fragment Offset: 13 Bit – zeigt an, an welcher Stelle ein fragmentiertes IP Paket ursprünglich stand Time to Live: 8 Bit – zeigt die maximale Anzahl von Routerhops (oder Sekunden) an; jeder Router, den das IP Paket durchläuft, dekrementiert diesen Wert; der Router, der den Wert auf Null setzt, verwirft das Paket Systemprogrammierung WS 2008/09 Netzwerkprogrammierung © H. Weber, FH Wiesbaden Folie 9 5.1 Schichtenmodelle – Internet-Schicht IP Header: Protocol ID: 8 Bit – identifiziert, welches Protokoll der höheren Schichten dem IP Header folgt (Bsp.: 1dec ICMP, 6dec TCP, 17dec UDP, 89dec OSPF) Prüfsumme: 16 Bit – Prüfsumme des IP Headers Ausgangs- (Source) und Ziel- (Destination) adresse: je 4 Byte Erstes Byte Netzanteil Klasse A Klasse B Klasse C Klasse D Klasse E 0 – 127 128 – 191 192 – 223 224 – 239 240 – 255 Hostanteil Anzahl Anzahl Netze Hosts 7 Bit 24 Bit 128 16.777.216 14 Bit 16 Bit 16.384 65.536 21 Bit 8 Bit 2.097.152 256 IP-Multicast Adressen gemäß RFC 1112 Reserviert Optionen und Padding: 32 Bit – Debug-, Meß- und Sicherheitsfunktionen (z.B. Zeitpunkt, zu dem sich das Datenpaket in einem bestimmten Router befunden hat) und Padding zum Auffüllen der 32 Bit mit Nullen Daten: enthält die eigentlichen Nutzdaten Folie 10 Systemprogrammierung WS 2008/09 Netzwerkprogrammierung © H. Weber, FH Wiesbaden 5.1 Schichtenmodelle – Host-zu-Host-Schicht Host-zu-Host-Schicht: Zuordnung der IP Datagramme zu den jeweiligen Prozessen mittels UDP bzw. TCP Ports Routing auf den Zielsystemen User Datagram Protocol, UDP: Sicherung (Quittierung) für die einzelnen Datenpakete wird den Applikationen überlassen Reihenfolge der IP Pakete muß duch die Applikation kontrolliert und ggf. berichtigt werden Schnelles, verbindungsloses Protokoll Verwendung: DNS, NFS, TFTP, RIP, SNMP Transport Control Protocol, TCP: Verbindungsaufbau Ende-zu-Ende (von Port zu Port), ohne Festlegung des Wegs in der Internet-Schicht Reihenfolge der IP Pakete wird kontrolliert und ggf. in die richtige Reihenfolge sortiert Gesichertes, verbindungsorientiertes Protokoll Systemprogrammierung WS 2008/09 Netzwerkprogrammierung © H. Weber, FH Wiesbaden Folie 11 5.1 Schichtenmodelle – Host-zu-Host-Schicht UDP Header: Minimaler Protokolloverhead Ausgangs- (optional) und Zielport Länge des gesamten UDP Datenpakets Checksumme über das gesamte Datenpaket (optional; abhängig davon, ob höheres Protokoll eine Checksumme verlangt) wird unter Berücksichtigung des Pseudoheaders, bestehend aus Ausgangs- und Zieladresse sowie Protokollfeld des IP Headers, berechnet 8 16 24 Source Port Destination Port Length Checksum Data ... Systemprogrammierung WS 2008/09 Netzwerkprogrammierung © H. Weber, FH Wiesbaden 31 Bitstelle UDP Message 0 Folie 12 5.1 Schichtenmodelle – Host-Host-Schicht TCP Header: Adressierung der Applikation über Portnummer Datenpakete werden nummeriert (Sequenznumber) und bestätigt (Acknowledgement Number) Tree Way Handshake zum Verbindungsaufbau Flußkontrolle ist vorgesehen 8 16 Source Port 24 31 Bitstelle Destination Port Sequence Number Acknowledgement Number Offset Reserviert Code Window Urgent Pointer Checksum Padding Options TCP Message 0 Data ... Systemprogrammierung WS 2008/09 Netzwerkprogrammierung © H. Weber, FH Wiesbaden Folie 13 5.1 Schichtenmodelle – Prozeß- und Anwendungsschicht Nutzung der TCP bzw. UDP Daten in Applikationen Application FTP HTTP SNMP TFTP telnet Presentation DNS SMTP TCP ICMP UDP OSPF Host-to-Host RIP IP Network Internet ARP Data Link Sicherung Physical Physikalische Verbindung Systemprogrammierung WS 2008/09 Process/ Application BootP Session Transport DHCP Netzwerkprogrammierung RARP © H. Weber, FH Wiesbaden Network Interface Folie 14 5.1 Schichtenmodelle - Protokolle OSI Schichtenmodell Application Presentation Session Transport Network Protokoll-Implementierung Hypertext File Electronic Terminal Domain File Transfer Transfer Mail Emulation Names Transfer Hypertext Transfer Protocol (HTTP) File Transfer Protocol (FTP) Simple Mail Transfer Protocol (SMTP) Telnet Protocol RFC 2068 RFC 959 RFC 821 RFC 854 Domain Name System (DNS) RFC 1034, 1035 Transmission Control Protocol (TCP) RFC 793 Address Resolution ARP RFC 826 RARP RFC 903 Data Link Physical Systemprogrammierung WS 2008/09 ARPA Schichtenmodell Client/ Server Network Management Trivial Sun Micro- Simple Network File systems Transfer Network FileManagement Protocol Protocol System (SNMP) (TFTP) (NFS) RFC 1157, RFCs 1014, 1901-10, RFC 783 1057, 1094 2271-75 User Datagram Protocol (UDP) RFC 768 Internet Protocol (IP) Internet Control Message Protocol (ICMP) RFC 792 RFC 791 Network Interface Cards: Ethernet, Token Ring, ARCNET, MAN, WAN RFC 894, RFC 1042, RFC 1201 und andere Übertragungsmedien Twisted Pair, Coax, LWL, Wireless Media u.a. Netzwerkprogrammierung © H. Weber, FH Wiesbaden Process/ Application Host-to-Host Internet Network Interface Folie 15 5.1 Schichtenmodelle - Kommunikationsschichten: Unix Stream-System für Protokollschichten Schicht = Treiber, leicht austauschbar 7 Anwendung 6 Präsentation 5 4 3 2 1 Sitzung Transport Netzwerk Datenverbindung Phys. Verbindung Systemprogrammierung WS 2008/09 Netzwerkprogrammierung named pipes, rlogin, … XDR BS-Schnittstelle: sockets ports, IP Adresse TCP/IP Ethernet © H. Weber, FH Wiesbaden Folie 16 5.2 Netzkommunikation Namensgebung im Internet Eindeutige IP-Adresse: z.B. 141.2.15.25, 32 Bits, notiert in 4 Dezimalzahlen je 0..254 (Bytes) (IP 4) Name: mailhub.informatik.fh-wiesbaden.de server.LocalNet.domain.country Zuordnung IP-Nummer»¼Name wird auf speziellen Rechner gehalten (dynamic name server DNS) Vergabe und Zuordnung der IP-Adresse durch zentrale Instanzen byte 0 A 0 byte 1 Netz Id B 1 0 C 1 1 0 byte 2 Rechner Id Netz Id Rechner Id Netz Id Rechner Id D 1 1 1 0 Multicast E 1 1 1 1 reserviert Systemprogrammierung WS 2008/09 byte 3 Netzwerkprogrammierung © H. Weber, FH Wiesbaden Folie 17 5.2 Netzkommunikation - Ports Konzept „Kommunikationspunkte“ Beispiel TCP/IP: well known port numbers Dienst Telnet FTP SMTP rlogin rsh portmap rwhod portmap Systemprogrammierung WS 2008/09 Portnummer Protokoll 23 TCP 21 TCP 25 TCP 513 TCP 514 TCP 111 TCP 513 UDP 111 UDP Netzwerkprogrammierung © H. Weber, FH Wiesbaden Folie 18 5.2 Netzkommunikation - Sockets Arten von Sockets: - UNIX Domain Sockets lokal, Repräsentation im Dateisystem - Internet Domain Sockets verteilt, Repräsentation über IP-Adresse + Portnummer Systemprogrammierung WS 2008/09 Netzwerkprogrammierung © H. Weber, FH Wiesbaden Folie 19 5.2 Netzkommunikation – Sockets Stream-Sockets: • Verlässliche Kommunikation (i.d.R eines Bytesroms) zwichen zwei Endpunkten • Verbindungsorientierter Transportdienst • Im Fall von Internet-Domain-Sockets ist TCP das benutzte Default-Protokoll Datagram-Sockets: • Unzuverlässige Kommunikation von Einzelnachrichten (best effort delivery) • Verbindungsloser Datagram-Dienst • Im Fall von Internet-Domain-Sockets ist UDP das benutzte Default-Protokoll Raw Sockets: •Erlauben Zugriffe auf untergelagerte Protokolle wie IP, ICMP, ... (hier nicht weiter betrachtet) Systemprogrammierung WS 2008/09 Netzwerkprogrammierung © H. Weber, FH Wiesbaden Folie 20 5.2 Netzkommunikation – Sockets Socket-Adressen Datentypen • Include-Dateien: #include <sys/types.h> #include <sys/sockets.h> • Internet-Adresse: struct in_addr { u_long s_addr; }; • Socket-Adresse (allg. Typ, in System Calls benutzt): struct sockaddr {u_short sa_family; /* hier AF_xxxx */ char sa_data[14]; /* bis 14B typ-spez.Adresse */ }; • Socket-Adresse (Internet-Typ): struct sockaddr_in { u_short sin_family; /* hier AF_INET, o. AF_UNIX */ u_short sin_port; /* Port-Numer in network byte order */ struct in_addr sin_addr; /* IP-Adresse in network byte order */ char sin_zero[8]; /* unbenutzt */ }; • Cast: struct sockaddr_in my_addr; ...(struct sockadd*) &my_addr Systemprogrammierung WS 2008/09 Netzwerkprogrammierung © H. Weber, FH Wiesbaden Folie 21 5.2 Netzkommunikation – Sockets Überblick über Systemaufrufe socket( ) bind( ) listen( ) accept( ) connect( ) send( ) / write( ) recv / read( ) shutdown( ) close( ) sendto( ) / recvfrom( ) select( ) Systemprogrammierung WS 2008/09 Erzeugen Adresse oder Namen zuordnen Server: Socket auf Akzeptieren von Clients vorbereiten Server: Warten auf Verbindungsanfrage Client: Verbindung aufbauen Senden Empfangen Verbindung schliessen Socket zerstören UDP senden/empfangen Warten auf Eintreffen eines von mehreren I/O-Ereignissen Netzwerkprogrammierung © H. Weber, FH Wiesbaden Folie 22 5.2 Netzkommunikation – Sockets Verbindungsorientierte Kommunikation mit TCP/IP Client Systemprogrammierung WS 2008/09 Server Netzwerkprogrammierung © H. Weber, FH Wiesbaden Folie 23 5.2 Netzkommunikation – Sockets Verbindungslose Kommunikation mit UDP Server Client Systemprogrammierung WS 2008/09 Netzwerkprogrammierung © H. Weber, FH Wiesbaden Folie 24 5.2 Netzkommunikation – Sockets Erzeugen eines Sockets • int socket(int family, int type, int protocol) Erzeugt einen Socket in der Internet-Domäne (family = AF_INET) oder der UNIX-Domäne (AF_UNIX) vom Typ Stream-Socket (type = SOCK_STREAM), Datagram-Socket (SOCK_DGRAM) oder RawSocket (SOCK_RAW) zur Verwendung mit dem Protokoll protocol und liefert einen Deskriptor für den erzeugten Socket. Für protocol wird i.a. der Wert 0 übergeben. Dann wird das Default-Protokoll gewählt. In der Internet-Domäne ist dies TCP für einen Stream-Socket bzw. UDP für einen Datagram-Socket. Es ist noch keine Adresse zugeordnet. Der Socket ist nicht gebunden. Beispiele: sd = socket(AF_INET, SOCK_STREAM, 0) sd = socket(AF_INET, SOCK_DGRAM, 0) Systemprogrammierung WS 2008/09 Netzwerkprogrammierung © H. Weber, FH Wiesbaden Folie 25 5.2 Netzkommunikation – Sockets Binden einer Socket-Adresse • int bind(int sd, struct sockaddr *addr, int addrlen) Bindet die in der struct sockaddr übergebene, von der Domäne des betrachteten Sockets abhängige Adresse an den Socket. Internet-Domäne: struct sockaddr_in UNIX-Domäne: Filename Der Socket wird im TCP/IP Protokoll-Modul registriert. Für Clients in verbindungsorientierter Kommunikation nicht notwendig. Beispiel: r = bind(sd,(struct sockaddr)* my_addr, sizeof(my_addr)) Systemprogrammierung WS 2008/09 Netzwerkprogrammierung © H. Weber, FH Wiesbaden Folie 26 5.2 Netzkommunikation – Sockets Socket vorbereiten auf Verbindungsanfragen • int listen(int sd, int qlength) Zeigt dem TCP/IP-Modul an, dass TCP-Verbindungen über den Socket sd angenommen werden sollen. qlength gibt die maximale Länge der Warteschlange eingehender Verbindungsanfragen an, für die ein accept aussteht. Dies ist nicht die Gesamtzahl von möglichen Clients. Nur auf der Serverseite notwendigBeispiel: r = listen(sd, 10) Systemprogrammierung WS 2008/09 Netzwerkprogrammierung © H. Weber, FH Wiesbaden Folie 27 5.2 Netzkommunikation - Sockets Warten auf Verbindungsanfragen • int accept(int sd, struct sockaddr * claddr, int *addrlen) Blockiert, bis eine Verbindungsanfrage eines Clients am Socket sd anliegt. Dann wird ein neuer Socket erzeugt und dessen Deskriptor zurückgegeben. Damit entsteht eine private Verbindung zwischen Client und Server. Der Socket sd steht für weitere Verbindungsanforderungen zur Verfügung. Die Identität des Clients (entfernte Socket-Adresse) steht in der Struktur claddr zur Verfügung, deren Länge wird in addrlen zurückgegeben. Nur auf der Serverseite bei verbindungsorientierter Kommunikation notwendig. Beispiel: sndnew = accept(sd, struct sockaddr* clientaddr, *clientaddrlen) Systemprogrammierung WS 2008/09 Netzwerkprogrammierung © H. Weber, FH Wiesbaden Folie 28 5.2 Netzkommunikation – Sockets Verbindungsanfrage • int connect(int sd, struct sockaddr *saddr, int saddrlen) Aktive Verbindungsanfrage eines Clients über seinen Socket sd an den durch die Adresse in saddr mit Länge saddrlen adressierten Server. Dies ist nur für die Client-Seite bei verbindungsorientierter Kommunikation notwendig. Beispiel: r = connect(sd, &saddr, sizeof(saddr)) Systemprogrammierung WS 2008/09 Netzwerkprogrammierung © H. Weber, FH Wiesbaden Folie 29 5.2 Netzkommunikation – Sockets Senden / Empfangen • int write(int sd, char *buf, int len) • int send(int sd, char *buf, int len, int flag) Der write-Aufruf wird wie bei File-Deskriptoren benutzt. Der send-Aufruf besitzt einen zusätzlichen Parameter flag für spezielle Optionen. •int read(int sd, char *buf, int nbytes) •int recv(int sd, char *buf, int nbytes, int flag) Der read-Aufruf wird wie bei File-Deskriptoren benutzt. Der recv-Aufruf besitzt einen zusätzlichen Parameter flag für spezielle Optionen. Beispiel: count count count count = = = = write(sd, buf, len) read(sd, buf, len) send(sd, buf, len, sflag) recv(sd, buf, len, rflag) Systemprogrammierung WS 2008/09 Netzwerkprogrammierung © H. Weber, FH Wiesbaden Folie 30 5.2 Netzkommunikation – Sockets Schliessen einer Verbindung • int shutdown(int sd, int how) Geordnetes Schliessen einer Verbindung, how gibt an, ob sich das TCP/IP-Modul auch nach dem Schliessen noch um die Verbindung kümmern soll. Der Socket-Deskriptor bleibt bestehen und muß gegebenenfalls mit close zerstört werden. Beispiel: r = shutdown(sd, 2) Systemprogrammierung WS 2008/09 Netzwerkprogrammierung © H. Weber, FH Wiesbaden Folie 31 5.2 Netzkommunikation – Sockets I/O-Multiplexing • int select(int nfdsp1, int *rdmask, int wrmask, int *exmask, struct timeval *tmout) Warten auf das Eintreffen eines von mehreren I/O-Ereignissen. Dies bietet die Möglichkeit zum Umgang mit mehreren Socket/FileDeskriptoren in einem Prozess, um so lange zu warten, bis an einem Deskriptor einer vorgebbaren Menge ein Ereignis eintritt (z.B. Socket wird lesbar) oder ein Timeout abgelaufen ist. Die Wartezeit kann zeitlich begrenzt werden oder unbefristet sein. Systemprogrammierung WS 2008/09 Netzwerkprogrammierung © H. Weber, FH Wiesbaden Folie 32 5.2 Netzkommunikation – Sockets Die fd-Mengen werden über Bitmasken spezifiziert, wozu z.B. die FD_SET-Makros dienen. Bei der Rückkehr ist readmask verändert und enthält die Bitmaske der Deskriptoren, für die Ereignisse eingetreten sind, der Rückgabewert gibt die Anzahl dieser Deskriptoren an. Beispiel: int sd1, sd2; fd_set fds; FD_ZERO(&fds); sd1 = socket(AF_INET,...); FD_SET(sd1,&fds); sd2 = socket(AF_INET,...); FD_SET(sd2,&fds); rv = select(sd2+1, &fds, NULL, NULL, timeout); Systemprogrammierung WS 2008/09 Netzwerkprogrammierung © H. Weber, FH Wiesbaden Folie 33 5.2 Netzkommunikation – Sockets Hilfsfunktionen gethostname() gethostid() gethostbyname() getservbyname() getsockopt() setsockopt() Systemprogrammierung WS 2008/09 Ermitteln des eigenen Hostnamens Ermitteln der eigenen IP-Adresse Ermitteln der IP-Adresse eines Rechners bei gegebenem Hostnamen Ermitteln der Portnummer bei gegebenem Dienstnamen Ermitteln der Optionen eines Sockets Setzen von Socket-Optionen Netzwerkprogrammierung © H. Weber, FH Wiesbaden Folie 34 5.2 Netzkommunikation - RPC Remote Procedure Calls Remote Method Invocation Remote Function Call RPC RMI RFC Java! Form: wie normaler Prozedur/Methodenaufruf, Ausführung durch Netzwerkdienst & Transport bleiben verborgen Client-Server Standardmechanismus! Syntaxformen Stub-Procedure Argument ComputeWetter(heute) → RemoteProc(Wetter,heute) RemoteProc(Wetter,heute) Client Anwenderprozeß RPC-Prozeduren Transport Systemprogrammierung WS 2008/09 Netzwerkprogrammierung Server RPC - Prozeß RPC-Prozeduren Transport Prozeduraufruf OriginalProzeduren © H. Weber, FH Wiesbaden Folie 35 5.2 Netzkommunikation - RPC RPC-Systeme • ONC (Sun) RPCs (UNIX / portabel) • DCE RPCs (allgemein) • MS Windows RPCs (ähnlich DCE) • MS DCOM (Windows) • .NET Remoting • CORBA (objektorientiert, portabel bzgl. Sprache und Plattform) • JAVA RMI (sprachspezifisch) • XML-RPC / SOAP (XML-codierte Daten über http) Systemprogrammierung WS 2008/09 Netzwerkprogrammierung © H. Weber, FH Wiesbaden Folie 36 5.2 Netzkommunikation - RPC RPC-Ablauf Client Stub Prozeduraufruf Netzwerk Argumente Packen/konv. RPC warten … RPC return Stub Server wartet .. Argumente entpacken/konv. Prozeduraufruf OriginalRückkehr ablauf Ergebnisse Packen/konv. Ergebnisse Auspacken/konv. RETURN Systemprogrammierung WS 2008/09 Netzwerkprogrammierung © H. Weber, FH Wiesbaden Folie 37 5.2 Netzkommunikation - RPC Transport der Argumente: soll maschinenunabhängig sein! Problem: Hardwareformat von Zahlen Big endian Motorola 680X0, IBM 370 höherwertig Byte0 Little endian höherwertig Byte3 niederwertig Byte1 Byte2 Byte3 Intel 80X86, VAX, NS32000 Byte2 Byte1 niederwertig Byte0 Lösung data marshaling, z.B. mit XML, Java Serialisierung, ... auch für compiler data alignment (Adreßgrenzen bei records, Wortadressierung, ...) Systemprogrammierung WS 2008/09 Netzwerkprogrammierung © H. Weber, FH Wiesbaden Folie 38 5.2 Netzkommunikation - RPC Beispiel Unix (ONC RPC) Spezielle C-Bibliotheken /lib/libc.a; SystemV: /usr/lib/librpc.a Anwendung: NFS über RPC Schichtenmodell RPC/XDR external data representation Client: anmelden mit registerrpc() Client: callrpc() Server: svr_run() clnt_. ../ svc_... Parameter des Transportprotokoll TCP/IP setzen/lesen Berechtigungen setzen/lesen Pmap_.., ath_.., xdr_.. Details des Protokolls: Vorsicht! RPC bei DCE: Compiler für spezielle Interface Definition Languge. RPC durch stub-Aufrufe und Laufzeitbibliothek für Transport Systemprogrammierung WS 2008/09 Netzwerkprogrammierung © H. Weber, FH Wiesbaden Folie 39 5.2 Netzkommunikation - RPC Systemprogrammierung WS 2008/09 Netzwerkprogrammierung © H. Weber, FH Wiesbaden Folie 40 5.2 Netzkommunikation - RPC Systemprogrammierung WS 2008/09 Netzwerkprogrammierung © H. Weber, FH Wiesbaden Folie 41 5.2 Netzkommunikation - RPC • Verwendung des RPC-Protokoll-Compilers rpcgen • Zu schreiben: Spezifikationsdatei mul.x • rpcgen mul.x -> generiert: mul.h mul_clnt.c <- Client-Stub mul_xdr.c <- XDR-Transformationen mul_svc.c <- Server-Stub • Zu programmieren: Client-Hauptprogram mul.c Server-Funktion mul_svc_proc.c Systemprogrammierung WS 2008/09 Netzwerkprogrammierung © H. Weber, FH Wiesbaden Folie 42 5.2 Netzkommunikation - RPC Systemprogrammierung WS 2008/09 Netzwerkprogrammierung © H. Weber, FH Wiesbaden Folie 43 5.2 Netzkommunikation – Server-Modelle Wo entstehen in Client-Server-Systemen Qualitäts- und Effizienzprobleme? Im Bereich des Servers ! Wann? - Bei zu lang dauernder Antwort des Servers - Bei zu vielen gleichzeitigen Clients - Bei zu starker Beanspruchung des Server-Rechners Client 1 Client 2 ... Server Client n-1 Client n Systemprogrammierung WS 2008/09 Netzwerkprogrammierung © H. Weber, FH Wiesbaden Folie 44 5.2 Netzkommunikation – Server-Modelle Ziel: Leistungssteigerung Es werden hier nur Socket-basierte Server betrachtet, bei RPCs sind ähnliche Vorgehensweisen möglich Iterativer Server Server mit select-Technik Konkurrenter Server mit Prozeßmodularität Konkurrenter Server mit Thread-Modularität Konkurrenter Server mit Pool von n wiederverwendbaren Prozessen (unterschiedliche Techniken bezüglich Einsatz und Schutz des accept, eventuell zusätzliche Synchronisierung notwendig je nach Betriebssystem) Konkurrenter Server mit Pool von n wiederverwendbaren Threads (verschiedene Thread-Arten: KLT, ULT, unterschiedliche Techniken bzgl. Einsatz und Schutz des accept) Systemprogrammierung WS 2008/09 Netzwerkprogrammierung © H. Weber, FH Wiesbaden Folie 45