Programmieren von UNIX-Netzwerken

Ähnliche Dokumente
Netzwerkprogrammierung unter Linux und UNIX

Die Unternehmergesellschaft

Filme der Kindheit Kindheit im Film

Office 2010 Programmierung mit VSTO und.net 4.0

Medizinische Statistik mit R und Excel

Vorkurs Mathematik. Ein Übungsbuch für Fachhochschulen. Bearbeitet von Michael Knorrenschild

Programmieren mit Swing

Figur und Handlung im Märchen

Vorkurs Mathematik. Ein Übungsbuch für Fachhochschulen. Bearbeitet von Michael Knorrenschild

Erfolgreich mit Scrum - Einflussfaktor Personalmanagement

Kreatives Gestalten mit Flash 5.0

Programmieren lernen mit Perl

Programmieren von UNIX-Netzen

SPS-Grundlagen. Aufbau, Programmierung (IEC 61131, S7), Simulation, Internet, Sicherheit. Bearbeitet von Jens von Aspern

Theodor Storm - Constanze Esmarch

Adobe Photoshop Lightroom 5 für Einsteiger

Management und Marketing im Sport

Taschen-Definitionen

Handbuch Unified Communications

Erste Schritte mit Scratch für Dummies Junior

So führe ich mein Team

Kompetenzorientierte Sexualerziehung

Mehrsprachigkeit türkischer Schüler in Frankreich und Deutschland

Schulbau in Bayern

50 Strategien, die falschen Mitarbeiter zu finden... und wie Sie es besser machen können

Speicherprogrammierbare Steuerungen

Funktionentheorie erkunden mit Maple

Mathematische Optimierung mit Computeralgebrasystemen

Software-Entwicklung mit Delphi

mitp/die kleinen Schwarzen Scrivener Texte professionell konzipieren, schreiben und veröffentlichen Bearbeitet von Stephan Lamprecht

Sportmanagement 01. Management im Sport. Betriebswirtschaftliche Grundlagen und Anwendungen der modernen Sportökonomie

Soziale Phobie bei Jugendlichen

Die Erwartungen der Eltern an die weiterführende Schule beim Schulübertritt ihres Kindes von der Grundschule in die Sekundarstufe I

Zeitung als Zeichen. Identität und Mediennutzung nationaler Minderheiten in Deutschland. Bearbeitet von Swea Starke

Wie wirkt mein Bild?

Übersetzen als Problemlöseprozess

Praxis der Kognitiven Verhaltenstherapie

Leistungsbeurteilung nach dem TVöD

Perfekte Geschäftsbriefe und s

Controlling Basiswissen

Die finanzpolitische Bedeutung des Sports in Deutschland

Handbuch der Routing-Protokolle

Analytische Individualpsychologie in der therapeutischen Praxis

Konzentration aufs Wesentliche!

Meine Patientenverfügung und Vorsorgevollmacht

Scrum in der Praxis. Erfahrungen, Problemfelder und Erfolgsfaktoren. Bearbeitet von Dipl.-Inform. Sven Röpstorff, Dipl.-Kaufm.

Stolpersteine in der Mitarbeiterführung

Polarlichter zwischen Wunder und Wirklichkeit

Technik der IP-Netze

Lesestrategien für die Hypothesenbildung und die Erschließung von Handlungen

Prüfungsklausuren mit Lösungen Band 2014

Elektrische und magnetische Felder

Langlebige Software-Architekturen

33 Mind Maps für die Praxis

Kataloge der Universitätsbibliothek Rostock / Die Bibliothek Herzog Johann Albrechts I. von Mecklenburg ( )

Mathe: sehr gut, 6. Klasse - Buch mit Download für phase-6

Raspberry Pi. Einstieg - Optimierung - Projekte. Bearbeitet von Maik Schmidt

Theodor Storm Neue Dokumente, neue Perspektiven

Abenteuer Softwarequalität

Power: Die 48 Gesetze der Macht

Brandschutz im Detail - Türen, Tore, Fenster

Schulungsbausteine Umweltschutz

Aufgaben und Lösungen in der Volkswirtschaftslehre

Industrieroboter. Methoden der Steuerung und Regelung. Bearbeitet von Wolfgang Weber

Schulungspaket ISO 9001

CRA-Manual zur Behandlung von Alkoholabhängigkeit

Grundwissen Mathematik

STEP - Das Buch für Lehrer/innen

mitp Business Mobile Usability Für iphone, ipad, Android, Kindle Bearbeitet von Jakob Nielsen, Raluca Budiu

Das Gesetzesverständnis Jesu im Lukasevangelium

Soziologie für die Soziale Arbeit

Anwendungen der Linearen Algebra

Borland Delphi 6 -- Kochbuch

Grundlagen und Grundfragen der Inklusion

Office 2016 für Mac Das Profibuch

Religionspädagogik. Ein Arbeitsbuch. Bearbeitet von Prof. Dr. Frank Thomas Brinkmann

Marken und Patente: Barwertorientierte Bewertung und empirische Analyse des Einflusses auf das systematische Unternehmensrisiko

Berechnungen in Excel

Verhaltens-Einzelpsychotherapie von Depressionen im Alter (VEDIA)

Validierung von Sprachprüfungen

Vom industrialisierten Einfamilienhaus zum verdichteten Wohnungsbau

Krise, Macht und Gewalt

Access 2000 und MS SQL Server im Teamwork

Adobe Photoshop Elements 9

Die Integration ostdeutscher Flüchtlinge in der Bundesrepublik Deutschland durch Beruf und Qualifikation

Glossare zu den Bänden <i>keilschrifttexte aus Assur literarischen Inhalts 1 3</i>

Integriertes Qualitätsmanagement

Industrielle Netze. Ethernet-Kommunikation für Automatisierungsanwendungen. Bearbeitet von Alexander Bormann, Ingo Hilgenkamp

Der kleine Bär und die sechs weißen Mäuse

Kennzahlensystem für die Qualitätsbeurteilung in der industriellen Produktion

Ökonomische Theorie des Gesellschaftsvertrags

Klinische Psychologie: Körperliche Erkrankungen kompakt

Einfach SketchUp - Eine Gebrauchsanweisung

mitp/die kleinen Schwarzen XING Erfolgreich netzwerken im Beruf Bearbeitet von Frank Bärmann

Kinderzimmer - gestalten, einrichten, renovieren

Organisation internationaler Nichtregierungsorganisationen

Hochfunktionaler Autismus im Erwachsenenalter

S2-Leitlinien für Persönlichkeitsstörungen

Sind die Schweizer die besseren Deutschen?

Schematherapie bei Borderline-Persönlichkeitsstörung

Transkript:

Programmieren von UNIX-Netzwerken Netzwerk-APIs: Sockets und XTI Bearbeitet von Hans Hajer, W. Richard Stevens 2. Auflage 2000. Buch. XXVI, 982 S. Hardcover ISBN 978 3 446 21334 0 Format (B x L): 21 x 24,4 cm Gewicht: 2300 g Weitere Fachgebiete > EDV, Informatik > Programmiersprachen: Methoden > Netzwerkprogrammierung, Web Services schnell und portofrei erhältlich bei Die Online-Fachbuchhandlung beck-shop.de ist spezialisiert auf Fachbücher, insbesondere Recht, Steuern und Wirtschaft. Im Sortiment finden Sie alle Medien (Bücher, Zeitschriften, CDs, ebooks, etc.) aller Verlage. Ergänzt wird das Programm durch Services wie Neuerscheinungsdienst oder Zusammenstellungen von Büchern zu Sonderpreisen. Der Shop führt mehr als 8 Millionen Produkte.

CARL HANSER VERLAG W. Richard Stevens Programmieren von UNIX-Netzwerken Netzwerk-APIs: Sockets und XTI 2. Auflage 3-446-21334-1 www.hanser.de

XXIII Vorwort Einführung Zur Netzwerkprogrammierung gehört das Erstellen von Programmen, die mit anderen Programmen über ein Computernetzwerk kommunizieren. Ein Programm wird üblicherweise als Client und das andere Programm als Server bezeichnet. Die meisten Betriebssysteme stellen für die Kommunikation über das Netzwerk normalerweise vorkompilierte Programme zur Verfügung Beispiele aus der TCP/IP-Welt sind Web-Clients und -Server, FTP- und Telnet-Clients/Server. Dieses Buch beschäftigt sich allerdings damit, wie Sie Ihre eigenen Netzwerkprogramme schreiben. Wir schreiben diese Netzwerkprogramme mit Hilfe eines Application Program Interface oder API. An dieser Stelle beschreiben wir zwei APIs: 1. Die Sockets, die man manchmal aufgrund ihrer Herkunft aus dem Berkeley-Unix auch als Berkeley- Sockets bezeichnet. 2. Das XTI (X/Open Transport Interface), einer leichten Abwandlung des Transport Layer Interface (TLI), das von AT&T entwickelt wurde. Alle Beispiele im Text sind dem Betriebssystem Unix entnommen, obwohl die meisten benötigten Grundlagen und Konzepte für die Netzwerkprogrammierung systemunabhängig sind. Die Beispiele basieren auch auf der TCP/IP Protokoll-Suite der Versionen 4 und 6. Für den Aufbau von Netzwerkprogrammen muß man das Betriebssystem und die darunterliegenden Netzwerkprotokolle kennen. Dieses Buch baut auf den ersten vier Büchern des Autors auf, die im Text wie folgt abgekürzt werden: APUE: Advanced Programming in the UNIX Environment [Stevens 1992] TCPv1: TCP/IP Illustrated, Volume 1 [Stevens 1994] TCPv3: TCP/IP Illustrated, Volume 2 [Wrigth und Stevens 1994] und TCPv3: TCP/IP Illustrated, Volume 1 [Stevens 1996] Diese zweite Ausgabe des Werkes Programmierung von UNIX Netzwerken (Carl Hanser Verlag 1992) enthält weiterhin Informationen über Unix und die TCP/IP-Protokolle. Damit sich der fortgeschrittene Anwender ausführlicher über die einzelnen Themen informieren kann, finden Sie im Text zusätzlich viele Hinweise auf die anderen vier Werke. Dies gilt insbesondere im Falle von TCPv2, das die aktuelle 4.4BSD-Implementierung der Netzwerk-Programmierfunktionen für das Socket-API (socket, bind, connect etc.) beschreibt. Wenn man einmal die Implementierung einer Funktion verstanden hat, ist deren Einsatz in einer Anwendung sehr viel einleuchtender. Änderungen zur ersten Ausgabe Die zweite Ausgabe stellt eine vollständige Überarbeitung der ersten Ausgabe dar. Diese Änderungen wurden aufgrund der Rückmeldungen notwendig, die ich im Rahmen meines Unterrichts in den Jahren 1990-1996 und bei diversen Diskussionen in den Newsgroups erhielt und die mich auf verschiedene The-

XXIV Vorwort men hinwiesen, die ständig mißverstanden wurden. Nachfolgend finden Sie die wichtigsten Änderungen dieser neuen Ausgabe: In allen Beispielen wird mit ANSI C gearbeitet. Die früheren Kapitel 6 ( Berkeley Sockets ) und 8 ( Bibliotheksfunktionen ) wurden auf 25 Kapitel erweitert. Tatsächlich stellt die Erweiterung dieses Materials wahrscheinlich die größte Änderung zwischen der ersten und der zweiten Version dar. Die meisten Abschnitte in Kapitel 6 wurden zu vollständigen Kapiteln ausgebaut und mit ausführlichen Beispielen versehen. Der TCP- und UDP-Teil des alten Kapitels 6 wurde abgetrennt. Wir decken nunmehr die TCP-Funktionen und ein vollständiges Client-Server-TCP ab, dem die UDP-Funktionen und das Client-Server- UDP folgt. Insbesondere Einsteiger tun sich damit sehr viel leichter als mit einer ausführlichen Beschreibung der connect-funktion und den Hinweisen auf die semantischen Unterschiede zwischen TCP und UDP. Das frühere Kapitel 7 ( System V Transport Layer Interface ) wurde auf sieben Kapitel erweitert. Anstelle des alten TLI behandeln wir das neuere XTI, das es ersetzt. Das frühere Kapitel 2 ( Das Unix-Modell ) wurde nicht wieder aufgenommen. Dieses Kapitel enthielt einen 75-seitigen Überblick über das Unix-System. 1990 benötigten wir dieses Kapitel, da es nur sehr wenige Bücher zu diesem Thema gab, die eine adäquate Beschreibung der grundlegenden Unix-Programmierschnittstellen, insbesondere der Unterschiede zwischen den Berkeley- und System- V-Implementierungen, zur Verfügung stellten. Heutzutage kennen die meisten Leser Unix so gut, daß auf Konzepte wie die Prozeß-IDs, Paßwortdateien, Verzeichnisse und Gruppenkennungen verzichtet werden kann. Einige der fortgeschrittenen Themen aus dem alten Kapitel 2 sind zwar in dieser neuen Ausgabe enthalten, wurden allerdings an die Stellen verschoben, an denen die entsprechenden Funktionen besprochen werden. So behandeln wir beispielsweise die fork-funktion im Zusammenhang mit der Beschreibung des parallelen Servers (Abschnitt 4.8). Bei der Besprechung des SIGCHLD-Signals mit unserem parallelen Server besprechen wir auch viele zusätzliche Funktionen für die Behandlungen der Posix-Signale (Zombies, unterbrochene Systemaufrufe etc.). Soweit wie möglich beschreibt dieses Buch die Posix-Schnittstelle. (Mehr zu den Standards der Posix-Familie erfahren Sie in Abschnitt 1.10). Dazu gehört nicht nur der Posix.1-Standard für die grundlegenden Unix-Funktionen (Prozeßsteuerung, Signale etc.), sondern auch der erweiterte Posix.1g-Standard für die Socket- und die XTI-Netzwerk-APIs, und der 1996 Posix.1-Standard für Threads. Der Begriff Systemaufruf wurde bei der Beschreibung von Funktionen wie socket und connect in Funktion geändert. Damit folgen wir der Posix-Konvention, die zwischen einem Systemaufruf und einer Bibliotheksfunktion unterscheidet. Dabei handelt es sich um ein Implementierungsdetail, das für den Programmierer oftmals nicht relevant ist. Die früheren Kapitel 4 ( Die Grundlagen der Netzwerktechnik ) und 5 ( Kommunikationsprotokolle ) wurden durch den Anhang A, wo die IP-Versionen 4 (IPv4) und 6 (IPv6) besprochen werden, und das Kapitel 2, mit einer Besprechung von TCP und UDP, ersetzt. Dieses neue Material konzentriert sich auf Protokollfragen, mit denen sich die Netzwerkprogrammierer konfrontiert sehen. IPv6 wurde deshalb mit aufgenommen, da durchaus die Möglichkeit besteht, daß dieses Protokoll zukünftig das vorherrschende Netzwerkprotokoll sein wird. Im Zuge meiner Lehrtätigkeit habe ich herausgefunden, daß gut 80 Prozent aller Probleme im Zusammenhang mit der Netzwerkprogrammierung mit der Programmierung als solcher nichts zu tun haben.

XXV Sie haben also nichts mit den API-Funktionen wie accept und select zu tun, sondern lassen sich meistens auf mangelnde Kenntnisse in den zugrundeliegenden Netzwerkprotokollen zurückführen. Wenn die Studenten beispielsweise den Dreiwege-Quittungsbetrieb (Dreiwege-Handshake) von TCP und den Ablauf beim Abbau einer Verbindung verstanden haben, können auch andere Probleme bei der Netzwerkprogrammierung umgehend gelöst werden. Die früheren Abschnitte über XNS, SNA, NetBIOS, die OSI-Protokolle und UUCP wurden herausgenommen, da diese proprietären Protokolle mit dem Einsatz der TCP/IP-Protokolle im Verlauf der 90er Jahre zurückgedrängt wurden. (UUCP ist zwar nicht proprietär und wird auch heute noch häufig verwendet, bietet aber aus Sicht der Netzwerkprogrammierung nur wenige Perspektiven). In diese zweite Ausgabe wurden folgende neue Themen aufgenommen: Die Interoperabilität von IPv4/IPv6 (Kapitel 10) Die protokollunabhängige Namensauflösung (Kapitel 11) Routing-Sockets (Kapitel 17) Multicasting (Kapitel 19) Threads (Kapitel 23) IP-Optionen (Kapitel 24) Zugriff auf die Datenverbindung (Kapitel 26) Alternativen zum Client/Server-Design (Kapitel 27) Virtuelle Netzwerke und Tunneling (Anhang B) und Debugging-Techniken bei der Netzwerkprogrammierung (Anhang C) Leider wurden die Inhalte der ersten Ausgabe in einem Maße erweitert, daß sie nicht mehr in ein einziges Buch passen. Deshalb sind im Zuge der UNIX-Network-Programming-Reihe zumindest zwei weitere Titel geplant: Band 2 trägt den Titel Interprocess Communication, stellt eine Erweiterung des früheren Kapitels 3 dar und umfaßt auch die 1996 Posix.1 Echtzeit-IPC-Mechanismen. Band 3 wird voraussichtlich den Titel Applications tragen und eine Erweiterung der Kapitel 9 18 sein. Obwohl die meisten Netzwerkanwendungen in Band 3 abgedeckt werden, finden sich auch in diesem Band einige spezielle Anwendungen: Ping, Traceroute und inetd. Die Zielgruppen Dieses Buch kann entweder als Lehrbuch über die Netzwerkprogrammierung oder von erfahrenen Netzwerkprogrammierern auch als Referenz verwendet werden. Falls es als Lehrbuch oder Einführung eingesetzt wird, sollte der Schwerpunkt auf Teil 2 ( Grundlegende Sockets, Kapitel 3 bis 9) liegen. Danach können, je nach Interesse, die anderen Kapitel gelesen werden. Teil 2 deckt die grundlegenden Socket- Funktionen für TCP und UDP ab, zusammen mit I/O-Multiplexing, den Socket-Optionen und grundlegenden Namens- und Adreßauflösungen. Kapitel 1 sollte von allen Lesern gelesen werden. Insbesondere

XXVI Vorwort sei auf Abschnitt 1.4 hingewiesen, wo einige Wrapper-Funktionen besprochen werden, die im gesamten Buch zum Einsatz kommen. Der Anhang A sollte, je nach Hintergrundwissen des Lesers, als Referenz verwendet werden. Die meisten Kapitel in Teil 3 ( Fortschrittliche Sockets ) kann man unabhängig vom restlichen Buch lesen. Damit das Werk auch als Referenz dienen kann, werden ein ausführlicher Index und am Ende der einzelnen Kapitel jeweils eine Zusammenfassung zur Verfügung gestellt, mit deren Hilfe eine detaillierte Beschreibung aller Funktionen und Strukturen auffindbar sind. Zusätzlich wurden viele Verweise auf verwandte Themen eingefügt. Obwohl das Socket-API zum De-facto-Standard für die Netzwerkprogrammierung geworden ist, wird XTI auch weiterhin zusammen mit anderen, nicht-tcp Protokoll-Suiten eingesetzt. Während der Umfang von XTI in Teil 4 um einiges geringer als derjenige über Sockets in Teil 2 und 3 ist, beschreiben einige Ausführungen zu den Sockets Konzepte, die sowohl für XTI als auch für Sockets gelten. So sind beispielsweise alle Konzepte hinsichtlich nicht-blockierender I/Os, Broadcasting, Multicasting, signalgesteuerten I/Os, Out-of-Band-Daten und Threads unabhängig vom Einsatz eines bestimmten APIs (Socket oder XTI) gleich. Darüber hinaus sind viele Probleme bei der Netzwerkprogrammierung grundsätzlich ähnlich, wobei es keine Rolle spielt, ob die Programme mit Hilfe von Sockets oder von XTI geschrieben wurden. Nur in den seltensten Fällen kann man mit dem einen API Dinge tun, die bei einem anderen ausgeschlossen sind. Die Konzepte sind die gleichen lediglich die Funktionsnamen und Argumente ändern sich. Quellcodes und Hinweise auf Fehler Die Quellcodes für alle Beispiele in diesem Buch finden Sie unter ftp://ftp.kohala.com/pub/ rstevens/unpv12e.tar.gz. Die beste Möglichkeit zum Erlernen der Netzwerkprogrammierung besteht darin, daß Sie diese Programme ändern und erweitern. Am Ende jedes Kapitels finden Sie zahlreiche Übungen, wobei die meisten Fragen in Anhang E beantwortet werden. Aktuelle Fehlerhinweise zu diesem Buch finden Sie auf meiner Homepage. Tucson, Arizona September 1997 W. Richard Stevens rstevens@kohala.com http://www.kohala.com/~rstevens