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:
Computadora-A, IP 192.168.1.2 (puerta de enlace predeterminada 192.168.1.1)
Computadora-B, IP 192.168.1.3 (puerta de enlace predeterminada 192.168.1.1)
Router-C, IP 192.168.1.1 (IP externo 1.1.1.1)
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?
fuente
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:
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.
fuente
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 servidor ahora conoce todos los archivos que tienen el Cliente1 y el Cliente2.
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.
fuente