El protocolo Patata Caliente

patata.jpgA petición popular, voy a explicar cómo nos las arreglamos para diseñar un protocolo que permitiera jugar a la patata caliente por Internet. Normalmente los servicios que se ofrecen en Internet (Web, email, noticias, telefonía, intercambio de ficheros…) están soportados por protocolos específicos diseñados a tal efecto. Así, por ejemplo, el servicio web es soportado por el protocolo HTTP, y el de intercambio de ficheros por el protocolo FTP.

Todos podemos ofrecer un servicio en Internet: sólo necesitamos un servidor que permita la ejecución de tal servicio. Por ejemplo, yo puedo crear un servicio que sume dos números. Creo un programa que «escuche» en la línea telefónica de mi ordenador peticiones de realizar una suma. Cuando recibe una, la procesa y devuelve al equipo que envió la petición y los números, la suma de ambos. Todo esto puede sonar complicado, pero en realidad es muy sencillo. De ahí su éxito. De hecho, la red Internet como cableado e infraestructura es solo eso: un esqueleto. Los músculos son los servicios.

Una vez que tenemos un servidor ofreciendo una funcionalidad, necesitamos un cliente. En el programa que suma dos números, el cliente enviaría al servidor un saludo y los dos números, y quedaría a la espera del resultado. Éste esquema es el más utilizado en la teleinformática, y se denomina «modelo cliente-servidor» por razones obvias.

Cuando se nos planteó el desafío de crear un servicio «Patata Caliente» nos asustamos un poco, pero luego vimos que en realidad es algo muy simple. Hicimos un programa en lenguaje C del que no puedo dar código ni detalles hasta que mi compañero de prácticas realice la defensa en el mes de julio, para evitar que alguien presente un código equivalente y le suspendan…

Esencialmente, el programa se pone a la escucha de las peticiones que entren por un puerto concreto. Cuando le llega un «Hola» se pone a trabajar, enviando una pregunta. Un ejemplo de pregunta es «¿Cuándo mide el Everest?». La pregunta llega al cliente, que queda a la espera de que el usuario escriba la respuesta. Cuando se teclea un número, el cliente envía la respuesta dada por el usuario al servidor. El servidor la compara con la solución, y según sea mayor, menos o igual que la respuesta que proporcionó el usuario, responde. También decrementa el número de intentos y lo envía de vuelta.

El programa cliente recibe si el dato que el usuario proporcionó es la solución. En ese caso, presenta un mensaje de enhorabuena. En otro, indica si la respuesta es mayor o menor a la última dada. Comprueba asimismo que el usuario se encuentre dentro del número de intentos permitido.

El esquema es sencillo: el cliente se encarga interactuar con el usuario, como lo hace con nosotros el Firefox. Envía las respuestas de éste al servidor, quien se encarga de procesarlas adecuadamente, como hace un servidor web cuando el navegador solicita una web.

Espero haber aclarado algo. Tal vez esta información sólo sirva a quienes tengan algo más de experiencia en informática, pero siempre está bien tener una idea, al menos aproximada, de cómo funcionan las cosas.

Protocolos y otras bestias

¿Qué es un protocolo? ¿Qué pinta ese «http» en la barra del navegador? En la sociedad identificamos ésta palabra con un conjunto de normas o convenciones que usamos al relacionarnos con otros. En cierto sentido, el protocolo es necesario a todos los niveles, por cuanto nos proporciona una seguridad, una forma de «hacer las cosas» que sabemos que está aceptada por el resto.

En informática también hay protocolos. Al igual que no es lo mismo cenar con el Rey que tomar un café con el embajador de Francia, no es lo mismo ver una página que enviar un correo electrónico.

Hemos dicho que podemos necesitar de un protocolo al relacionarnos con otras personas (en un contexto más o menos formal). De la misma forma, cuando a través de nuestro ordenador nos relacionamos con otras máquinas, vamos a necesitar de un protocolo: una serie de normas convencionales que rijan los parámetros de nuestra comunicación.

Muchas de las tareas que realizamos diariamente requieren la comunicación de nuestra máquina con un equipo remoto. La más frecuente consiste en ver una página web. Para ello, nuestro navegador de Internet pide al servidor (www.google.com, por ejemplo) que le envíe una página en concreto alojada en ese dominio. El servidor asiente y envía la página, y a su vez nuestro navegador la recibe y la presenta en pantalla. Toda esta comunicación tiene lugar a través del cable que nos une con Internet, aunque en vez de consistir en una secuencia desordenada de bits, está dirigida por las normas del protocolo que utlicemos.

Todos los clientes (por ejemplo el navegador) y los servidores (por ejemplo, los de páginas web) utilizan el mismo protocolo para entenderse. Estas normas se aplican en todos los servicios de Internet. Así, existe un protocolo que define cómo tiene que ser la comunicación para que un navegador solicite una página web. Este protocolo se denomina HTTP (HyperText Transfer Protocol, o Protocolo de Transferencia de Hipertexto). También existe un protocolo que define cómo tiene que ser la comunicación para descargar correo electrónico, o un protocolo que concreta la comunicación en la transferencia de ficheros entre equipos (FTP, File Transfer Protocol, o Protocolo de Transferencia de Ficheros)

Hay un montón de protocolos, muchos más de los que puede imaginar. Una práctica de la asignatura de Redes fue diseñar un protocolo de comunicación entre un cliente y un servidor para jugar a «la patata caliente». Muy entretenido, aunque sufrimos lo nuestro. Si no sabe muy bien qué va a hacer con estos nuevos conocimientos, espere nuevas entregas :-P