¿Cómo funciona el peer-to-peer en internet?


15

Por lo que entiendo, no hay forma de enviar un paquete a una computadora en una red local desde fuera de la red, a menos que conozcamos el mecanismo de enrutamiento empleado por el enrutador.

Asumiendo que tenemos una configuración similar a esta:

  1. Computadora-A, IP 192.168.1.2 (puerta de enlace predeterminada 192.168.1.1)

  2. Computadora-B, IP 192.168.1.3 (puerta de enlace predeterminada 192.168.1.1)

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

  4. Router-D (IP externo 2.2.2.2)

La computadora A, la computadora B y el enrutador C pertenecen a la misma red local. El Router-D quiere enviar datos a la Computadora-A, pero no puede hacerlo sin pasar por el Router-C.

Ahora el Router-C reenviará los paquetes a la Computadora-A si el puerto de destino es 1000, y reenviará los paquetes a la Computadora-B si el puerto de destino es 2000. ¡Pero seguramente, el único dispositivo que conoce este mecanismo de enrutamiento es el mismo Router-C! Ni siquiera la computadora A ni la computadora B lo sabrán, ¿verdad?

Entonces, el Router-D puede enviar un paquete a la Computadora-A si envía un paquete al Router-C a través del puerto 1000, pero ¿cómo debe saber el Router-D para enviar paquetes a través del puerto 1000 y no decir el puerto 1001?

¿Cómo pasan este problema los programas punto a punto como Bittorrent? La única solución que se me ocurre es que el Router-D envíe el paquete al Router-C a través de todos los puertos, de modo que se reenvíe a la Computadora-A, pero ¿existe una solución mejor?

Respuestas:


9

Su confusión proviene de algunas suposiciones incorrectas.

¡Pero seguramente, el único dispositivo que conoce este mecanismo de enrutamiento es el propio Router-C! Ni siquiera la computadora A ni la computadora B lo sabrán, ¿verdad?

¿Qué, por qué? Entonces, ¿por qué se configuró el enrutador para reenviar esos puertos a esas IP? Debe configurar el cliente P2P para usar un puerto específico y luego configurar el enrutador para que se corresponda.

pero, ¿cómo debe saber Router-D para enviar paquetes a través del puerto 1000 y no decir el puerto 1001?

Porque configura el cliente P2P para usar un puerto específico (estándar o no estándar para ese protocolo).

La única solución que se me ocurre es que el Router-D envíe el paquete al Router-C a través de todos los puertos, de modo que se reenvíe a la Computadora-A, pero ¿existe una solución mejor?

Es mucho más simple que eso. Cuando el cliente se conecta a un igual, especifica qué puerto quiere usar, de modo que el igual envía los datos en ese puerto.

Hmm, pero Bittorrent no cambia el comportamiento del enrutador ¿verdad? Dado que algunos mecanismos de enrutamiento podrían haber sido dinámicos como se demostró en superuser.com/a/187190/78897, ¿cómo puede saberlo Computer-A?

El cliente no afecta directamente al enrutador, pero el enrutador puede configurarse / ser lo suficientemente inteligente como para adaptarse al comportamiento del cliente. Puede habilitar UPnP tanto en el enrutador como en el cliente para configurar automáticamente la conexión y la mayoría de los enrutadores tienen capacidades de inspección con estado como parte de su mecanismo de reenvío de puertos .

En conjunto, lo que significa es que una conexión se puede hacer dinámicamente en un puerto aleatorio, y luego el enrutador puede realizar un seguimiento de lo que está sucediendo en lugar de ver todo como conexiones aleatorias y sin sentido. De esa manera, puede reenviar una conexión según sea necesario porque, por ejemplo, es una respuesta a esta otra conexión que acaba de suceder .

El problema surge cuando tienes varios sistemas que usan el mismo programa. Tener varios sistemas conectados al mismo enrutador, compartir la misma IP y usar puertos dinámicos rápidamente se vuelve inmanejable e incluso con una inspección de estado, es difícil, si no imposible, hacer que funcione correctamente. En ese caso, será necesario utilizar puertos estáticos (predeterminados o no).


Si usa un programa como SmartSniff o TCPView para monitorear sus conexiones, notará que las conexiones P2P generalmente tendrán el puerto que configuró (o el predeterminado para el cliente) como el destino para las conexiones entrantes y el predeterminado o personalizado / puerto aleatorio para la fuente y viceversa para conexiones salientes.


Hmm, pero Bittorrent no cambia el comportamiento del enrutador ¿verdad? Dado que algunos mecanismos de enrutamiento podrían haber sido dinámicos como se demostró en superuser.com/a/187190/78897 , ¿cómo puede saberlo Computer-A?
Pacerier

Reenvío de puertos. Lo configuraste de antemano.
UtahJarhead

@Pacerier Si tanto el enrutador como la aplicación p2p usan UPnP , el reenvío de puertos se puede hacer dinámicamente. En este caso, sí Bittorrent hace cambiar el comportamiento del router.
zero2cx

@ zero2cx, ¿hay alguna forma de hacer peer-to-peer sin cambiar el comportamiento del enrutador?
Pacerier

@Pacerier, si desea tener NAT (múltiples sistemas que comparten una conexión), debe configurar de alguna manera el enrutador para saber dónde hacer las conexiones (bueno, técnicamente podría hacer que todos arrojen todas las conexiones a todos los puertos como sugirió, pero eso sería, en el mejor de los casos, horrible). Puede hacerlo de forma estática (configurar IP y puertos) o dinámicamente (UPnP).
Synetech

4

Su pregunta toca el corazón de Internet y la definición misma de enrutamiento. En su ejemplo, el enrutador D envía datos a la computadora A en base a dos premisas:

  • Se le ha dicho que envíe datos a la computadora A.
  • Ya son datos procesados ​​de la computadora A.

Su escenario parece asumir la primera opción: el enrutador D quiere enviarlo a la computadora A. ¿Pero cómo llega allí? Lo hace mediante el uso de tablas de enrutamiento que los enrutadores comparten entre sí.

El enrutador C envía regularmente actualizaciones a todos los enrutadores que conoce, incluido el enrutador D, que "conoce" la red "192.168. *" (En realidad, esto no sucedería porque esa red no está enrutada, se considera privada. Pero ignore eso.) Entonces, el enrutador D ya sabe que el enrutador C conoce esa red.

Entonces, cuando los datos se destinan a la computadora A, primero se direccionan por la red. Entonces, el enrutador D pregunta: "Necesito encontrar la red 192.168. *. ¿Lo sé? No. ¿Conozco a alguien más que sí? Sí. El enrutador C sí. ¿Cómo llego al enrutador C? A través de mi 2.2. 2.2 interfaz ".

El enrutador D luego envía los datos al enrutador C. El enrutador C lo obtiene y dice: "Oh, tengo datos del enrutador D pero es para la red 192.168. ¿Conozco esa red? Sí, a través de mi red 192.168.1.1" Y luego lo reenvía.

Hay otro trabajo por hacer para resolver el direccionamiento IP y MAC, pero estoy cubriendo el enrutamiento, per se, no ARP y las redes locales.

Notarás que tu primera suposición (el enrutador remoto debe conocer el mecanismo de enrutamiento) no entra en juego aquí. Al enrutador D no le importa si el enrutador C está usando EIGRP, RIP, RIPv2, OSPF o lo que sea. Lo único que le importa es que recibió una actualización. (Por supuesto, cómo obtuvo una actualización es importante para garantizar que los dos permanezcan sincronizados. Pero, de nuevo, ese es un problema diferente).

Su segunda suposición, que el número de puerto es un factor en el enrutamiento, también es incorrecta. Los enrutadores (generalmente) no necesitan información de puerto para tomar decisiones de enrutamiento. (Eso ha cambiado ligeramente, debido a algunas nuevas tecnologías de red y se aplica principalmente a firewalls y servidores proxy, pero aún así la suposición más amplia aún se aplica a los enrutadores "verdaderos").

Continuando con su ejemplo, el enrutador C reenviará datos en el puerto 1000 (según su escenario) porque es posible que haya un servicio en la computadora A que espera datos en ese puerto específico. Pero solo sabe hacerlo porque el enrutador D lo envió en el puerto 1000. Y el enrutador D solo lo envía en ese puerto porque el creador de los datos lo envió al enrutador D en ese puerto.

No entiendo que su inclusión de programas bittorrent o P2P refleje la pregunta que hace. Se aplicarían las mismas explicaciones. Los enrutadores también se pueden configurar con activación de puerto que asocia un dispositivo particular (o IP) con un puerto particular. De tal manera que cuando el tráfico llega al puerto 1234, los enrutadores saben enviar datos al dispositivo ABCD. Esto generalmente está asociado con un puerto TCP saliente. es decir, si envío tráfico en el puerto 7890, el enrutador sabe que el tráfico entrante estará en el puerto 1234 y me lo enviará.

Pero la activación de puertos no está asociada con las decisiones de enrutamiento (remoto), sino que se relaciona con la tabla MAC / IP interna que el enrutador usa para la LAN.

Actualizar / editar : para responder y elaborar después de su comentario. El enrutador D conoce la computadora A solo por su dirección IP (192.168.2.2). Pero el enrutador C conoce la computadora A por su dirección IP y por su dirección MAC. El MAC (Control de acceso a medios) es un identificador único (generalmente ...) de 48 bits que se define según el estándar internacional. Se supone que cada dispositivo conectado a una LAN (con cable e inalámbrico) tiene una dirección MAC única.

El enrutador (enrutador C) asocia la dirección IP y la dirección MAC en una tabla (la tabla de direcciones MAC). Entonces, cuando el tráfico ingresa al enrutador C y el enrutador se da cuenta de que es "local", realiza una búsqueda en la tabla de direcciones MAC. El enrutador cambia literalmente la información de direccionamiento de trama.

Reconstruye (reescribe) la información de destino de la capa 2 para que tenga la dirección MAC de destino de la computadora A, pero mantiene la información de la dirección IP (capa 3) para que sea la misma.

Si la ruta NO conoce la dirección MAC. O no tiene una relación IP-MAC en su tabla, hace algo llamado ARP (protocolo de resolución de direcciones) para preguntar "HEY, todos en esta red. ¿Tienen esta dirección MAC?" O a veces: "Todos, ¿cuál es su dirección MAC?"). El dispositivo / dispositivos apropiados responde y el enrutador crea su tabla IP-MAC.


Entonces, el Router-D envía un paquete al Router-C a través del puerto 60000 (preconfigurado), el Router-C recibe el paquete, pero ¿cómo sabe que este paquete debe enviarse a la Computadora-A?
Pacerier

1
El enrutador D ya conoce el destino final: la computadora A. (el enrutador D) conoce la computadora A solo por su dirección IP: 192.168.2.2. Pero, el enrutador C sabe que conoce la computadora A por dos métodos: dirección IP (192.168.2.2) y algo llamado su dirección MAC. Actualizaré la respuesta con más información.
John

2

Activación de puertos. ¿Cómo le envía un servidor web una página web después de haberla solicitado? Porque lo has solicitado. Cuando lo solicita, el enrutador sabe que espera una respuesta y, cuando la recibe, la reenvía a la PC correspondiente. Algunos programas están escritos para activar una apertura en anticipación de una señal de una PC específica, incluso si uno no está realmente en camino.

Algunos modelos tienen un servidor central utilizado para la comunicación básica. Por ejemplo:

  • El Cliente1 inicia sesión con el Servidor para comunicaciones bidireccionales.
  • Client2 inicia sesión para lo mismo.

El servidor ahora conoce todos los archivos que tienen el Cliente1 y el Cliente2.

  • El Cliente2 dice "Quiero el archivo X del Cliente1" al Servidor.
  • El servidor le dice al Cliente1 "El Cliente2 quiere el archivo X".
  • El Cliente 1 envía una pieza de datos basura a la IP pública del Cliente2, activando la Activación del puerto para que abra el puerto para una respuesta del Cliente2.
  • El Cliente2 envía su señal inicial a la IP pública del Cliente1.

El Cliente1 simplemente engañó al enrutador para que abriera ese puerto para el Cliente2.

En algunos casos, como BitTorrent o el Napster original (iirc), debe reenviar un puerto en su enrutador para que funcione de manera óptima.

En cuanto a que otros clientes sepan a qué puerto conectarse inicialmente, es porque su cliente le dijo al enjambre o al servidor qué puerto utiliza. BitTorrent utiliza con frecuencia un rastreador y que realiza un seguimiento de qué puertos utilizan qué clientes.


En cuanto a que sepan qué puertos usar ... configura el cliente para escuchar en un puerto específico. Su cliente le dice al enjambre (como en el caso de BitTorrent) en qué puerto se encuentra para que los otros clientes sepan a qué conectarse. Tu PC les dijo.
UtahJarhead

Creo que respondiste mientras escribía mi primer apéndice. ¿Correcto?
UtahJarhead

pero, ¿cómo sabe la PC el mecanismo de enrutamiento cuando lo hace el enrutador? Algún mecanismo podría haber sido dinámico como se demuestra en superuser.com/a/187190/78897
Pacerier

No, no necesita saber la ruta. Para que la mayoría de los clientes P2P funcionen correctamente, debe tener el reenvío de puertos configurado correctamente en su enrutador. Sin él, solo puedes comunicarte con otros clientes con los que primero hablas. No pueden iniciar la conversación.
Toqué

Pero el reenvío de puertos solo es posible si el administrador lo configuró previamente. ¿Quiere decir que Bittorrent reconfigura nuestros enrutadores?
Pacerier
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.