Wenn Sie eine TCP-Verbindung einrichten, muss das 4-Tupel (Quell-IP, Quell-Port, Ziel-IP, Ziel-Port) eindeutig sein - um sicherzustellen, dass Pakete an den richtigen Ort geliefert werden.
Auf der Serverseite gibt es eine weitere Einschränkung, dass nur ein Serverprogramm an eine eingehende Portnummer gebunden werden kann (unter der Annahme einer IP-Adresse; Multi-NIC-Server haben andere Befugnisse, aber wir müssen sie hier nicht diskutieren).
Am Serverende haben Sie also:
- Erstellen Sie einen Socket.
- Binden Sie diesen Socket an einen Port.
- Hören Sie auf diesen Port.
- Akzeptieren Sie Verbindungen an diesem Port. und es können mehrere Verbindungen eingehen (eine pro Client).
Auf der Client-Seite ist es normalerweise etwas einfacher:
- Erstellen Sie einen Socket.
- Öffnen Sie die Verbindung. Wenn ein Client die Verbindung öffnet, gibt er die IP-Adresse und den Port des Servers an . Es kann seinen Quellport angeben, verwendet jedoch normalerweise Null, was dazu führt, dass das System ihm automatisch einen freien Port zuweist.
Es ist nicht erforderlich, dass die Ziel-IP / der Ziel-Port eindeutig ist, da dies dazu führen würde, dass jeweils nur eine Person Google verwenden kann, und dies würde ihr Geschäftsmodell ziemlich gut zerstören.
Dies bedeutet, dass Sie sogar wundersame Dinge wie FTP mit mehreren Sitzungen ausführen können, da Sie mehrere Sitzungen eingerichtet haben, bei denen der einzige Unterschied Ihr Quellport ist, sodass Sie Chunks parallel herunterladen können. Torrents unterscheiden sich ein wenig darin, dass das Ziel jeder Sitzung normalerweise unterschiedlich ist.
Und nach all dem Waffeln (sorry) lautet die Antwort auf Ihre spezielle Frage, dass Sie keinen freien Port angeben müssen. Wenn Sie mit einem Anruf, der Ihren Quellport nicht angibt, eine Verbindung zu einem Server herstellen, wird mit ziemlicher Sicherheit Null unter der Decke verwendet, und das System gibt Ihnen eine nicht verwendete.