1.12.05

 

El lio de los puertos en los programas P2P

Dentro de un mismo ordenador hay muchas aplicaciones funcionando. Según hemos visto en el post anterior algunas pueden ser clientes, otras pueden ser servidores y otras ambas cosas a la vez.

Hemos visto que el cliente pide algo al servidor, pero ¿cómo sabe el cliente a quién tiene que dirigir esa petición?. Pues bien, todo ordenador conectado a la red tiene como una especie de matrícula, de dni, de clave que lo hace único y totalmente identificable entre todos los demás. Esto es lo que se conoce como dirección IP. Está formada por cuatro números del 0 al 255 separados por puntos. Por ejemplo, 123.4.23.43 es una dirección IP. Como veis, el propio nombre (dirección) indica lo que es. Actúa como una dirección postal. Cuando un cliente hace una petición a un servidor, entre otras cosas, debe indicar la dirección IP del servidor para que esa petición llegue a su destino. Estamos hartos de utilizar direcciones de este tipo sin saberlo. Cuando escribimos en nuestro navegador http://www.google.com, realmente estamos indicando una dirección IP. Solo que es más sencillo para nosotros recordar esa dirección que no una serie de números sin sentido. Cuando escribimos la dirección, otro ordenador de la red se encarga de traducir esas palabras a su correspondiente IP. Por lo tanto, realmente nuestro navegador (cliente) manda, aunque indirectamente, una dirección IP.

Ya hemos mandado la "carta" a su destinatario. Como la dirección IP es precisa, llegará sin lugar a duda. Ahora bien, dentro de un ordenador puede haber varios servidores funcionando. ¿Cómo sabe el ordenador a qué servidor debe entregar la petición?. La respuesta es: gracias a los puertos de red. Cada aplicación servidora tiene asignado un número entre el 0 y el 65535, de forma que si a nuestra petición le añadimos dicho número, cuando nuestra "carta" llega al destino sabe a qué "buzón" va dirigida. Nuestro navegador no solo ha mandado la petición de página al sevidor de google, sino que también, de forma oculta, ha mandado un número de puerto, concretamente el 80. Cuando nuestra petición llega al ordenador de Google, gracias a que lleva dicho número se dirige a un servidor de web.

El servidor por tanto está permanentemente escuchando todo lo que viene dirigido con ese número de puerto. En definitiva, es lo que habitualmente se conoce como que el puerto está abierto. Hay algunos puertos que ya están establecidos de antemano.

Pues bien, como hemos dicho que nuestro programa P2P TV (cualquiera de ellos, el sopcast, pplive, tvants...) es cliente y servidor a la vez, por el hecho de ser esto último debe estar atento siempre a un determinado puerto por el que le llega las peticiones. Y ese puerto debe ser accesible desde el exterior. De no ser así, nuestro programa P2P TV perderá su función servidora y por lo tanto, no aprovechará al máximo su capacidad.

En muchas ocasiones ese puerto puede ser que no esté accesible desde el exterior, por motivos de seguridad o por necesidades técnicas. Por ejemplo, en los casos que accedemos a Internet a través de un router configurado en modo multipuesto. Veamos esto más detalladamente.

El problema de los router en multipuesto
Las compañías de acceso a Internet suelen dar en la mayoría de los casos solo una dirección IP de acceso a Internet. Cuando en casa tenemos varios ordenadores y deseamos que todos acceden a la red, habitualmente la solución es conectarse a través de un router. Esta es la configuración en multipuesto.

Si la compañía de acceso me ha dado una sola dirección IP, ¿como van a identificar a cada uno de mis ordenadores en Internet? La respuesta es simple: directamente no se identifican. Desde fuera de Internet se ve mi red como si fuera un único ordenador, una única dirección IP. Sin embargo, de router para dentro, cada ordenador de mi casa tiene una dirección IP única, sólo que en esta ocasión es una dirección que se puede repetir en otras redes internas del mundo. Es lo que se conoce como una dirección privada.

Cuando mi ordenador hace una petición al exterior, el router almacena la información de destino y de origen, de forma que cuando la información solicitada regresa, el router sabe exactamente a qué ordenador de su red interna tiene que enviar esa información. El único que conoce la IP privada de mi ordenador es mi router. Esta situación no ofrece ningún problema.

El problema viene cuando mi ordenador tiene una aplicación servidor funcionando. Hemos visto que esa aplicación debe permanecer a la escucha por un puerto determinado. Desde el momento que arranco la aplicación, el puerto está abierto, está escuchando. Pero esta situación es muy particular, pues yo no realizo peticiones, sino que algún ordenador externo a mi red las realizará, sin yo saber quien o cuando la hará. Cuando esa aplicación externa envía una petición a mi servidor, trae simplemente mi dirección IP pública y un número de puerto. Cuando mi router recibe esa petición, simplemente no sabe a qué ordenador de su red interna debe reenviar la petición, con lo cual, es rechazada y no llega a su destino.

Esto se soluciona con lo que se conoce como mapeo o redireccionamiento de puertos. Popularmente se conoce como abrir puertos, aunque vemos que esto no es correcto, pues los puertos ya están abiertos. Ahora lo comprobaremos de una forma práctica.

El mapeo de puertos consiste en indicarle al router que cuando venga una petición dirigida al puerto 6434 por ejemplo, debe enviarla al ordenador cuya dirección IP es la 172.16.1.5, por ejemplo. Y cuando venga dirigida al puerto 43823 debe enviarla al 172.16.2.5. Si suponemos que mi dirección IP pública es 80.3.53.233, si viene una petición dirigida a dicha IP y al puerto 6434, cuando mi router reciba esa información, la reenviará al ordenador 172.16.1.5 de su red interna.

Por lo tanto, cuando tenemos una configuración de este estilo no podemos tener dos ordenadores mapeados con el mismo número de puerto. De igual forma, si las IP privadas las asigna dinámicamente mi sistema, tampoco podré hacer el mapeo ya que los ordenadores de la red privada tendrán una dirección IP diferente cada vez que se encienden. Todas estas son cuestiones a tener en cuenta.

¿Cuándo se da esta situación? Pues como vemos, cuando el ordenador accede a internet a través de un router configurado en multipuesto. Si accedemos a internet a través de modem o similar, o un router configurado en monopuesto, no existe este problema, aunque como es aconsejable en estas circunstancias tener activado un firewall que proteja mi ordenador, tendremos que abrir los puertos (o mapearlos) en el firewall.





<< Portada

This page is powered by Blogger. Isn't yours?

Creative Commons License
El contenido de este weblog tiene licencia Creative Commons Atribución-NoComercial-CompartirIgual 2.5. Puede reproducirlo sin fines comerciales indicando como fuente nuestra dirección http://tvxp2p.blogspot.com