Netzwerk-Programmierung unter Linux

Netzwerkprogrammierung unter Linux (und UNIX) fügt sich hervorragend in das Grundprinzip “Everything is a File” ein. Das Socket-Interface stellt ein leicht zu benutzendes Programmierparadigma dar, das nicht auf TCP/IP beschränkt ist, sondern auf eine Vielzahl anderer Netzwerkprotokolle anwendbar ist.

Kursinhalt

  • Grundlagen der Netzwerkprogrammierung. Das Socket-Interface — seine Datentypen und Systemcalls — wird erklärt, ohne jedoch noch auf ein spezielles Medium einzugehen.
    • Relevante Systemcalls: socket(), connect(), bind(), listen(), accept()
    • Streamverbindungen: Verbindungsaufnahme und Kommunikation
    • Datagramme: verbindungslose Kommunikation
    • Fehlerszenarien
    • Adressfamilien: jedes “Medium” hat seine eigene Auffassung der Adresse eines Endpoints. Beispielsweise kennt man von IPv4 die vier Nummern wie 192.168.1.2 — andere Medien wie Bluetooth haben andere Adressen, die aber mit den gleichen System Calls bearbeitet werden.
  • TCP/IP. Netzwerkprogrammierung am Internet.
    • TCP (Stream-Verbindungen) und UDP (Datagramme)
    • Hilfsfunktionen zur Adresskonvertierung
    • DNS-Lookup
    • IPv4 und IPv6
  • UNIX Domain Sockets. Prozesse, die nur lokal (innerhalb eines Systems) kommunizieren, verwenden UNIX Domain Sockets. Sie funktionieren gleich wie ihre TCP/IP-Äquivalente, nur sind sie ungleich ressourcenschonender, und ihre Adressen sind Pfadnamen im Filesystem.
  • CAN-Bus. CAN (Controller Area Network) war lange Zeit nur über Controller-spezifische Driver und deren Interfaces bedienbar; mittlerweise wurde dieses Medium, wenngleich broadcast-only, in das Socket-Interface eingepasst und ist dementsprechend angenehm zu verwenden.
  • IO-Multiplexing mit select/poll/epoll. Eine Möglichkeit, in einem Prozess mit mehreren Verbindungen umzugehen, ist, jeder Verbindung einen Thread zu widmen — und sich dadurch den damit verbundenen Gefahren auszusetzen. IO-Multiplexing ist eine alternative Methode, mit mehreren Verbindungen umzugehen — man reagiert auf IO-Events wie “Daten können von einem Socket gelesen werden”, oder “Daten können auf ein Socket geschrieben werden”.
    • Eventgetriebenes (“nonblocking”) Programmieren
    • Verbindungsaufnahme, nonblocking
    • I/O, nonblocking
    • Eventgetriebenes Programmieren abseits von Netzwerk-I/O: Timer, Signale, …

Empfohlene Vorkenntnisse

Solide Kenntnisse in C werden vorausgesetzt, genau wie eine Grundkenntnis des Systems (vgl. Einführungskurs).

Fakten

Titel: Netzwerk-Programmierung unter Linux
Dauer: 2 Tage
Ort: Bei Ihnen
Termin: auf Anfrage
Preis: auf Anfrage