Je travaille dans un endroit où chacune de nos applications internes s'exécute sur une instance Tomcat individuelle et utilise un port TCP spécifique. Quelle serait la meilleure plage de ports IANA à utiliser pour ces applications afin d'éviter les collisions de numéros de port avec tout autre processus sur le serveur?
Basé sur http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml , voici les options telles que je les vois actuellement:
- Ports système (0-1023): Je ne souhaite utiliser aucun de ces ports car le serveur peut exécuter des services sur les ports standard de cette plage
- Ports utilisateur (1024-49151): Étant donné que les applications sont internes, je n'ai pas l'intention de demander à l'IANA de réserver un numéro pour l'une de nos applications. Cependant, j'aimerais réduire la probabilité que le même port soit utilisé par un autre processus, par exemple, Oracle Net Listener sur 1521.
- Ports dynamiques et / ou privés (49152-65535): cette plage est idéale pour les numéros de port personnalisés. Ma seule préoccupation est que cela se produise:
une. Je configure une de mes applications pour utiliser le port X
b. L'application est en panne pendant quelques minutes ou heures (selon la nature de l'application), laissant le port inutilisé pendant un moment,
c. Le système d'exploitation attribue le numéro de port X à un autre processus, par exemple, lorsque ce processus agit comme un client nécessitant une connexion TCP à un autre serveur. Cela réussit étant donné qu'il se situe dans la plage dynamique et que X est actuellement inutilisé en ce qui concerne le système d'exploitation, et
d. L'application ne démarre pas car le port X est déjà utilisé
la source
Réponses:
Je ne vois pas pourquoi tu t'en soucierais. Hormis la règle de privilège «n'utilisez pas les ports inférieurs à 1024», vous devriez pouvoir utiliser n'importe quel port car vos clients devraient être configurables pour parler à n'importe quelle adresse IP et port!
Si ce n'est pas le cas, cela n'a pas été très bien fait. Revenez en arrière et faites-les correctement :-)
En d'autres termes, exécutez le serveur à l'adresse IP
X
et au port,Y
puis configurez les clients avec ces informations. Ensuite, si vous constatez que vous devez exécuter un serveur différent surX
lequel est en conflit avec votreY
, reconfigurez simplement votre serveur et vos clients pour utiliser un nouveau port. Cela est vrai que vos clients soient du code ou que des personnes tapent des URL dans un navigateur.Comme vous, je n'essaierais pas d'obtenir des numéros attribués par l'IANA puisque cela est censé être pour des services si courants que de très nombreux environnements les utiliseront (pensez à SSH, FTP ou TELNET).
Votre réseau est votre réseau et, si vous voulez que vos serveurs soient sur le port 1234 (ou même les ports TELNET ou FTP d'ailleurs), c'est votre affaire. Par exemple, dans notre zone de développement mainframe, le port 23 est utilisé pour le serveur de terminaux 3270 qui est une bête très différente de telnet. Si vous voulez telnet du côté UNIX du mainframe, vous utilisez le port 1023. C'est parfois ennuyeux si vous utilisez des clients telnet sans spécifier le port 1023 car il vous connecte à un serveur qui ne sait rien du protocole telnet - nous devons interrompre hors du client telnet et faites-le correctement:
Si vous ne pouvez vraiment pas rendre le côté client configurable, choisissez-en un dans la deuxième plage, comme 48042, et utilisez-le simplement, en déclarant que tout autre logiciel sur ces boîtes (y compris tout logiciel ajouté à l'avenir) doit rester hors de votre chemin .
la source
J'ai décidé de télécharger les numéros de port attribués à partir de l'IANA, de filtrer les ports utilisés et de trier chaque plage «Non attribué» dans l'ordre de la plupart des ports disponibles, en ordre décroissant. Cela n'a pas fonctionné, car le fichier csv a des plages marquées comme «non attribuées» qui chevauchent d'autres réservations de numéro de port. J'ai étendu manuellement les plages de numéros de port attribués , me laissant avec une liste de tous les numéros de port attribués. J'ai ensuite trié cette liste et généré ma propre liste de plages non attribuées.
Étant donné que cette page stackoverflow.com s'est classée très haut dans ma recherche sur le sujet, j'ai pensé que je publierais les plus grandes gammes ici pour toute personne intéressée. Celles-ci concernent à la fois TCP et UDP où le nombre de ports de la plage est d'au moins 500.
Source (via le bouton de téléchargement CSV):
http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml
la source
44100-44199
semble facile à retenir parce que l'échantillonnage audio 44100 sur udp et tcp en toute sécurité? Les protocoles udp 44100-44199 et tcp 44100-44199 sont gratuits?Réponse courte: utilisez un port utilisateur non attribué
Sur la réponse du réalisateur - Sélectionnez et déployez une solution de découverte de ressources. Demandez au serveur de sélectionner un port privé de manière dynamique. Demandez aux clients d'utiliser la découverte de ressources.
Le risque qu'un serveur échoue parce que le port sur lequel il veut écouter n'est pas disponible est réel; au moins ça m'est arrivé. Un autre service ou un client pourrait y arriver en premier.
Vous pouvez presque totalement réduire le risque d'un client en évitant les ports privés, qui sont distribués dynamiquement aux clients.
Le risque d'un autre service est minime si vous utilisez un port utilisateur. Le risque d'un port non attribué est uniquement qu'un autre service soit configuré (ou dyamiquement) utilise ce port. Mais au moins, c'est probablement sous votre contrôle.
L'énorme doc avec toutes les attributions de port, y compris les ports utilisateur, est ici: http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txt recherchez le jeton non attribué .
la source