sábado, 3 de enero de 2015

Proyecto Redes: Parte V

Como ya adelantaba en la anterior entrega, hoy voy a explicar algo que es imprescindible que los que descargan mediante P2P conozcan: NAT.

Recordemos que existian dos tipos de redes, la "red local", con unas IPs pertenecientes a unos rangos mas limitados, y la "nube", una gran red que interconecta equipos entre si y con otras redes locales (a traves de equipos intermedios).

Para conectar unas con otras se usan dispositivos llamados routers. Esos dispositivos funcionan como un embudo. Cogen todos los datos de varios equipos de una red local y los sacan por una unica salida. Veamos como lo hacen.

Cada equipo en una red tiene su IP. Un router tiene (al menos) dos IPs, una por cada red a la que pertenece. Para sacar los datos a la nube un router recibe un mensaje desde un equipo de su red local, pero como no puede sacarlo directamente (al haber varias redes conectadas a la nube, con equipos con la misma IP no seria posible que las respuestas volvieran correctamente) lo que hace es re-empaquetar el mensaje con su IP y un nuevo puerto. Pensemos el siguiente caso de ejemplo:

Equipo 1: tiene la IP 192.168.1.100
Router (red interna): IP 192.168.1.1
Router (red externa): IP 9.8.7.6
Tienda online: 12.34.56.78

- El equipo 1 quiere acceder al servidor web (puerto 80) de la tienda online. Para eso crea un mensaje desde un puerto cualquiera (2222) con esta cabecera: 192.168.1.100:2222 -> 12.34.56.78:80
- Como no tiene acceso directamente a la tienda, al estar en otra red, manda el paquete a su puerta de enlace 192.168.1.1.
- El router lo recoge y lo reempaqueta con su IP externa y un puerto nuevo al azar (el 9999), enviando el paquete 9.8.7.6:9999 -> 12.34.56.78:80.
- El servidor de la tienda online recibe el mensaje, y genera una respuesta, que la envia al equipo que realizo la solicitud: 12.34.56.78:80 -> 9.8.7.6:9999
- El router recibe la respuesta y la reenvia a quien creo el paquete original. Este recibe el paquete 12.34.56.78:80 -> 192.168.1.100:2222, como si no hubiera ningun intermediario.

A esto se le llama NAT ("Network address translation", "Traduccion de direcciones de red"), y permite que varios equipos de una misma red compartan una salida comun a otra red distinta.

Esto, tan comodo en este caso, crea un problema en el caso contrario. ¿Que ocurre si lo que se pretende es acceder a un equipo dentro de una red local desde la nube? La solucion esta en la configuracion del router (lo que se denomina "abrir puertos").

Al "abrir un puerto" le decimos al router que reserve un determinado puerto para un determinado equipo. Si un equipo de una red local quisiera ofrecer servicios web, usaria su puerto 80 para "escuchar" las peticiones. Si "redirigimos" el puerto 80 del router (de la red externa) al puerto 80 de un equipo, a todos los efectos será como si ese equipo estuviera conectado de manera directa, sin que hubiera ningun router entre medias.

Eso lo puede hacer el propietario del router de manera manual o el programa mediante un protocolo llamado UPnP. Ese sistema automatizado no todos los routers lo activan por defecto por razones de seguridad (no conviene que un programa vaya abriendo puertos a lo loco), y no todos los programas lo incorporan.

Existe un caso importante que quiero tratar ahora: los programas de P2P.

Un programa de P2P actua de dos maneras, como "cliente" que envia peticiones a un "servidor" y como "servidor" que recibe peticiones de un cliente. Obviamente, para conectarse entre dos equipos el que actua como servidor tiene que estar accesible. En las redes P2P hay un "apaño" consistente en que como los participantes de la red conocen a los demas las peticiones no solo las hace el cliente sino que el servidor tambien va preguntando a los clientes si necesitan datos, en lugar de quedarse simplemente a la espera.

La cuestion importante es que SIEMPRE tiene que haber alguien con los puertos redirigidos. Si una persona no tiene un numero de telefono puede usar una cabina para llamar, aunque no pueda recibir llamadas, pero jamas se podran comunicar dos personas sin numero de telefono, pues ninguno puede llamar al otro.

Por eso siempre es conveniente tener los puertos abiertos al usar P2P, para poder recibir solicitudes y que no se de el caso de que no podamos conectar con otros clientes al tener ellos los puertos cerrados.

Explicado todo esto, segun mi planificacion ya solo me quedan dos asuntos, que son los proxys y las VPNs y como funcionan los bloqueos para censurar un servidor.

Si hay dudas o quereis dar vuestra opinion, publicad un comentario y os respondere.

Un saludo

3 comentarios:

  1. Hola,por ahora me voy enterando de lo que dices,osea que si yo, que soy una negada lo comprendo a grandes rasgos,no creo que haya alguien que no lo entienda.

    Gracias por tu esfuerzo y tu tiempo

    ResponderEliminar
  2. Entonces necesito tu ayuda para hacer que el "a grandes rasgos" se convierta en un "por completo". Tengo el problema de que lo que explico si lo conozco con mas profundidad y es muy facil que lo haga de una manera demasiado complicada. Quiero simplificarlo al maximo para que se entienda por todos.

    ResponderEliminar
  3. Para mi ,cuando algo es muy complicado y con multiples variantes y consigo entenderlo a "grandes rasgos" es un triunfo.Sobre todo por que mi memoria es selectiva en exceso,no reconozco las caras de la gente,no recuerdo fechas,ni siquiera pueddo distinguir izquierda de derecha si no me paro a pensar en algo que me pueda orientar.Pero si aprendo un concepto y sobre todo lo entiendo no suelo olvidarlo,por eso cuando digo a grandes rasgos para mi es un logro muy grande.
    Tu lo has explicado muy bien , de manera sencilla y comprensible .No es nada dificil entender tus explicaciones .

    ResponderEliminar