Eu trabalho em um local onde cada um de nossos aplicativos internos é executado em uma instância individual do Tomcat e usa uma porta TCP específica. Qual seria o melhor intervalo de portas IANA para usar para esses aplicativos, a fim de evitar colisões de números de porta com qualquer outro processo no servidor?
Com base em http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml , estas são as opções como as vejo atualmente:
- Portas do sistema (0-1023): Não quero usar nenhuma dessas portas porque o servidor pode estar executando serviços em portas padrão neste intervalo
- Portas de usuário (1024-49151): Como os aplicativos são internos, não pretendo solicitar à IANA que reserve um número para nenhum de nossos aplicativos. No entanto, gostaria de reduzir a probabilidade de a mesma porta ser usada por outro processo, por exemplo, Oracle Net Listener em 1521.
- Portas dinâmicas e / ou privadas (49152-65535): este intervalo é ideal para números de porta personalizados. Minha única preocupação é se isso acontecesse:
uma. Eu configuro um dos meus aplicativos para usar a porta X
b. O aplicativo fica inativo por alguns minutos ou horas (dependendo da natureza do aplicativo), deixando a porta sem uso por um tempo,
c. O sistema operacional aloca o número da porta X para outro processo, por exemplo, quando esse processo atua como um cliente exigindo uma conexão TCP com outro servidor. Isso é bem-sucedido, visto que está dentro da faixa dinâmica e X não é usado atualmente no que diz respeito ao sistema operacional, e
d. O aplicativo falha ao iniciar porque a porta X já está em uso
fonte
Respostas:
Não vejo por que você se importaria. Além da regra de privilégio "não use portas abaixo de 1024", você deve ser capaz de usar qualquer porta porque seus clientes devem ser configuráveis para se comunicarem com qualquer endereço IP e porta!
Se não forem, então não foram muito bem feitos. Volte e faça-os corretamente :-)
Em outras palavras, execute o servidor no endereço IP
X
e na portaY
e configure os clientes com essas informações. Então, se você achar que deve executar um servidor diferente emX
que está em conflito com o seuY
, apenas reconfigure o servidor e os clientes para usar uma nova porta. Isso é verdade quer seus clientes sejam códigos ou pessoas digitando URLs em um navegador.Eu, como você, não tentaria obter números atribuídos pela IANA, pois isso deve ser para serviços tão comuns que muitos, muitos ambientes os usarão (pense em SSH ou FTP ou TELNET).
Sua rede é sua rede e, se você quiser seus servidores na porta 1234 (ou mesmo nas portas TELNET ou FTP), esse é o seu negócio. Caso em questão, em nossa área de desenvolvimento de mainframe, a porta 23 é usada para o servidor de terminal 3270, que é uma besta muito diferente do telnet. Se você quiser fazer telnet para o lado UNIX do mainframe, use a porta 1023. Às vezes, isso é irritante se você usar clientes telnet sem especificar a porta 1023, pois ela conecta você a um servidor que nada sabe sobre o protocolo telnet - temos que quebrar fora do cliente telnet e faça-o corretamente:
Se você realmente não pode tornar o lado do cliente configurável, escolha um na segunda faixa, como 48042, e apenas use-o, declarando que qualquer outro software nessas caixas (incluindo qualquer adicionado no futuro) deve ficar fora do seu caminho .
fonte
Decidi baixar os números de porta atribuídos da IANA, filtrar as portas usadas e classificar cada intervalo "Não atribuído" na ordem decrescente da maioria das portas disponíveis. Isso não funcionou, pois o arquivo csv tem intervalos marcados como "Não atribuídos" que se sobrepõem a outras reservas de número de porta. Eu expandi manualmente os intervalos de números de porta atribuídos , deixando-me com uma lista de todos os números de porta atribuídos. Em seguida, classifiquei essa lista e gerei minha própria lista de intervalos não atribuídos.
Uma vez que esta página stackoverflow.com teve uma classificação muito alta em minha pesquisa sobre o tópico, decidi postar os maiores intervalos aqui para qualquer pessoa interessada. Eles são para TCP e UDP, em que o número de portas no intervalo é de pelo menos 500.
Fonte (por meio do botão de download CSV):
http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml
fonte
44100-44199
parece fácil de lembrar porque a amostragem de áudio 44100 em udp e tcp com segurança? Tanto o udp 44100-44199 quanto o tcp 44100-44199 são gratuitos?Resposta curta: use uma porta de usuário não atribuída
Resposta de grande sucesso - Selecione e implante uma solução de descoberta de recursos. Faça com que o servidor selecione uma porta privada dinamicamente. Faça com que os clientes usem a descoberta de recursos.
O risco de que um servidor falhe porque a porta que deseja escutar não está disponível é real; pelo menos isso aconteceu comigo. Outro serviço ou cliente pode chegar primeiro.
Você pode reduzir quase totalmente o risco de um cliente evitando as portas privadas, que são entregues dinamicamente aos clientes.
O risco de outro serviço ser mínimo se você usar uma porta de usuário. O risco de uma porta não atribuída é apenas que outro serviço esteja configurado (ou dinamicamente) use essa porta. Mas pelo menos isso provavelmente está sob seu controle.
O enorme documento com todas as atribuições de porta, incluindo portas de usuário, está aqui: http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txt procure o token não atribuído .
fonte