TCP- und UDP-Socket: Wofür sie sind und Unterschiede zu Ports

Wenn zwei Hosts (Computer, Smartphones oder andere mit dem Netzwerk verbundene Geräte) miteinander kommunizieren müssen, müssen sie einen TCP- oder UDP-Socket öffnen, um die Kommunikation über die entsprechende IP (entweder öffentlich oder privat) und auch die zu ermöglichen Häfen . Die gesamte Kommunikation zwischen zwei oder mehr Hosts wird auf der Ebene der Transportschicht durchgeführt, da es die erste Schicht ist, auf der eine Punkt-zu-Punkt-Kommunikation zwischen zwei oder mehr Computern stattfindet, und hier könnten wir das TCP-Protokoll oder das UDP-Protokoll verwenden . Heute erklären wir in diesem Artikel alles darüber, was ein Socket ist und welche Unterschiede es zu den typischen Router-Ports gibt.

Was ist eine Steckdose und wozu dient sie?

TCP- und UDP-Socket

Wenn zwei Prozesse, die sich auf verschiedenen Hosts befinden, Informationen über das Netzwerk austauschen müssen, sei es das lokale Netzwerk oder das Internet, müssen sie einen Socket öffnen, um die Kommunikation herzustellen und auch Datenströme auszutauschen. Im Allgemeinen erfolgt der Datenfluss zuverlässig und geordnet, wir hängen jedoch davon ab, ob die Prozesse das TCP-Protokoll oder das UDP-Protokoll verwenden. Nachfolgend erläutern wir kurz die Hauptmerkmale beider Protokolle:

  • Das TCP-Protokoll ist ein verbindungsorientiertes Transportschichtprotokoll, dh vor dem Austausch der eigentlichen Daten gibt es einen vorherigen Schritt, um eine Kommunikation aufzubauen. Dieses Protokoll garantiert auch, dass die gesamte Datenübertragung fehlerfrei erfolgt, TCP selbst ist dafür verantwortlich, die Daten erneut zu senden, falls der Empfänger sie nicht rechtzeitig oder beschädigt erhält, außerdem garantiert es auch die Bestellung für das, was wir machen Stellen Sie sicher, dass die Prozesse alle Daten in der richtigen Reihenfolge von ihrem Ursprung erhalten.

  • Beim UDP-Protokoll ist es nicht verbindungsorientiert, es gibt keinen vorgelagerten Kommunikationsschritt, sondern die Daten werden direkt versendet. Dieses Protokoll garantiert nicht, dass die Übertragung fehlerfrei durchgeführt wird, obwohl es alles tun wird, um dies zu tun, und es garantiert auch nicht die Reihenfolge der Datagramme, die der Ursprung an das Ziel sendet. Das Positive an UDP ist, dass es einen sehr kleinen Header hat und sehr schnell ist, da es keine Phase des Verbindungsaufbaus gibt.

Damit zwei Prozesse miteinander kommunizieren können, ist es erforderlich, dass der eine Prozess den anderen orten kann und beide Prozesse Informationen über das Netzwerk austauschen können. Natürlich verwenden wir eine Client-Server-Architektur, also muss einer der beiden Prozesse die Kommunikation initiieren. Damit zwei Prozesse kommunizieren können, benötigen wir einen Socket.

Ein Socket wird unabhängig davon, ob wir das TCP-Protokoll oder das UDP-Protokoll verwenden, durch die folgenden Parameter definiert:

  • Verwendetes Protokoll der Transportschicht: TCP oder UDP
  • Quell-IP-Adresse: kann eine öffentliche oder private IP sein.
  • Ziel-IP-Adresse: kann eine öffentliche oder private IP sein.
  • Quell- oder lokaler Port: Dieser Port liegt normalerweise zwischen den Ports 49152 bis 65535, sie werden als dynamische oder private Ports bezeichnet. Aber es muss nicht so sein, Sie können jeden Quellport verwenden, zum Beispiel verwendet ein Webserver, der Port 443 für HTTPS-Verbindungen verwendet, Quellport 443 für Verbindungen.
  • Ziel- oder Remote-Port: Dieser Port kann ein beliebiger Port sein, es ist erforderlich, dass der andere Prozess oder Host auf diesen Port lauscht.

Dank all dieser Parameter können wir jede der hergestellten Verbindungen einzigartig machen, auf diese Weise können sowohl die Quelle als auch das Ziel die Verbindung perfekt identifizieren und mit dem Datenaustausch beginnen.

Wie viele Steckdosen darf ein Team haben?

Für jede der Verbindungen, die wir außerhalb unserer Geräte herstellen, benötigen wir eine Steckdose, damit wir Informationen zwischen den verschiedenen Prozessen austauschen können. In einem bestimmten Computer können wir eine große Anzahl offener Sockets haben, obwohl dies sowohl von der Hardware des Computers als auch vom Betriebssystem abhängt, da das Betriebssystem für die Verwaltung aller Sockets zuständig ist (Erstellung von und löschen). Wenn wir einen neuen Socket öffnen, muss dieser eindeutig sein, um die Verbindung eindeutig zu identifizieren.

Bei Webservern ist jede der Client-Verbindungen durch einen Socket definiert, stellen Sie sich zum Beispiel vor, dass sich insgesamt drei Clients mit unserem Webserver verbinden, jeder Socket wird außerdem anders sein, je nachdem, ob wir den Status sehen die Verbindung auf unserem lokalen oder entfernten Computer, ändert sich das Paar aus IP und Ports von der Quelle zum Ziel und umgekehrt.

Im folgenden Beispiel können wir die auf einem Webserver erstellten Sockets sehen, indem wir uns diese Sockets vom Webserver selbst ansehen.

  • Benutzer 1
  • Protokoll: TCP.
  • Quell-IP: 77.77.77.77 (der Client).
  • Ziel-IP: 88.88.88.88 (us).
  • Quell- oder lokaler Port: 49152 (der Client).
  • Ziel- oder Remote-Port: 443 (wir verwenden HTTPS).

Im Fall des zweiten Benutzers hätten wir:

  • Benutzer 2
  • Protokoll: TCP.
  • Quell-IP: 71.71.71.71 (der Client).
  • Ziel-IP: 88.88.88.88 (us).
  • Quell- oder lokaler Port: 49152 (der Client).
  • Ziel- oder Remote-Port: 443 (wir verwenden HTTPS).

In diesem Fall hat sich nur die Quell-IP geändert, aber sobald sich einer der vier Parameter ändert, haben wir bereits einen neuen Socket, mit dem wir die Verbindung eindeutig identifizieren können. Dieser Client kann weiterhin den Quellport 49152 als ersten verwenden, aber die Quell-IP wird anders sein. Sobald sich einer der vier Parameter ändert, befinden wir uns bereits in einem anderen, völlig anderen Prozess und es ist kein Problem, ihn richtig zu identifizieren.

So sehen Sie alle Steckdosen im System

In Windows Betriebssystemen können wir alle offenen System-Sockets sehen, indem Sie einfach den folgenden Befehl an der Eingabeaufforderung mit Administratorrechten ausführen:

netstat

In der folgenden Abbildung sehen Sie das TCP-Protokoll, die lokale Adresse, die durch IP:PORT gebildet wird, und auch die entfernte Adresse, die durch IP:PORT gebildet wird. Schließlich zeigt es auch den Status der Verbindung an.

In Linux Betriebssystemen gibt es auch netstat, oder besser gesagt, es gab, weil es jetzt als „deprecated“ gilt. Der Ersatz ist der Befehl „ss“, der die gleichen Funktionen hat, uns aber mehr Anzeigeoptionen ermöglicht. Wenn Sie ein Linux-basiertes Betriebssystem verwenden, können Sie den folgenden Befehl ausführen, um alle Sockets anzuzeigen:

ss

Nachdem wir nun gesehen haben, was ein Socket ist, sehen wir uns an, wie er sich von Ports unterscheidet.

Was ist der Unterschied zu den Ports

Ein TCP- oder UDP-Socket wird oft mit TCP- oder UDP-Ports verwechselt. Ein Socket besteht, wie wir bereits gesagt haben, aus dem Transportschichtprotokoll, der Quell- und Ziel-IP-Adresse sowie den Quell- und Zielports. Die „Ports“ sind nur ein Teil des Sockets, ein grundlegender Teil, aber nur ein Teil, um einen Socket zu bilden, sind auch die entsprechenden IP-Adressen erforderlich, damit eine Punkt-zu-Punkt-Kommunikation zwischen zwei Prozessen stattfinden kann.

Wenn wir einen Port im Router öffnen, erlauben wir eigentlich die Kommunikation von außen (Internet) nach innen im lokalen Netzwerk, indem wir das NAT durchlaufen, das alle Router für das IPv4-Protokoll haben. Wenn wir uns in einer NAT-Umgebung befinden, kümmert sich der Router darum, die privaten IP-Adressen in die öffentliche zu übersetzen, um den gesamten Datenverkehr korrekt ins Internet zu leiten.

Für den Fall, dass ein Client innerhalb des NAT mit einem Webserver im Internet kommunizieren möchte, sieht der Socket, den dieser lokale Client erstellt, in etwa so aus:

  • Protokoll: TCP.
  • Quell-IP: 192.168.1.2 (us).
  • Ziel-IP: 88.88.88.88 (der Webserver).
  • Herkunfts- oder lokaler Hafen: 49152 (us).
  • Ziel- oder Remote-Port: 443 (Webserver).

Der Router nimmt dann diese Verbindung und übersetzt sie in Folgendes, damit sie über das Internet geroutet werden kann, wodurch ein neuer Socket zwischen dem Router und dem Remote-Webserver erstellt wird:

  • Protokoll: TCP.
  • Quell-IP: 20.20.20.20 (unsere öffentliche IP).
  • Ziel-IP: 88.88.88.88 (der Webserver).
  • Herkunfts- oder lokaler Hafen: 49152 (us).
  • Ziel- oder Remote-Port: 443 (Webserver).

Für den Fall, dass die Kommunikation umgekehrt ist (von außerhalb des NAT nach innerhalb des NAT), müssen wir bei unserem Router einen Port öffnen, damit der Server von außen erreichbar ist, andernfalls das Firewall des Routers stoppt die gesamte Kommunikation.