Creo que es una pregunta muy clásica, pero, aunque tengo algunos antecedentes, ya no tengo suficiente vocabulario para buscar y comprender correctamente en la Web.
Digamos que tengo una red doméstica con 192.168.0.1 (IP.1) y 192.168.0.2 (IP.2) y ambos estamos jugando a Counter Strike golpeando exactamente el mismo servidor externo.
¿Cómo sabe mi enrutador doméstico qué paquete irá a IP.1? A menudo leo cosas con direcciones NAT y xxx.xxx/y. ** ¿Dónde está escrita la parte / y en la pila TCP / IP?
¿Necesitamos absolutamente NAT para eso? Lo que he entendido del artículo de Wikipedia es que NAT está hecho para optimizar las direcciones IP, cuando algunas computadoras están apagadas. ¿También permite conectar 5 dispositivos con solo 1 IP pública?
Respuestas:
(Para lo siguiente, ignoraré cualquier búsqueda de DNS o acción de capa dos, ya que esa no es la parte relevante para la historia de NAT).
Cualquier conexión TCP es una tupla de cuatro partes:
En resumen: la IP de destino se usa para llevar el paquete a la máquina correcta, el puerto de destino se usa para llevar el paquete en esa máquina al programa / sesión correctos. La IP de origen se usa para saber dónde enviar las respuestas. Lo mismo ocurre con el puerto de origen. Cuando se envía una respuesta, el origen y el destino simplemente se intercambian.
Comencemos con dos computadoras sin NAT:
1.1.1.1
3.3.3.3
80
Cuando una computadora solicita una página web, primero seleccionará un número de puerto aleatorio no utilizado del rango aleatorio (1024-65535). Vamos a escoger
2345
. Entonces sucederá la siguiente secuencia: la computadora envía su paquete con: IP de1.1.1.1
origen2345
, puerto de origen , IP de3.3.3.3
destino, puerto de destino80
. Los paquetes llegan al servidor web, ve su propia IP y puerto80
, por lo que sabe que esta es una solicitud de una página web. El servidor web luego envía la página web nuevamente en paquetes con IP de3.3.3.3
origen, puerto de origen 80, IP de1.1.1.1
destino, puerto de destino2345
. La computadora recibe estos paquetes y sabe cuál es la página web solicitada debido al número de puerto2345
.Estas combinaciones de puertos a menudo se escriben como tales:
1.1.1.1:2345
y3.3.3.3:80
.Ahora, la cantidad de computadoras en Internet supera con creces la cantidad de direcciones IPv4 disponibles. Para preservar el espacio de direcciones, se introdujo un conjunto de rangos de direcciones privadas, que se pueden usar libremente para compartir direcciones. Estos rangese se denominan RFC1918 y son los siguientes:
Estas direcciones no se encuentran en ninguna parte de las tablas de enrutamiento de Internet, por lo que si envía un paquete con un destino en estos rangos en la red troncal de Internet, simplemente se eliminarán. Esto se debe a que millones de personas usan las mismas direcciones. Estas direcciones deben traducirse a algo útil para Internet. Aquí es donde entra la traducción de direcciones de red:
Tenemos dos computadoras:
192.168.0.1
y B:192.168.0.2
1.1.1.1
.Primero, ambas computadoras seleccionan un puerto aleatorio: digamos:
192.168.0.1:2345
y192.168.0.2:5432
.La computadora A envía su paquete con origen
192.168.0.1:2345
y destino3.3.3.3:80
. La puerta de enlace traduce este paquete al1.1.1.1:2345
destino de origen3.3.3.3:80
y recuerda que cualquier respuesta a esta combinación va a192.168.0.1
. Entonces, cuando recibe una respuesta con origen3.3.3.3:80
y destino1.1.1.1:2345
, lo traducirá a origen3.3.3.3:80
y destino192.168.0.1:2345
y enviará el paquete.La computadora B envía su paquete con origen
192.168.0.2:5432
y destino3.3.3.3:80
. La puerta de enlace traduce este paquete al1.1.1.1:5432
destino de origen3.3.3.3:80
y recuerda que cualquier respuesta a esta combinación va a192.168.0.2
. Entonces, cuando recibe una respuesta con origen3.3.3.3:80
y destino1.1.1.1:5432
, lo traducirá a origen3.3.3.3:80
y destino192.168.0.2:5432
y enviará el paquete.Si ambas computadoras seleccionan el mismo número de puerto de origen, la puerta de enlace simplemente elegirá otro número de puerto de origen aleatorio gratuito y también recordará traducir el número de puerto. Esto se refiere a veces como PAT (traducción de dirección de puerto). Esto es básicamente un subconjunto de NAT.
Hay varias implementaciones para todo esto. Es posible que la puerta de enlace solo recuerde "La computadora X usó el puerto de origen Y" y reenvíe cualquier cosa con el puerto Y a la computadora X. Puede recordar que la Computadora X usó el puerto de origen Y y el destino Z "y solo reenvió cualquier cosa desde el puerto Z al puerto Y de regreso a computadora X. O existe la opción de que recuerde toda la tupla y solo envíe tráfico a la computadora X que coincida con la fuente y el puerto de origen / destino.
fuente