Regístrate para acceder a más de 15 cursos gratuitos de programación con un simulador

TCP/IP Administración de Linux

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?

La red, en este contexto, es simplemente una forma de que dos o más computadoras puedan comunicarse entre sí.

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?

TCP/IP es una familia de protocolos que hacen posible la comunicación en internet. De hecho, TCP (Transmission Control Protocol) es la base de muchas tecnologías, incluyendo el mismo HTTP.

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');
Cuando se inicia el servidor, este entra en un modo de espera, lo que puede parecer que "nada pasa". El programa está esperando conexiones.

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

  1. TCP 📚 Wikipedia

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.

Obtener acceso
130
cursos
1000
ejercicios
2000+
horas de teoría
3200
test

Obtén acceso

Cursos de programación para principiantes y desarrolladores experimentados. Comienza tu aprendizaje de forma gratuita

  • 130 cursos, 2000+ horas de teoría
  • 1000 ejercicios prácticos en el navegador
  • 360 000 estudiantes
Al enviar el formulario, aceptas el «Política de privacidad» y los términos de la «Oferta», y también aceptas los «Términos y condiciones de uso»

Nuestros graduados trabajan en empresas como:

Bookmate
Health Samurai
Dualboot
ABBYY