O que são portas e protocolos realmente?

9

Eu ouço as pessoas falarem sobre portas e protocolos (em relação a redes de computadores) e geralmente fornecem analogias para eles (por exemplo: "uma porta é muito parecida com uma porta de envio, envia e recebe dados como uma porta de envio envia e recebe mercadorias de outros portos ") e coisas assim.

Eu entendo o que isso tudo significa, mas apenas em um nível muito artificial. Basicamente, eu sei o que é uma porta e eu entendo quais são os protocolos, mas o que eles são realmente?

Esses objetos físicos são portas? Eles são algo embutido em parte do meu computador? Quantas portas existem? Posso aumentar ou diminuir o número de portas? Eles são mesmo algo físico? Ou escrito em código? Onde está esse código? O sistema operacional? O que realmente é uma porta?

O que são protocolos? Eu imagino que eles são algum tipo de código ... Você pode criar seu próprio protocolo? Como você obtém uma porta específica para executar um protocolo específico? Qual linguagem você usa para criar um protocolo? Como você define ou inventa um novo protocolo?

    
por Bob 14.10.2011 / 04:25

3 respostas

7

De acordo com a resposta do Hello71s, talvez seja útil visualizar uma porta pensando na estrutura de um endereço em um pacote. Um pacote é uma unidade de dados passada pela rede. O TCP é um exemplo de protocolo de camada de transporte que usa portas e é comumente usado em IP.

O IP tem dois componentes de endereçamento - o IP de origem e o IP de destino. O TCP adiciona isso usando uma porta de origem e uma porta de destino. São as portas que permitem que a máquina recebedora diferencie o tráfego destinado ao mesmo endereço IP - ou seja, se você tiver um servidor que receba solicitações da Web e email em um único endereço IP, precisará determinar qual aplicativo deve receber os dados. - o serviço de e-mail ou o serviço da web. Assim, eles podem se parecer com isso se um único usuário tiver que realizar uma solicitação da web e uma solicitação de e-mail para o mesmo servidor:

Source IP    Source Port       Dest IP       Dest Port       Service
10.1.1.10    23434             192.168.1.1   80              web
10.1.1.10    34343             192.168.1.1   25              incoming email

O serviço web possui a porta 80 e o serviço de e-mail possui a porta 25 - eles "ouvem" em suas respectivas portas, o que permite que o tráfego seja colocado no lugar certo.

A porta de origem é "efêmera" - em que é composta no momento em que o pacote é enviado. No entanto, ainda serve para um propósito útil. Ele permite que ambas as extremidades da conexão acompanhem conversas separadas. Considere se nosso usuário enviou duas solicitações da Web simultâneas:

Source IP    Source Port       Dest IP       Dest Port       Service
10.1.1.10    23232             192.168.1.1   80              web request 1
10.1.1.10    23234             192.168.1.1   80              web request 2

Isso permite que o serviço da Web saiba que são solicitações separadas, mas também que o tráfego de retorno do servidor da Web - as páginas da Web - seja enviado de volta às respectivas portas de origem, permitindo que o navegador saiba qual solicitação o servidor está respondendo para.

Observe que tudo isso se refere a números de porta, de uma perspectiva TCP / IP, os dados reais que estão sendo movidos por essas portas podem ser qualquer coisa. Ele não se importa ou tem qualquer conhecimento de aplicativos, por isso, se você tivesse o tráfego da Web na porta 25 e o e-mail na porta 80, não seria o caso.

Cabe ao aplicativo de envio e recebimento garantir que os dados sejam a estrutura correta, e é aí que entram os protocolos de aplicativos. O HTTP é um exemplo de protocolo de aplicativo que os navegadores da Web usam para se comunicar com servidores da web. É um protocolo bem definido que garante que o navegador envie solicitações para qualquer servidor da Web e que o servidor da Web entenderá e responderá de maneira sensata. Mas o que não inclui em sua definição é qualquer coisa sobre como os pacotes vão de A para B - que é a responsabilidade das camadas anteriores - as camadas de transporte, internet e links.

    
por 14.10.2011 / 05:08
3

Eu acho que o melhor lugar para começar seria olhar para o IP Suite, também conhecido como o modelo TCP / IP. (Ignorando as outras camadas do modelo OSI para fins de simplicidade.)

Basicamente, é uma série de camadas:

Camada de Aplicação - HTTP, FTP, POP, SSH, etc.
Camada de Transporte - TCP, UDP, etc.
Camada de Internet - IP, ICMP, etc.
Camada de Link - Ethernet, etc.

As portas são, na maior parte, implementadas na camada de transporte (camada 4 - Sim, a numeração está correta.)

A maioria das pilhas TCP e / ou UDP implementadas nos SOs usam um sistema básico de atribuição de portas aos programas e simplesmente criam eventos nesses programas à medida que os pacotes chegam pela rede. No entanto, qualquer implementação poderia, teoricamente, funcionar; pode até mesmo por pilhas alternativas hipotéticas ponderadas na academia.

O TCP foi definido como tendo um total de 65535 portas, que qualquer programa pode usar para fazer o que quiser (embora muitos SOs limitem o uso de portas com menos de 1024, dando a elas um status especial ad hoc). Embora existam algumas listas limitadas, não há um padrão real para definir quem recebe qual porta e qual porta executa o programa. Uma porta é, portanto, mais ou menos um número aleatório no qual diferentes implementações de um programa decidem concordar em se comunicar. Naturalmente, os projetistas de tais programas tentam evitar as portas que outros programas populares já escolheram.

Com certeza, não é necessário executar o TCP. Alguns protocolos são executados na camada da Internet, ou mesmo na camada de enlace, principalmente para fins de eficiência, ou porque esses protocolos foram inventados antes mesmo do TCP ou IP existir. É claro que, ao fazer isso, você troca a simplicidade e a extensa verificação de erros das bibliotecas de rede do sistema operacional.

Para mais detalhes, verifique as páginas da Wikipédia no modelo OSI, TCP e IP.

    
por 14.10.2011 / 04:40
2

Embora essa pergunta já tenha sido marcada como respondida, eu queria abordar algumas das perguntas adicionais feitas no OP.

Are these ports physical objects?

Nenhuma porta não é objeto físico.

Um número de porta é um inteiro não assinado de 16 bits, o que significa que o intervalo de portas disponíveis para uso é de 1 a 65535 (o número de porta 0 é reservado e não pode ser usado). Um processo associa seus canais de entrada ou saída via sockets da Internet, um tipo de descritor de arquivo, com um protocolo de transporte, um número de porta e um endereço IP. Esse processo é conhecido como ligação e permite enviar e receber dados pela rede.

Are they something built into part of my computer? Are they even something physical? Or written in code? Where is this code? The operating system? What truly is a port?

O software de rede do sistema operacional tem a tarefa de transmitir dados de saída de todas as portas do aplicativo para a rede e encaminhar pacotes de rede chegando a um processo, combinando o endereço IP e o número da porta do pacote.

Apenas um processo pode ser vinculado a uma combinação específica de endereço IP e porta usando o mesmo protocolo de transporte. Falhas comuns de aplicativos, às vezes chamadas de conflitos de porta, ocorrem quando vários programas tentam se vincular aos mesmos números de porta no mesmo endereço IP usando o mesmo protocolo.

O parágrafo acima é fundamental para entender por que as portas / protocolos são usados em redes. Se não tivermos uma maneira de especificar o protocolo, que transmite dados por um número de porta acordado, você não poderá fazer mais de uma coisa de cada vez (verifique seu e-mail e use a Web) porque seu computador teria nenhuma maneira de diferenciar dados do seu cliente de e-mail e dados para o site que você está navegando.

How many ports are there?

Os números das portas são atribuídos de várias maneiras, com base em três intervalos:

  1. Portas do sistema bem conhecidas (0-1023) - Esse intervalo de portas é usado por processos do sistema que fornecem tipos amplamente utilizados de serviços de rede (HTTP / 80, HTTPS / 443, Telnet / 21, SSH / 22)

  2. Portas Registradas / Usuário (1024-49151) - O intervalo de números de porta de 1024 a 49151 são as portas registradas. Eles são designados pela IANA para um serviço específico mediante solicitação de uma entidade solicitante. (Webmin / 10000, Proxy HTTP / 8080, Protocolo de Área de Trabalho Remota / 3389, etc)

  3. Portas efêmeras / dinâmicas / privadas (49152-65535) - A faixa 49152–65535 contém portas dinâmicas ou privadas que não podem ser registradas na IANA. Esse intervalo é usado para propósitos personalizados ou temporários e para alocação automática de portas efêmeras.

Can I increase or decrease the number of ports?

Em relação a ser capaz de aumentar o número de portas disponíveis, você não pode atribuir uma porta acima de 65535 devido à matemática que permite que a rede funcione (binário) - então a resposta a essa pergunta é não, você não pode aumentar o total número de portas disponíveis acima de 65535.

What are protocols?

Dentro da ciência da computação, um protocolo de comunicação é um sistema de regras digitais para troca de mensagens dentro ou entre computadores. Quando as mensagens são trocadas através de uma rede de computadores, o sistema de regras é chamado de protocolo de rede. Um protocolo é basicamente um conjunto acordado de instruções / comandos / chamadas que dois dispositivos em rede podem se comunicar. Pense se não tivéssemos acordado protocolos e servidores web apenas aleatoriamente enviaram dados para navegadores da web que o navegador não sabia o que fazer com? Felizmente, temos HTTP e cada navegador criado no software para que ele possa se comunicar com qualquer servidor da Web que também fale o mesmo idioma (HTTP).

I'd imagine they're some sort of code.... Can you create your own protocol? What language do you use to create a protocol?

Sim, você pode criar seus próprios protocolos. Os protocolos são escritos em uma ampla variedade de idiomas. Eu não sou um desenvolvedor de software, mas tenho certeza que enquanto qualquer idioma que você estiver usando tenha bibliotecas que permitem escrever software que pode se comunicar através de TCP / IP (existem outros conjuntos de protocolos, mas o TCP / IP é o mais amplamente utilizado) você pode usar essa linguagem para escrever um protocolo. A linguagem de programação 'C' parece ser a mais usada para escrever protocolos. Isso se deve ao fato de que muitos dos primeiros protocolos de rede foram desenvolvidos no UNIX nos anos 70 e C é a linguagem em que o próprio UNIX é escrito.

How do you get a specific port to run a specific protocol?

Isso difere um pouco entre os sistemas operacionais. Por exemplo, para alterar o número da porta que o Remote Desktop Protocol executa no Windows, você precisa editar o registro. No Linux, muitos dos serviços de rede podem ser configurados diretamente de um arquivo .conf para um determinado serviço de rede.

How do you define or invent a new protocol?

Veja link para uma postagem no blog de alguém que tenha recentemente desenvolveu um novo protocolo de rede e que tipo de coisas ele teve que fazer ao longo do caminho.

    
por 04.12.2013 / 20:35