was sind Ports?

5 Antworten

Erstmal gibt diese nummer nicht, geht nur bis 65535.

Im Endeffekt ist das eine Information die dein Rechner nutzt um festzustellen für welche Anwendung das Paket gedacht ist.

0-1023 sind well-known ports, für bestimmte Systemprozesse, die sollte man nicht einfach so für seine random Anwendung nutzen, 1024-49151 sind registered ports, die kann man sich als Unternehmen registrieren lassen, aber die darf trotzdem jeder noch benutzen, und der rest sind zur freien verwendung.
Hier eine Übersicht https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers


NoHumanBeing  31.05.2022, 22:09
und der rest sind zur freien verwendung.

Der Rest (49152 - 65535) steht insbesondere zur dynamischen Allokation zur Verfügung. Habe in Erinnerung, dass man sich dort ebenfalls "heraushalten sollte", wenngleich ich vermute, dass Betriebssysteme erkennen, wenn dort ein Port bereits "gebunden" ist und ihn nicht (erneut) dynamisch vergeben.

1
jort93  31.05.2022, 22:12
@NoHumanBeing

Ja, alles was sonst so anfällt.

0-49151 sind ja in der regel genug, lol.

1

Nichts, ist nur eine Nummer, welche den Port (und somit die Anwendung) identifiziert.

Für die Portnummer ist im jeweiligen Transportprotokoll (OSI-Layer 4) ein 16-Bit-Feld vorgesehen. Daher gehen die Portnummern prinzipiell von 0 bis 65535 (2^16 - 1).

Portnummern, die kleiner als 1024 (2^10) sind, werden als so genannte "well-known ports" bezeichnet. Hier ist ein Protokoll auf Anwendungsebene "reserviert", z. B. Port 21 für FTP, Port 22 für SSH, Port 80 für HTTP oder Port 443 für HTTPS. Unter Linux muss eine Anwendung unter dem Root-Benutzer laufen, um einen "well-known port" verwenden zu können.


franzhartwig  31.05.2022, 21:57

Unter Linux muss eine Anwendung unter dem Root-Benutzer laufen, um einen "well-known port" verwenden zu können.

Nicht wirklich. Hier läuft der Webserver z. B. unter dem Benutzer www-data, unbound läuft unter dem Benutzer unbound.

2
NoHumanBeing  31.05.2022, 22:03
@franzhartwig

Findet man so zumindest auch in den "manpages".

Port numbers below 1024 (so-called "low numbered" ports) can only be bound to by root (see bind(2), tcp(7), and udp(7)). This is so clients connecting to low numbered ports can trust that the service running on the port is the standard implementation, and not a rogue service run by a user of the machine. Well-known port numbers specified by the IANA are normally located in this root-only space.

Quelle: https://linux.die.net/man/5/services

Kann aber gut sein, dass es bei manchen Distributionen auch andere Gruppen gibt, die das können, so wie es bei vielen Distributionen beispielsweise eine "audio"-Gruppe gibt, die Prozesse mit Realtime-Scheduling ausführen kann.

0
franzhartwig  31.05.2022, 23:10
@NoHumanBeing

Der Start von Apache oder Unbound erfolgt als root. Beim starten werden dann die Privilegien geändert, sodass der Prozess unter www-data bzw. unbound läuft. Das Binden des Ports erfolgt wohl noch als root, dann wird der user geändert. Wie genau der Mechanismus abläuft, weiß ich im Moment nicht. Das Ergebnis ist jedoch, dass der Prozess an Port 80, 443, 53 als Nicht-root-Benutzer läuft.

1
KarlRanseierIII  01.06.2022, 00:42
Unter Linux muss eine Anwendung unter dem Root-Benutzer laufen, um einen "well-known port" verwenden zu können.

Wie franzhartwig bereits andeutet, ist das nicht nötig. Um das kurz zu vertiefen:

Es reicht völlig, wenn ein Prozess die CAP_NET_BIND_SERVICE hält. Prozesse die von root gestartet werden haben diese. Klassisch wird der Port gebunden, dann der Nutzer gewechselt.

Alternativ kann ich auch sagen, ich möchte die CAP behalten und wechsle dann den Nutzer. (So kann ich sehr früh alle nicht mehr gebrauchtne Rechte wegwerfen und direkt den Nutzer wechseln)

Oder ich nutze gleich filecaps.

1

Stelle Dir vor, Du hast einen Rechner. Der hat die IP-Adresse 192.0.2.1. Auf diesem Rechner läuft ein Mailserver, ein Webserver und ein DNS-Server.

Nun bekommt der Rechner ein IP-Paket. Aber für welche Anwendung/welchen Server ist das Paket? Dies wird durch den Port bestimmt. Ein Webserver reagiert in der Regel auf Port 80 (HTTP) und 443 (HTTPS). Ein Mailserver reagiert u. a. auf Port 25, der DNS-Server auf Port 53.

Kommt nun also ein IP-Paket an Port 443, ist es HTTPS und muss vom Webserver bearbeitet werden.

Die Portnummern gehen von 1 bis 65535 - die von Dir genannte Nummer ist also ungültig und kann nicht dargestellt werden.

Die Nummer hat ein Port mit Sicherheit nicht. ;) Maximale Portnummer ist nämlich 65535.

Die Portnummer ist eine Adresse. Damit lässt sich ein Port eindeutig identifizieren. Zusammen mit der IP-Adresse lässt sich ein Ziel eindeutig identifizieren.

Ports gehen bis 65535, nicht 66232.

Die Port-Nummer dient dafür, Traffic den einzelnen Anwendungen zuordnen zu können.

Du kannst dir das bildlich Adressen darstellen - die IP-Adresse ist die Straße, die Port-Nummer die Hausnummer.

Willst du jetzt ein Paket von dir zu z.B. Lange Straße 42 schicken, gibst du beides an - Port und Adresse. Als Rücksendeadresse gibst du deine Adresse an - und bekommst dorthin eine Antwort zugeschickt.

Als Anwender könntest du z.B. einen Webbrowser, ein Spiel, Discord und was weiß ich offen haben - alles "belegt" bei dir einen einzelnen Port, auf welchem die Antworten erwartet werden.

Als Server kannst du natürlich für jeden Dienst einen eigenen Server nutzen - oder du sprichst über Ports das dahinterliegende Programm an. So sind Webserver standardmäßig unter 80 und 443 (HTTP / HTTPS) ansprechbar, ein Minecraft-Server (Java) läuft standardmäßig unter 25565, SSH unter Port 22 usw ...

Das bedeutet jedoch nicht, dass du diese Ports nutzen musst - weichst du vom Standard ab, muss die Gegenseite jedoch dann den neuen Port angeben. Ich hab z.B. einen Minecraft-Server auf Port 4757 laufen - dank DNS-Eintrag (SRV-Record) habe ich dies öffentlich bekanntgemacht, sodass die Mitspieler den Port nicht angeben müssen - sonst müssten sie immer über IP:4757 oder Domain:4757 verbinden