Systemprogrammierung: Netzwerk¶
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).