¿Cómo sabe el router dónde reenviar paquetes?

68

Si varias computadoras con direcciones locales (192.168.0. #) Están conectadas a un enrutador y cada computadora abre un navegador web y solicita una página a través de HTTP, cuando se envían estos paquetes TCP: 80, el enrutador cambia la dirección local con el IP estática del enrutador (es decir, IP dada por el proveedor) para que el servidor pueda responder a la dirección apropiada.

Pero, ¿cómo sabe el enrutador a qué computadora reenviar la respuesta HTTP, ya que el encabezado TCP no contiene la dirección IP local (¿verdad?) Y todas las computadoras están utilizando el puerto 80?

¿Tiene esto algo que ver con las direcciones MAC?

¿Cómo funciona esto exactamente?

Kornelije Petak
fuente

Respuestas:

78

La mayoría de los enrutadores domésticos utilizan un caso especial de NAT llamado PAT.

También lo verás referido como NAPT o IP Masquerading. Los tres últimos términos significan lo mismo en uso general. (Los acrónimos: traducción de direcciones de red / traducción de direcciones de puerto / traducción de puertos de dirección de red)

Cuando el paquete sale de su máquina interna, la dirección de origen se reescribe como sabe. El puerto de origen también se cambia, generalmente a un número alto, y el enrutador mantiene una tabla de traducción de direcciones.

Por ejemplo, supongamos que tiene una máquina cliente que va a www.google.com. Su computadora (por ejemplo, 192.168.1.100) busca esa dirección y establece una conexión TCP a 72.14.204.147 en el puerto 80 desde su dirección IP interna, utilizando un puerto de origen aleatorio.

Para su computadora, la conexión se ve así:

192.168.1.100:37641   <-->  72.14.204.147:80

Su computadora envía el paquete al enrutador, que elige un nuevo puerto alto aleatorio y reescribe el paquete. Cada conexión de salida tiene su propio puerto en el enrutador. Luego, el enrutador reenvía el paquete a su ISP después de agregarlo a su tabla de conexión:

PrivateIP        PrivatePort   PublicIP      PublicPort    Remote          RemotePort
-------------    ----------    -----------   -----------   ----------      -----------
192.168.1.100    37641         *10.6.23.5    59273         72.14.204.147   80

* Por ejemplo, utilicé una dirección que comienza con 10, pero no se puede enrutar públicamente. La tabla también está algo simplificada.

Para google, la conexión se ve así:

10.6.23.5:59273   <-->  72.14.204.147:80

Google enviará su respuesta al 10.6.23.5 en el puerto 59273. Su enrutador luego busca esa información en la tabla y reenvía el paquete a 192.168.1.100:37641.

Pablo
fuente
3
Para resumir, el enrutador usa números de puerto para recordar qué va desde afuera de la red local a qué en el interior de la red. Sin embargo, esto no explica cómo www.google.comme encontraría si no le enviara una solicitud inicial. En otras palabras, los mensajes solo pueden comunicarse conmigo a través del enrutador si inicialmente envié una solicitud a través del enrutador
CodyBugstein
2
@Imray google.com (o cualquier otra cosa en Internet) no puede encontrar su computadora si su computadora no inició la solicitud. Es por eso que tener un enrutador agrega mucha seguridad.
Jason
66
@ Jason: Ese es un mito peligroso. Tener un firewall agrega seguridad. El trabajo de un enrutador SoHo típico es hacer que las cosas funcionen, no evitar que funcionen. Se aquí para más información.
David Schwartz
1
@ Jason Es mejor no eliminar su comentario, hace que lo que hubiera sido una discusión que valiera la pena leer, no sea posible leer.
barlop
2
Buen ejemplo, pero ¿esto significa que todos los puertos de números altos siempre están abiertos en nuestros enrutadores?
jiggunjer
1

Los enrutadores entre la red local y el resto de Internet utilizan una técnica llamada NAT.

Solo un extracto del volumen ilustrado TCP / IP 1 sobre NAPT, con una palabra sobre las deficiencias de su primo simple, Basic NAT:

NAT básico realiza la reescritura de direcciones IP solamente. En esencia, una dirección privada se reescribe para ser una dirección pública, a menudo de un grupo o rango de direcciones públicas proporcionadas por un ISP. Este tipo de NAT no es el más popular porque no ayuda a reducir drásticamente la necesidad de direcciones IP: la cantidad de direcciones enrutables globalmente debe ser igual o superior a la cantidad de hosts internos que desean acceder a Internet simultáneamente. Un enfoque mucho más popular, NAPT implica el uso de identificadores de la capa de transporte (es decir, puertos para TCP y UDP, identificadores de consulta para ICMP) para diferenciar qué host en el lado privado de la NAT está asociado con un paquete particular (ver Figura 7- 4) Esto permite una gran cantidad de hosts internos (es decir, varios miles) para acceder a Internet simultáneamente utilizando un número limitado de direcciones públicas, a menudo solo una. Normalmente usaremos el término NAT para incluir tanto NAT tradicional como NAPT a menos que la distinción sea importante en un contexto particular.

CodyBugstein
fuente