Je travaille dans un endroit où chacune de nos applications internes s'exécute sur une instance individuelle de Tomcat et utilise un port spécifique TCP. Quelle serait la meilleure plage de ports IANA à utiliser pour ces applications afin d'éviter les conflits 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:
une. Je configure l'une de mes applications pour utiliser le port X
b. L'application est arrêtée pendant quelques minutes ou quelques heures (selon la nature de l'application), laissant le port inutilisé pendant un certain temps,
c. Le système d'exploitation attribue le numéro de port X à un autre processus, par exemple lorsqu'il agit en tant que 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.
ré. L'application ne parvient pas à démarrer car le port X est déjà utilisé
Je ne vois pas pourquoi cela vous intéresserait. Outre 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 communiquer avec n'importe quelle adresse IP ou port!
S'ils ne le sont pas, ils ne sont pas très bien faits. Retournez 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 vous trouvez devez exécuter un autre serveur sur X
en conflit avec votre Y
, configurez votre serveur et vos clients pour utiliser un nouveau port. Cela est vrai que vos clients utilisent 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, car ils sont supposés être destinés à des services si courants que de nombreux environnements les utiliseront. (pensez SSH ou FTP ou TELNET).
Votre réseau est votre réseau et, si vous voulez que vos serveurs se trouvent sur le port 1234 (ou même les ports TELNET ou FTP), votre entreprise est la votre. À titre d’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 souhaitez établir une connexion telnet avec le côté UNIX de l’ordinateur central, vous utilisez le port 1023. C’est parfois gênant si vous utilisez des clients telnet sans spécifier le port 1023 car il vous connecte à un serveur ne connaissant rien du protocole telnet - il faut rompre sur le client telnet et faites-le correctement:
telnet big_honking_mainframe_box.com 1023
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, déclarant que tout autre logiciel sur ces cases (y compris celles ajoutées ultérieurement) doit rester à l'écart de votre chemin.
J'ai décidé de télécharger les numéros de port attribués depuis l'IANA, de filtrer les ports utilisés et de trier chaque plage "Non attribué" dans l'ordre de la plupart des ports disponibles, par ordre décroissant. Cela n'a pas fonctionné, car le fichier csv comporte des plages marquées "Non attribuées" qui chevauchent d'autres réservations de numéros de port. J'ai développé manuellement les plages de assigné numéros de port, me laissant ainsi 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 était très bien classée dans mes recherches sur le sujet, je me suis dit que je publierais ici les plus grandes gammes pour ceux qui sont intéressés. Ce sont pour à la fois TCP et UDP où le nombre de ports dans la plage est au moins 500.
Total Start End
829 29170 29998
815 38866 39680
710 41798 42507
681 43442 44122
661 46337 46997
643 35358 36000
609 36866 37474
596 38204 38799
592 33657 34248
571 30261 30831
563 41231 41793
542 21011 21552
528 28590 29117
521 14415 14935
510 26490 26999
Source (via le bouton de téléchargement CSV):
http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml
Réponse courte: utilisez un port utilisateur non attribué
Une réponse hors du commun - 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 c'est arrivé à moi. Un autre service ou un client peut 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 provenant d'un autre service est minime si vous utilisez un port utilisateur. Le risque d'un port non affecté est uniquement qu'un autre service soit configuré (ou de manière dynamique) utilise ce port. Mais au moins, c'est probablement sous votre contrôle.
L'énorme doc avec toutes les assignations de ports, 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é.