sockets-v1 [Schreibgeschützt]

Werbung
Socket Schnittstelle
© 2003 Prof. Dr. Clemens H. Cap
http://wwwiuk.informatik.uni-rostock.de
Socket-Schnittstelle
Socket Schnittstelle
Wortbedeutung
engl. „socket“ = Steckdose
BSD = Berkeley Software Distribution
Definition
Standard-Schnittstelle zur Programmierung
Für IP, TCP, UDP
Geschichte
Eingeführt 1982 in BSD Unix Version 4.1 c
Hier: Generisches UNIX
(SunOS, BSD, Solaris)
Formen
Berkeley Sockets (BSD)
System 5 Transport Layer Interface (TLI)
WinSock (MS Implementierung)
C++ Socket Library
Standard, aber in den “feinen” Details stark unterschiedlich
© 2003 Prof. Dr. Clemens H. Cap
http://wwwiuk.informatik.uni-rostock.de
Socket-Schnittstelle
Socket Dienste
Datagram
Stream
Raw
UDP
TCP
Packet
Local
IP
Data Link Layer
© 2003 Prof. Dr. Clemens H. Cap
http://wwwiuk.informatik.uni-rostock.de
Socket-Schnittstelle
OS Kern
Socket Dienste
Datagram
UDP / IP
l Modelliert klassische UDP Funktionalität
Stream
TCP / IP
l Modelliert klassische TCP Funktionalität
Integrität
Reihenfolge
Verlust
Verdoppelung
Kommata
Raw
IP
l Modelliert IP Protokoll, nicht stark portabel, nicht (so) überall verfügbar
Packet
Link Layer
l Modelliert Data Link Layer Zugang (meist: Ethernet)
l Kaum portabel, stark OS-Versionsabhängig
Local
Lokal auf der Maschine selber
© 2003 Prof. Dr. Clemens H. Cap
http://wwwiuk.informatik.uni-rostock.de
Socket-Schnittstelle
Parameter
der Funktionsaufrufe
Lokale IP Adresse & Portnummer
Protokoll (raw, UDP, TCP)
Entfernte IP Adresse & Portnummer, falls verbunden
Buffergrössen
TCP States & Parameter
© 2003 Prof. Dr. Clemens H. Cap
http://wwwiuk.informatik.uni-rostock.de
Socket-Schnittstelle
socket, listen, bind
socket (int domain, int type, int protocol)
l erzeugt einen lokalen Socket der vorgegebenen Adressfamilie
l Domains:
AF_UNIX, AF_INET, AF_INET6, AF_PACKET
l Types:
SOCK_STREAM, SOCK_DGRAM, SOCK_RAW
l Protokoll:
Typisch 0 für IP
l OS-typische Preprocessor Defines aus den man Pages entnehmen
listen (int socket, int backlog)
l markiert einen Socket verfügbar für connect() - Versuche
l definiert die Länge der listen() – Queue
bind (int socket, struct sockaddr* addr, int addlen)
l
bindet einen lokalen Socket an eine lokale Adresse
© 2003 Prof. Dr. Clemens H. Cap
http://wwwiuk.informatik.uni-rostock.de
Socket-Schnittstelle
accept, connect (nur TCP)
accept (int socket, struct sockaddr* addr, int* addrlen)
l nimmt connect() - Versuche entgegen
l In addr, addrlen Adresse des konnektierenden Partners eingetragen
l Return-Wert: Neuer lokaler Socket für diese akzeptierte Verbindung oder -1
l Alter Socket bleibt offen für weitere Verbindungsversuche
connect (int socket, struct sockaddr* addr, int adrlen)
l verbindet lokalen Socket mit vorgegeb. entfernter Adresse
l falls kein lokales bind geschehen ist, wird port vom Kernel vergeben
l Return-Wert: 0 oder -1
connect – accept Interaktion kann geschehen
l Blockierend:
Beide calls blockieren
l Nicht blockierend:
Beide calls ergeben Status
l Select-gesteuert:
Via select prüfen, ob ein accept / connect blockieren würde
© 2003 Prof. Dr. Clemens H. Cap
http://wwwiuk.informatik.uni-rostock.de
Socket-Schnittstelle
TCP Verbindung aufsetzen
socket
socket
bind
bind
blockiert
listen
accept
connect
deblockiert
© 2003 Prof. Dr. Clemens H. Cap
http://wwwiuk.informatik.uni-rostock.de
Socket-Schnittstelle
Kommunikation
Für verbundene TCP Sockets
send ( ), write ( )
schreibe Bufferinhalt in verbundenen Socket
recv ( ), read ( )
lese von Socket in einen Buffer
sendv ( ), recvmsg ( ), readv ( ), writev ( )
Variante für einen Vektor von Buffern
gather - scatter Storage Mechanismus
Jeweils asynchrone und synchrone Variante
© 2003 Prof. Dr. Clemens H. Cap
http://wwwiuk.informatik.uni-rostock.de
Socket-Schnittstelle
Kommunikation
Für UDP Sockets
sendto ( )
sende an einen (verbundenen oder unverbundenen) Socket
recvfrom ( ), read ( )
lese von Socket in einen Buffer
Jeweils asynchrone und synchrone Variante
© 2003 Prof. Dr. Clemens H. Cap
http://wwwiuk.informatik.uni-rostock.de
Socket-Schnittstelle
Synchronizität
Synchron
l Schreibe so viel, wie geht
l Blockiere, falls nichts geht
l Problem 1:
Kann unerwartet blockieren
l Ausweg 1:
Mehrfache Threads oder Multiplexing
l Problem 2:
Muß mich um den Rest kümmern
Asynchron
l Schreibe so viel, wie geht
l Melde zurück, was gegangen ist
l Problem 2:
Muß mich um den Rest kümmern
© 2003 Prof. Dr. Clemens H. Cap
http://wwwiuk.informatik.uni-rostock.de
Socket-Schnittstelle
Herunterfahren
close ()
schließt den Dateideskriptor
shutdown () bereitet auf Schließen vor
l Kann noch einseitig geöffnet bleiben
© 2003 Prof. Dr. Clemens H. Cap
http://wwwiuk.informatik.uni-rostock.de
Socket-Schnittstelle
Multiplexing
Darstellung des Problems
Einzelner Call, der blockieren könnte
l Ausweg:
Prüfe auf Blockieren
l Frage:
Wie oft?
Dauernd
Neues Problem:
Intermittierend
Neues Problem:
Busy Waiting
Warte zu lang
Mehrere Calls, die blockieren könnten
l Ausweg:
Werden später einmal zurückkehren, also warte auf einen
l Problem:
Wenn auf den “falschen” warte,
dann könnte ich mit einem Call fortsetzen,
warte aber (unnötigerweise)
© 2003 Prof. Dr. Clemens H. Cap
http://wwwiuk.informatik.uni-rostock.de
Socket-Schnittstelle
Multiplexing
Die Lösung
Frage nach, wer arbeitsbereit ist
Diese Frage selber kann gestellt werden
l synchron
warte, bis mind. einer bereit
l timeout-synchron
warte max. Zeit, bis mind. einer bereits
l asynchron
Antwort sofort, wer bereit ist
Arbeitsbereit: Prüfe auf read / write / connect
Funktion: select ( ) oder poll ( )
select: Maskiere aus allen, wer mich interessiert
poll:
Nutze Menge, die mich interessiert
© 2003 Prof. Dr. Clemens H. Cap
http://wwwiuk.informatik.uni-rostock.de
Socket-Schnittstelle
Hilfsfunktionen (1)
getsockopt ( ) / setsockopt ( ) manipuliert Optionen
l Bsp: SO_KEEPALIVE
Versende periodisch Pakete um Verbindung offen zu halten
l
Bsp: SO_SNDBUF
Buffergrösse zum Versenden
l
Bsp: SO_RCVBUF
Buffergröße zum Empfangen
l
Bsp: SO_REUSEADDR
Mehrere Programme können unter UDP auf dieselbe Portnummer binden
© 2003 Prof. Dr. Clemens H. Cap
http://wwwiuk.informatik.uni-rostock.de
Socket-Schnittstelle
Hilfsfunktionen (2)
getpeername ( ) informiert über Peer auf der anderen Seite der Verbindung
Bitte,
senden Sie uns drei
Pizza Diavolo.
© 2003 Prof. Dr. Clemens H. Cap
http://wwwiuk.informatik.uni-rostock.de
Socket-Schnittstelle
Gerne.
Wohin soll denn
geliefert werden
Nameserver Schnittstelle
Aufgabe:
Verbindung Rechnername und IP-Adresse
Einfach:
/etc/hosts
Aufwendig:
Eigener Namensdienst
l Relativ aufwendiger Dienst
l Fehlertoleranz & Replikation (mind. 2 Nameserver pro Domain)
l Hierarchische Suche
l Sicherheitsprobleme zu lösen
Lokale Schnittstelle
l gethostbyaddr ( ), gethostbyname ( )
l gethostname ( ), sethostname ( ) für lokale Maschine
Konfiguration
l UNIX:
/etc/resolv.conf
l MS:
Registerkarte zu Protokollen; WINS, DNS
© 2003 Prof. Dr. Clemens H. Cap
http://wwwiuk.informatik.uni-rostock.de
Socket-Schnittstelle
/etc/hosts
Mehrfache Namen
möglich
Antwortet mit
generischem Namen
© 2003 Prof. Dr. Clemens H. Cap
http://wwwiuk.informatik.uni-rostock.de
Socket-Schnittstelle
Servicenamen Schnittstelle
Verbindung zwischen Dienstnamen und Port
Einfach:
Aufwendig:
/etc/services
Eigener Namensdienst
Schnittstelle:
l getservbyname(), getservbyport()
© 2003 Prof. Dr. Clemens H. Cap
http://wwwiuk.informatik.uni-rostock.de
Socket-Schnittstelle
/etc/services
© 2003 Prof. Dr. Clemens H. Cap
http://wwwiuk.informatik.uni-rostock.de
Socket-Schnittstelle
Reservierte Port-Bereiche
Problem:
l Erwarte best. Dienst unter best. Portnummer
l Übersende vertrauliche Daten an den Dienst
l Programm ist aber nicht das Erwartete
Lösung:
Sichere Verbindung Dienstname / Portnummer gewährleisten
Restproblem:
l Ein falsches Programm hat sich bereits vorher auf diese Portnummer gesetzt
Lösung:
Reservierte Ports, die nur vergeben werden,
wenn User-ID = Superuser
UNIX:
Portbereich 1 - 1023 reserviert
© 2003 Prof. Dr. Clemens H. Cap
http://wwwiuk.informatik.uni-rostock.de
Socket-Schnittstelle
Out of Band Daten
Problem:
Beispiel:
Dringlichkeitsdaten außerhalb normaler Sequenz
Lange Ausgabe an einem Terminal stoppen
Lösung:
Dringlichkeitsdaten
l Schreibender Prozess:
Spezielles Flag in send ( )
l Lesender Prozess:
Erhält ein Signal
l
Kann OOB Markierung erkennen
l Ggf. kommt Info, dass OOB kommt vor den OOB Daten selber an
l Dh: read() nach OOB Signal kann blockieren
l Details OS- und Protokoll-abhängig
© 2003 Prof. Dr. Clemens H. Cap
http://wwwiuk.informatik.uni-rostock.de
Socket-Schnittstelle
Socket Adressfamilien
Adressfamilie AF_UNIX
Adressfamilie AF_INET
user/include/sys/socket.h
// Socketaddress typically family-id plus 14 bytes
struct sockaddr {
u_short sa_family;
// 16bit, AF_UNIX, AF_INET
char
sa_data[14]; // prot. specific, eg: sockaddr_in
© 2003 Prof. Dr. Clemens H. Cap
http://wwwiuk.informatik.uni-rostock.de
Socket-Schnittstelle
Internet Socket Adressfamilien
/user/include/netinet/in.h
struct sockaddr_in {
short
sin_family;
u_short
sin_port;
struct in_addr sin_addr;
char
sin_zero[8];
}
//
//
//
//
family
2 byte
4 byte
8 byte
id
port number
network
not used
/user/include/netinet/in.h
struct in_addr {
u_long
s_addr; // 32bit, network byte order
}
Socket-Schnittstelle
© 2003 Prof. Dr. Clemens H. Cap
http://wwwiuk.informatik.uni-rostock.de
Adresskonvertierung
inet_addr ( )
inet_ntoa ( )
inet_lnaof ( )
inet_netof ( )
inet_makeaddr ( )
inet_network ( )
© 2003 Prof. Dr. Clemens H. Cap
http://wwwiuk.informatik.uni-rostock.de
konvertiert gepunktete Notation nach binär
konvertiert binär nach gepunktet
extrahiert Adresse im lokalen Netzwerk
extrahiert Adresse des lokalen Netzwerks
bildet Adresse aus lokaler Adresse im Netzwerk und
Adresse des Netzwerks
konvertiert gepunktete Notation nach binär (für eine
Netzwerk-Adresse)
Socket-Schnittstelle
Byte Operations
Oft Byte-weise Manipulationen an Adressen erforderlich
Praktische Hilfsfunktionen der Standard-Bibliothek
l bcopy
l bzero
l bcmp
© 2003 Prof. Dr. Clemens H. Cap
http://wwwiuk.informatik.uni-rostock.de
Socket-Schnittstelle
Daten-Darstellung
Problem:
Unterschiedliche Datendarstellungen
l
Lösung 1:
l
Nachteil:
sender-makes-it-right oder
receiver-makes-it-right
Quadratische Komplexität an Konverterfunktionen
Erweiterung auf neue Maschinen erfordert für alle
alten Maschinen einen Konverter
l
Lösung 2:
Nachteil:
einheitliches Format
Muß zwei Mal konvertieren
l
Beschreibung: In ASN.1
ASN.1 = Abstract Syntax Notation
XDR = eXternal Data Representation
© 2003 Prof. Dr. Clemens H. Cap
http://wwwiuk.informatik.uni-rostock.de
Socket-Schnittstelle
Byteorder
higher order byte
lower order byte
Little Endian
LSB = niedrigere Adress
addr. A+1
higher order byte
addr. A
lower order byte
Big Endian
LSB = höhere Adresse
addr. A
© 2003 Prof. Dr. Clemens H. Cap
http://wwwiuk.informatik.uni-rostock.de
addr. A+1
Socket-Schnittstelle
Byteorder bei Protokollen
Problem:
Auf Host & Netz verschieden
Lösung:
Feste Network-Byteorder
Grund: Nur Host-Hersteller muß Konverter schreiben
Network-Byteorder:
Byteorder, die am Netz benutzt wird
l Big-Endian vereinbart
Host-Byteorder:
Byteorder, die am Host benutzt wird
l Kann abweichen (zB: Intel x86)
Konvertierungsfunktionen: htonl(), htons(), ntohl(),ntohs()
© 2003 Prof. Dr. Clemens H. Cap
http://wwwiuk.informatik.uni-rostock.de
Socket-Schnittstelle
Herunterladen