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.2 Aufbau von Netzwerken  downtop

Um es Ihnen gleich deutlich zu machen, Sie erfahren in diesem Kapitel einiges zur Netzwerkprogrammierung. Grundkenntnisse zum Thema Netzwerke allgemein wären hier auf jeden Fall von Vorteil (aber nicht unbedingt vonnöten). Ich werde zwar versuchen, die Themen so umfangreich und detailliert wie möglich aufzurollen, dennoch kann nicht auf jedes einzelne Thema – speziell die Grundlagen – bis ins Detail eingegangen werden.


Rheinwerk Computing

11.2.1 ISO/OSI und TCP/IP – Referenzmodell  downtop

Dass die Kommunikation zwischen verschiedenen Rechnern (mit unterschiedlicher Hardware) auf den verschiedenen Betriebssystemen nicht mit einem Rutsch zu realisieren ist, dürfte wohl selbst dem Laien klar sein. Für diese Zwecke wurde daher das Problem in mehrere kleine Schichten aufgeteilt. Dabei baut jede Schicht auf die Fähigkeiten der darunter liegenden Schicht auf. Dazu wurde das ISO/OSI-Schichtenmodell entworfen. Es muss natürlich erwähnt werden, dass dieses Schichtenmodell keine Norm ist, das heißt, die Entwickler von Hard- und Software müssen sich nicht unbedingt daran halten. Aber gewöhnlich unterstützen alle Hersteller mittlerweile u. a. das OSI-Schichtenmodell. Denn was nützt dem Anwender eine Netzwerkkarte, die sich nicht mit anderen Netzwerkkarten in einem Netzwerk verständigen kann. Irgendwie muss man ja einiges auf den gleichen Nenner bringen. Des Weiteren ist das OSI-Schichtenmodell auch nur ein Modell, das die Rechnerkommunikation veranschaulichen soll.


Abbildung
Hier klicken, um das Bild zu vergrößern

Abbildung 11.1    OSI-Schichtenmodell


Hierzu sollen die in Abbildung 11.1 dargestellten Schichten ein wenig genauer erläutert werden:

gp  Schicht 1: Physical Layer (Bitübertragungsschicht) – Die Aufgabe dieser Schicht besteht aus der Übertragung der Daten in Form von einzelnen Bits, die gewöhnlich über ein Kabel (oder auch über Funk) erfolgt. Beim Sender erhält diese Schicht die Daten von der darüber liegenden Schicht und beim Empfänger werden die Daten eben an die darüber liegende Schicht weitergegeben.
gp  Schicht 2: Data Link Layer (Sicherungsschicht) – Bei dieser Schicht wird sichergestellt, dass die Übertragung von Daten korrekt ist. Entdeckt diese Schicht einen Bitübertragungsfehler zwischen zwei Rechnern, so muss dieser Fehler von der Sicherungsschicht behoben werden.
gp  Schicht 3: Network Layer (Vermittlungsschicht) – Die Vermittlungsschicht ist dafür verantwortlich, dass alle Rechner, die verbunden sind, miteinander kommunizieren können. Die Hauptaufgabe besteht darin, die direkte Verbindung auszuwählen und sie zu einer festen Verbindung zusammenzusetzen, um den eigentlichen Zielrechner zu erreichen.
gp  Schicht 4: Transport Layer (Transsportschicht) – Wurde mit der Schicht 3 eine feste Verbindung zwischen zwei vernetzten Rechnern hergestellt, ist die Transportschicht für die Kommunikation zweier Anwendungsprozesse verantwortlich – wobei jeweils ein Prozess auf einem der verbundenen Rechner läuft.

Die nun noch folgenden drei Schichten können Sie auch gerne in einer Schicht zusammenfassen (was andere Schichtenmodelle auch tun). Alle oben genannten Schichten zählen zum Anwendungsprozess.

gp  Schicht 5: Session Layer (Kommunikationsschicht) – Durch diese Schicht werden zwei Prozesse, die miteinander kommunizieren, erst einmal strukturiert. Hierbei können so genannte Synchronisationspunkte gesetzt werden, wodurch bei einem auftretenden Fehler beide Prozesse wieder auf einen von ihnen bekannten Zustand wiederhergestellt werden können.
gp  Schicht 6: Presentation Layer (Präsentationsschicht) – In der Darstellungsschicht werden die Anwendungsdaten in ein lesbares Format gebracht (kodiert). Dabei werden die unterschiedlichen Größenangaben verschiedener Bytelängen wie z. B. eine Integer-Variable berücksichtigt – die ja auf den verschiedenen Systemen unterschiedlich »groß« sein kann. Sie werden es sicherlich erahnen, diese Schicht spielt in den noch folgenden Abschnitten eine wichtige Rolle.
gp  Schicht 7: Application Layer (Anwendungsschicht) – In der Anwendungsschicht werden Ihnen häufig verwendete Dienste wie die Datenübertragung oder Funktionsaufrufe zur Verfügung gestellt.

Aufgliedern lassen sich die einzelnen Schichten recht einfach. Schicht 1 und 2 dienen vorwiegend der Hardware wie den Netzwerkkarten oder dem Netzwerkadapter und dem Kabel. Ab der Schicht 3 dreht sich alles rund um die Software. Die Datenübertragung zwischen Soft- und Hardware wird mit so genannten Device Drivers erledigt. Ein Device Driver ist eine Software, die als Schnittstelle zwischen der eigentlichen Software und der Hardware fungiert. Die eigentliche Netzwerkprogrammierung, die Sie in der Praxis verwenden, finden Sie in den Schichten 4 bis 7. Sie geschieht mit den Funktionsbibliotheken, die Ihnen zur Verfügung stehen.

Es ist nicht immer notwendig, dass auf einem Rechner alle sieben Schichten benötigt werden. Bei einem Rechner, der nur die Aufgabe hat, Datenpakete an einen anderen Rechner zu verschicken, sind die ersten drei Schichten völlig ausreichend. Solche Vermittlungsrechner sind sehr häufig in Intranets anzutreffen.


Abbildung
Hier klicken, um das Bild zu vergrößern

Abbildung 11.2    Schichten, die ein Vermittlungsrechner benötigt


Da die Aufteilung des ISO/OSI-Schichtenmodells für viele Dinge zu detailliert ist, wird in der Praxis ein etwas einfacher strukturiertes Referenzmodell verwendet – das TCP/IP-Schichtenmodell. Im Gegensatz zum OSI-Schichtenmodell ist dies in nur vier Schichten aufgeteilt.


Abbildung
Hier klicken, um das Bild zu vergrößern

Abbildung 11.3    Aus dem OSI-Schichtenmodell wird das TCP/IP-Schichtenmodell.


Dieses Referenzmodell deckt den Großteil der Kommunikation ab, die über das Internet abläuft.


Rheinwerk Computing

11.2.2 Das World Wide Web (Internet)  toptop

Das Internet ist nicht wie häufig angenommen ein Netzwerk, sondern eine Ansammlung von mehreren Computer-Netzwerken weltweit. Dass diese Netzwerke so gut miteinander harmonieren, verdanken sie dem TCP/IP-Protokoll. Das TCP/IP-Protokoll bietet Dienste wie das WWW (http), FTP, SMTP usw. an. Aufteilen lässt sich das TCP/IP-Protokoll in zwei Teile, in das Internet Protocol (IP) und in die darüber liegenden Transportprotokolle. Die bekanntesten Transportprotokolle sind erstens das TCP, das eine zuverlässige Übertragung des IP-Bytestroms garantiert, und zweitens das UDP, das zwar keine zuverlässige Übertragung garantiert, aber dafür um einiges schneller als TCP ist. Beide Transportprotokolle werden Sie in diesem Buch noch häufiger einsetzen.

Das IP-Protokoll siedelt im OSI-Modell an Schicht 3 der Vermittlungsschicht an, und TCP und UDP arbeiten auf der Transportschicht – wobei es beim TCP eigentlich keine Kommunikations- und Darstellungsschicht mehr gibt. Es wird bei TCP alles in einer Anwendungsschicht zusammengefasst (wie beim TCP/IP-Schichtenmodell (Abb. 11.3) dargestellt).

Im Internet wird jede Netzwerkkarte im Rechner mit einer eigenen IP-Adresse versehen. Dabei kann ein Rechner durchaus mehrere IP-Adressen besitzen, sofern auch mehrere Netzwerkkarten eingebaut sind (man kann auch mehrere IPs für eine Karte haben). Die IP-Adresse hat eine Speichergröße von vier Bytes (bei IPv4). Jedes dieser Bytes kann dabei eine dezimale Zahl von 0 bis 255 darstellen (da ja ein Byte eine dezimale Zahl von 0 bis 255 fassen kann). Getrennt werden diese Dezimalzahlen von einem Punkt. Eine IP-Adresse könnte daher wie folgt aussehen: 129.154.53.98

Einige dieser Adressen sind allerdings für bestimmte Zwecke reserviert. Aufgeteilt wird diese IP-Adresse in einen Netzwerk- und in einen Hostteil. Je nachdem, ob es sich um ein A-, B- oder C-Klassennetz handelt, wird der Netzwerkteil von dem ersten Byte, den ersten zwei oder ersten drei Bytes gekennzeichnet. Die restlichen Bytes stehen immer dem Rechner (Host) selbst zur Verfügung. Somit muss in einem physikalischen Netz die Bytefolge des Netzteils immer gleich sein – der Hostanteil hingegen muss zur eindeutigen Identifikation unterschiedlich sein. So sind z. B. 192.11.55.1 und 192.11.55.2 beides IP-Adressen im gleichen physikalischen Netzwerk, aber mit unterschiedlichem Hostteil, was bedeuten kann, dass es sich hierbei um zwei verschiedene Rechner oder in einem Rechner um zwei verschiedene Netzwerkkarten (oder gar um eine Netzwerkkarte mit zwei IPs) handelt.

Wenn Sie also eine Nachricht oder Daten an einen Rechner verschicken oder von diesem Daten empfangen wollen, benötigen Sie lediglich die IP-Adresse dieses Rechners. Dass Computer gut mit Zahlen umgehen können, ist bekannt, aber wenn Sie statt der Adresse www.pronix.de die Adresse 213.131.254.130 eingeben müssten, wäre das Internet wohl nicht mehr so erfolgreich. Wie es nun auch für die IP-Notation Regeln gibt, gibt es auch für die Namensnotation gewisse Regeln. Nur stehen dann zwischen den Punkten keine Dezimalzahlen, sondern Namen.

Damit aus dem Namen auch wieder eine echte IP-Adresse wird, werden die lokale Netzdatenbank und übergeordnete Domain Name Services (DNS) verwendet. Dabei fragen DNS-Clients beim DNS-Server nach den Adressauflösungen (Name – zu IP) oder, falls benötigt, auch nach den Reverse Mappings (IP – zu Name).

Viele dieser Punkte werden zwangsläufig im passenden Moment und zum passenden Thema genauer erläutert.

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