2009-12-30 11 views
12

Si tengo dos computadoras internas que se conectan a la misma dirección IP externa a través de un enrutador NAT, ¿cómo puede el enrutador obtener el tráfico hacia la computadora interna correcta? Tengo entendido que NAT reenvía los paquetes entrantes a la computadora que recientemente envió los paquetes salientes a la dirección IP del remitente [del paquete entrante]. Dado que ambas computadoras están enviando a la misma dirección, ¿envía el enrutador el paquete a ambas? Si ese es el caso, ¿es responsabilidad del software del cliente determinar qué paquetes son relevantes?¿Cómo se conectan dos computadoras a la misma dirección externa a través de NAT?

¿Es posible si ambas computadoras están intentando conectarse al mismo puerto?

+3

Si estás preguntando si su programa basado en IP tiene que ser consciente de NAT, la respuesta es no - es por eso que es tan exitoso. –

+0

Hay una respuesta aceptada, por lo que no veo el punto en la recompensa. –

+0

@RonMaupin él quiere ofrecer parte de su recompensa de reputación a una respuesta existente porque le gusta o le ayudó mucho. Vea la descripción de la recompensa * Una o más de las respuestas es ejemplar y merece una recompensa adicional. Recompensa la respuesta aceptada existente *. La gente aquí lo hace con bastante frecuencia y recompensa recompensas adicionales por buenas respuestas incluso después de muchos años. –

Respuesta

26

Cuando abre un socket, necesita dirigirse a un puerto del sistema de destino y abrir un puerto de escucha conjugado en su propio sistema para recibir cualquier respuesta. Debe enviar el sistema de destino a su puerto de escucha.

Tener más de un sistema con el mismo módem

Cuando se inicia un navegador Web y vaya a www.google.com:80, el navegador determina/búsquedas de un puerto conjugado no sistema libre del sistema para escuchar. Digamos que el puerto conjugado es 10000. El puerto del oyente es para recibir la secuencia http de Google.

Luego, su niño sentado a su lado por cierto también busca www.google.com:80 y su/su Google sesión de la play station o xbox-lo dicho sea de paso también se asigna el puerto 10000. conjugado

Ambos están sentados detrás de un cablemódem, y detrás del cablemódem está su enrutador inalámbrico.Y ambos sistemas están detrás del enrutador inalámbrico: todos en esa secuencia, en lo que respecta a la topología de la red.

Para evitar que el puerto dirección de colisión en el router/módem

Digamos que su compañía de cable DHCP asigna el módem IP4-mail 72.72.72.72. Pero su enrutador inalámbrico DHCP asigna 192.168.0.10 a su sistema y 192.168.0.11 al sistema de su hijo.

Cuando el marco que transporta la información de sus puertos de escucha pasa por su enrutador NAT, se traduciría uno o ambos puertos de escucha. Digamos puerto 15000 para su página y puerto 16000 para la página de su hijo.

Su enrutador inalámbrico luego envía sus solicitudes al servidor de google desde 72.72.72.72:15000 y 72.72.72.72:16000.

El servidor de Google responde individualmente a 72.72.72.72:15000 y 72.72.72.72:16000 y cuando el enrutador inalámbrico encuentra la respuesta, alcanza la asignación que ha almacenado y traduce 72.72.72.72:15000 a 192.168. 0.10: 10000 para llegar a su sistema pero traduce 72.72.72.72:16000 a 192.168.0.11:10000 para llegar al sistema de su hijo.

Operando web/juego/ftp/etc servidores

pero lo que si usted tiene un servidor web o un servidor ftp que se ejecuta en el sistema. ¿Qué sucede si tiene dos sistemas y ambos tienen un servidor web y ambos servidores web están escuchando en el puerto 80?

Digamos que las direcciones IP locales registradas/asignadas con su enrutador inalámbrico de su primer sistema de servidor web son 192.168.0.30 y su segundo sistema de servidor web es 192.168.0.40.

El enrutador inalámbrico tendría una página web de configuración generalmente por defecto 192.168.0.1:80, a menos que lo haya cambiado. Habría una pestaña en la página donde podría definir/reservar asignaciones de puertos de aplicaciones.

Se podía registrarse con el enrutador inalámbrico para reservar el mapeo

192.168.0.30:80 => outgoing port 8080 
192.168.0.40:80 => outgoing port 8088 

Así que usted tiene que llamar a sus amigos sus servidores web/juego son direccionables a través de 72.72.72.72:8080 y 72.72.72.72:8088 respectivamente, donde el enrutador inalámbrico excluiría su puerto 8080 y 8088 de su propio uso de NAT dinámico.

Por supuesto, 72.72.72.72 es tan bueno como antes de que su ISP DHCP decida renovar la dirección ip4 de su módem para decir, 72.72.90.200. Después de lo cual tendría que llamar por teléfono/correo electrónico a sus amigos y decir Oye, las direcciones de los servidores han cambiado a 72.72.90.200:8080 y 72.72.90.200:8088 respectivamente. O puede suscribirse al servicio dns dinámico (ddns) para usar un dominio nombrado donde el servicio ddns necesitará que instale una utilidad de latido simple en su sistema para ayudarlos a controlar la variación de la dirección. La traducción DDNS es un tema/estrategia por separado.

módems NAT

reciente contratos ISP le suministran con un módem que tiene NAT. Si es así, debe apagar el que está en su módem o el que está en su enrutador inalámbrico. No debe usar ambos: ¿cuál es el sentido de traducir dos veces porque NAT es simplemente para evitar la colisión de direcciones.Cuando apaga NAT de su enrutador inalámbrico, puede funcionar como un conmutador de concentrador y no como un enrutador para que pueda conectarlo al módem utilizando uno de sus conectores LAN en lugar de hacerlo a través de su zócalo WAN.

+3

+1 ¡Qué gran explicación! Siempre me ha frustrado el hecho de que la mayoría de las explicaciones de NAT nunca aclararon realmente cómo las respuestas sobre las conexiones salientes vuelven al remitente. – AaronLS

1

Utiliza diferentes puertos para el tráfico externo entrante, y el NAT enruta los paquetes en un puerto a una dirección IP interna, y los paquetes del otro puerto a la otra dirección IP interna ... La solicitud inicial de cada uno la computadora interna, cuando atraviesa el NAT en el camino de salida, establece qué puerto se usará para el tráfico entrante desde la dirección IP externa, y le dice al servidor externo a qué puerto enviar su tráfico para esa conexión.

4

El enrutador administra los puertos "fuente" que están separados para cada computadora. Mientras se está conectando al puerto 80 en el "destino", el enrutador puede asignar el puerto de origen a un puerto de alto número.

Wikipedia lo resume como traducción de direcciones

red implica re-escribir las direcciones de origen y/o IP de destino y por lo general también los números de puerto TCP/UDP de IP paquetes a medida que pasan a través el NAT. Suma de verificación (tanto IP como TCP/UDP) debe también reescribirse para tener en cuenta los cambios.

+0

Corrígeme si me equivoco: ambas computadoras solicitan inicialmente la conexión a 1.1.1.1 en el puerto 1000. El enrutador crea nuevos puertos, 40000 y 40001. El enrutador envía el paquete, aún conectándose en el puerto 1000. Cuando el servidor envía lo devuelve, lo envía de regreso al puerto 40000 o 40001. Eso tiene sentido, excepto que pensé que al abrir una conexión, el envío y la recepción suceden en el mismo puerto. – user241146

+3

Un "zócalo" consta de cuatro datos: dirección IP de origen, puerto de origen, IP de destino y puerto de destino. En su ejemplo, los puertos 40000 y 40001 son puertos de origen, 1000 es un puerto de destino. – kdgregory

2

Ya buenas respuestas se proporcionan, pero aquí es otro ejemplo:

HOST A addr   HOST B addr 
    10.1.0.2:4040  10.1.0.3:4040 
----------------------------------------- 
NAT 200.50.50.28:4040 200.50.50.28:4041 (what external host sees) 

200.50.50.28 es (Internet) IP global de enrutador.

Cada número de puerto es único en la tabla NAT. Y, por supuesto, el enrutador hace todo el trabajo sucio de modificar las direcciones de origen y destino de forma transparente.

+0

Entonces, si dos computadoras usan el mismo puerto de origen, el enrutador reasigna automáticamente un nuevo puerto src para cualquiera de los Host. ¿Y luego el servidor al que se conecta el Host A y el Host B ve un puerto src diferente? Si no hay una colisión en los puertos del Host A y del Host B, ¿el enrutador no cambiará el puerto src? Solo quiero confirmar si lo entendí correctamente. Gracias – kuchi

+1

@kuchi, sí, el servidor ve un puerto diferente para cada host. Los enrutadores en general resuelven la colisión de direcciones, es decir, el mismo puerto se puede usar si dos hosts se conectan a dos servidores diferentes. La tupla '(src_ip, src_port, dest_ip, dest_port)' tiene que ser distinta. –

1

RFC3022 proporciona una gran cantidad de información sobre cómo funciona esto

Cuestiones relacionadas