Wenn Sie eine TCP-Verbindung aufbauen, muss das 4er-Tupel (Quell-IP, Quell-Port, Ziel-IP, Ziel-Port) eindeutig sein, um sicherzustellen, dass die Pakete an die richtige Stelle zugestellt werden.
Eine weitere Einschränkung besteht in der Server Seite, dass sich nur ein Serverprogramm an eine eingehende Portnummer binden kann (unter der Annahme einer IP-Adresse; Multi-NIC-Server haben andere Fähigkeiten, die wir hier aber nicht zu diskutieren brauchen).
Also, auf der Server-Seite, Sie:
- einen Socket erstellen.
- diesen Socket an einen Port binden.
- auf diesen Port hören.
- Verbindungen auf diesem Port akzeptieren. und es können mehrere Verbindungen ankommen (eine pro Client).
Auf der Kundenseite ist es in der Regel ein wenig einfacher:
- einen Socket erstellen.
- die Verbindung zu öffnen. Wenn ein Client die Verbindung öffnet, gibt er die IP-Adresse und den Port des Server . Sie kann seinen Quellport angeben, sondern normalerweise den Wert Null, was dazu führt, dass das System ihm automatisch einen freien Port zuweist.
Es gibt keine Die Anforderung, dass die Ziel-IP/Port einmalig sein muss, da dies dazu führen würde, dass immer nur eine Person Google nutzen könnte, und das würde ihr Geschäftsmodell ziemlich zerstören.
Das bedeutet, dass Sie sogar so wundersame Dinge wie Multisession-FTP tun können, da Sie mehrere Sitzungen einrichten, bei denen der einzige Unterschied der Quellport ist, so dass Sie Pakete parallel herunterladen können. Bei Torrents ist es etwas anders, da das Ziel jeder Sitzung normalerweise ein anderes ist.
Und, nach all dem Geschwafel (sorry), ist die Antwort auf Ihre Frage, dass Sie keinen freien Port angeben müssen. Wenn Sie eine Verbindung zu einem Server mit einem Aufruf herstellen, der Ihren Quellport nicht angibt, wird er mit ziemlicher Sicherheit heimlich Null verwenden und das System wird Ihnen einen unbenutzten Port zuweisen.