130 votes

Meilleure plage de numéros de port TCP pour les applications internes

Je travaille dans un endroit où chacune de nos applications internes fonctionne 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 ports avec tout autre processus sur le serveur ?

Sur la base de http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml Voici les options telles que je les vois actuellement :

  1. Ports du système (0-1023) : Je ne veux utiliser aucun de ces ports car le serveur peut exécuter des services sur des ports standard dans cette gamme
  2. 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.
  3. 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 :

    a. Je configure une de mes applications pour qu'elle utilise 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, lorsque ce processus agit en tant que client nécessitant une connexion TCP à un autre serveur. Cette opération réussit car elle se situe dans la plage dynamique et X est actuellement inutilisé pour le système d'exploitation.
    d. L'application ne démarre pas car le port X est déjà utilisé.

154voto

David Vereb Points 1467

J'ai décidé de télécharger les numéros de port attribués par l'IANA, de filtrer les ports utilisés et de trier chaque plage "non attribuée" par ordre décroissant du nombre de ports disponibles. Cela n'a pas fonctionné, car le fichier csv contient des plages marquées comme "non attribuées" qui chevauchent d'autres réservations de numéros de port. J'ai étendu manuellement les plages de attribuée numéros de port, ce qui me laisse 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.

Comme cette page de stackoverflow.com est très bien classée dans ma recherche sur le sujet, je me suis dit que j'allais afficher les plus grandes plages ici pour tous ceux qui sont intéressés. Ces plages concernent à la fois TCP et UDP lorsque le nombre de ports dans la plage est d'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

43voto

paxdiablo Points 341644

Je ne vois pas pourquoi cela vous intéresserait. En dehors de 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 doivent pouvoir être configurés pour communiquer avec n'importe quelle adresse IP et n'importe quel port !

Si ce n'est pas le cas, c'est qu'ils n'ont pas été très bien faits. Revenez en arrière et faites-les correctement :-)

En d'autres termes, faites fonctionner le serveur à l'adresse IP X et le port Y puis configurer les clients avec ces informations. Ensuite, si vous constatez que vous doit faire fonctionner un autre serveur sur X qui est en conflit avec votre Y Il suffit de reconfigurer le serveur et les clients pour qu'ils utilisent un nouveau port. Ceci est vrai que vos clients soient des codes ou des personnes qui tapent des URL dans un navigateur.

Comme vous, je n'essaierais pas d'obtenir des numéros attribués par l'IANA, car cela est censé être pour des services si communs que beaucoup, nombreux les utiliseront (pensez à SSH, FTP ou TELNET).

Votre réseau est votre et, si vous voulez que vos serveurs utilisent le port 1234 (ou même les ports TELNET ou FTP), c'est votre affaire. Par exemple, dans notre zone de développement de l'ordinateur central, le port 23 est utilisé pour le serveur de terminal 3270, qui est une bête très différente de telnet. Si vous voulez vous connecter au côté UNIX de l'ordinateur central, vous devez utiliser le port 1023. C'est parfois ennuyeux si vous utilisez des clients telnet sans spécifier le port 1023 car cela vous connecte à un serveur qui ne connaît rien au protocole telnet - nous devons sortir du client telnet et le faire correctement :

telnet big_honking_mainframe_box.com 1023

Si vous voulez vraiment ne peut rendre le côté client configurable, en choisir un dans la deuxième gamme, comme 48042, et l'utiliser, en déclarant que tout autre logiciel sur ces boîtes (y compris ceux qui seront ajoutés à l'avenir) doit rester en dehors de votre chemin.

10voto

Ben Hyde Points 601

Réponse courte : utiliser un port utilisateur non assigné.

Réponse du surdoué - Sélectionner et déployer une solution de découverte des ressources. Le serveur doit sélectionner dynamiquement un port privé. Demander aux clients d'utiliser la découverte de ressources.

Le risque qu'un serveur tombe en panne parce que le port sur lequel il veut écouter n'est pas disponible est réel ; en tout cas, cela m'est arrivé. Un autre service ou un client peut arriver en premier.

Vous pouvez presque totalement réduire le risque lié à un client en évitant les ports privés, qui sont distribués de manière dynamique aux clients.

Le risque qu'un autre service soit en cause est minime si vous utilisez un port utilisateur. Le risque d'un port non assigné est seulement qu'un autre service configuré (ou dyamiquement) utilise ce port. Mais au moins cela est probablement sous votre contrôle.

L'énorme document contenant toutes les affectations de ports, y compris les ports utilisateur, se trouve ici : http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txt rechercher le jeton Unassigned.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X