Por que apenas a porta 80 para serviços da web?


54

Por que não é sensato dedicar mais de uma porta TCP / IP para http? Embora admitidamente ingênuo, não é de alguma forma intuitivo pensar que o desempenho do servidor possa, de alguma forma, aumentar?


17
Você está absolutamente correto. Alterei a porta padrão dos servidores da Web de 80 para 90,91,92 e 93. A carga no servidor caiu drasticamente.
David Houde

17
... talvez porque nenhum cliente possa encontrar o servidor mais?
Marcos Gonzalez

5
80 é apenas a porta usada para http. Quando você diz "something.com"; (ou mesmo "something.com") o navegador conclui para que seja uma solicitação para "something.com:80"; (na porta 80, pois é a porta http conhecida padrão). O mesmo para https em 443. Se você decidir alterá-lo, será necessário dizer no URL: "myserver.com:1280"; caso contrário, o navegador tentará na porta 80 e não a encontrará. Uma lista pode ser vista na wikipedia
Olivier Dulac

6
Desculpe Marcos, essa foi uma péssima tentativa de humor. Eu nunca fui bom nisso.
David Houde

3
@DavidHoude, hora de atualizar os emoticons para você. :-) cs.cmu.edu/~sef/sefSmiley.htm
generalnetworkerror

Respostas:


70

A porta 80 é uma porta conhecida , o que significa que é conhecida como o local em que você normalmente encontrará servidores HTTP. Você pode encontrá-lo documentado no RFC HTTP / 1.1 .

Ter um padrão é útil precisamente porque você não precisa digitá-lo no seu navegador com o URI. Se você executar um servidor HTTP (ou de fato qualquer serviço) em uma porta não padrão, forçará o cliente a lembrar qual número arbitrário de 16 bits você escolheu e digitar.

Além dessa hostilidade, não há benefício de desempenho: uma porta é apenas uma parte das (dst ip:port, src ip:port)quatro tuplas que identifica exclusivamente uma conexão TCP. Se duas conexões compartilham um dst ip:port, isso não significa que eles compartilham algum recurso do sistema - eles podem residir em diferentes segmentos ou processos diferentes.

Agora, se você tem logicamente diferentes serviços que tanto acontecem para usar HTTP, não há nenhum problema com executá-los em portas diferentes. Isso apenas torna o URI um pouco mais feio.


7
É isso aí! A porta 80 não é um recurso! É apenas parte de uma tupla! Obrigado por colocá-lo tão claramente.
Marcos Gonzalez

2
Também não vale nada que, mesmo para serviços diferentes, a conexão HTTP real seja geralmente recebida na porta 80 por um driver de todo o sistema que executa a análise inicial do protocolo e a entregue ao serviço correto, permitindo assim serviços totalmente diferentes em diferentes processos. compartilhe a mesma porta.
precisa saber é o seguinte

11
Resposta útil de Inútil
Deckard

26

O servidor não desperdiça recursos manipulando conexões em uma ou mais portas. Os recursos do servidor são alocados para manipular conexões e o número da porta é apenas uma maneira de conectar um programa específico a uma conexão específica.

Por exemplo: o servidor HTTP sabe que escutará as conexões que chegam na porta 80. E o servidor sabe que sempre que receber alguma solicitação na porta 80, ele a manipulará no servidor http. Depois disso, o servidor http manipulará a comunicação e consumirá recursos.


8
Eu acrescentaria a essa resposta que a porta 80 não é consumida por um usuário enviando sua solicitação a ela. É por isso que apenas o uso da porta 80 (ou qualquer porta conhecida para o protocolo de entrada que você está visualizando) não é um gargalo para a escalabilidade.
Craig Sirkin

11
Isso é exatamente o que eu não entendi direito. Mesmo 100.000 usuários conectados simultaneamente a www.example.com:80 não consumirão a porta 80. Agradecemos o esclarecimento. Acho as informações da @Useless abaixo também muito esclarecedoras.
Marcos Gonzalez

Alguns softwares de servidores da web têm limites por instância e / ou processo. Às vezes, pode ser uma boa ideia executar várias instâncias, mas fazê-lo na mesma máquina requer outra porta de escuta, a primeira (TCP80 / 443) encaminhando conexões para a primeira instância.
Remi Letourneau

22

Você parece pensar nos portos como algo real; é apenas um número não assinado de 16 bits (0-65535) que é um rótulo no cabeçalho de um pacote IP. Isso ajuda na multiplexação no nível do aplicativo. Quando um pacote recebido chega a uma placa de rede, o sistema operacional recebe uma notificação. Ele verifica para qual porta o pacote recebido foi direcionado e depois encaminha o pacote para o aplicativo certo. Se você estiver executando o servidor da web (nginx) para escutar na porta 80, apenas o nginx recebe pacotes enviados para a porta 80.

Quando um cliente (IP: 100.200.100.200) faz uma solicitação HTTP ao servidor (55.55.55.55), ele faz a solicitação para a porta 80 de destino no servidor (55.55.55.55:80), mas a porta de origem é escolhida aleatoriamente pelo SO para o navegador da Web (algo como 45490). A resposta HTTP do servidor da Web vem de (55.55.55.55:80), mas é enviada ao destino (seu IP) (100.200.100.200:45490). O sistema operacional do seu computador sabe que os pacotes recebidos na porta 45490 (de 55.55.55.55:80) precisam ser entregues ao navegador da Web que fez a solicitação. Como cada conexão exclusiva de um site da Web do cliente obtém uma porta aleatória exclusiva, você pode ter vários navegadores se conectando ao mesmo site e quando uma página é recarregada em um navegador, as outras janelas não são afetadas.

Cada pacote IP possui os endereços IP de origem e de destino e a porta disponível no cabeçalho. O sistema operacional e o aplicativo (navegador da web ou servidor da web) podem usar os dois para descobrir a ação apropriada sobre como processar o pacote.


2
+2 votos, se eu pudesse.
generalnetworkerror

13

As portas 80 e 443 são as portas "padrão" para HTTP / HTTPS

Isso significa que você não precisa especificar a porta ( http://www.example.com:80 , https://www.example.com:443 ) ao usar um navegador da web.

Se você deseja que um servidor da Web esteja escutando em outras portas, os usuários precisam adicionar manualmente a porta à URL ou ela deve ser codificada em qualquer link para essa porta específica.

Além disso, a maioria dos Proxies e Firewalls não permitirá conexões com essas portas, a menos que seja especificamente configurado para fazê-lo (sem configuração, os proxies de saída não ouvirão portas não padrão, portanto, não encaminharão a solicitação aos servidores da Web, enquanto os Firewalls simplesmente bloquear tentativas de conexão não TCP80 / 443)

Tudo isso limita o que pode ser feito no nível TCP / IP

Uma maneira de aumentar o desempenho seria ter um dispositivo / serviço de balanceamento de carga atendendo ao TCP80 / 443 que redirecionaria a solicitação para servidores em diferentes portas e / ou ip (balanceamento local) ou mesmo em sites remotos diferentes (balanceamento global). Mas este é outro tópico completamente


Obrigado por me apresentar o conceito de "balanceamento de carga".
Marcos Gonzalez

11
Se você deseja ter algumas idéias práticas e pseudo sobre alguns conceitos de balanceamento de carga, a F5 oferece treinamento on-line gratuito em university.f5.com O registro é gratuito e fornece acesso ao LTM (Gerenciador de Tráfego Local - seu balanceador local) ) de treinamento, onde você pode ver o que parece e aprender algumas balanceamento de carga conceitos (ex: IP real, IP Virtual, piscinas, health-cheque, etc ...)
Remi Letourneau

Bom conselho!
Marcos Gonzalez

9

A adição de portas extras não adiciona largura de banda extra ou algo do tipo, uma porta é mais uma etiqueta do que um tubo , pode "crescer" tão larga quanto você precisar, sem ficar mais lenta devido ao tubo estar cheio.

Se um servidor receber muitas solicitações, é claro que ele diminuirá a velocidade, mas esse não é o tipo de problema que pode ser corrigido adicionando outro número de porta.


s / label então / label than / - eu editaria, mas parece que apenas um caractere não é uma edição aceitável.
Paul Engrenagem

7

Se você usasse portas aleatórias, o usuário teria que adicionar os números de porta corretos toda vez que fosse ao seu site. por exemplo, www.example.com:80; www.example.com:81; www.example.com:82 etc

Não aumentaria o desempenho para usar mais portas. As portas de origem para cada conexão são portas efêmeras e tão diferentes assim mesmo


7

Cada conexão TCP / IP possui um sourceIP: sourcePort e um destinationIP: destinationPort.

Ao iniciar uma conexão, você sempre usaria 80 como a porta de destino (o que faz sentido, pois o servidor precisa escutar apenas na porta 80 por HTTP e não em várias portas). O truque é que o sourcePort é dinâmico para cada conexão.

Exemplo:

user1: 1.1.1.1:29999 a 2.2.2.2:80

user2: 1.1.1.2:45333 a 2.2.2.2:80


2

Não confunda uma porta diferente com uma conexão física diferente ou com uma maior largura de banda da rede ou desempenho de processamento do servidor. O que o servidor obtém são pacotes TCP ou UDP, que possuem um número de porta como parte do endereço. Eles ainda passam pelos mesmos fios, passam pelo mesmo hardware e driver da interface de rede e assim por diante.

Se você enviar dois pacotes para um servidor, em termos de recursos que o servidor gasta para processar esses dois pacotes, não importa se um deles tiver números de porta diferentes ou os mesmos números de porta associados a eles, o tratamento interno será estar perto de idêntico.

Portanto, este não é um método para aumentar o desempenho de forma alguma.

A única exceção possível é se você associar dois demônios diferentes (ou duas cópias do mesmo) em execução ao mesmo tempo a dois números de portas diferentes, e se cada um desses demônios aumentaria muito a carga. O que normalmente não é o caso.


1

Como Remi mencionou, as portas 80 e 443 são as portas "padrão" para HTTP / HTTPS.

A maioria das redes e firewalls não bloqueia o tráfego passando por essas portas. Portanto, é mais fácil usar essas portas, pois na maioria das vezes você não precisa se preocupar com firewalls bloqueando seu serviço; caso contrário, pode ser necessário reconfigurar as regras de firewall e obter aprovações de conformidade / segurança para as mesmas.


11
Amen, sites usando portas não padrão são a amargura da existência de qualquer administrador de segurança, um usuário em suas necessidades nedwork usar um website com porta estranho = mudança proxy, mudança FW, revisão de segurança etc.
wintermute000

0

Como todos os outros aqui disseram, é basicamente inútil hospedar um servidor Web em qualquer porta que não seja a porta 80 ... a menos que você esteja hospedando-o em casa. Muitos ISPs limitam as portas TCP / UDP de saída 80 e 443 (a IANA define como HTTP e HTTPS , respectivamente) e, nesse caso, o uso dessas portas prejudicará a velocidade de carregamento do site etc. No entanto, a IANA atribuiu 3 portas HTTP-ALT para TCP e UDP. São eles: 591, 8008 e 8080. O uso dessas portas também é aceitável, mas você estará tornando a vida dos administradores de servidor um inferno.

Origem dos números das portas: https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.