Como funciona o peer-to-peer na Internet?

13

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 temos 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á os 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 Router-C! Nem mesmo a Computer-A nem a Computer-B saberão disso, certo?

Portanto, o Roteador-D pode enviar um pacote para o Computador-A se enviar um pacote ao Roteador-C pela porta 1000, mas como o Roteador-D sabe enviar pacotes pela porta 1000 e não informar a porta 1001?

Como programas peer-to-peer, como o Bittorrent, conseguem passar por este problema? A única solução que posso imaginar é que o Roteador-D envie o pacote para o Roteador-C através de todas portas, de modo que ele seja encaminhado para o Computador-A, mas existe uma solução melhor?

    
por Pacerier 03.10.2012 / 19:25

3 respostas

6

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

But surely, the only device that knows this routing mechanism is Router-C itself! Not even Computer-A nor Computer-B will know about it, right?

Por quê? 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 depois configurar o roteador para corresponder.

but how is Router-D to know to send packets through port 1000, and not say port 1001?

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

The only solution I can think of is for Router-D to send the packet to Router-C through all ports, such that it gets forwarded to Computer-A, but is there a better solution?

É muito mais simples que isso. Quando o cliente faz uma conexão com um par, ele especifica qual porta ele quer usar, então o par envia os dados naquela porta.

Hmm, but Bittorrent doesn't change the router's behavior right? Since some routing mechanism could have been dynamic as demonstrated in superuser.com/a/187190/78897, how is Computer-A able to know about it?

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 tem habilidades de inspeção íntegra como parte de seu encaminhamento de porta mecanismo.

Juntem, o que isso 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 surge quando você tem vários sistemas usando o mesmo programa. Ter vários sistemas conectados ao mesmo roteador, compartilhar o mesmo IP e usar portas dinâmicas rapidamente se torna impossível de gerenciar e, mesmo com a inspeção de estado, é difícil, senão impossível, fazer com que funcione corretamente. Nesse caso, as portas estáticas (padrão ou não) precisarão ser usadas.


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

    
por 03.10.2012 / 19:33
3

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á são dados processados do computador A.

Seu cenário parece assumir a primeira opção - o roteador D quer enviar para o computador A. Mas como ele chega lá? Ele faz isso 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 em conhecimento - incluindo o Roteador D - que "conhece" a rede "192.168. *" (na verdade - isso não aconteceria porque a rede não é roteada - é considerado Mas ignore o roteador.) Então, o roteador D já sabe que o roteador C conhece essa rede.

Assim, quando os dados são destinados ao Computador A, ele é endereçado pela rede primeiro. Então, o roteador D pergunta: "Eu preciso encontrar a rede 192.168. * Eu sei? Não. Eu conheço outra pessoa que faz? Sim. O roteador C faz. Como eu chego ao roteador C? Através do meu 2.2. 2.2 interface ".

O roteador D envia os dados para o roteador C. O roteador C obtém e diz: "Ah, eu tenho dados do roteador D, mas são da rede 192.168. Eu conheço essa rede? Sim, através da rede 192.168.1.1 "E então encaminha isto.

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

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

Sua segunda suposição - esse número de porta é um fator no roteamento - também está incorreta. 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 haja um serviço no Computador A esperando dados nessa porta específica. Mas ele só sabe fazer porque o Roteador D o enviou na porta 1000. E o roteador D apenas o envia naquela porta porque o originador dos dados o enviou para o Roteador D naquela porta.

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

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

Atualizar / editar : Para responder e elaborar depois do 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 (Media Access Control) é um identificador de 48 bits exclusivo (geralmente ...) que é definido pelo padrão internacional. Cada dispositivo conectado a uma rede local (com fio 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). Assim, quando o tráfego entra no Roteador C e o roteador percebe seu "local" para ele, ele faz uma consulta à tabela de endereços MAC. O roteador então literalmente altera a informação 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 do endereço IP (Camada 3) como as mesmas.

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

    
por 03.10.2012 / 19:49
2

Port Triggering. Como um servidor da Web envia uma página da Web para você depois de solicitada? Porque você pediu isso. Quando você o solicita, o roteador sabe esperar uma resposta e, quando recebe, o encaminha para o PC apropriado. Alguns programas são escritos para desencadear uma abertura em antecipação de 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.
  • O Client2 entra para a mesma coisa.

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

  • O Client2 diz "Eu quero o arquivo X do Client1" para o Servidor.
  • O servidor informa ao cliente1 "O cliente2 deseja o arquivo X".
  • O Cliente 1 envia uma parte do lixo para o IP público do Cliente2, definindo o Port Triggering para abrir a porta para uma resposta do Cliente2.
  • O Client2 envia seu sinal inicial para o IP público do Cliente1.

O Client1 acabou de enganar o roteador para abrir essa porta para o Client2.

Em alguns casos, como o BitTorrent ou o Napster original (iirc), você precisa encaminhar uma porta no roteador para que ele funcione da melhor forma possível.

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

    
por 03.10.2012 / 19:35