Hola hacketones! En este capítulo de TryHackMe – Client-Server Basics se enseñan los conceptos básicos del modelo Cliente-Servidor.

En las salas anteriores, vimos diferentes tipos de computadoras y cómo se usan en el trabajo. Inicialmente, la mayoría de las computadoras funcionaban solas: almacenaban sus propios archivos, ejecutaban sus propios programas y no se comunicaban con otras computadoras.

Pronto, múltiples organizaciones de todo el mundo idearon la interconexión de estos sistemas para facilitar el intercambio de información y recursos sin importar la distancia. Así nacieron los precursores de internet. Redes como ARPANET, CYCLADES, NPL y NSFNET allanaron el camino para la internet moderna.
Al igual que en la sociedad, donde las personas se distinguen por un conjunto específico de habilidades y las ofrecen como servicio, los sistemas interconectados también comenzaron a especializarse. Entonces, ¿cómo funciona esto? ¿Cómo pueden los sistemas informáticos utilizar los servicios de otro sistema informático? Al final de esta sala, conocerá las respuestas a estas preguntas.
Objetivos de aprendizaje
- Comprender el modelo Cliente-Servidor
- Comprenda los siguientes conceptos a un nivel superficial:
- DNS
- Cliente
- Servidor
- Puerto
- Protocolo
- Red
Prerrequisitos
- Dentro de un sistema informático
- Tipos de computadoras
Conceptos y Componentes del Modelo Cliente-Servidor
| Concepto | Definición | Analogía (Pizzería) | Función Técnica | Ejemplo Práctico |
| Cliente | Sistema o navegador que inicia la solicitud de un servicio o recurso a otro sistema. | Alice (quien decide el pedido) o el navegador que solicita la página. | Es el nodo que siempre inicia la comunicación enviando una solicitud formateada. | Navegador web (Firefox, Chrome) accediendo a un sitio. |
| Servidor | Sistema que ofrece servicios y responde a las solicitudes enviadas por los clientes. | El establecimiento de Luigi’s Pizza o el empleado que prepara el pedido. | Escucha solicitudes en puertos específicos y sirve el recurso solicitado (como una página HTML). | Servidor web que aloja tryhackme.com. |
| Protocolo | Conjunto de reglas y estándares que definen cómo se comunican el cliente y el servidor. | Bob (el mensajero), el idioma inglés utilizado y el menú de la pizzería. | Define comandos, estructura de solicitudes, sintaxis y respuestas de error. | HTTP (Hypertext Transfer Protocol) o HTTPS. |
| Puerto | Identificador numérico utilizado para diferenciar servicios específicos dentro de un mismo servidor. | Diferentes puertas de entrada: Puerta A para comida para llevar, Puerta B para restaurante. | Permite que un servidor ejecute varios servicios simultáneamente asignando una «puerta» a cada uno. | Puerto 8080 en el host httpdemo.local. |
| DNS | Servicio que traduce nombres de dominio legibles por humanos en direcciones IP. | El dispositivo GPS que traduce el nombre «Luigi’s Pizza» en coordenadas exactas. | Resuelve la ubicación del servidor para que el cliente pueda establecer la conexión. | Resolución de tryhackme.com a la IP 127.0.0.1. |
Entrega de pizza
Una de las maneras más sencillas de explicar cómo los sistemas informáticos prestan servicios a otros sistemas es usar una analogía: por ejemplo, cómo las tiendas ofrecen servicios a sus clientes. Veamos el caso de una pizzería para llevar.
Es viernes por la noche, y Alice y Bob tienen ganas de pizza. Alice mira el menú de Luigi’s Pizza y le dice a Bob qué pizza quiere. Bob coge el coche, introduce la dirección de Luigi en su GPS y empieza a conducir. Al llegar, Bob entra en Luigi’s y hace su pedido: «Tráeme una pizza grande de pepperoni y una Coca-Cola». El empleado confirma el pedido y empieza a preparar la pizza. Una vez listo, Bob vuelve a casa y disfruta de una agradable noche de pizza con Alice.
Este parece un proceso estándar y sencillo. Pero no se deje engañar. Como estamos tan acostumbrados a pedir pizza, lo hemos interiorizado. Analicemos cada paso con más detalle y relacionémoslo con la interacción de los sistemas informáticos.

Servicio, Cliente, Servidor
En nuestra analogía, Bob y Alice deciden usar el servicio de pizza para llevar. Alice es la clienta que le pasa su pedido a Bob, quien a su vez se lo pasa al mesero de Luigi’s Pizzas. En términos informáticos, podemos traducir esto como que Alice usa, por ejemplo, un navegador para acceder a un sitio web. El navegador es el cliente que solicita la página web y el servidor es el sistema que la sirve. Tenga en cuenta que el cliente es quien siempre inicia la solicitud.

Solicitud y respuesta
Alice pidió una pizza grande de pepperoni en Luigi’s. Tenga en cuenta que esta solicitud no se le hizo a Bob. Bob fue quien la llevó a Luigi’s. Es importante tener en cuenta que si la solicitud no tiene el formato correcto o el recurso solicitado no está disponible, recibiremos un error. Por ejemplo, Bob responde a Alice con el mensaje de que no había pizzas de pepperoni o que el camarero no entendió el pedido.
En sistemas informáticos, podemos decir que Alicia utilizó un navegador (el cliente) para solicitar una página web a un servidor, que luego envió la página web al cliente.
Protocolo
Una de las cosas que no solemos comprender, hasta que viajamos a un país extranjero, es nuestro idioma. Cuando Alice le formula su pedido a Bob, usa el idioma que Luigi’s Pizza entiende. Además, Alice usa el menú para determinar qué pedidos puede hacer. Bob entendió el pedido (idioma y pedido) y fue a Luigi’s a traerlo; recibió una respuesta que entendió y se la devolvió a Alice.

Podemos comparar a Bob con un protocolo que utilizan los sistemas informáticos para comunicarse. Un protocolo define cómo un cliente puede comunicarse con un servidor. Esta definición incluye:
- ¿Qué comandos entienden el cliente y el servidor? Por ejemplo, el comando get .
- Cómo se estructura una solicitud. Por ejemplo, primero el comando y luego la orden.
- ¿Qué sintaxis se utiliza? Por ejemplo, Alicia usa el idioma inglés.
- ¿Qué respuesta se debe dar a cada tipo de solicitud? Por ejemplo, si se solicita una pizza, se recibe la pizza disponible.
- ¿Qué respuesta dar a las solicitudes incorrectas? Por ejemplo, el camarero de Luigi’s Pizzas dice: «No hay pizza de peperonni disponible».
Puerto
Un puerto se utiliza para identificar un servicio específico que se ejecuta en un sistema. Cuando un cliente desea acceder a un servicio en un servidor, debe conectarse mediante el puerto correcto. Imaginemos que el servicio de comida para llevar de Luigi requiere que los clientes entren por una puerta específica. Todos los que piden comida para llevar usan la misma puerta. De la misma manera, un servicio en un servidor escucha en un puerto específico.

Ahora imagine que Luigi’s ofrece múltiples servicios, como comida para llevar, servicio a domicilio y entrega a domicilio. Cada servicio utiliza una puerta diferente: la puerta A para comida para llevar, la puerta B para el restaurante y la puerta C para entrega a domicilio. De igual forma, un mismo servidor puede ejecutar varios servicios simultáneamente, cada uno identificado por un puerto diferente.
DNS
Cuando Alice envió su solicitud a Bob, solo conocía el nombre de la pizzería. Con solo eso, no era posible llegar a su destino. Así que Bob introdujo Luigi’s Pizza en un dispositivo GPS, y este le devolvió las coordenadas. DNS significa Servicio de Nombres de Dominio y funciona de forma similar al GPS: al introducir el nombre de, por ejemplo, un sitio web, el DNS lo resuelve a la ubicación del servidor. Estas coordenadas de ubicación se denominan dirección de Protocolo de Internet (IP) en informática. Imagine esta IP como la dirección de su domicilio (nombre de la calle, número de casa, código postal, ciudad y país), pero para sistemas informáticos.

Veamos la siguiente tarea para ver cómo se aplica el modelo cliente-servidor al navegar por un sitio web.
Responda las preguntas a continuación
¿Qué utilizamos para identificar un servicio específico en un servidor?
Port
¿Cómo se llama la dirección de un servidor?
Internet protocol address
Web Communication in Practice
El Protocolo de Transferencia de Hipertexto (Seguro), abreviado como HTTP (S), es un protocolo cliente-servidor sin estado utilizado en la World Wide Web. Esto significa que cada solicitud se procesa de forma independiente, sin que el servidor conserve información sobre las solicitudes anteriores.

Aunque el protocolo en sí no tiene estado, los sitios web y las aplicaciones web modernos implementan mecanismos para introducir estado a nivel de aplicación. Por ejemplo, al iniciar sesión en un sitio web con sus credenciales, el servidor crea un identificador de sesión (que suele almacenarse en una cookie o token) que se envía con cada solicitud posterior. Sin estos mecanismos, tendría que autenticarse de nuevo con cada nueva solicitud, ya que el servidor no recordaría su inicio de sesión anterior.
Comandos HTTP
En las especificaciones principales que definen HTTP (también llamadas Solicitudes de Comentarios o documentos RFC ), hay nueve comandos principales. En la jerga HTTP , se utiliza el término «método» en lugar de «comando». A continuación, se presenta un resumen de estos métodos:
- GET
- POST
- PUT
- DELETE
- PATCH
- HEAD
- OPTIONS
- CONNECT
- TRACE

Nos centraremos en analizar uno de los dos métodos más comunes: GET. Lo abordaremos de forma práctica examinando las solicitudes que envía un navegador al acceder a un sitio web. Haga clic en el botón «Iniciar máquina virtual» a continuación. Se abrirá una nueva ventana en pantalla dividida donde podrá abrir un sitio web e inspeccionar una solicitud GET. Si no se muestra la pantalla dividida, haga clic en el botón azul «Iniciar pantalla dividida» en la parte superior de la sala.

GET
El método GET es bastante sencillo. Podemos usarlo para recuperar un recurso del servidor web. Por ejemplo, GET https://tryhackme.com/index.php. Esta solicitud recupera la página de inicio del sitio web TryHackMe. No es necesario que escribas la solicitud. Al abrir un navegador (el cliente) y escribir «https://tryhackme.com«, el navegador construye el mensaje en segundo plano utilizando la información que proporcionas y otros campos definidos en las especificaciones HTTP. Cuando el servidor web recibe la solicitud, envía una respuesta que incluye un código de estado (que indica el tipo de respuesta) y la información solicitada. La imagen a continuación muestra el flujo de esta solicitud.

Veamos una solicitud GET real y su respuesta. Vaya a la máquina virtual que se abrió junto a esta pantalla y haga clic en el icono de Firefox en el escritorio. Una vez abierto el navegador, http://httpdemo.local:8080debería aparecer la página web. Para ello, presione F12 o haga clic derecho en la ventana del navegador y seleccione «Inspeccionar». Esto abrirá las Herramientas para desarrolladores de Firefox, que permiten inspeccionar, depurar y analizar páginas web y tráfico. Haga clic en la pestaña «Red», como se muestra en la imagen a continuación.


Ahora recarga la página haciendo clic en el logotipo circular resaltado en la imagen de arriba (junto a donde escribes la URL) . Deberías ver varias solicitudes GET en la ventana Herramientas para desarrolladores, en la pestaña Red. Haz clic en la primera entrada, como se muestra a continuación, para ver más información.

En el panel derecho, podemos ver más información sobre nuestra solicitud GET. No entraremos en muchos detalles, pero veamos algunos de estos campos.
- Esquema : Nos dice qué protocolo se utilizó: HTTP o HTTPS.
- Host : Nos dice el nombre del host al que solicitamos recursos.
- Nombre de archivo : Indica el archivo que solicitamos al host. En nuestra solicitud, es «/», que en realidad se traduce como «index.html».
- Dirección : Muestra la dirección IP donde está alojado el sitio web. En nuestro ejemplo, el sitio web está alojado en el mismo dispositivo. Por eso se muestra la dirección 127.0.0.1.
- Estado : Este campo indica si la solicitud se realizó correctamente. En nuestro ejemplo, recibimos el estado «200 OK», lo que significa que la solicitud se realizó correctamente.

Al enviar una solicitud, recibimos una respuesta del servidor. Esta se divide en dos partes: el encabezado y el cuerpo. El encabezado contiene metadatos sobre la respuesta, mientras que el cuerpo contiene el contenido solicitado.
Podemos ver el cuerpo de esta respuesta haciendo clic en la pestaña «Respuesta» al mostrar los detalles de una solicitud. En nuestro ejemplo, la respuesta contiene la página de índice del sitio web solicitado. La imagen a continuación muestra el contenido en formato HTML.

Responda las preguntas a continuación
¿Cual sería el host en la siguiente URL? https://www.iamlearning.thm/contact
¿Cual sería el esquema en la siguiente URL?https://www.iamlearning.thm/contact
Https
Conclusión
En esta sala, hemos explorado cómo los dispositivos en internet pueden ofrecerse servicios entre sí. Nos centramos en el modelo cliente-servidor, que es similar a pedir una pizza. El cliente inicia la comunicación y el servidor responde
Luego, continuamos con un ejemplo del protocolo HTTP utilizado en sitios web.

Vimos un ejemplo práctico de cómo se ve realmente una solicitud de un cliente y la respuesta del servidor en segundo plano. Ahora que hemos visto cómo se ofrecen los servicios en internet, veamos la infraestructura que los sustenta. En la siguiente sala, abordaremos los fundamentos de la virtualización.

Sigan entrenando, Hacketones, Nos vemos en el próximo laboratorio!!!