22 agosto 2012

TCP/IP, la mano invisible de Internet



Que bueno es este video, la analogía que hacen de un bus enorme con muchos turistas por una calle congestionada es la mejor explicación del protocolo TCP/IP que he visto. Ese es el secreto de Internet que hace posible que millones de computadores se conecten simultáneamente sin saturar las líneas ni con largos tiempos de espera ¿sabían que antes de eso existían los e-mail, pero demoraban horas y hasta días en llegar?. Es increíble como un concepto simple pudo causar tamaña revolución tecnológica.

El problema es de muchos datos -llamémoslos "mensajes"- que viajan por un mismo canal (cientos de millones de mensajes, simultáneamente) y deben compartir conexiones de fibra óptica o de cobre que tienen gran capacidad, pero no son ilimitadas. La analogía del tráfico de vehículos que atascan una calle es buena: la calle tiene un cierto ancho y solo unos cuentos vehículos pueden circular en paralelo por ella, además los vehículos necesitan mantener una "distancia razonable y prudente" para no chocar. Los embotellamientos del tránsito se producen porque los vehiculos no usan el espacio de la calle de manera eficiente.

Algo parecido ocurre con los mensajes que viajan de un computador a otro. Recuerdo que en 1992 tratamos de interconectar los computadores de los tribunales de Arica usando una topología de bus más o menos así

En esos años Windows 3.11 todavía no usaba el TCP/IP sino que el tráfico de los mensajes era ordenado desde un servidor en colas de espera: era el sistema -teóricamente- más lógico pero en la práctica un desastre, jamás funcionó bien y después de meses de quebrarnos la cabeza lo dejamos. Nunca conocí una red de esas que funcionara bien. Usaban el protocolo IPX para las redes Novell que venía con una biblioteca de unos 12 libros para instalarla. Todavía tengo esos libros malditos por alguna parte.

Volviendo a la analogía con un embotellamiento del tránsito, el IPX era como solucionarlo instalando semáforos y policías en cada una de las esquinas. El sistema era "store and forward": todos los mensajes iban al servidor quien los almacenaba en una lista de espera y los iba entregando según ciertas prioridades. Ni que decir que cuando un usuario enviaba un mensaje grande toda la red se atascaba.

El TCP/IP es mágico y soluciona ese problema de la manera más simple, ingeniosa y contra intuitiva. No manda los mensajes completos sino que los divide en "paquetes" de un largo fijo. Cada conexión tiene un número que es como un número de teléfono, la mía por ejemplo en estos momentos es 190.208.160.63, ese es mi número de conexión. Los packets tienen básicamente la dirección de origen, la del destino, un trozo del mensaje y otros datos como el tiempo de vida, etc. Como todos los packets son del mismo tamaño, pequeños, ninguno tiene la capacidad de producir un atochamiento por si solo.

Volviendo a la analogía, es como si en lugar de andar en auto todos se trasladaran a pie, pero con unas ruedas que les permitieran moverse a la misma velocidad que un auto. Así la vía se aprovecha muchos mejor, son más los que pueden usarla sin que se produzcan atascamientos. Eso es lo que muestra el video, cuando los turistas se bajan del gran bus y va cada uno por su cuenta por distintos caminos.

Pero todavía alguien podría preguntarse -con razón- que la cantidad de datos son las mismas y las y el canal (equivalente al ancho de la calle) también es el mismo ¿que se gana entonces partendo los mensajes en pedazos? .

Y aquí vienen los dos componentes extras que producen la magia: uno es que hay muchos más caminos, miles de combinaciones posibles porque los equipos ya no están conectados en bus sino en forma de red (por eso se llama "net"). Para llegar de un punto a otro existen muchos caminos diferentes. El otro secreto es que los packets se mueven cercanos a la velocidad de la luz, así es que da lo mismo si toman el camino más corto o el más largo. Cruzar el Océano Pacífico le toma a un packet un cuarto de segundo más o menos, solo para que se hagan una idea.

Esto tiene consecuencias extraordinarias. La primera es que mientras más equipos hay conectados ¡las conexiones son más rápidas!. Claro porque se agregan más caminos posibles a la red, todo lo contrario a los sistemas antiguos donde los mensajes iban todos por un solo camino, óptimo y predeterminado. No hay caminos óptimos y hay mucha redundancia ¿a quien le importa? si los packet viajan a velocidades altísimas.

Otra consecuencia es que ya no es necesario ordenar el tráfico o la ruta de los packets, en cada punto intermedio llegan a unos computadores especiales llamados routers que simplemente lo envían por la primera ruta que encuentran desocupada y que más probablemente lo acerque a su destino, solo es probable, nada es exacto, pueden fallar y no hay problema, si después de un tiempo no llega a destino se envía de nuevo.

En el TCP/IP se esconde toda la filosofía de Internet: no hay autoridad, no hay orden, no hay planificación. Todo se deja libre y las decisiones son extremadamente locales. Internet es la mejor demostración que la mano invisible funciona.

2 comentarios:

  1. Tuve que programar una cosa con esa red Novell una vez. Una desmotadora de algodón, en la recepción había una PC, luego dos o tres en la administración, y la PC de la balanza hacía lectura de la balanza electronica. Entra vehículo lleno, sale vacío, tara, peso neto, muestra de calidad asociada. Esas cosas. La PC "master" de la administración siempre debía estar prendida y era todo bien complejo para hacer un par de tonterías nada más.

    ResponderBorrar
  2. Esas redes "store and forward" como la Novell eran horribles, enviaban los mensajes comp`letos y se atoraban con nada. En algunas no solo debía estar el server prendido sino todos los demás, creo que esa era la famosa "topología anillo" con token ring, invento de IBM si mal no recuerdo.

    TPC/IP solucionó todo eso, sin esa idea Internet no habría existido, Linux y los sistemas basados en el traían TCP/IP nativo desde muchos años, Microsft lo incluyó -si mal no recuerdo- a partir de Windows 95

    ResponderBorrar

"Send me a postcard, drop me a line
Stating point of view
Indicate precisely what you mean to say
Yours sincerely, wasting away
Give me your answer, fill in a form
Mine for evermore
Will you still need me, will you still feed me
When I'm sixty-four"