Nicht aus der Schweiz? Besuchen Sie lehmanns.de

Unix-Netzwerkprogrammierung mit Threads, Sockets und SSL (eBook)

(Autor)

eBook Download: PDF
2006 | 2006
XV, 434 Seiten
Springer Berlin (Verlag)
978-3-540-38302-4 (ISBN)

Lese- und Medienproben

Unix-Netzwerkprogrammierung mit Threads, Sockets und SSL - Markus Zahn
Systemvoraussetzungen
6,28 inkl. MwSt
(CHF 6,10)
Der eBook-Verkauf erfolgt durch die Lehmanns Media GmbH (Berlin) zum Preis in Euro inkl. MwSt.
  • Download sofort lieferbar
  • Zahlungsarten anzeigen


Markus Zahn war nach Abschluß seines Mathematik-Studiums im Jahr 1994 als wissenschaftlicher Mitarbeiter am Lehrstuhl für Informatik I an der Universität Augsburg tätig und hat dort 1999 mit einer umfassenden Dissertation zum Thema 'Konsistenzmechanismen in Software-DSM-Systemen' promoviert. Seit 1997 leitet Herr Zahn die Arbeitsgruppe 'Betriebssysteme und parallele Server' am Rechenzentrum der Uni Augsburg. Die thematischen Schwerpunkte seiner Arbeit liegen in der parallelen und verteilten Programmierung von UNIX-Clustern und in den Bereichen POSIX-Threads, Remote Procedure Calls und Message Passing.

Markus Zahn war nach Abschluß seines Mathematik-Studiums im Jahr 1994 als wissenschaftlicher Mitarbeiter am Lehrstuhl für Informatik I an der Universität Augsburg tätig und hat dort 1999 mit einer umfassenden Dissertation zum Thema "Konsistenzmechanismen in Software-DSM-Systemen" promoviert. Seit 1997 leitet Herr Zahn die Arbeitsgruppe "Betriebssysteme und parallele Server" am Rechenzentrum der Uni Augsburg. Die thematischen Schwerpunkte seiner Arbeit liegen in der parallelen und verteilten Programmierung von UNIX-Clustern und in den Bereichen POSIX-Threads, Remote Procedure Calls und Message Passing.

Vorwort 5
Inhaltsverzeichnis 9
Beispielprogramme 13
1 Einführung 16
1.1 TCP/IP-Grundlagen 17
1.1.1 Netzwerkschicht 18
1.1.2 Internet-Schicht 19
1.1.3 Transportschicht 20
1.1.4 Anwendungsschicht 21
1.2 Internet-Standards 21
1.3 Unix-Standards 22
2 Programmieren mit Unix-Prozessen 24
2.1 Unix-Prozesse 24
2.1.1 Prozeßgruppen und Sessions 25
2.1.2 Kontrollierendes Terminal 27
2.1.3 Verwaiste Prozesse und verwaiste Prozeßgruppen 28
2.1.4 Prozeßumgebung 29
2.1.5 Lebenszyklus 30
2.1.6 User- und Gruppen-ID 35
2.2 Ein- und Ausgabe 36
2.2.1 Dateideskriptoren 36
2.2.2 Elementare Ein- und Ausgabe 39
2.2.3 Standardeingabe und -ausgabe 50
2.2.4 Ausgabe über den Syslog- Dienst 56
2.3 Buffer-Overflows und Format-String-Schwachstellen 60
2.3.1 Buffer-Overflows 62
2.3.2 Format-String-Schwachstellen 69
2.3.3 Geeignete Gegenmaßnahmen 72
2.4 Signale 73
2.4.1 Signale behandeln 74
2.4.2 Signale blockieren 83
2.4.3 Signale annehmen 87
2.4.4 Signale generieren 89
2.5 Prozeflkontrolle 91
2.5.1 Was bin ich? Prozeß-IDs und mehr 92
2.5.2 Neue Prozesse erzeugen 94
2.5.3 Prozesse synchronisieren 98
2.5.4 Zombie-Prozesse 104
2.5.5 Andere Programme ausführen 105
2.5.6 User- und Group-IDs wechseln 109
2.6 Dæmon-Prozesse 111
3 Programmieren mit POSIX-Threads 118
3.1 Grundlagen 119
Ready: 124
Running: 124
Blocked: 124
Terminated: 124
3.2 Synchronisation 130
3.2.1 Race Conditions und kritische Bereiche 131
3.2.2 Gegenseitiger Ausschluß 135
Mutexe erstellen und verwerfen 135
Mutexe sperren und wieder freigeben 136
Mutexe praktisch einsetzen 137
3.2.3 Bedingungsvariablen 141
Bedingungsvariablen erstellen und verwerfen 141
Auf Bedingungsvariablen warten 142
Bedingungsvariablen signalisieren 144
Mutexe und Bedingungsvariablen einsetzen 145
3.3 Pthreads und Unix-Prozesse 150
3.3.1 Threadsichere und eintrittsinvariante Funktionen 150
Threadsicherheit: 150
Eintrittsinvarianz: 150
3.3.2 Fehlerbehandlung und errno 152
3.3.3 Signalverarbeitung 153
3.3.4 fork() und exec() in Pthreads-Programmen 159
4 Grundlagen der Socket-Programmierung 162
4.1 Erste Schritte mit telnet und inetd 162
4.1.1 Das telnet-Kommando als Netzwerk-Client 162
Beliebige Dienste ansprechen 163
Kommunikation mit einem Mailserver 164
Zusammenfassung 166
4.1.2 Einfache Netzwerkdienste mit dem inetd 167
4.2 IP-Namen und IP-Adressen 171
4.2.1 Das Domain Name System 172
4.2.2 IPv4-Adressen 174
Klasse A: 175
Klasse B: 176
Klasse C: 176
Klasse D: 176
Klasse E: 177
CIDR – Classless Inter-Domain Routing 177
Private IP-Adressen 178
4.2.3 IPv6-Adressen 179
4.3 Sockets 194
4.3.1 Socket anlegen 195
4.3.2 Socket-Strukturen 197
IPv4 Socket-Adreßstruktur 197
IPv6 Socket-Adreßstruktur 197
Generische Socket-Adreßstrukturen 198
4.3.3 Client-seitiger TCP-Verbindungsaufbau 199
4.3.4 Socket-Adressen zuweisen 204
4.3.5 Annehmende Sockets 207
4.3.6 TCP-Verbindungen annehmen 209
4.3.7 Drei-Wege-Handshake und TCP-Zustandsübergänge 214
4.3.8 Kommunikation über UDP 220
4.3.9 Standardeingabe und -ausgabe über Sockets 227
4.3.10 Socket-Adressen ermitteln 228
4.3.11 Multiplexing von Netzwerkverbindungen 233
4.3.12 Socket-Optionen 238
4.4 Namensaulösung 242
5 Netzwerkprogrammierung in der Praxis 250
5.1 Aufbau der Testumgebung 251
5.1.1 Funktionsumfang der Testumgebung 252
5.1.2 Hilfsfunktionen für die Socket- Kommunikation 253
5.1.3 Der Test-Client 264
5.2 Iterative Server 270
5.2.1 Sequentielle Verarbeitung der Anfragen 271
5.2.2 Clientbehandlung 274
5.2.3 Hilfsfunktionen zur Laufzeitmessung 277
5.2.4 Eigenschaften und Einsatzgebiete 279
5.3 Nebenläufige Server mit mehreren Threads 281
5.3.1 Abgewandelte Signalbehandlung 282
5.3.2 Ein neuer Thread pro Client 283
5.3.3 Das Hauptprogramm als Signalverarbeiter 285
5.3.4 Eigenschaften und Einsatzgebiete 287
5.4 Nebenläufige Server mit Prethreading 289
5.4.1 Clientbehandlung mittels paralleler Accept-Handler 290
5.4.2 Das Hauptprogramm als Signalverarbeiter 292
5.4.3 Eigenschaften und Einsatzgebiete 294
5.5 Nebenläufige Server mit mehreren Prozessen 296
5.5.1 Anpassung der Signalbehandlung 297
5.5.2 Ein neuer Prozeß pro Client 299
5.5.3 Das Hauptprogramm 301
5.5.4 Eigenschaften und Einsatzgebiete 302
5.6 Nebenläufige Server mit Preforking 304
5.6.1 Buchführende Signalbehandlung 305
5.6.2 Parallele Accept-Handler in mehreren Prozessen 307
5.6.3 Preforking im Hauptprogramm 309
5.6.4 Eigenschaften und Einsatzgebiete 311
5.7 Zusammenfassung 313
6 Netzwerkprogrammierung mit SSL 316
6.1 Strategien zur Absicherung des Datenverkehrs 317
6.1.1 Datenverschlüsselung 319
6.1.2 Hashfunktionen und Message Authentication Codes 322
6.1.3 Digitale Signaturen 323
6.1.4 Zertifizierungsstellen und digitale Zertifikate 324
6.1.5 Praktische Absicherung des Datenverkehrs 325
6.2 SSL-Grundlagen 328
6.2.1 Datentransfer über SSL 329
6.2.2 Anwendungsprotokolle um SSL erweitern 332
6.2.3 SSL-Verbindungen interaktiv testen 336
6.3 OpenSSL-Basisfunktionalität 338
6.3.1 Das Konzept der BIO-API 339
6.3.2 Lebenszyklus von BIO-Objekten 340
6.3.3 Ein-/Ausgabe über BIO-Objekte 341
6.3.4 BIO-Quellen/Senken und BIO-Filter 344
6.3.5 Fehlerbehandlung 357
6.3.6 Thread-Support 360
6.3.7 Pseudozufallszahlengenerator 367
7 Client-/Server-Programmierung mit OpenSSL 372
7.1 Initialisierung der ssl-Bibliothek 372
7.2 Der SSL-Kontext 374
7.2.1 Ein unvollständiger SSMTP- Client 375
7.2.2 SSL-Optionen, SSL-Modi und Chiffrenfolgen 379
7.3 Sicherer Umgang mit X.509-Zertifikaten 383
7.3.1 Zertifikatsüberprüfung aktivieren 387
7.3.2 Zertifikatsüberprüfung per Callback nachbereiten 389
7.3.3 Identitätsabgleich mit digitalen Zertifikaten 395
7.3.4 SSL-Kommunikation mit eigener Identität 402
7.4 Client-/Server-Beispiel: SMTP mit SARTTLS 404
7.4.1 Ein SMTP-Client mit STARTTLS 404
7.4.2 Ein SMTP-Server mit STARTTLS 412
7.5 Zusammenfassung 421
Anhang 424
A.1 Zertifikate erstellen mit OpenSSL 424
A.1.1 Aufbau einer Zerti.zierungsstelle 424
Erzeugen eines geheimen CA-Schl ¨ ussels 425
Erzeugen des CA-Zerti.kats 425
CA-Dateien speichern 426
A.1.2 Neue Zerti.kate ausstellen 427
Certi.cate Signing Request erzeugen 427
Certi.cate Signing Request signieren 428
A.1.3 Vertrauensw ¨ urdige Zerti . zierungsstellen 429
A.2 Barrieren mit POSIX-Threads 430
Literaturverzeichnis 438
Sachverzeichnis 442

6 Netzwerkprogrammierung mit SSL (S. 301-302)

Die Entwicklung der Unix-Betriebssysteme ist eng mit der Entwicklung des Internets verknüpft: Die schier unendlichen Möglichkeiten, die sich aus der Unix-Netzwerkprogrammierung ergaben, bereiteten im Zusammenspiel mit den Anfängen des Internets den Weg für eine Vielzahl von Netzwerkdiensten und darauf aufbauenden Dienstleistungen. Mit der Einführung des am Europäischen Kernforschungszentrum CERN entwickelten Netzwerkdiensts World Wide Web (WWW) schaffte das Internet schließlich den Sprung heraus aus der Welt der Forschung und der Wissenschaft. Über das WWW wurde von Internetnutzern aus der ganzen Welt binnen relativ kurzer Zeit eine bis dahin unvorstellbare Menge an Informationen bereitgestellt und miteinander verwoben, weshalb der Begriff "Internet" seitdem umgangssprachlich häufig mit dem World Wide Web gleichgesetzt wird. Aufgrund seiner Informationsvielfalt verzeichnete das Internet ab Mitte der Neunziger Jahre ein rasantes Wachstum von damals gut 1,3 Millionen angeschlossen Rechnern (Januar 1993) zu nunmehr knapp 400 Millionen miteinander vernetzten Systemen (Januar 2006).

Immer mehr Privatanwender, insbesondere auch Computerlaien, machen seither von dieser weltumspannenden Informationsquelle Gebrauch, was Zug um Zug auch zu immer mehr kommerziellen Angeboten im Netz führte (und immer noch führt). Das Internet ist damit inzwischen von einem Netz für Universitäten und Forschungseinrichtungen zum ubiquitären Informations- und Kommunikationsmedium avanciert. Viele neue Dienste wie etwa die elektronische Post (EMail), das Telefonieren über das Internet (IP-Telefonie, VoIP), das Einkaufen über das Internet (Online-Shopping), der elektronische Zahlungsverkehr (Online-Banking), die elektronische Steuererklärung (ELSTER) oder auch das sogenannte E-Government verlangen eine Personalisierung ihrer Dienst leistungen.

Niemand soll schließlich unberechtigten Zugriff auf das Konto Dritter haben, unter einer falschen Identität Waren einkaufen oder gar eine Steuererklärung abgeben können. Die Benutzer müssen sich also gegenüber den angesprochenen Diensten ausweisen können und dabei müssen dann letztendlich auch sensible Daten verwaltet und über das (unsichere) Netzwerk übertragen werden. Die IT-Sicherheit spielt damit in solchen Systemen eine zentrale Rolle. Im weiteren Verlauf dieses Kapitels wollen wir deshalb aus dem weiten Themenfeld der IT-Sicherheit einen für die Unix-Netzwerkprogrammierung relevanten Baustein herausgreifen: die sichere Datenübertragung über ein IPbasiertes Netzwerk.

6.1 Strategien zur Absicherung des Datenverkehrs

Die Absicherung des Datenverkehrs zwischen zwei Kommunikationspartnern dreht sich, anders als gemeinhin angenommen, in der Regel nicht nur um die reine Verschlüsselung der zu übertragenden Daten. Die Herausforderungen, die bei der sicheren Datenübetragung zu meistern sind, sind gleichzeitig die vier Hauptziele der modernen Kryptographie und werden Schutzziele der ITSicherheit genannt: Vertraulichkeit: Nur der gewünschte Empfänger einer vertraulichen Nachricht soll in der Lage sein, den Inhalt der Nachricht zu lesen. Um die Vertraulichkeit zu gewährleisten, muß also sichergestellt werden, daß der Inhalt einer Mitteilung nur von der Person bzw. dem System gelesen werden kann, für die bzw. für das der Absender seine Mitteilung bestimmt hat. Darüber hinaus sollte es für Unbefugte nicht einmal möglich sein, abgeleitete Informationen über den eigentlichen Nachrichteninhalt (etwa eine statistische Verteilung bestimmter Zeichen) zu erlangen.

Erscheint lt. Verlag 7.9.2006
Reihe/Serie X.systems.press
X.systems.press
Zusatzinfo XV, 434 S.
Verlagsort Berlin
Sprache deutsch
Themenwelt Informatik Betriebssysteme / Server Unix / Linux
Mathematik / Informatik Informatik Netzwerke
Schlagworte Entwicklung • IEEE~Std~1003.1-2001 • IPv4 • IPv6 • OpenSSL • Parallelität • POSIX Threads • Processing • Programmieren • Programmierung • Prozessmodell • Pthreads • Sockets • SSL/TLS • TCP/IP • UNIX
ISBN-10 3-540-38302-6 / 3540383026
ISBN-13 978-3-540-38302-4 / 9783540383024
Haben Sie eine Frage zum Produkt?
PDFPDF (Wasserzeichen)

DRM: Digitales Wasserzeichen
Dieses eBook enthält ein digitales Wasser­zeichen und ist damit für Sie persona­lisiert. Bei einer missbräuch­lichen Weiter­gabe des eBooks an Dritte ist eine Rück­ver­folgung an die Quelle möglich.

Dateiformat: PDF (Portable Document Format)
Mit einem festen Seiten­layout eignet sich die PDF besonders für Fach­bücher mit Spalten, Tabellen und Abbild­ungen. Eine PDF kann auf fast allen Geräten ange­zeigt werden, ist aber für kleine Displays (Smart­phone, eReader) nur einge­schränkt geeignet.

Systemvoraussetzungen:
PC/Mac: Mit einem PC oder Mac können Sie dieses eBook lesen. Sie benötigen dafür einen PDF-Viewer - z.B. den Adobe Reader oder Adobe Digital Editions.
eReader: Dieses eBook kann mit (fast) allen eBook-Readern gelesen werden. Mit dem amazon-Kindle ist es aber nicht kompatibel.
Smartphone/Tablet: Egal ob Apple oder Android, dieses eBook können Sie lesen. Sie benötigen dafür einen PDF-Viewer - z.B. die kostenlose Adobe Digital Editions-App.

Buying eBooks from abroad
For tax law reasons we can sell eBooks just within Germany and Switzerland. Regrettably we cannot fulfill eBook-orders from other countries.

Mehr entdecken
aus dem Bereich
Das umfassende Handbuch

von Dirk Deimeke; Daniel van Soest; Stefan Kania; Peer Heinlein …

eBook Download (2023)
Rheinwerk Computing (Verlag)
CHF 51,20
das umfassende Handbuch

von Michael Kofler

eBook Download (2023)
Rheinwerk Computing (Verlag)
CHF 36,55
Die wichtigen Befehle

von Daniel J. Barrett

eBook Download (2024)
O'Reilly Verlag
CHF 16,50