Questão portas e o que eles fazem


Estou curioso para saber o que um número de porta faz. Existem números de porta específicos para coisas específicas?

Eu sei que há a porta 80 e ouvi falar de 8000 de passagem. Eu não sei porque eles são chamados assim e o que isso realmente significa.

Eu poderia ter uma página da Web, por exemplo, example.com:10? Eu digo 10 como um número aleatório. Importa o que você chama de porto? De onde vêm esses números? Como eu iria sobre como configurar um ambiente de desenvolvimento com um número de porta e por que eu iria querer fazer isso? Durante o desenvolvimento, vejo todos os tipos de números de porta com base em quem eles são. Sempre me perguntei de onde vêm os números e como eles configuram o servidor para que ele funcione.


6


origem




Respostas:


Pense na sua interface de rede como uma doca de carregamento gigante (como um hub da UPS ou algo assim). Cada uma dessas portas de carga tem um número. Por padrão, os caminhões que transportam certos tipos de carga usam determinadas docas de carga. Ao ter várias docas de carregamento, o hub pode manipular mais de um caminhão por vez e ajuda a manter os tipos de carga segregados.

Agora que você tem essa visualização, os números de porta em um computador são semelhantes. Você tem TCP e UDP com TCP com um intervalo de porta de 1-65535. É daí que esses números vêm. Agora, algumas dessas portas são reservadas para tipos de tráfego comuns. Por exemplo, 80 é para HTTP, 443 para HTTP-SSL, 21 para FTP, 25 para SMTP, 110 para POP3. Há muito mais, claro, mas espero que isso ajude com a ideia geral. Agora, você pode fazer uso de portas não reservadas para as coisas que deseja fazer, mas eu não usaria uma porta baixa como 10. Se você quiser hospedar seu site em uma porta alternativa, escolha 8080 ou 8443 Porta SSL), algum número que não é reservado ou é uma porta alternativa bem conhecida para o tráfego HTTP.

As portas alternativas são usadas porque você só pode ter um serviço escutando em uma porta específica de uma só vez. Por exemplo, você não pode ter o Apache e o IIS escutando na porta 80 para solicitação da Web na mesma máquina. Isso ocorre porque esses serviços são distintos e eles não poderão dizer quem deveria obter o tráfego. Usando portas diferentes, esses serviços sabem que o tráfego naquela porta foi feito para eles.

Para configurar isso, seu serviço final (servidor da Web, email, VPN, o que for) precisa saber em que porta ouvir (qual compartimento de carga ficar ao lado e esperar que as coisas entrem ou saiam). Além disso, seu firewall precisará ter uma exceção (seus guardas de segurança para sua verificação de hub para ver se você tem permissão para ir a determinados locais) para essa porta também.

Lista de portas comuns em uso


5



"Quanto ao desenvolvimento, talvez seja necessário especificar o número da porta para não colidir com outras coisas, mas a funcionalidade não deve mudar." Você não pode especificar um número de hosts virtuais para não entrar em conflito com suas coisas? Dessa forma, você poderia dizer dev1.local é coisas em / www / html e dev2.local é coisas em / www / fun. Você não pode especificar nos hosts virtuais qual porta eles também usam?
Eu pergunto porque vejo john está trabalhando em seu ambiente usando dev.local: 8081 e bill está usando dev.local: 8082. Eu não entendo porque eles usam números de porta diferentes ao invés de apenas mudar o nameserver (dev.local) para algo diferente e usar 80, então você não precisa digitar um número de porta.
Eu diria que é uma questão de preferência, suponho. Mas normalmente, você também pode usar cabeçalhos de host e manter tudo na porta 80 ou 8081 ou qualquer outra coisa. talvez haja outros requisitos aqui em relação aos cabeçalhos de host. - Tommy


Números de porta não "fazem" nada especificamente. Eles são uma das maneiras pelas quais uma conexão é identificada exclusivamente. Cada conexão TCP é definida por quatro coisas: os endereços IP de cada máquina e um número de porta em cada máquina. Cada pacote IP que vem contém essas quatro informações, permitindo que a camada de rede determine o que deve ser feito com esse pacote. Por exemplo, um pacote chega com uma porta de destino de 80, e o sistema sabe que o Apache está escutando na porta 80, então o transfere para o servidor da Web (estou passando alguns detalhes).

Para um cliente fazer uma conexão com seu serviço, ele precisa conhecer seu IP e qual porta seu serviço está atendendo. Como o seu IP e porta definem exclusivamente o fim de qualquer conexão recebida, somente um serviço pode escutar em uma determinada porta a qualquer momento. Se você não tivesse mais nada usando a porta 10, você poderia definitivamente hospedar o seu servidor web, e todos os clientes precisariam especificar o: 10 no final do seu hostname / IP. Não há nada de mágico na porta 80 ou 443, exceto que são as portas padrão definidas para HTTP e HTTPS (assim os clientes usarão essas portas se o usuário não especificar uma).

Quando um cliente (1.2.3.4) se conecta a um servidor da Web (11.12.13.14) na porta http padrão, ele seleciona uma porta não utilizada no momento, por exemplo, 5307 e estabelece uma conexão. Agora a conexão é unicamente identificada - 1.2.3.4:5307 <-> 11.12.13.14:80

Se o mesmo cliente fizer uma segunda conexão ao mesmo tempo, precisará de outro número de porta não utilizado (5308 desta vez), porque as outras três partes da conexão são constantes - a porta de atendimento do serviço e os dois endereços IP já estão definidos. Isso permite que um único cliente tenha várias conexões distinguíveis com o mesmo serviço. Outro cliente também poderia se conectar usando 5307, e seria distinguível do primeiro pelo endereço IP diferente.


1





Existem portas para distinguir diferentes serviços no mesmo IP. Portanto, a mesma máquina pode ter email (SMTP: 25) e um servidor da Web (HTTP: 80).

Os números de porta abaixo de 1000 são geralmente reservados para coisas conhecidas como as que acabei de mencionar. Escolha números acima que até cerca de 65565 (o poder de 2) para o seu próprio material.

Além disso, observe que não há motivo para o servidor da Web executar na porta conhecida. É exatamente onde todo mundo vai estar procurando por isso.

Atualmente, devido à tradução do endereço da porta, seu roteador traduz seu tráfego interno para uma porta não utilizada no seu IP da Internet. É por isso que você vê um monte de números diferentes. Assim, por exemplo, seu cliente da Web solicitaria google.com: 80 por páginas. Mas a fonte seria do seu IP, em uma porta não utilizada. Como isso:

google.com:80 <= fala para => 88.88.88.88:4502 (Qualquer que seja o seu IP, e a porta é o que seu gateway NAT decidiu usar)

A combinação de IP / port é chamada socket, a propósito. Quanto ao desenvolvimento, talvez seja necessário especificar o número da porta para não entrar em conflito com outras coisas, mas a funcionalidade não deve mudar.

Por último, se você está passando por um firewall, você precisa ter a porta aberta.


0





A analogia da doca de carregamento de Tommy é excelente.

Um serviço pode escutar em apenas uma porta (e sim, listen(2) é o nome da chamada do sistema em que um serviço é vinculado a uma porta) e uma porta pode ter no máximo um serviço atendendo a ela. Se você quiser escutar em duas portas (por exemplo, executando um servidor HTTP nas portas 80 e 8080), será necessário iniciar dois processos, um para cada porta.

Números de porta não são reservadoem qualquer sentido - você tem permissão para ter um servidor de e-mail escutando na porta 80 e um servidor web na porta 25, mas seria bastante confuso para todos. Mas as portas estão associadas aos serviços de duas maneiras:

  1. Existem 'números bem conhecidos' para serviços (e a lista é cuidada pelo Internet Assigned Numbers Authority). Estas não são reservas como tal, mas são eficazes marcadores "manter-claro". Esses números também podem ser encontrados no arquivo /etc/services em máquinas unix.
  2. Um protocolo como HTTP ou SMTP normalmente, em sua RFC, declara porta padrão para o protocolo - para HTTP, esta é a porta 80 e para a porta SMTP 25. Tudo isso significa que um cliente HTTP, por exemplo, tentará se conectar à porta 80 em uma máquina remota, a menos que seja dito de outra forma.

Pelo menos no Unix, números de portas abaixo de 1024 são privilegiados, em que apenas os processos em execução como root podem se ligar a eles. Esta não é uma restrição imposta pelo TCP, mas uma coisa específica do unix (foi originalmente planejada como uma medida de segurança muito leve).

O resultado de tudo isso é que, se, por exemplo, você quisesse ter vários servidores da Web em uma máquina (ou de qualquer outro serviço), você pode, contanto que os inicie enquanto lhes diz para escutar em portas diferentes. Você pode fazer isso com uma opção de linha de comando ao iniciar o serviço ou uma entrada em um arquivo de configuração.

Você pode ter um serviço da Web na porta 80 (o root teria que iniciar isso), além de alguns outros serviços baseados em HTTP na porta 8080 ou 9000. O primeiro seria endereçável como http://example.org/, o outro como http://example.org:8080/. Como a porta 80 é o padrão documentado para HTTP, seu navegador da Web (ou qualquer cliente que você estivesse usando) escolheria automaticamente a porta 80 no primeiro caso.

Não há nenhum significado para esses números 8080 e 9000, a propósito - eles são meramente os números de portas não tradicionais 'tradicionais' a serem usados ​​para serviços da Web alternativos; porque eles não são privilegiados, qualquer usuário não-root pode iniciar um serviço ouvindo lá, desde que não haja nenhum serviço lá.


0





Vamos dizer que você tem um servidor e seu endereço IP é XXX.XXX.XXX.XXX. Você pode se conectar ao seu servidor para fazer uma variedade de coisas. Você sempre se conecta a ele usando o mesmo endereço IP, mas o número da porta que você usa é como o servidor determina o que você está tentando fazer.

Se você quiser visualizar as páginas da Web em seu servidor, conecte-se ao servidor usando a porta 80: XXX.XXX.XXX.XXX:80. Quando o servidor aceita sua conexão na porta 80, ele entende que você deseja visualizar uma página da web.

Se você deseja se conectar ao programa FTP em execução no servidor, conecte-se à porta 21: XXX.XXX.XXX.XXX:21. Quando o servidor aceita sua conexão na porta 21, ele entende que você quer usar o FTP.

Mesma situação vale para SSH / SFTP (porta 22), HTTPS (porta 443), Solicitações de DNS (porta 53), etc ... Existem milhares de números de porta padronizados para diferentes aplicações / serviços.

As portas são basicamente apenas uma maneira de um computador determinar que tipo de solicitação está sendo feito para ele.


0