Tenho algumas perguntas em relação aoseguinte explicação das portas que encontrei.
A camada de Aplicação se comunica com a camada de Transporte através de uma porta. As portas são numeradas e os aplicativos padrão sempre usam a mesma porta.
A utilização de um número de porta permite ao protocolo de Transporte (tipicamente TCP) saber que tipo de conteúdo está dentro do pacote, permitindo saber, no lado da recepção, para qual protocolo de Aplicação deve entregar os dados recebidos.
Por que um número de porta seria usado para informar que tipo de protocolo de dados de aplicativo reside quando não há garantia absoluta?
No meu entender, não há restrições quanto ao tipo de dados do aplicativo que você envia por uma porta (é apenas uma sugestão). Além disso, os dados do protocolo já não estão incluídos em algum lugar do pacote para essa finalidade?
Além disso, o que acontece com os dados se você enviar HTTP ou algum outro tipo de protocolo para um destino na porta 25 (que espera SMTP)?
Terceiro, o que acontece com os dados se você os envia para uma porta que não está vinculada a nenhum programa e, portanto, não está sendo ouvida?
**Finalmente, se uma porta só pode ser vinculada a um único programa, como vários programas que dependem de dados HTTP recebidos podem ser executados no meu computador ao mesmo tempo?****
Desde já, obrigado!
Responder1
Por que um número de porta seria usado para informar que tipo de protocolo de dados de aplicativo reside quando não há garantia absoluta?
Porque adivinhar é uma maneira terrível de administrar as coisas e não há como impedir, por exemplo, que alguém mal-intencionado envie a coisa errada de qualquer maneira. Então, ajuda no caso em que todos estão jogando bem e não piora nada.
No meu entender, não há restrições quanto ao tipo de dados do aplicativo que você envia por uma porta (é apenas uma sugestão).
Correto. Na verdade, não é nem uma sugestão, apenas um acordo que muitas pessoas compartilham.
Além disso, os dados do protocolo já não estão incluídos em algum lugar do pacote para essa finalidade?
Não. Pelo menos não no nível que a porta normalmente indica: você sabe que tipo de protocolo IP de nível superior está sendo enviado (por exemplo: TCP, UDP), mas não qual é o conteúdo dele (por exemplo: HTTP, SMTP) .
Além disso, o que acontece com os dados se você enviar HTTP ou algum outro tipo de protocolo para um destino na porta 25 (que espera SMTP)?
O TCP apenas passa os dados para a camada de aplicação, que pode fazer o que quiser. Na maioria das vezes, você apenas recebe erros. Às vezes você encontra falhas de segurança exploráveis.
Ocasionalmente, você obtém um comportamento agradável para clientes incorretos, como erros HTTP de texto simples que alguns servidores HTTPS apresentam quando você não usa SSL na porta.
Terceiro, o que acontece com os dados se você os envia para uma porta que não está vinculada a nenhum programa e, portanto, não está sendo ouvida?
Você recebe uma mensagem de erro ICMP do sistema receptor. Tecnicamente, o receptor poderia fazer o que quisesse, mas na prática é isso que acontece.
Finalmente, se uma porta só pode ser vinculada a um único programa, como vários programas que dependem de dados HTTP recebidos podem ser executados no meu computador ao mesmo tempo?
Quando seu navegador faz uma conexão HTTP com um servidor remoto, ele usa uma porta local aleatória e se comunica com a porta conhecida (80 ou 443) no servidor remoto. Neste caso, é exclusivo para cada conexão de saída distinta. (Embora, tecnicamente, não precise ser assim, no caso do servidor.)
No lado do servidor, quando você escuta, apenas um processo pode aceitar novas conexões em uma porta (em soquetes Unix/BSD), mas pode passar a conexão estabelecida para outros processos para atender. Como o conjunto é único, o tráfego pode ser roteado para a conexão correta.