Como o ponto a ponto funciona pela Internet?

15

Pelo que entendi, não há como enviar um pacote para um computador em uma rede local de fora da rede, a menos que conheçamos o mecanismo de roteamento empregado pelo roteador.

Supondo que tenhamos uma configuração assim:

  1. Computador A, IP 192.168.1.2 (gateway padrão 192.168.1.1)

  2. Computador-B, IP 192.168.1.3 (gateway padrão 192.168.1.1)

  3. Roteador-C, IP 192.168.1.1 (IP externo 1.1.1.1)

  4. Roteador-D (IP externo 2.2.2.2)

Computador A, Computador B e Roteador C pertencem à mesma rede local. O Roteador-D deseja enviar dados para o Computador-A, mas não pode fazer isso sem passar pelo Roteador-C.

Agora o roteador-C encaminhará pacotes para o computador A se a porta de destino for 1000 e encaminhará os pacotes para o computador-B se a porta de destino for 2000. Mas certamente, o único dispositivo que conhece esse mecanismo de roteamento é o próprio roteador-C! Nem o Computador A nem o Computador B sabem disso, certo?

Portanto, o roteador-D pode enviar um pacote ao computador-A se enviar um pacote ao roteador-C pela porta 1000, mas como o roteador-D deve saber enviar pacotes pela porta 1000 e não a porta 1001?

Como os programas ponto a ponto como o Bittorrent são aprovados nesse problema? A única solução que posso pensar é que o roteador-D envie o pacote ao roteador-C através de todas as portas, de modo que seja encaminhado para o computador-A, mas existe uma solução melhor?

Pacerier
fonte

Respostas:

9

Sua confusão decorre de algumas suposições incorretas.

Mas certamente, o único dispositivo que conhece esse mecanismo de roteamento é o próprio Roteador-C! Nem o Computador A nem o Computador B sabem disso, certo?

O que, por quê? Então, por que o roteador foi configurado para encaminhar essas portas para esses IPs? Você precisa configurar o cliente P2P para usar uma porta específica e, em seguida, configurar o roteador para corresponder.

mas como o Roteador-D deve saber enviar pacotes pela porta 1000 e não dizer a porta 1001?

Porque você configura o cliente P2P para usar uma porta específica (padrão ou não padrão para esse protocolo).

A única solução que posso pensar é que o roteador-D envie o pacote para o roteador-C através de todas as portas, de forma que seja encaminhado para o computador-A, mas existe uma solução melhor?

É muito mais simples que isso. Quando o cliente faz uma conexão com um par, ele especifica qual porta deseja usar, para que o par envie os dados nessa porta.

Hmm, mas o Bittorrent não muda o comportamento do roteador, certo? Como algum mecanismo de roteamento poderia ter sido dinâmico, como demonstrado em superuser.com/a/187190/78897, como a Computer-A pode saber sobre isso?

O cliente não afeta diretamente o roteador, mas o roteador pode ser configurado / inteligente o suficiente para se adaptar ao comportamento do cliente. Você pode ativar o UPnP no roteador e no cliente para configurar automaticamente a conexão e a maioria dos roteadores possui capacidade de inspeção com estado , como parte do mecanismo de encaminhamento de porta .

Em conjunto, o que significa é que uma conexão pode ser feita dinamicamente em uma porta aleatória e, em seguida, o roteador pode acompanhar o que está acontecendo, em vez de visualizar tudo como conexões aleatórias e sem sentido. Dessa forma, ele pode encaminhar uma conexão conforme necessário, porque, por exemplo, é uma resposta a essa outra conexão que acabou de acontecer .

O problema ocorre quando você possui vários sistemas usando o mesmo programa. Tendo vários sistemas conectados ao mesmo roteador, compartilhando o mesmo IP e usando portas dinâmicas rapidamente se torna incontrolável e mesmo com inspeção de estado, é difícil, se não impossível, fazê-lo funcionar corretamente. Nesse caso, as portas estáticas (padrão ou não) precisarão ser usadas.


Se você usar um programa como o SmartSniff ou o TCPView para monitorar suas conexões, notará que as conexões P2P geralmente terão a porta que você configurou (ou a padrão para o cliente) como destino das conexões de entrada e a padrão ou a personalizada / porta aleatória para a fonte e vice-versa para conexões de saída.

Synetech
fonte
Hmm, mas o Bittorrent não muda o comportamento do roteador, certo? Como algum mecanismo de roteamento poderia ter sido dinâmico, como demonstrado em superuser.com/a/187190/78897 , como a Computer-A pode saber sobre isso?
Pacerier 03/10/12
Encaminhamento de porta. Você o configurou de antemão.
UtahJarhead
@Pacerier Se o roteador e o aplicativo p2p usarem UPnP , o encaminhamento de porta poderá ser feito dinamicamente. Neste caso, sim Bittorrent faz mudar o comportamento do roteador.
Zero2cx 03/10/2012
@ zero2cx, existe uma maneira de fazer ponto a ponto sem alterar o comportamento do roteador?
Pacerier
@Pacerier, se você deseja ter NAT (vários sistemas compartilhando uma conexão), deve configurar o roteador de alguma forma para saber onde fazer as conexões (bem, tecnicamente, você pode apenas mandar todo mundo vomitar todas as conexões para todas as portas, como você sugeriu, mas isso seria, na melhor das hipóteses, horrível). Você pode fazer isso estaticamente (configurar IPs e portas) ou dinamicamente (UPnP).
Synetech
4

Sua pergunta toca o coração da Internet e a própria definição de roteamento. No seu exemplo, o roteador D envia dados para o computador A com base em duas premissas:

  • Foi dito para enviar dados para o computador A.
  • Já processou dados do Computador A.

Seu cenário parece assumir a primeira opção - o roteador D deseja enviar ao computador A. Mas como ele chega lá? Isso é feito através do uso de tabelas de roteamento que são compartilhadas pelos roteadores entre si.

O roteador C envia regularmente atualizações para todos os roteadores que conhecem - incluindo o roteador D - que "conhecem" a rede "192.168. *" (Na realidade - isso não aconteceria porque a rede não é roteada - é considerada privada. ignore isso.) Portanto, o roteador D já sabe que o roteador C conhece essa rede.

Portanto, quando os dados são destinados ao Computador A, eles são endereçados pela rede primeiro. Portanto, o roteador D pergunta: "Preciso encontrar a rede 192.168. *. Conheço? Não. Conheço alguém que conheça? Sim. O roteador C sabe. Como faço para acessar o roteador C? Através do meu 2.2. 2.2 interface ".

O roteador D envia os dados para o roteador C. O roteador C recebe e diz: "Oh, eu tenho dados do roteador D, mas é para a rede 192.168. Conheço essa rede? Sim, através da minha rede 192.168.1.1" encaminha.

Há algum outro trabalho a ser feito para resolver o endereçamento IP e MAC, mas estou cobrindo o roteamento, por si só, não o ARP e a rede local.

Você notará que sua primeira suposição - o roteador remoto deve conhecer o mecanismo de roteamento - não entra em jogo aqui. O roteador D não se importa se o roteador C estiver usando EIGRP, RIP, RIPv2, OSPF ou qualquer outra coisa. Tudo o que importa é que tenha uma atualização. (É claro que, como ele tem uma atualização é importante para garantir os dois estadia em sincronia. Mas, novamente, isso é uma questão diferente.)

Sua segunda suposição - que o número da porta é um fator no roteamento - também está incorreta. Os roteadores (geralmente) não precisam de informações de porta para tomar decisões de roteamento. (Isso mudou um pouco, devido a algumas novas tecnologias de rede e se aplica principalmente a firewalls e proxies, mas ainda assim a suposição mais ampla ainda se aplica a roteadores "verdadeiros").

Continuando com o seu exemplo, o roteador C encaminhará os dados na porta 1000 (de acordo com o seu cenário), porque é possível que exista um serviço no Computador A esperando dados nessa porta específica. Mas ele só sabe fazer isso porque o roteador D o enviou na porta 1000. E o roteador D somente o envia nessa porta porque o originador dos dados o enviou ao roteador D nessa porta.

Não entendo sua inclusão de programas bittorrent ou P2P como reflexo da pergunta que você faz. As mesmas explicações se aplicariam. Os roteadores também podem ser configurados com acionamento de porta, que associa um dispositivo (ou IP) específico a uma porta específica. De modo que, quando o tráfego chega na porta 1234, os roteadores sabem enviar dados ao dispositivo ABCD. Isso geralmente é associado a uma porta TCP de saída. ou seja, se eu enviar tráfego na porta 7890, o roteador sabe que o tráfego recebido estará na porta 1234 e o enviará para mim.

Mas o disparo de porta não está associado a decisões de roteamento (remotas) - em vez disso, refere-se à tabela interna de MAC / IP que o roteador usa para a LAN.

Atualização / edição : para responder e elaborar após seu comentário. O roteador D conhece o Computador A apenas pelo seu endereço IP (192.168.2.2). Mas o roteador C conhece o computador A pelo seu endereço IP e pelo seu endereço MAC. O MAC (controle de acesso à mídia) é um identificador exclusivo (geralmente ...) de 48 bits, definido pelo padrão internacional. Todo dispositivo conectado a uma LAN (com e sem fio) deve ter um endereço MAC exclusivo.

O roteador (Roteador C) associa o endereço IP e o endereço MAC juntos em uma tabela (a tabela de endereços MAC). Portanto, quando o tráfego entra no roteador C e o roteador percebe seu "local", ele faz uma pesquisa na tabela de endereços MAC. O roteador muda literalmente as informações de endereçamento do quadro.

Ele reconstrói (reescreve) as informações de destino da Camada 2 para ter o endereço MAC de destino do Computador A, mas mantém as informações de endereço IP (Camada 3) iguais.

Se a rota NÃO souber o endereço MAC. Ou não possui um relacionamento IP-MAC em sua tabela, ele faz algo chamado ARP (protocolo de resolução de endereço) para perguntar "Ei, todos nesta rede. Você tem esse endereço MAC?" Ou às vezes - "Todos, qual é o seu endereço MAC?"). O dispositivo / dispositivos apropriados responde e o roteador cria sua tabela IP-MAC.

John
fonte
Portanto, o roteador-D envia um pacote ao roteador-C pela porta 60000 (pré-configurada), o roteador-C recebe o pacote, mas como ele sabe que esse pacote deve ser encaminhado para o computador-A?
Pacerier
1
O roteador D já conhece o destino final - Computador A. Ele (Roteador D) conhece o Computador A apenas pelo seu endereço IP: 192.168.2.2. Mas, o roteador C sabe que conhece o computador A por dois métodos: endereço IP (192.168.2.2) e algo chamado endereço MAC. Vou atualizar a resposta com mais informações.
John
2

Disparo de porta. Como um servidor da Web envia uma página para você depois que você a solicita? Porque você solicitou. Quando você solicita, o roteador sabe esperar uma resposta e, quando recebe, encaminha para o PC apropriado. Alguns programas são escritos para acionar uma abertura em antecipação a um sinal de um PC específico, mesmo que não esteja realmente a caminho.

Alguns modelos possuem um servidor central usado para comunicação básica. Por exemplo:

  • O Client1 entra no servidor para comunicações bidirecionais.
  • Client2 entra para a mesma coisa.

O servidor agora conhece todos os arquivos que o Client1 e o Client2 possuem.

  • O Cliente2 diz "Quero o arquivo X do Cliente1" para o Servidor.
  • O servidor informa ao Cliente1 "O Cliente2 deseja o arquivo X".
  • O Cliente 1 envia um dado inválido para o IP público do Cliente2, ativando o Port Triggering para que ele abra a porta para uma resposta do Cliente2.
  • O Cliente2 envia seu sinal inicial para o IP público do Cliente1.

O Cliente1 apenas enganou o roteador para abrir essa porta para o Cliente2.

Em alguns casos, como o BitTorrent ou o Napster original (iirc), é necessário encaminhar uma porta no seu roteador para que ele funcione da melhor maneira possível.

No caso de outros clientes saberem a qual porta se conectar inicialmente, é porque seu cliente informou ao enxame ou servidor qual porta você usa. O BitTorrent usa frequentemente um rastreador e que controla quais portas são usadas por quais clientes.

UtahJarhead
fonte
Na medida em que eles sabem quais portas usar ... você configura o cliente para escutar em uma porta específica. Seu cliente diz ao enxame (como no caso do BitTorrent) em qual porta você está, para que os outros clientes saibam ao que se conectar. Seu PC disse a eles.
amigos estão dizendo sobre uberlândia
Acho que você respondeu enquanto meu primeiro adendo estava sendo escrito. Corrigir?
amigos estão dizendo sobre uberlândia
mas como o PC deve conhecer o mecanismo de roteamento quando é o roteador que faz isso? Alguns mecanismo poderia ter sido dinâmico como demonstrado em superuser.com/a/187190/78897
Pacerier
Não, ele não precisa saber o roteamento. Para que a maioria dos clientes P2P funcione corretamente, você precisa ter o Port Forwarding configurado corretamente no seu roteador. Sem ele, você só pode se comunicar com outros clientes com quem conversou pela primeira vez. Eles não podem iniciar a conversa. Eu brevemente sobre isso na minha resposta (segundo ao último parágrafo)
UtahJarhead
Mas o encaminhamento de porta só é possível se o administrador o tiver pré-configurado. Você quer dizer que o Bittorrent reconfigura nossos roteadores?
Pacerier