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.21 Etwas zu Streams und TLI, Raw Socket, XTI  downtop

Um Ihnen die ganze Welt der Netzwerkprogrammierung nahe zu bringen, bedarf es schon noch ein wenig mehr als dieses eine Kapitel zur Netzwerkprogrammierung. Sie haben hier zwar gute Grundlagen kennen gelernt, doch hat diese Welt bei weitem noch mehr zu bieten. Deshalb noch ein kurzer Überblick, wonach Sie auf jeden Fall noch Ausschau halten sollten.


Rheinwerk Computing

11.21.1 Raw Socket  downtop

Der Name sagt es schon, dass es sich hierbei um eine recht niedrige Ebene der Netzwerkprogrammierung handelt. Mit Protokollen wie dem TCP oder UDP haben Sie quasi (im Verhältnis zu C) im High-Level-Bereich der Netzwerkprogrammierung gearbeitet. Allerdings hatten Sie über TCP oder UDP nie den vollen Zugriff über den Internet Layer – sprich IP. Mit Raw Socket können Sie also eine Ebene unter dem TCP- und UDP-Protokoll programmieren. Einen Haken hat die Sache allerdings, Sie benötigen Superuser-Rechte.

Mit Raw Sockets können Sie zum Beispiel bereits definierte Protokolle implementieren (z. B. für Programmierer von Betriebssystemen interessant) oder gar ein neues Protokoll (auf der Höhe von TCP und UDP) entwickeln. Sie können außerdem beliebige IPv4/IPv6-Pakete (mit Header) erzeugen, übertragen und empfangen. Außerdem können Sie, was TCP und UDP nur intern benutzen, ICMP- und IGMP-Pakete versenden. ICMP-Pakete verwendet zum Beispiel das Programm ping. Ein Raw Socket wird wie üblich über die Funktion socket() angelegt. Allerdings wird, statt des zweiten Parameters SOCK_STREAM oder SOCK_DGRAMM, die symbolische Konstante SOCK_RAW verwendet. Die Protokollnummer (dritter Parameter) kann als Zahl angegeben werden oder als eine bereits vordefinierte Konstante wie z. B. IPPROTO_ICMP oder IPPROTO_IGMP. bind() kann verwendet werden (wobei hier die Absenderadresse gesetzt wird). Auf der IP-Ebene gibt es außerdem keine Ports. Ebenso kann connect() verwendet werden, was allerdings die Zieladresse setzt.

Daten werden bei den Raw Sockets, wie schon bei UDP, mit den Funktionen sendto() und recvfrom() auf ein Socket geschrieben. Diese Daten werden in die Payload des IP-Paketes verpackt und versendet. Alle Felder für das Paket müssen dabei in network-byte-order vorliegen.


Rheinwerk Computing

11.21.2 TLI und XTI  downtop

TLI ist eine kurze Schreibweise und steht für Transport Level Interface. TLI präsentiert dem Programm eine einheitliche Schnittstelle für alle zur Verfügung stehenden Transportprotokolle. Damit ist eine vom verwendeten Transportprotokoll unabhängige Netzwerkprogrammierung möglich. Im Gegensatz dazu unterstützen die heute hauptsächlich benutzten BSD-Sockets nur TCP und UDP. Die TLI-Programmierung ist die unter UNIX System V empfohlene Methode der Netzwerkprogrammierung. Die TLI-Programmierung ist der Socket-Programmierung ähnlich. Für fast alle Socket-Systemaufrufe existieren entsprechende TLI-Routinen. Das Gegenstück zu einem Socket wird in der TLI-Literatur als Kommunikationsendpunkt bezeichnet. Außerdem richtet sich TLI, im Gegensatz zur BSD-Socket-Programmierung, strukturell mehr nach ISO-Vorgaben und dem OSI-Referenzmodell.

Das X/Open Transport Interface (XTI) stellt nochmals eine Verbesserung von TLI dar. XTI bietet als Transportzugriffsschnittstelle Anwendungsprogrammen (Transportsystembenutzern) in UNIX eine einheitliche, nach X/Open ausgerichtete Programmschnittstelle zu den Diensten des Transportsystems. Die Schnittstelle XTI wurde in Form einer Funktionsbibliothek realisiert, die im Anwendungsprogramm eingebunden werden kann. Es wird auch der direkte Zugang zu TCP/IP und UDP/IP erlaubt.


Rheinwerk Computing

11.21.3 RPC (Remote Procedure Call)  toptop

Für die Entwicklung von Software verwendet man in C gewöhnlich die modulare Programmierung. Modular bedeutet, dass oft verwendete Teile in Funktionen oder Prozeduren zusammengefasst werden. So wird das Programm kürzer und auch leichter verständlich.

Der Remote Procedure Call ist, wie der Name schon sagt, eine Methode, über die es möglich ist, Prozesse, die auf einem anderen System liegen, remote aufzurufen.

Man kann sich die Funktion von RPC gut mit der Funktion eines normalen modularen Programms vorstellen. Beispielsweise befinden sich in einer Funktion my_func() folgende Funktionen:

read_text(), decrypt_text()

Hierbei wird einfach eine Textdatei entschlüsselt und gelesen. Die Funktion read_text() befindet sich auf Ihrem Rechner. Die Funktion für das Entschlüsseln der Textdatei mit decrypt() befindet sich auf einem anderen entfernten Rechner. Das ist das Prinzip von RPC, mit dem es möglich sein soll, einfach Funktionen aufzurufen, die nicht auf dem lokalen Rechner liegen, ohne dass dies auffällt.

In der Netzwerkprogrammierung gibt es immer wieder ein Problem, wenn Daten zwischen verschiedenen Rechnerarchitekturen (Big oder Little Endian) ausgetauscht werden. Daraus folgt ja, dass Zahlen von beiden Systemen anders aufgefasst werden. Für dieses Problem hat man XDR entwickelt. XDR übersetzt die Daten in ein allgemein gültiges Format. Dazu müssen die Daten jedoch in XDR beschrieben werden. Das stellt für einen C-Programmierer kein allzu großes Problem dar, da sich die Syntax ziemlich ähnelt. Ich will hier nicht auf die Details eingehen. XDR arbeitet nun so, dass die Daten kodiert, dann übers Netz geschickt und danach wieder dekodiert werden. Sind die Rechner von der gleichen Architektur, entfällt das Verschlüsseln und Entschlüsseln.

Anschließend wird das Werkzeug rpcgen verwendet, das aus einer XDR-Datei, z. B. file.x, C-Code generiert, der größtenteils unverändert übernommen werden kann. So muss der Programmierer nur noch die Prozeduren schreiben, damit das Programm weiß, was es eigentlich tun soll.

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