⟵ Back to Blog

Francisco Veiras

Programmer

Web

Wednesday, January 18th 2023

Cómo funciona la web

El último tiempo me estuve interesando en aprender más a profundidad sobre este tema, normalmente hablamos de librerías, lenguajes, testing, documentación etc. pero no hablamos de cómo llega un html a nuestras pantallas, vemos un dominio formado por un Transfer Protocol, un conjunto de caracteres y un top-level domain, ¿pero qué es eso? ¿Cómo se vincula de alguna manera a un sitio web? En este posteo voy a tratar de responder esta y otras dudas.

Es necesario para esta comunicación de red tanto web browser como web servers, los dos juegan un papel tremendamente importante en el establecimiento de la conexión. El web browser (ej. firefox o google) envía un mensaje a el web server se lo conoce como HTTP (Hypertext Transfer Protocol) request, cuando el web server recibe la request, este hace una búsqueda para mostrar la página adecuada, si este encuentra la página mostrará un html con la información de dicha página, estos documentos son dirigidos al browser utilizando http y lo trasmite a través de la red, si el servidor web no puede encontrar la página solicitada, envía una página que contiene un mensaje de error, el famoso error 404 page not found.

Nuestro navegador o web browser es una aplicación que usualmente se conecta a internet para acceder a documentos que se encuentran alojados en servidores, el servidor web es la computadora que se encarga de proveer servicios a otros programas llamados clientes o clients, la idea es que el usuario desde el navegador interactúe con esos servidores, si estos tienen los permisos y pueden establecer la conexión, mantiene datos y genera respuestas.

Concepto World Wide Web

Ok, ya entendemos como aparece un sitio web frente a nuestras caras, ahora tratemos de entender un poco más que pasa en las request al web server.

En cuanto a el web server hardware, es importante saber que siempre que hablemos de hardware nos referimos a la parte física de una computadora, se encuentra conectado a internet y permite el intercambio de datos con otros dispositivos conectados, mientras que el software controla como el usuario accede a los archivos alojados, es decir todas las computadoras que hostean sitios web deben tener un web server software.

Este intercambio de datos funciona gracias al protocolo de transferencia http, que es un protocolo cliente-servidor. Se reconstruye un documento completo a partir de los diferentes subdocumentos obtenidos, por ejemplo, texto, descripción del diseño, imágenes, videos, guiones y más.

Es un protocolo de capa de aplicación que se envía a través de TCP o a través de una conexión TCP cifrada con TLS, se utiliza no solo para obtener documentos de hipertexto, sino también imágenes y videos o para publicar contenido en servidores.

¿Qué es una IP?

Para entender el siguiente modelo de comunicación en redes es necesario saber qué es una IP y cuál es su rol. Una Internet Protocol es un protocolo para enrutar y direccionar paquetes de datos. Una dirección IP identifica una red o dispositivo en internet, la información de IP se adjunta a cada paquete, y esta información ayuda a los enrutadores a enviar paquetes al lugar correcto. Sin un identificador, un dispositivo no puede enviar ni recibir mensajes y su ubicación es imposible de rastrear.

Normalmente las personas interactuamos con nombres de dominio como youtube.com que el DNS traduce a direcciones IP, cada dispositivo conectado a Internet tiene una dirección IP única que otros equipos pueden usar para encontrarlo, el DNS se encarga de que los humanos no tengamos que memorizar direcciones IP complejas. Por ahora con esta información es suficiente, para saber más sobre DNS (https://www.cloudflare.com/en-gb/learning/dns/what-is-dns/)

¿Qué es TCP?

TCP es el protocolo de control de transmisión, es un estándar que define cómo establecer y mantener una conversación de red mediante la cual las aplicaciones pueden intercambiar datos. TCP funciona con el protocolo de internet o internet protocol (IP), que define cómo las computadoras envían paquetes de datos entre sí.

Se establece una conexión hasta que las aplicaciones en cada extremo hayan terminado de intercambiar mensajes. Además, se encarga de determinar como se van a dividir los datos de la aplicación en paquetes que las redes pueden entregar, envía y recibe paquetes desde la network layer y más.

Cuando un servidor web envía un archivo HTML a un cliente, utiliza el protocolo de transferencia de hipertexto (HTTP) como vimos anteriormente. La capa de programa HTTP le pide a la capa TCP que configure la conexión y envíe el archivo.

Modelo TCP/IP

Este modelo cuenta con cuatro capas, la application layer primero envía mensajes o datos a uno de los protocolos de la capa de transporte de internet en este caso vemos al Transmission Control Protocol (TCP). Como comprendimos anteriormente, recibe la información y la divide en partes más pequeñas llamadas paquetes, agregan una dirección de destino y luego pasan los paquetes a la siguiente capa de protocolo, la Network layer. Ésta encierra el paquete en un datagrama de Protocolo de Internet (IP), coloca un encabezado y es responsable de entregar esos paquetes mirando las direcciones IP en los encabezados de los paquetes. Finalmente llegamos a la capa más baja del modelo, la Physical Layer, que define el medio de transmisión y el modo de comunicación entre dos dispositivos.

Proxies

También es necesario saber que entre cliente y servidor existen numerosas entidades denominadas proxies, que realizan diferentes operaciones y actúan como pasarelas o cachés. Un servidor proxy actúa como intermediario entre un cliente y un “sitio web de destino”. Básicamente, esto significa que el tráfico se enruta a través de servidores en su camino hacia/desde los sitios de destino.

Recordemos que un sitio web puede ser un json con el cual hacemos consultas, por ejemplo una api. Esta arquitectura puede implementarse por una variedad de razones, mayor rendimiento de la red, lograr una mejor seguridad de datos/información, servir como un cortafuegos o una especie de filtro, almacenar datos en caché de una manera que ayude a agilizar las solicitudes que a menudo se repiten, mejorar las tasas de éxito de la recopilación de datos mediante el enrutamiento de solicitudes de información a través de direcciones IP locales y más.

Cada computadora tiene una Internet Protocol (IP). Esto significa que otras computadoras/dispositivos pueden comunicarse con usted ya que saben quién está solicitando/recibiendo información. De alguna manera es una especie de carnet de identidad de la network.

Quienes están interesados en usar proxies lo hacen porque no les interesa mantener una comunicación directa, aquí es donde aparece esta tercera entidad, el proxy. Los proxies también tienen su propia dirección IP, estos pueden asegurarse de que otros dispositivos no vean su dirección IP de origen real, además pueden cifrar información que se va a transmitir para que no sea interceptada por un tercero no deseado. Otra gran funcionalidad que tienen, es que puede recopilar datos específicos de IP, así como brindar a los usuarios acceso a contenido específico en base a la ubicación. Resumidamente proveen mayor seguridad, mediante el uso de direcciones IP se pueden evitar Denial-of-service attacks (DDoS), mejora la performance mediante el cacheo de web pages y archivos y pueden filtrar tráfico.

HTTPS

No me gustaría cerrar este posteo sin hablar del protocolo HTTPS, básicamente es el protocolo de transferencia de hipertexto sobre la capa de sockets de seguridad, es decir es HTTP sobre SSL, es un protocolo más seguro que el HTTP.

Básicamente, cuando realizan conexiones SSL con un proxy, se conecta al proxy y usa CONNECT para abrir una conexión TCP a través del proxy, una vez establecida la conexión de socket, el proxy HTTPS envía una respuesta 200 OK al cliente y comienza a reenviar datos del cliente al servidor y viceversa.

El cliente inicia una sesión cifrada con el host remoto, el host remoto utiliza su clave privada que puede comparar con su clave pública sin necesidad de confiar en el proxy. El algoritmo de protocolo de enlace es tal que el proxy no puede ver lo que hay dentro del canal encriptado (no conocen las claves de sesión que cada lado eligió como parte del protocolo SSL). Todo lo que el proxy puede hacer es inyectar ruido detectable aleatorio o hacer que se corte la conexión; pueden realizar ataques de denegación de servicio, pero no pueden afectar la integridad o el secreto de la información realmente transferida.

Public-key cryptography

Para entender realmente como funciona este sistema de claves, necesitamos entender Public-key cryptography, este es un sistema criptográfico que se caracteriza por utilizar dos claves, una clave pública y otra privada, para el envío de mensajes o datos. cualquier mensaje encriptado por la public key de fran, puede ser solo desencriptado por la clave privada de fran.

Yo como cliente solicito youtube.com, el servidor me retorna un certificado firmado por Google CA que contiene una public key, el navegador verifica que la firma sea valida (con esa misma public key) y crea una nueva clave secreta y cifra esta clave secreta con la publica enviada por google.

Aparecen dos computadoras, pero las solicitudes se enrutan a través de muchas otras computadoras, como vimos anteriormente. Ahora tenemos un canal seguro de comunicación entre la computadora y el server, ya que solo el server con su private key puede desencriptar el mensaje. Solo tenemos dos computadoras en internet que saben la nueva clave secreta, entonces ahora toda comunicación va a ser encriptada.

Por último, comentar que cada uno de los puntos abarcados en este posteo presentan una síntesis, siempre hay más para profundizar cuando queremos entender como funcionan las cosas a más bajo nivel, pero la idea es simplemente dar un paneo general de como funciona este sistema hermoso denominado web. Gracias por leer, abajo voy a dejar todas las fuentes que use para este posteo.

Fuentes del posteo: https://berry-rifle-c8e.notion.site/Links-C-mo-funciona-la-web-418b89741df84f3cb80e894da4851caa