Últimos Cambios |
||
Blog personal: El hilo del laberinto |
Última Actualización: 21 de Mayo de 2004 - Viernes
De todos es sabido que uno de los problemas más graves a los que se enfrenta un sistema "Peer To Peer" es la existencia de cortafuegos y, sobre todo, de entornos NAT (Network Address Translation, traducción de direcciones) entre los diferentes peers. Este hecho desanima pero, estudiando el problema con atención, puede verse que existen algunas posibilidades que pueden aliviar el problema.
Lo dicho aquí se refiere a entornos IPv4. Los sistemas IPv6 usarán cortafuegos, pero no deberían emplear NAT, ya que cada usuario puede recibir millones de IPs.
La característica fundamental del problema que vamos a estudiar es que se permiten las conexiones salientes (aunque el tráfico en sí sea entrante, como ocurre con HTTP), pero no es posible, de forma "simple", tener conexiones entrantes. Un caso habitual en España, a fecha de hoy (Mayo 2004), son los ADSLs.
Si sólo uno de los extremos está detrás de un NAT, una posibilidad simple es enviarle (mediante un servicio intermedio) una petición para que sea él quien se conecte al otro nodo, que acepta conexiones externas sin problemas.
Este esquema no es aplicable si ambos "peers" tienen problemas para aceptar conexiones externas, lo que es muy habitual.
Una solución evidente es que los "peers" que pretenden conectarse utilicen un repetidor externo que les haga de repetidor. Básicamente los dos "peers" se conectan a dicho equipo con conexiones salientes, que no tienen problemas. El repetidor se situaría en medio, copiando lo que recibe por cada conexión hacia la otra.
Este esquema tiene varias desventajas muy graves:
Este caso es también muy simple: enviar un datagrama hacia el exterior abre, automáticamente, una regla para aceptar la respuesta. Así que basta con que ambos extremos empiecen a enviar datagramas con las IPs y los puertos correctos (origen y destino) hasta que empiecen a recibir los datagramas del otro "peer". Hay varios casos, no obstante:
En este caso los pasos serían:
Por suerte, este tipo de NATs es menos frecuente.
En general, la gestión de TCP es bastante más compleja que la de UDP, ya que el protocolo mantiene estado y requiere negociación al principio de la conexión.
Como ya hemos visto, intentar conectar a través de NATs es un procedimiento frágil y, cuando es posible, resulta más simple utilizar UDP que TCP. Lamentablemente TCP proporciona funcionalidades no disponibles en UDP, como control de carga y congestión en la red, o entrega fiable y ordenada de datos.
Una posibilidad relativamente asequible es reimplementar esas funcionalidades sobre UDP, para tener lo mejor de ambos mundos, como se realiza, por ejemplo en la tecnología Airhook.
Otra opción simple es "tunelizar" los datagramas TCP sobre datagramas UDP, como se realiza en CIPE, iproxy o Almost TCP over UDP (atou), por ejemplo.
Más información sobre los OpenBadges
Donación BitCoin: 19niBN42ac2pqDQFx6GJZxry2JQSFvwAfS