¿Cómo llegan los paquetes de respuesta IP a su destino dentro de una LAN privada? [duplicar]


26

Esta es una pequeña pregunta teórica que me ha estado confundiendo durante bastante tiempo.

Básicamente, si estamos dentro de una LAN privada y queremos que los paquetes entrantes lleguen, por ejemplo, a un servidor HTTP ubicado en una de las máquinas, reenviamos puertos para que los paquetes entrantes lleguen exactamente a esa computadora.

Ahora, estoy bastante confundido sobre cómo los paquetes de 'respuesta' llegan a su destino dentro de una LAN, por ejemplo, cuando abrimos una página web más o menos. Realmente no puedo encontrar ninguna información útil sobre ese tema.

Espero que alguien pueda darme un par de pistas o vincularme con alguna información que pueda explicarlo. Gracias.

EDITAR: Creo que debería aclarar. Un ejemplo de lo que estoy preguntando sería algo como esto:
1. Una computadora dentro de una LAN con una sola IP externa intenta cargar una página web desde un servidor web fuera de esta LAN (Básicamente en Internet)
2 El servidor web responde y envía la página web de regreso a esa computadora.

Lo que me confunde en este momento es cómo sabe el enrutador a qué computadora enviar los datos entrantes (dado que el enrutador está conectado a una LAN con varias computadoras) sin reenvío de puerto previo.


Acabo de ver un buen video sobre el tema: Traducción de direcciones de red - Computerphile
Der Hochstapler

Respuestas:


56

A pesar de que la pregunta ha sido completamente cubierta. Siento que este proceso debería describirse mejor paso a paso.

Para este ejemplo, me siento en una LAN privada conectada a Internet a través de un enrutador. Debido a que nuestra red comparte una única dirección IP pública, utilizamos NAT.

Entonces, cuando solicito la página superuser.comque generará muchos paquetes IP. Veamos uno solo.


Fuente del paquete IP : 192.168.1.12(mi IP)
Destino: 64.34.119.12(superuser.com)

Ahora, es muy probable que mi sistema esté configurado de manera similar al que está en cuestión. Tengo mi propia dirección IP ( 192.168.1.12), una máscara de subred ( 255.255.255.0) y una puerta de enlace predeterminada ( 192.168.1.1). Ahora, debido a que mi campo Destino en mi paquete IP apunta a una red diferente a la mía, se envía a mi puerta de enlace predeterminada (en lugar de a la computadora directamente).

Pero, ¿cómo puede llegar el paquete a la puerta de enlace predeterminada, si el Destino apunta a otro lugar completamente diferente?

Ethernet

Eso es fácil, porque usamos el direccionamiento del protocolo Ethernet para eso. Simplemente configuramos nuestra dirección IP de destino en el paquete IP y la dirección MAC de nuestra puerta de enlace predeterminada como destino en la trama Ethernet .

Ahora eso asegurará que nuestra puerta de enlace predeterminada obtenga el paquete superuser.com. ¡Hurra!

Ahora la puerta de enlace tiene nuestro paquete y podría enviarlo directamente a su ruta. Pero para asegurarse de que obtendrá la respuesta, primero debe reemplazar la dirección de origen del paquete (de lo contrario superuser.com, trataría de enviar la respuesta a algún (posiblemente) dispositivo inexistente con mi dirección IP en su red. Ahora eso no sería muy agradable.)
Entonces mi enrutador colocará su dirección IP pública en el campo Fuente :


Fuente del paquete de IP : 92.69.127.243(mi IP pública)
Destino: 64.34.119.12(superuser.com)

Ahora ese mismo juego sigue y sigue con todos los enrutadores del mundo hasta que finalmente llega el paquete superuser.comy se genera una respuesta.

La respuesta

Respuesta Paquete de IP
Fuente: 64.34.119.12(superusuario.com)
Destino: 92.69.127.243(mi IP pública)

Ok, la respuesta llegó a mi enrutador, ¿y ahora qué? ¿Cómo sabe ahora mi enrutador para enviar la respuesta 192.168.1.12?

TCP

Bueno, eso realmente funciona porque solo hemos examinado las partes IP y Ethernet de la comunicación. Lo que hace que esto funcione es la parte TCP.

Lo más probable es que sepa que los servidores web generalmente se ejecutan en el puerto 80. IP no tiene noción de puertos . Eso viene de TCP . En TCP tenemos (como en IP) un puerto de origen y de destino .

Mi paquete TCP a superuser.com
Fuente: 192.168.1.12(mi IP)
Puerto de origen: 11111(el puerto que compuso mi computadora)
Destino: 64.34.119.12(superuser.com)
Puerto de destino:80

Cuando su enrutador envía ese paquete inicial (que se dirige al superuser.compuerto 80), colocará un nuevo puerto de origen allí (como 12345).
¡Y esta es la parte importante! ¡Él recordará ese reemplazo!

Paquete TCP de mi enrutador a superuser.com
Fuente: 92.69.127.243(mi IP pública)
Puerto de origen: 12345(el puerto que compuso mi enrutador)
Destino: 64.34.119.12(superuser.com)
Puerto de destino:80

Entonces, el paquete de respuesta recibido por el enrutador se ve así:
Contestar el paquete TCP de superuser.com
Fuente: 64.34.119.12(superuser.com)
Puerto de origen: 80
Destino: 92.69.127.243(mi IP pública)
Puerto de destino: 12345(el puerto que compuso mi enrutador)

Entonces, ahora obtiene ese paquete y ve que es para un puerto que antes recordaba que estaba asignado a operaciones NAT para la dirección IP 192.168.1.12(mi dirección IP).

Responda el paquete TCP desde mi enrutador
Fuente: 64.34.119.12(superuser.com)
Puerto de origen: 80
Destino: 192.168.1.12(mi IP)
Puerto de destino: 11111(el puerto que compuso mi computadora)


1
Edité su respuesta, no mostraba claramente lo que estaba sucediendo con los números de puerto. Agregué más ejemplos sobre los pasos intermedios y cuáles son los números de puerto donde se encuentra cada paso.
Scott Chamberlain

1
@OliverSalzburg Estaba buscando la misma pregunta respondida y su explicación me ayudó a recordar, solo una pregunta rápida sobre esto. Preguntándose por cuánto tiempo el enrutador mantendría estas asignaciones inversas (puerto de origen) parece que se quedaría sin espacio si sigue haciéndolo para tantas solicitudes, ¿las elimina demasiado regularmente?
Ahmed

@Ahmed: la cantidad de memoria para realizar un seguimiento de esa información es limitada. Hay 65536 números de puerto posibles, se almacenan en 2 bytes. Por lo tanto, recordar una dirección IP (4 bytes) para cada puerto sumaría 65536 x 4 bytes = 262144 bytes = 256 kB. Sin embargo, los detalles se implementan en el enrutador, eso no es mucha memoria.
Der Hochstapler

@Oliver Gran respuesta, ¡exactamente lo que estaba buscando! Tengo algunas preguntas: (1) "el mismo juego sigue y sigue con todos los enrutadores del mundo" , ¿es eso correcto? ¿Seguramente el campo fuente no continuaría siendo reemplazado en cada paso? (2) ¿El enrutador recuerda los puertos abiertos a largo plazo o los descarta regularmente por solicitudes que no responden? (3) ¿Significa esto que un pirata informático puede pasar paquetes a través del firewall de su enrutador con un ataque man-in-the-middle: husmeando sus paquetes TCP salientes, luego apuntando al puerto TCP abierto de su enrutador con una IP de origen falsificada que coincida con su destino?
Jon Bentley

1
¿Cómo regresa una respuesta de ping ICMP a una computadora en LAN? ¿Tiene algo similar al puerto para TCP? ¿Qué hay de otros protocolos?
Jean

11

Traducción de direcciones de red . Brevemente, cuando el enrutador de la puerta de enlace de la LAN privada reemplaza la dirección de origen de la LAN privada con su propia dirección pública, modifica el paquete de alguna manera, como asignar un número de puerto único y de otro modo sin significado local que se asigna al nodo LAN de origen y la solicitud saliente . Recuerda este mapeo de puertos, por lo que cuando una respuesta vuelve a la IP pública / número de puerto único, (el enrutador) sabe cómo desasignarlo al de su nodo de origen. Así es también como puede ejecutar múltiples pestañas, navegadores o instancias de navegador y las respuestas a cada solicitud de navegador vuelven al navegador y la pestaña correctos.


2
JRobert: ¿Qué pasa con los protocolos IP (por ejemplo, ICMP), que no sean tcp o udp, que no tienen un número de puerto?
Uri

0

Cuando un paquete inicial llega a la interfaz externa del enrutador, cambia la dirección IP de destino del paquete según la configuración de reenvío de puerto y transmite el paquete modificado en la interfaz interna del enrutador (después del ARP habitual si es necesario)

El paquete llega al servidor web y aún tiene una dirección IP de origen externa que se utilizará como dirección de destino para cualquier respuesta. En consecuencia, el servidor direcciona los paquetes de respuesta salientes de la manera habitual con una dirección IP de destino igual a la dirección IP de origen de la solicitud. Como la dirección IP del solicitante es externa, el paquete se dirige, en la capa MAC, a la interfaz interna del enrutador.

Tenga en cuenta que hay diferentes objetivos en cada capa de red.


0

El reenvío de puertos generalmente se realiza en un enrutador o dispositivo adyacente. Cuando un dispositivo en una LAN envía tráfico a otro dispositivo en esa misma LAN, el enrutador no está involucrado en absoluto. El tráfico ni siquiera lo toca. Sus reglas de reenvío de puertos no tendrán efecto en el tráfico de LAN a LAN.

Ethernet fue diseñado con una topología de "bus" en mente donde cada computadora estaba físicamente conectada al mismo medio. Si bien los conmutadores modernos optimizan el flujo de tráfico al aprender la dirección MAC en el otro extremo del puerto y replicar el tráfico en consecuencia, la topología del "bus" aún permanece. Cualquier cosa conectada a un conmutador estándar puede alcanzar "directamente" cualquier otra cosa (suponiendo que esté dentro de la misma subred) sin tener que "pasar" por un dispositivo intermedio como un enrutador.

Puede confundirse si el dispositivo al que está conectando todas las computadoras tiene múltiples puertos Ethernet "LAN" y luego un solo puerto "WAN". Estos tipos de dispositivos son en realidad un enrutador y un conmutador en el mismo chasis.

Entonces, dentro de su LAN, si su servidor HTTP tiene la dirección 192.168.1.55, para alcanzarla dentro de su LAN, deberá escribir " http://192.168.1.55 " en la barra de direcciones de su navegador. El enrutador nunca lo ve. Para alcanzarlo fuera de su LAN, necesitará escribir su IP externa, es decir, " http://256.99.88.77 : {el puerto que envió aquí}" o lo que sea. Esto afecta su enrutador, la función NAT del enrutador funciona en él y luego el enrutador lo envía a 192.168.1.55.


0

En pocas palabras, cuando una computadora dentro de la LAN privada inicia una conexión saliente, la puerta de enlace NAT genera automáticamente una asignación de puertos para ella. Son casi lo mismo que las asignaciones de puertos que ingresó manualmente antes: {puerto público, dirección privada, puerto privado}, y se usan de la misma manera. La mayor diferencia con las asignaciones dinámicas es que la puerta de enlace NAT a menudo tiene que asignar arbitrariamente los puertos públicos para las asignaciones, cuando el número de puerto esperado ya está en uso.

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.