[OT] Auswahl von Portnummern
Hallo Leute,
ich möchte hier einen Abstecher in die Netzwerktechnik unternehmen.
TCP oder UDP Ports können im Zahlenbereich von 0 - 65535 (in Hex 0x0000
- 0xFFFF) Nummeriert werden.
Dieser Zahlenbereich ist in 3 Abschnitte gegliedert:
1. Ports 0 - 1023: Well known Ports. Hier laufen die bekanntesten
Dienste. Auf *nix Systemen braucht man Root rechte um einen Port in
diesem Abschnitt zu öffnen.
2. Ports 1024 - 49151: Registered Ports. Einige Ports in diesem
Abschnitt sind für bekannte Dienste reserviert, es gibt auch größere
unbelegte Abschnitte. Neue Applikationen suchen sich in der Regel ihren
Standardport in diesem Bereich.
3. Ports 49152 - 65535: Private / Dynamic Ports. Diese können variabel
genutzt werden.
Die Reservierung von Portnummern für Dienste (in den ersten beiden
Abschnitten) wurde früher von der IANA übernommen, Heute von der ICANN.
Diese Zuweisungen sind nicht bindend, sondern Vorschläge, damit der
Netzwerkverkehr übersichtlich bleibt.
Siehe http://www.iana.org/assignments/port-numbers
Nun eine Frage meinerseits:
Wie wählt das Betriebsystem die Portnummern für ausgehende Verbindungen
aus?
Nehmen wir das Beispiel, daß ich mich mit dem Windows Rechner W auf dem
Debian Rechner D via SSH auf zielport 22 einlogge. Es wird also eine TCP
Verbindung von W nach D zu Port 22 aufgebaut. Doch auch auf dem Rechner
W muss ein Port für die Verbindung ausgewählt werden. Ist eine TCP
Verbindung zwischen zwei Ports einmal hergestellt, spielt es keine Rolle
mehr, wer sie aufgebaut hat. Nach welchen Kriterien geschieht die
Auswahl des ausgehenden Ports? Ich habe einmal gelesen: "Private /
Dynamic Ports: Benötigt ein Prozess einen Port, wird er vom
Betriebsystem aus diesem Bereich zugewiesen...". Das konnte ich in der
Praxis kein einziges Mal beobachten. Auf dem Rechner W zeigt mir ein
netstat -n
TCP 10.0.0.2:1123 10.0.0.1:22 HERGESTELLT.
TCP 10.0.0.2:1101 10.0.0.1:139 HERGESTELLT
an, daß das OS (hier Windows mit der 10.0.0.2) die lokalen TCP Ports
1123 für die SSH verbindung, und den Port 1101 für die Netbios
Verbindung ausgesucht hat. Dies geschieht dynamisch, ich kann lediglich
beobachten, daß Windows den Bereich 11xx 'gern' für ausgehende
Verbindungen verwendet, sich aber nicht darauf beschränkt.
Auch der Rechner D (hier mit der 10.0.0.1) hat TCP Verbindungen zum
Rechner W aufgebaut. Ein netstat -n | grep 10.0.0.2 zeigt mir unter Anderem
tcp 0 0 10.0.0.1:36253 10.0.0.2:445
ESTABLISHED
, daß Debian für die SMB Verbindung den Port 36253 ausgesucht hat. Ich
kann beobachten, daß Debian die Ports 36xxx 'bevorzugt' für ausgehende
Verbindungen verwendet, sich aber nicht darauf beschränkt.
Nach welchen Regeln werden denn nun die Ausgehenden Ports ausgesucht?
Bzw. wie werden Konflikte mit neuen Anwendungen vermieden?
Vermutung a) Die Betriebsysteme haben intern eine Liste der im Abschnitt
1. und 2. zugewiesenen Ports und meiden diese. Wenn die ICANN eine neue
Zuweisung vergibt muss jedes OS diese Liste updaten. (Klingt
unwahrscheinlich).
Vermutung b) Die verschiedenen OS halten sich an interne
Verfahrensregeln. Die ICANN kennt diese Verfahrensregeln und achtet bei
der Vergabe neuer Ports darauf, daß es keine Konflikte gibt. (Klingt
realistischer, aber ich kann keinen handfesten Beweis dafür finden).
Wer hat Lust mit mir gemeinsam dieses Mysterium fernab jeglicher
Vermutungen genau zu klären?
Meine Motivation für die ganze Fragestellung rührt daher, daß ich nicht
weiß welche Ports ich für eigene, kleine Anwendungen verwenden soll. Ich
habe für meine eigenen Anwendungen Ports im Bereich 47001-47500
verwendet, da diese laut IANA Portliste unbelegt sind. Es ist nun aber
einmal geschehen, daß meine Debian Maschine eben einen solchen 47xxx
Port für ausgehende Verbindungen verwendet hatte, und meine eigene
Applikation natürlich nicht mehr lief da der Port belegt war. Sollte ich
für eigene Applikationen Ports im Private/Dynamic Bereich wählen? Ich
kann zu diesem 3. Portbereich überhautp kaum informatives Material
finden. Bin auch für Links dankbar.
Beste Grüße an alle interessierten Netzwerker,
Thomas
Reply to: