Comunicación Cliente-Servidor
Comunicación Cliente-Servidor
Concepto Básico
La comunicación cliente-servidor es un modelo de arquitectura donde:
Cliente: Dispositivo o aplicación que solicita servicios o recursos
Servidor: Sistema que provee los servicios o recursos solicitados
La comunicación sigue el principio petición-respuesta
Analogía Simple
Imagina un restaurante:
Cliente = Comensal (hace el pedido)
Servidor = Mesero/Chef (recibe el pedido, lo prepara y lo entrega)
Proceso Paso a Paso
1. El cliente inicia la conexión
Abre un canal de comunicación (normalmente mediante sockets)
Se conecta a la dirección IP y puerto del servidor
Cliente: "Hola servidor, quiero conectarme"2. El cliente envía una petición (request)
Especifica qué recurso o servicio necesita
Usa protocolos como HTTP, FTP, SMTP, etc.
Cliente: "GET /index.html HTTP/1.1"3. El servidor procesa la petición
Interpreta la solicitud
Busca o genera el recurso solicitado
Prepara la respuesta adecuada
4. El servidor envía la respuesta (response)
Devuelve el recurso solicitado o un mensaje de error
Servidor: "HTTP/1.1 200 OK
Contenido: <html>...</html>"5. Se cierra la conexión (en modelos sin estado)
Protocolos Comunes
| Protocolo | Uso Principal | Puerto |
|---|---|---|
| HTTP/HTTPS | Páginas web | 80/443 |
| FTP | Transferencia de archivos | 21 |
| SMTP | Correo electrónico (envío) | 25 |
| POP3/IMAP | Correo electrónico (recepcion) | 110/143 |
| DNS | Resolución de nombres | 53 |
| SSH | Conexión segura remota | 22 |
Ejemplo Práctico - Navegación Web
Usuario escribe "www.google.com" en el navegador
Cliente (navegador) consulta al DNS para obtener la IP
Cliente establece conexión TCP con el servidor en puerto 443 (HTTPS)
Cliente envía:
GET / HTTP/2Servidor de Google procesa la petición
Servidor responde con código HTML, CSS, JavaScript
Navegador renderiza la página
Características Clave
Arquitecturas comunes:
Monolítica: Un solo servidor maneja todo
Multi-capas: Presentación, lógica y datos separados
Microservicios: Servicios independientes y especializados
Ventajas:
Centralización: Fácil administración y backup
Seguridad: Control centralizado de accesos
Escalabilidad: Se pueden añadir más servidores
Desventajas:
Punto único de fallo: Si el servidor cae, todos los clientes se afectan
Cuellos de botella: Muchas peticiones simultáneas pueden saturar el servidor
Ejemplo de Código Simple
Cliente (Python):
import socket
cliente = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
cliente.connect(("localhost", 8080))
cliente.send(b"Hola servidor")
respuesta = cliente.recv(1024)
print("Respuesta:", respuesta.decode())
cliente.close()Servidor (Python):
import socket
servidor = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
servidor.bind(("localhost", 8080))
servidor.listen(1)
print("Esperando conexiones...")
cliente, direccion = servidor.accept()
print(f"Conexión desde: {direccion}")
mensaje = cliente.recv(1024)
print("Mensaje recibido:", mensaje.decode())
cliente.send(b"Hola cliente")
cliente.close()Esta arquitectura es fundamental en prácticamente todos los sistemas informáticos modernos, desde navegación web hasta aplicaciones móviles y servicios en la nube.
Comentarios
Publicar un comentario