Schichtenmodelle Netzkommunikation - Sockets - RPCs

Werbung
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
Herunterladen