Sockets und Ports
Willemers Informatik-Ecke
Der Transport von Daten über das Netzwerk ist nicht die Beschäftigung eines gelangweilten Betriebssystems, sondern wird von Programmen angetrieben, die mit anderen Programmen kommunizieren wollen.

Port und Socket

Um von einem Programm aus auf eine Netzwerk-Ressource zuzugreifen, hat man das Konzept des Sockets erfunden. Ein Socket verhält sich aus der Sicht des Programmierers fast wie eine Datei. Er kann sie öffnen, etwas hineinschreiben, etwas herauslesen und sie wieder schließen. Intern verbindet das Betriebssystem den Socket mit dem Netzwerk.

Will das Programm Firefox auf dem Server-Host das Programm Apache erwischen, muss es neben der IP-Adresse noch eine weitere Kennung geben, denn der Firefox möchte weder mit einem anderen Firefox, noch mit dem Thunderbird oder dem Mail-Server des Hosts Kontakt aufnehmen.

Zur Unterscheidung bekommen die Sockets eine für den Host eindeutige Nummer. Diese Nummer nennt man den Port. Ein Client kann irgendeine Nummer verwenden. Will man aber einen bestimmten Server erwischen, ist es gut, wenn er eine festgelegte Nummer hat. Beispielsweise binden sich Web-Server an den Port 80, wenn sie unverschlüsselte Webseiten anzubieten haben. Diese Konvention kennt jeder Browser und ruft darum den Port 80.

Einen solchen festgelegten Port nennt man einen "well-known-port". Eine Liste der wichtigsten findet man in der Datei /etc/services (unter UNIX/Linux).

Der Client wird sich dagegen irgendeinen Port geben lassen und bekommt dann einen Port aus dem höheren Bereich (1024 oder höher).

Manchmal können Sie den Port in einer URL sehen. Wenn ein Server angesprochen wird, der nicht über seinen well known port anzusprechen ist, dann wird im Web der Port durch einen Doppelpunkt abgetrennt an die Zieladresse gehängt.

Client und Server

Als Client wird der Prozess bezeichnet, der eine Anfrage startet. Ein Server wartet auf Anfragen von Clients, bearbeitet diese Anfragen und sendet die Ergebnisse an den Client zurück.

Beispiel für eine Socket-Programmierung in C

Transmission Control Protocol (TCP) ordnet Pakete

Die Daten, die der Client an den Server sendet oder von ihm bekommt, wurden zum Transport in Pakete verpackt. Als Programmierer werden sie erwarten, dass die Pakete vollständig und in der richtigen Reihenfolge ankommen. Das ist aber bei den wilden Dingen, die im Internet passieren, nicht unbedingt gewährleistet.

Damit die Programme dennoch einfach so arbeiten können, als würden sie es mit Dateien zu tun haben, muss das Netzwerk für eine klare Reihenfolge sorgen. Das erledigt das Transmission Control Protocol (TCP). Geht irgend ein Paket verloren, fragt es nach und bittet gegebenenfalls um Nachlieferung. Dann sortiert es die Pakete noch mundgerecht. Das geschieht alles im Hintergrund, so dass sich das Programm darum nicht kümmern muss.

Das mag alles seine Zeit dauern und das Netzwerk mit zusätzlichen Paketen belasten, aber in den meisten Fällen ist es sinnvoll, dass sich der Experte - die Netzwerkschicht - darum kümmert, anstatt dass das Programm all dies regelt.

Das TCP-Paket

32 Bits
Quell-Port Ziel-Port
Sequenznummer
Acknowledgement-Nummer
Länge, Flags Empfangsfenster
Prüfsumme Urgent Data Pointer
Optionen
Payload

TCP-Verbindungs-Handshake

Da die TCP-Verbindung verlässliche Daten überträgt, gibt es einen Handshake. Auch der Abbau der Verbindung folgt einem Handshake Der Auf- und Abbau der Verbindungen kann ins Stocken geraten. Dann wird die Verbindung nach Ablauf eines Time-Out abgebrochen. Die Dauer des Time-Out wird auf der Grundlage eines RTT (round trip time) ermittelt.

User Datagram Protocol (UDP) fire and forget

In manchen Fällen ist Geschwindigkeit wichtiger als Zuverlässigkeit. So ist beim Streamen von Audio-Signalen der Verlust von einem Paket in den meisten Fällen gar nicht zu hören. Wenn aber die verlorenen Pakete nachgeordert werden, wird es zu einem hörbaren Zeitverlust kommen.

Will der Programmierer eine solche Verbindung haben, gibt er bei Anforderung seines Sockets als Protokoll UDP an. Logischerweise wird dieser Socket nur mit einem UDP-Port auf Serverseite verbunden.

Dieses Verfahren ist sehr schnell und eignet sich besonders für Multimedia-Streams und VoIP.

Das UDP-Paket

32 Bits
Quell-Port Ziel-Port
Länge Prüfsumme
Payload

Das Paket wird als Data in ein IP-Paket gelegt.

Damit haben wir neben der Portnummer auch noch die Protokolle TCP und UDP, die einen Dienst unterscheiden.