11.4 TCP Socket
Sockets sind spezielle Strukturen, die als Schnittstelle zur Netzwerkimplementierung für Anwendungen entwickelt wurden. Diese werden weltweit als Industriestandard eingesetzt, sind im POSIX-Standard definiert und deshalb auch in Linux implementiert.
Aus Ihrer Sicht als Programmierer ist ein Socket nichts anderes als ein Filedeskriptor, womit Sie neben den Standardfunktionen auch auf eine erweiterte Palette von speziellen Funktionen zurückgreifen können. Der Austausch von Daten ist bei den Sockets unabhängig von den verwendeten Protokollen und Adressfamilien – was die Verwendung der einzelnen API-Funktionen erheblich erleichtert.
Beim Anlegen eines Sockets wird grundsätzlich zwischen einer stream- und datagrammbasierten Kommunikation unterschieden. Streambasierte Protokolle wie z. B. das TCP-Protokoll sind Streaming-Protokolle mit Sequencing und Fehlerkontrolle. Datagrammbasierte Protokolle wie z. B. UDP hingegen sind paketorientierte Protokolle und bieten kein Sequencing oder keine Fehlerkontrolle an.
Hinweis Man spricht vom Sequencing, wenn ein Protokoll sicherstellt, dass die Daten in der Reihenfolge empfangen werden, in der diese gesendet wurden. Verwendet ein Protokoll eine Fehlerkontrolle, dann können Sie sicher sein, dass keine beschädigten Daten ankommen. Beschädigte Daten werden von diesem Protokoll verworfen und erneut angefordert.
|
Bei einem Streaming-Protokoll wie dem TCP wird mit einzelnen Bytes in einer größeren Folge von Blöcken gearbeitet. Beim paketorientierten Protokoll wie z. B. dem UDP werden zum Versand oder zum Empfangen Pakete verwendet.
Außerdem ist es wichtig, dass Sie zwischen verbindungsorientierten und verbindungslosen Protokollen unterscheiden. TCP ist im Gegensatz zu UDP ein verbindungsorientiertes Protokoll. Das bedeutet, dass TCP erst eine Verbindung zwischen zwei Endpunkten herstellt, ehe die Kommunikation stattfinden kann. In der Regel ist es nicht möglich, sich in eine solche Verbindung einzuklinken (nichts ist allerdings unmöglich, Network Sniffing ist eine Möglichkeit der des Einklinkens, zwar nur read-only, aber immerhin). Bei einem verbindungslosen Protokoll wird eine solche Verbindung nicht benötigt.
Um den Überblick zu wahren, hier nochmals TCP und UDP im Vergleich:
|
TCP – verbindungsorientiert; mit Sequencing; mit Fehlerkontrolle; streaming-orientiert; Stream-Protokoll |
|
UDP – verbindungslos; ohne Sequencing; ohne Fehlerkontrolle; paketorientiert; Datagrammprotokoll |
|