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.com
que 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.com
y 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.com
puerto 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)