- ¿Qué es una red?
- Comunicación entre computadoras
- ¿Qué es TCP/IP?
- Arquitectura Cliente-Servidor en TCP
- ¿Qué aprendimos con este ejemplo?
- ¿Y dónde queda HTTP?
Cada acción en una aplicación web —desde cargar una página hasta conectarse con una base de datos o una API— ocurre a través de una red. En esta lección vamos a ver cómo funciona ese proceso y por qué el protocolo TCP/IP es clave para que todo esto sea posible.
¿Qué es una red?
Esta comunicación puede suceder:
- Entre nuestro navegador y un sitio web
- Entre servicios que corren en distintos servidores
- Entre contenedores Docker
- Con bases de datos o servicios externos por medio de APIs
Dos niveles de conocimiento en redes
Cuando hablamos de redes, podemos dividir el conocimiento en dos niveles:
| Nivel | Descripción | Ejemplos |
|---|---|---|
| Infraestructura | Se refiere al hardware y la tecnología que hace posible la red física | Wi-Fi, routers, cables, redes celulares |
| Aplicación | Trata del uso de las redes en la programación, sin preocuparnos por el "cómo" funcionan físicamente | APIs, sockets, HTTP, conexiones entre servicios |
En programación, normalmente trabajamos en el nivel de aplicación. Es decir, no nos interesa tanto cómo se conecta el cable, sino cómo hacemos para que dos programas que corren en distintos lugares puedan enviarse mensajes.
Comunicación entre computadoras
Cuando abrimos una página web, lo que ocurre es que nuestro computador (cliente) le envía una solicitud al computador que aloja el sitio (servidor). Ese servidor responde con una página, y esa respuesta la muestra el navegador.
Aunque en la barra del navegador solo vemos algo como http://midominio.com, lo que realmente está ocurriendo es un poco más complejo. En el fondo, el protocolo HTTP se está ejecutando por encima de una conexión más básica: una conexión TCP.
¿Qué es TCP/IP?
Lo primero que debemos tener claro:
- TCP permite que
dos procesos(dos programas en ejecución) se comuniquen. - No son los computadores los que se conectan, sino los procesos que corren en ellos.
- Para que un proceso se conecte con otro, se necesitan dos datos importantes:
Dirección IP: identifica el computador en la red.Puerto: identifica el proceso que está escuchando dentro de ese computador.
🏢 Podemos pensar en la IP como la dirección de una casa, y el puerto como el número de apartamento. La combinación IP:puerto nos dice exactamente a cuál proceso enviar los datos.
Arquitectura Cliente-Servidor en TCP
TCP funciona bajo un modelo cliente-servidor. Esto significa que:
- Un proceso (el servidor) espera conexiones en una dirección IP y un puerto.
- Los clientes se conectan a este servidor para enviarle mensajes y recibir respuestas.
Vamos a crear un servidor y un cliente TCP simples que se comunican entre sí.
1. Servidor TCP (Echo Server)
// servidor.js
import net from 'net';
// Creamos un servidor TCP
const server = net.createServer((socket) => {
// Cuando se recibe una conexión, se envía un mensaje
socket.write('Echo server\r\n');
// Los datos recibidos del cliente se reenvían (echo)
socket.pipe(socket);
});
// El servidor "escucha" en el puerto 3000 y una IP específica
server.listen(3000, '168.123.44.33');
2. Cliente TCP
// cliente.js
import net from 'net';
// Creamos un nuevo socket para conectarnos al servidor
const client = new net.Socket();
// Establecemos conexión con la IP y puerto del servidor
client.connect(3000, '168.123.44.33', () => {
client.write('Hola, servidor. Te saluda el cliente.');
});
// Escuchamos los datos que vienen del servidor
client.on('data', (data) => {
console.log(`Recibido del servidor: ${data}`);
client.destroy(); // Cerramos la conexión
});
Podemos crear y correr varios clientes al mismo tiempo. Todos podrán conectarse al mismo servidor TCP si está activo.
¿Qué aprendimos con este ejemplo?
- El servidor se queda "esperando" conexiones (escucha en un puerto).
- El cliente se conecta a esa IP y puerto específicos.
- Ambos usan
sockets(conexiones de red) para enviarse datos. - La conexión es bidireccional: ambos pueden enviar y recibir mensajes.
¿Y dónde queda HTTP?
HTTP también funciona sobre TCP. De hecho, cuando usamos fetch en JavaScript o abrimos una página web, primero se crea una conexión TCP con el servidor, y luego allí se envían y reciben los mensajes HTTP.
TCP es la base; HTTP es el "idioma" que usamos sobre esa base.
Resumen
- Casi todo en aplicaciones web es comunicación de red.
- Existen dos niveles de redes: infraestructura y aplicación.
- TCP es el protocolo que permite la comunicación entre procesos en computadoras diferentes.
- Para conectarse por TCP se necesita una dirección IP y un puerto.
- TCP sigue el modelo cliente-servidor.
- Los procesos se comunican mediante
sockets. - HTTP funciona sobre TCP; no lo reemplaza, sino que lo utiliza como base.
Trabajo independiente
En la mayoría de los casos, se utiliza un proxy especial antes de la aplicación en el servidor. En este trabajo independiente vamos a levantar un servidor proxy localmente para varios sitios y estos se abrirán con sus propios nombres de dominio. Vamos a utilizar Caddy como servidor proxy.
1️⃣ Instala Caddy en tu computador.
2️⃣ Crea la siguiente estructura de archivos:
.
├── Caddyfile
├── localhost
│ └── index.html
├── site1
│ └── index.html
└── site2
└── index.html
Contenido del archivo Caddyfile:
{
auto_https off
}
http://localhost {
file_server
root * localhost/
}
http://ru.site1.test {
file_server
root * site1/
}
http://ru.site2.test {
file_server
root * site2/
}
Agrega en los archivos index.html los textos: localhost, site1 y site2, respectivamente.
3️⃣ Inicia Caddy y verifica que al abrir cada URL definida en el Caddyfile veas el texto que corresponde.
Materiales adicionales
Para acceder completo a curso necesitas un plan básico
El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.