Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger

 << zurück
Linux-UNIX-Programmierung von Jürgen Wolf
Das umfassende Handbuch – 2., aktualisierte und erweiterte Auflage 2006
Buch: Linux-UNIX-Programmierung

Linux-UNIX-Programmierung
1216 S., mit CD, 49,90 Euro
Rheinwerk Computing
ISBN 3-89842-749-8
gp Kapitel 11 Netzwerkprogrammierung
  gp 11.1 Einführung
  gp 11.2 Aufbau von Netzwerken
    gp 11.2.1 ISO/OSI und TCP/IP – Referenzmodell
    gp 11.2.2 Das World Wide Web (Internet)
  gp 11.3 TCP/IP – Aufbau und Struktur
    gp 11.3.1 Netzwerkschicht (Datenübertragung)
    gp 11.3.2 Internetschicht
    gp 11.3.3 Transportschicht (TCP, UDP)
    gp 11.3.4 Anwendungsschicht
  gp 11.4 TCP Socket
  gp 11.5 Kommunikationsmodell
  gp 11.6 Grundlegende Funktionen zum Zugriff auf die Socket-Schnittstelle
    gp 11.6.1 Ein Socket anlegen – socket()
    gp 11.6.2 Verbindungsaufbau – connect()
    gp 11.6.3 Socket mit einer Adresse verknüpfen – bind()
    gp 11.6.4 Auf Verbindungen warten – listen() und accept()
    gp 11.6.5 Senden und Empfangen von Daten (1) – write() und read()
    gp 11.6.6 Senden und Empfangen von Daten (2) – send() und recv()
    gp 11.6.7 Verbindung schließen – close()
  gp 11.7 Aufbau eines Clientprogramms
    gp 11.7.1 Zusammenfassung: Clientanwendung und Quellcode
  gp 11.8 Aufbau des Serverprogramms
    gp 11.8.1 Zusammenfassung: Serveranwendung und Quellcode
  gp 11.9 IP-Adressen konvertieren, manipulieren und extrahieren
    gp 11.9.1 inet_aton(), inet_pton() und inet_addr()
    gp 11.9.2 inet_ntoa() und inet_ntop()
    gp 11.9.3 inet_network()
    gp 11.9.4 inet_netof()
    gp 11.9.5 inet_lnaof()
    gp 11.9.6 inet_makeaddr()
  gp 11.10 Namen und IP-Adressen umwandeln
    gp 11.10.1 Name-Server
    gp 11.10.2 Informationen zum Rechner im Netz – gethostbyname und gethostbyaddr
    gp 11.10.3 Service-Informationen – getservbyname() und getservbyport()
  gp 11.11 Der Puffer
  gp 11.12 Standard-E/A-Funktionen verwenden
    gp 11.12.1 Pufferung von Standard-E/A-Funktionen
  gp 11.13 Parallele Server
  gp 11.14 Syncrones Multiplexing – select()
  gp 11.15 POSIX-Threads und Netzwerkprogrammierung
  gp 11.16 Optionen für Sockets setzen bzw. erfragen
    gp 11.16.1 setsockopt()
    gp 11.16.2 getsockopt()
    gp 11.16.3 Socket-Optionen
  gp 11.17 UDP
    gp 11.17.1 Clientanwendung
    gp 11.17.2 Serveranwendung
    gp 11.17.3 recvfrom() und sendto()
    gp 11.17.4 bind() verwenden oder weglassen
  gp 11.18 UNIX-Domain-Sockets (IPC)
    gp 11.18.1 Die Adressstruktur von UNIX-Domain-Sockets
    gp 11.18.2 Lokale Sockets erzeugen – socketpair()
  gp 11.19 Multicast-Socket
    gp 11.19.1 Anwendungsgebiete von Multicast-Verbindungen
  gp 11.20 Nicht blockierende I/O-Sockets
  gp 11.21 Etwas zu Streams und TLI, Raw Socket, XTI
    gp 11.21.1 Raw Socket
    gp 11.21.2 TLI und XTI
    gp 11.21.3 RPC (Remote Procedure Call)
  gp 11.22 IPv4 und IPv6
    gp 11.22.1 IPv6 – ein wenig genauer
  gp 11.23 Netzwerksoftware nach IPv6 portieren
    gp 11.23.1 Konstanten
    gp 11.23.2 Strukturen
    gp 11.23.3 Funktionen
  gp 11.24 Sicherheit und Verschlüsselung


Rheinwerk Computing

11.3 TCP/IP – Aufbau und Struktur  downtop

Bei TCP/IP spricht man von einem verbindungsorientierten Protokoll – was bedeutet, dass vor der Übertragung von Daten erst eine Verbindung zu einem anderen Gerät aufgebaut werden muss. Einen Teil der Arbeit übernimmt dabei IP (Internet Protocol), was Dinge wie die Adressierung, das Überwachen oder das Versenden von Datenpaketen wären. Wie Sie schon erfahren haben, orientiert sich TCP/IP nur zum Teil an das ISO/OSI-Schichtenmodell – da bei TCP/IP lediglich vier Schichten existieren (Abbildung 11.3):

gp  Netzwerkschicht
gp  Internetschicht
gp  Transportschicht
gp  Anwendungsschicht (HTTP, FTP, Telnet …)

Hierzu folgt nun eine kurze Beschreibung der einzelnen Schichten im TCP/IP-Referenzmodell.


Rheinwerk Computing

11.3.1 Netzwerkschicht (Datenübertragung)  downtop

Diese Schicht ist bei TCP/IP nicht unbedingt vorgeschrieben. Die Schicht ist verantwortlich, dass die Informationen von einem Rechner zur Gegenstelle übertragen werden – was auch die physikalische Übertragung einschließt. Weitere Aufgabe wäre das Aufteilen der Daten in einzelne Frames, und für den Fall, dass ein Fehler bei der Übertragung auftritt, muss diese Schicht für eine Neuübertragung sorgen. Wenn man den Kernel betrachtet, wird diese Schicht durch den Gerätetreiber der Netzwerkkarte realisiert.


Rheinwerk Computing

11.3.2 Internetschicht  downtop

Diese Schicht entspricht derselben Schicht, die beim OSI-Schichtenmodell die Vermittlungsschicht darstellt. Das Protokoll, das in dieser Schicht am häufigsten anzutreffen ist, ist das IP-Protokoll. Der Eckpfeiler des IP-Protokolls ist, dass jedes Endgerät (Netzwerkknoten) direkt angesprochen werden kann – weshalb auch jeder Knoten über eine spezifische IP-Adresse verfügt –, wofür das IP-Protokoll selbst verantwortlich ist. Solch eine Adresse setzt sich aus dem Netzwerk selbst und dem entsprechenden Netzwerkknoten zusammen. So will man sichergehen, dass keine Netzwerkknoten zweimal auf der Welt existieren. Vom IP-Protokoll gibt es im Internet mittlerweile zwei Varianten, IPv4 und IPv6. Wenn hier gewöhnlich von IP-Verbindungen gesprochen wird, ist meistens IPv4 damit gemeint. IPv6 wird wohl in (noch ungewisser) Zukunft IPv4 ablösen. Eine weitere bedeutungsvolle Aufgabe des IP-Protokolls ist die Aufteilung des Netzwerkes in so genannte Subnetzwerke. Dabei werden verschiedene Adressklassen unterstützt (nicht zu vergleichen mit den Netzwerkklassen), die je nach Anforderung mehrere Millionen Rechner enthalten können.


Rheinwerk Computing

11.3.3 Transportschicht (TCP, UDP)  downtop

Auch die Transportschicht ist mit der gleichnamigen Schicht des OSI-Referenzmodells zu vergleichen. Das wichtigste Protokoll dieser Schicht ist das TCP-Protokoll. Dieses Protokoll ist verantwortlich dafür, dass Daten zwischen zwei Rechnern fehlerfrei übertragen werden können – eine Ende-zu-Ende-Verbindung (man verzeihe die Eindeutschung – im Original heißt dies Peer-to-Peer-Verbindung (kurz P2P)). Die Schicht garantiert quasi den höheren Schichten eine fehlerfreie Übertragung der Daten. Dabei packt TCP eine bestimmte Anzahl von zu versendenden Bytes zu einem Datenpaket zusammen und überträgt diese Daten anschließend mithilfe des IP-Protokolls. Solch ein Paket besteht immer u. a. aus einer Sequenznummer, womit gesichert wird, dass die Daten in der richtigen Reihenfolge eingehen und doppelt versendete Datenpakete ignoriert werden. Es existiert aber auch das Protokoll UDP (User Data Protocol), das im Gegensatz zum TCP-Protokoll keine Flusskontrolle verwendet. Es ist daher auch nicht gesichert, dass die Daten fehlerfrei ankommen. Das UDP-Protokoll wird häufig bei Spieleservern verwendet, wo z. B. eine Nichtübertragung einer Spielerbewegung meist nicht weiter schlimm ist, da das nächste UDP-Paket sowieso wieder die korrekte Position enthält – die Abweichung, die andere Spieler wahrnehmen, ist somit relativ niedrig, sofern der Client nicht zu viel laggt. Natürlich nutzen nicht alle Spiele nur UDP. Wichtig bei der Transportschicht ist auch die Portnummer; denn jede Anwendung, die Daten aus einer IP-Schicht haben will, muss eine eindeutige Portnummer verwenden, um auf dem Zielsystem eindeutig identifiziert zu werden (oder kurz gesagt: IP kennt keine Ports). Ports sind Diensten zugeordnet. Die Kommunikation zwischen einem Webbrowser und einem Server verläuft z. B. über Port 80 (auf Serverseite); FTP verwendet den Port 21. Damit ist es möglich, dass mehrere Dienste auf dem gleichen Computer gleichzeitig ausgeführt werden können, obwohl diese dieselbe IP-Adresse besitzen. Die Portnummer wird üblicherweise mit einem Doppelpunkt von der IP-Adresse getrennt (wie 192.168.2.4:80). Um also die verschiedenen Dienste zu verwenden, ist die Angabe der IP-Adresse kombiniert mit der Portnummer nötig – was zusammengefasst als Socket bezeichnet wird.

Wobei generell die niedrigeren Ports (<1025) so genannte Standardports sind, die nur vom root geöffnet werden können (sollten). Gewöhnliche Clientanwendungen mit niedrigeren Privilegien verwenden meistens einen höheren (>1024) freien Port zum Arbeiten. Also gilt Client: (>1024) => Server: (<1025). Und auch dies nur im RFC empfohlenen Fall, weil immer mehr mit Port-Forwarding gearbeitet wird, um einen Serverdienst nicht als root starten zu müssen. Dies musste an dieser Stelle erwähnt werden, weil Ports meistens immer die Stelle sind, worüber Systeme angegriffen werden, und man so mit auf den Weg bekommt, dass niedere Ports als root verheerend sein können (Berechtigungssystem).


Rheinwerk Computing

11.3.4 Anwendungsschicht  toptop

In der Anwendungsschicht läuft (wie der Name schon sagt) die eigentliche Kommunikation zwischen zwei Anwendungen ab. Da sich ein Webclient und ein Webserver anders unterhalten als ein Mailclient und ein Mailserver, wurden einige Standardprotokolle entwickelt – die gewöhnlich in Request for Comments(RFC)-Dokumenten festgelegt wurden.


Hinweis   RFCs sind eine Reihe von technischen Dokumentationen zum Internet, die ihren Ursprung zu ARPANET-Zeiten 1969 hatten. Einen gewaltigen Fundus zur RFC-Sammlung finden Sie im Internet unter http://www.ietf.org/ (The Internet Engineering Task Force).


Anwendungen, die sich über ein solches Protokoll unterhalten wollen, müssen es logischerweise auch implementieren. Folgende Anwendungsprotokolle gehören zu den empfohlenen des TCP-Transports:

gp  Telnet – Damit ist das Einloggen in ein Terminal über das Netzwerk möglich. Telnet stellt dabei eine Verbindung vom Telnet-Server zum Telnet-Client her – wobei beim Client der Terminal des Servers nur emuliert wird (Port 23; RFC 854 und RFC 855).
gp  FTP (File Transfer Protocol) – Dateiübertragung zwischen verschiedenen Rechnersystemen (Port 20 (data) und Port 21 (command); RFC 959), wobei Port 20 nur im aktiven Modus zutrifft. Hinter FWs und Routern wird der passive Modus genutzt, was fast zum Normalfall geworden ist.
gp  SMTP (Simple Mail Transfer Protocol) – Dieses Protokoll wird vorwiegend zur Übertragung von E-Mails verwendet (Port 25; RFC 821, 822 und 1651).

Weitere empfohlene Protokolle für den UDP-Transport sind:

gp  NTP (Network Time Protocol) – Das Protokoll wird vorwiegend zur Zeitsynchronisation zwischen zwei Computern verwendet (Port: 123; RFC 1305).
gp  SNMP (Simple Network Management Protocol) – Das Protokoll wird vorwiegend zur Verwaltung und Überwachung von Netzwerkgeräten verwendet (RFC 1065, 1066 und 1067).

Von beiden Transportprotokollen UDP und TCP wird folgendes Protokoll zum Transport verwendet:

gp  DNS (Domain Name Service) – Dabei handelt es sich um einen der wichtigsten Dienste im Internet. Dank dieses Protokolls können Sie eine URL im Internet beim Namen (www.pronix.de) anstatt mit der IP-Adresse (213.131.254.130) erreichen (Port 53; RFC 1034 und 1035).

Weitere häufig verwendete Protokolle wären außerdem:

gp  HTTP (TCP) (Hypertext Transfer Protocol) – DAS Protokoll des WWW, womit Hypermedia-Informationen übertragen werden (oder einfacher: HTML-Seiten). Das Protokoll wird von Webbrowsern verwendet, um auf Webserver zuzugreifen (Port 80; RFC 2616 und 2617).
gp  POP3 (TCP) (Post Office Protocol Version 3) und IMAP (TCP) – Das Protokoll wird vorwiegend von Mailclients verwendet, um eine E-Mail vom Mailserver abzuholen (Port 110/IMAP: 143; RFC 1081, 1082, 1225, 1460, 1725 und 1939, IMAP: xxxx).
gp  SSH (Secure Shell) – Über das Internet auf einem entfernten Computer einloggen – verschlüsselte und daher sicherere Alternative zu Telnet (Port 22).
gp  HTTPS – HTTPS (Hypertext Transfer Protocol Secure) ist ein Netzwerkprotokoll, das eine gesicherte HTTP-Verbindung zwischen Rechnern ermöglicht. Hierbei werden die Daten über SSL/TLS verschlüsselt, damit sie abhörsicher sind. HTTPS-Verbindungen laufen über TCP. Der Standardport für HTTPS-Verbindungen ist 443. Rein technisch gesehen ist HTTPS über TCP gleich HTTP über SSL über TCP.
 << zurück
  
  Zum Rheinwerk-Shop
Neuauflage: Linux-UNIX-Programmierung
Neuauflage:
Linux-UNIX-
Programmierung

bestellen
 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 Buchtipps
Zum Rheinwerk-Shop: Linux-Server






 Linux-Server


Zum Rheinwerk-Shop: Das Komplettpaket LPIC-1 & LPIC-2






 Das Komplettpaket
 LPIC-1 & LPIC-2


Zum Rheinwerk-Shop: Linux-Hochverfügbarkeit






 Linux-
 Hochverfügbarkeit


Zum Rheinwerk-Shop: Shell-Programmierung






 Shell-
 Programmierung


Zum Rheinwerk-Shop: Linux Handbuch






 Linux Handbuch


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
Info





Copyright © Rheinwerk Verlag GmbH 2006
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern