Lorsque vous configurez une connexion TCP, le 4-tuple (source-ip, source-port, dest-ip, dest-port) doit être unique - ceci afin de garantir que les paquets sont livrés au bon endroit.
Il y a une autre restriction sur le serveur côté laquelle un seul programme serveur peut se lier à un numéro de port entrant (en supposant une adresse IP; les serveurs multi-NIC ont d'autres pouvoirs mais nous n'avons pas besoin de les discuter ici).
Donc, côté serveur, vous:
- créer une prise.
- liez cette socket à un port.
- écoutez sur ce port.
- accepter les connexions sur ce port. et il peut y avoir plusieurs connexions entrantes (une par client).
Du côté du client, c'est généralement un peu plus simple:
- créer une prise.
- ouvrez la connexion. Lorsqu'un client ouvre la connexion, il spécifie l'adresse IP et le port du serveur . Il peut spécifier son port source mais utilise généralement zéro, ce qui oblige le système à lui attribuer automatiquement un port libre.
Il n'est pas nécessaire que l'adresse IP / le port de destination soit unique, car cela permettrait à une seule personne à la fois d'utiliser Google, et cela détruirait assez bien son modèle commercial.
Cela signifie que vous pouvez même faire des choses aussi merveilleuses que le FTP multi-session puisque vous configurez plusieurs sessions où la seule différence est votre port source, vous permettant de télécharger des morceaux en parallèle. Les torrents sont un peu différents en ce que la destination de chaque session est généralement différente.
Et, après tout cela (désolé), la réponse à votre question spécifique est que vous n'avez pas besoin de spécifier un port franc. Si vous vous connectez à un serveur avec un appel qui ne spécifie pas votre port source, il utilisera presque certainement zéro sous les couvertures et le système vous en donnera un inutilisé.