Arquitectura cliente servidor

De ChuWiki
Saltar a: navegación, buscar

Arquitectura Cliente Servidor

Los sockets permiten conectar dos programas en red para que se puedan intercambiar datos. Los sockets están basados en una arquitectura cliente/servidor. En esta arquitectura uno de los programas debe estar siempre arrancado y pendiente de que alguien establezca conexión con él. Este programa se denomina servidor. El otro programa lo arranca el usuario cuando lo necesita y es el programa que da el primer paso en el establecimiento de la comunicación. Este programa se llama cliente.

El servidor, está continuamente a la escucha y a la espera de que alguien se quiera conectar a él. Si hacemos una comparación con un teléfono, un servidor es una empresa 24 horas, 365 días al año, pendiente de recibir llamadas de sus clientes.

El cliente, en un momento dado decide conectarse a un servidor y hacerle alguna petición. Cuando el cliente no necesita al servidor, cierra la conexión. En la comparativa del teléfono, el cliente es el que llama por teléfono a la empresa cuando necesita algo de ella.

Por ejemplo, un servidor de páginas web está siempre en marcha y a la escucha. El navegador es el cliente. Cuando arrancamos el navegador y ponemos la dirección del servidor web, el navegador establece la comunicación y le pide al servidor la página web que queremos ver. El servidor la envía y el navegador la muestra.

En un juego de quake hay un programa servidor corriendo, que es el que tiene todo el escenario, posición de los jugadores y de los malos. Cuando entra un nuevo jugador, arranca un cliente de quake, que es el que nos presenta las pantallas. El servidor nos envía el escenario y la posición de todos y el cliente lo pinta en pantalla. Cuando el jugador mueve algo, el cliente envía al servidor los movimientos deseados para actualizar el escenario.

Direcciones IP

Al igual que con el teléfono, una empresa se identifica por un número de teléfono. El servidor se identifica por una dirección IP, que hace las veces de número de teléfono. Las direcciones IP son esos números estilo 192.168.2.1 que seguro que hemos visto por ahí montones de veces.

El cliente debe conocer la IP del servidor para establecer la conexión, al igual que nosotros necesitamos saber el número de teléfono de la empresa para llamar.

El servidor no necesita saber ninguna IP, al igual que la empresa no necesita saber los números de teléfono del cliente ni el suyo propio para recibir llamadas.

Puertos y servicios

Un servidor, al igual que una empresa, puede ofrecernos distintos servicios. Una empresa, por ejemplo, puede tener reclamaciones, nuevos pedidos, información, etc. El ordenador puede ofrecer páginas web, ftp, juego de Quake, etc.

El puerto es un número que identifica el servicio dentro del servidor, igual que las extensiones telefónicas dentro de una empresa sirven para contactar con la persona que nos realiza determinado servicio.

Ficheros implicados

Hay dos ficheros con información importante para los sockets. Aunque podemos programar sin necesidad de ellos, poniendo todos los números en código a pelo (como IP y puerto), es mejor usar el contenido de estos ficheros.

  • hosts. Este fichero contiene una relación de nombres de ordenadores y direcciones IP. En el simil telefónico, es equivalente a una agenda con los nombres de las empresas y sus teléfonos. En linux está en /etc/hosts. En windows está en C:\WINNT\system32\drivers\etc\hosts.
  • services. Este fichero contiene una relación entre los nombres de los servicios y los puertos. En nuestro simil telefónico es equivalente a una agenda en la que tenemos para cada servicio ofrecido por las empresas, el número de extensión telefónica. En linux está en /etc/services. En windows está en C:\WINNT\system32\drivers\etc\services

En C de linux tenemos las funciones gethostbyname() y getservicebyname() que dándoles un nombre de ordenador o de servicio, busca en estos ficheros el número (ip o puerto) asociado. El servidor puede atender varios puertos para ofrecer servicios distintos, al igual que en una empresa puede haber distintas extensiones, para reclamaciones, nuevos pedidos, información, etc.

Enlaces