Experimentos mentales con mafiosos, ejércitos en guerra, amazonas asesinas celosas y hasta un científico de Microsoft muerto: la historia de las redes informáticas incluye varios ingredientes en la vida y obra de quienes demostraron que no es posible que dos ordenadores sepan con seguridad si se están comunicando o no través de una red. Esta desconcertante conclusión es, paradójicamente, uno de los motivos de que Internet exista. ¡Todos los detalles en esta entrega con el inconfundible tono científico-amarillista de TBONTB!
La historia comienza con un grupo de mafiosos, cuando tres científicos de la Universidad del Estado de Nueva York publicaron su investigación en la cual demostraban que es imposible que dos dispositivos de red se comuniquen en forma segura. Para eso, usaron un experimento mental llamado Metáfora de los Gánsters, en donde mostraban que no existe forma infalible de que dos grupos de mafiosos se pongan de acuerdo para cometer un golpe.
La elección de los gánsters no era casual, ya que en esa época, año 1975, las prácticas mafiosas se habían extendido tanto que el Departamento del Tesoro de EE. UU. incluía en sus cálculos financieros los “impuestos” que los “padrinos” les cobraban en promedio a cada habitante por cada transacción económica. El paper mafioso presentado en ese año influyó en el diseño de redes, que por esa época estaban floreciendo.
Sin embargo, la consagración definitiva de estos algoritmos fue cuando en el año 1978 Jim Gray, científico de Microsoft y ganador del codiciado Premio Turing (una especie de Oscar a la informática), tomó la misma idea y la desarrolló perfeccionando la historia de los gánsters y ambientándola en la Primera Guerra Mundial, en lo que se llamó la Paradoja de los dos Generales, en donde se demuestra la imposibilidad de una comunicación 100% confiable entre dos partes.
Paradoja sobre paradoja: tiempo después de esta demostración, Gray desapareció misteriosamente en el mar, luego de embarcarse aguas adentro desde la ciudad de San Francisco para esparcir las cenizas de su madre recientemente fallecida. Burla del destino, Gray llevaba consigo un EPIRB, o distress radiobeacon, dispositivo que emite señales de comunicación para indicar la posición exacta de la nave. La señal nunca fue recibida por los guardacostas, y se cree que el dispositivo nunca se comunicó. La búsqueda se extendió por cinco años, incluso a través de las imágenes de Google Maps. Lo cierto es que, el mes pasado, Gray fue declarado legalmente muerto a pedido de su viuda y la búsqueda se detuvo.
Pero ¿de qué trata la historia ideada por Gray para ejemplificar estas teorías? El relato dice que, en la antigüedad, existían dos ejércitos enfrentados, rojo y azul. El ejército azul se encuentra en un valle y tiene cinco mil hombres. El ejército rojo tiene seis mil, pero divididos en dos grupos de tres mil, cada uno en sendas colinas que rodean al valle (ver figura). La única forma en que el ejército rojo puede atacar al azul y salir victorioso es que ambos grupos de tres mil hombres se pongan de acuerdo y ataquen en forma simultánea, de modo de superar en número al ejército azul. Para esto, disponen de palomas mensajeras, por medio de las cuales pueden comunicarse. El general del ejército rojo, apostado en una de las colinas, se dispone a enviar una paloma al grupo situado en la colina opuesta para indicarles la hora en que atacarán y de esa forma estar coordinados. Pero un soldado raso le plantea la imposibilidad de estar seguros de que ambos bandos atacarán al mismo tiempo. El diálogo que se produjo debe de haber sido más o menos así:
General: —Envíen la paloma con el mensaje de que atacaremos mañana a las 9 de la mañana.
Soldado: —¿Pero cómo sabremos que los del otro lado recibieron el mensaje? El ejército azul puede ver pasar la paloma y dispararle, por lo que el mensaje se perdería.
General: —Muy simple. Les diremos que, apenas reciban el mensaje, envíen otra paloma de regreso dándonos el OK o ACK (se ve que el general sabía de redes).
Soldado: —¿Pero cómo sabrán los del otro lado que la paloma que envíen con su OK llegó hasta nosotros?
General: —Fácil. Si esa paloma no es derribada, apenas llegue de nuestro lado enviaremos otra diciéndoles que la hemos recibido.
Soldado: —Y si ellos no reciben nuestra segunda paloma, ¿cómo sabrán si lo que sucedió es que derribaron la que enviamos luego de recibir la de ellos, o que en realidad nunca recibimos la de ellos?
El diálogo siguió hasta que el soldado fue arrestado.
Este pequeño ejemplo resume la imposibilidad de que las redes se comuniquen de una manera segura. Las redes funcionan como las palomas mensajeras. Basta reemplazar “paloma” por “paquete de datos” y “ejército” por “dispositivo de red”, y he allí uno de los tantos problemas sin solución. No hay forma de hacerlo. Por eso, los protocolos de comunicación tienen en cuenta que existe la incertidumbre en el canal de comunicaciones. La cantidad de paquetes de datos a enviar para que la comunicación sea 100% segura es infinita.
Lo interesante es que los protocolos, en lugar de intentar eliminar el problema (ya que es imposible), intentan “mitigarlo hasta niveles aceptables”. Es decir, por ejemplo, enviar varios mensajes en forma simultánea para aumentar la probabilidad de que alguno llegue, o enviarlos con números de secuencia y recibir confirmaciones para cada número, de forma de saber qué tan seguro es el canal de transmisión. Algunos de estos son los fundamentos que se usan en el diseño de redes y son los responsables de que, por ejemplo, ahora puedas estar leyendo este artículo.
Lo curioso es que, no importa el método que se intente utilizar, no existe una forma de que esta comunicación se haga en forma segura. Esto está demostrado por medio de un teorema, con el clásico método de la contradicción.
Como curiosidad adicional, Alessandro Panconesi, un científico italiano, presentó un paper en donde aplicaba estas teorías a la computación distribuida, por medio de la Metáfora de las Amazonas Celosas Asesinas. Si quieren curiosear, pueden hacerlo aquí.
A ti, lector, en la vida diaria, ¿cuántas veces te ocurre esto? Piensa por caso en los SMS que no recibes, o cuando un correo electrónico no llega al destinatario. A veces es mejor volver al viejo método de hablar por teléfono.
¿Y en nuestas relaciones interpersonales? ¿Cómo nos comunicamos? Fernando Pessoa decía que “nos entendemos porque nos ignoramos”, y que lo mejor que nos puede pasar es que no nos llegue toda la información desde el otro lado, porque “si nos conociéramos en detalle en los más profundos deseos, nos odiaríamos.” ¿Será así? ¿Tú qué opinas?
Excelente artículo, la verdad que nunca me había preguntado como hacen dos ordenadores para saber que se están comunicando.
hooo… que recuerdos me vuelven a la mente. Lo estudié hace años en "Redes de Computadoras". Muy bueno el artículo.
Para eso existe el Doble Check xD
http://www.youtube.com/watch?v=_0MBys9pQ8w
Doble Check!
muy buen articulo hace un par de días me estaba preguntado eso y pensé en eso mismo, y pensé en preguntarle a mi profesora de redes (estoy estudiando informática)y causarle un mindfuck, y este artículo me alienta más a hacerlo
eeee, si, enviar un mensaje y saber que llego o no es todo un tema, al final aca dicen "volvamos a hablar por telefono" que en síntesis seria como una comunicacion en tiempo real entre 2 computadoras, o sea, podria ser lo mismo, hablamos y al final no sabemos si recibió bien todo el mensaje o en algun momento se pudo haber cortado, eso lo dice el que esta del otro lado, ahora pienso, la mejor forma para saber si un mensaje llego seria con un eco, digamos, en el ejemplo del SMS, yo lo mando a un dispositivo y este automáticamente me lo devuelve tal cual, de esa forma sabria que llego sin problemas al otro lugar, con los mails podria pasar lo mismo, pero de esa forma solo estoy seguro que llego o no, pero nunca podria el otro dispositivo estar seguro de eso, a menos que el mensaje sea simple como una orden, ATACAMOS A LAS 13 Hs, a mi solamente me importa que me llegue ese mensaje de vuelta tal cual asi sabre que la orden fue recibida, lo demas no importa, pero claro, si los 2 tienen que estar seguros de que los mensajes llegaron, entonces, como una comunicación normal de internet donde envia ping permanentemente, aca tendriamos que mandar palomas permanentemente hasta la hora del ataque JAJA. Tengo una idea, de como podria ser que ambos esten permanentemente seguros de que el mensaje esta llegando sin problemas.
#6 y como vas a verificar que el mensaje devuelto llegó ? porque sería lo mismo que cuando al principio lo envías.. De alguna manera es un bucle infinito
Respecto a la última pregunta del artículo… CIERTO!, CIERTO!, CIERTO!, CIERTO!, CIERTO!, CIERTO!, CIERTO!, CIERTO!, CIERTO!, CIERTO!, CONDENADAMENTE CIERTO! (y en mayúsculas!)
#7 COINCIDO !! (También en mayúsculas)
es facil, envia 100 palomas y listo.
Dividimos el ejercito azul en 2. Azul 1 y Azul 2. Azul 1 es quien manda, ahi esta el general.
Azul 1: Envía "atacamos a las 14:00hs", y espera respuesta "Ok", si no recibe la respuesta vuelve a enviar.
Azul 2: Al recibir "atacamos a las 14:00hs", envía respuesta "Ok", y espera recibir "Confirmado". Si no recibe la respuesta vuelve a enviar.
Azul 1: Al recibir "Ok", envía respuesta "Confirmado", y espera recibir "Afirmativo". Si no recibe la respuesta vuelve a enviar.
Azul 2: Si recibe "Confirmacion", envía afirmativo. No espera respuesta.
Con estos pasos el Azul 2 ya sabe el horario de ataque, y el Azul 1 es quien manda. Por lo tanto el azul 2 va atacar aunque no reciba "confirmacion", y el azul 1 va a atacar aunque no reciba afirmativo. El "Ok" fue suficiente para que Azul 1 sepa que la hora de ataque llegó a destino, y el es quien manda y Azul 2 lo sabe.
Si algun mensaje fue capturado no importa, el enemigo sigue siendo inferior, y lo van a aplastar si atacan al mismo tiempo. Incluso puede servir para que entren en pánico.
#11 Interesante comentario. Sin embargo, no puede eliminarse el margen de error: es que en cada nuevo paso se está en el mismo lugar que el anterior; que es lo que demuestra el teorema, que es más o menos así:
a) La secuencia de envío de mensajes contiene al menos un mensaje importante.
b) Asumamos que es posible alcanzar el estado deseado -en el que ambas partes están seguras-, entonces debe existir un cadena de N mensajes tal que N es el menor número que permite alcanzar ese estado. (I)
Como es la cadena más corta, entonces por a), el último mensaje (N) de la cadena es un mensaje importante (porque si se pierde este mensaje, no se alcanza el estado deseado).
Pero, por otra parte, el emisor de este mensaje N debe recibir una confirmación, lo que implica que la secuencia debe de tener al menos N + 1 mensajes. (II)
(I) contradice a (II)
#12 Mi planteo funciona en el ejemplo del ejercito solamente. Lo que hice fue suponer que a Azul 1 le bastan N-1 mensajes para atacar, mientras que a Azul 2 necesita N-2 mensajes.
Azul 1 es el primero en enviar mensajes, al recibir N mensajes se da cuenta que que Azul 2 ya a recibido N+1 mensajes. Hace rato que se pasaron, y en ese punto ya no les importa si reciben o no confirmacion de la confirmacion, aunque continuen mandando mensajes. Ya habián pactado atacar si reciben N-1 y N-2 mensajes respectivamente. La incertidumbre que les queda es si realmente el otro recibio su última confirmacion, pero en ese punto es irrelevante, porque estan seguros de que ambos saben el horario de ataque, y eso en el fondo es lo único que importa.
#13 Es correcto, eso se basa en que ambas partes intercambiaron información en forma previa. SI no me equivoco hay algoritmos de red que hacen algo similar.