9.2. Protocolos por capas

Enviar un fotograma desde la cámara a un servidor en otra ciudad significa resolver varios problemas a la vez. La señal eléctrica tiene que recorrer el primer cable. Los bytes de ese cable tienen que abrirse camino a través de un conmutador local. La red local tiene que entregar el mensaje a lo que se sitúe entre ella y el resto de internet. Los paquetes que sobreviven al trayecto tienen que reensamblarse en orden. El receptor tiene que saber a cuál de sus programas entregarlos. Y los bytes en sí mismos tienen que significar algo en lo que ambos extremos estén de acuerdo.

Intentar resolver todo eso en un único bloque de código sería inmanejable. La respuesta estándar es dividir el trabajo en capas. Cada capa resuelve un problema bien definido y expone un servicio sencillo a la capa que tiene encima. Un programa solo habla con la capa que tiene justo debajo; las capas por debajo de esa son invisibles.

Una pila vertical de cinco cajas etiquetadas de abajo hacia arriba: física, enlace, red, transporte, aplicación. Una flecha a la derecha apunta hacia arriba en la pila con la etiqueta "lo que construimos". Una flecha a la izquierda apunta hacia abajo en la pila con la etiqueta "lo que se proporciona".

Cada capa de una pila de red resuelve un problema y entrega una abstracción limpia a la siguiente.

9.2.1. Las cinco capas

Los nombres de abajo son los que usa el resto de esta sección. Provienen del modelo estándar en torno al cual se diseñaron las redes. Las fronteras exactas entre capas a veces son difusas, pero el papel que desempeña cada una es estable.

Capa física. Mueve bits entre dos dispositivos en el mismo cable o radio. Niveles de voltaje, pulsos de luz, modulación de RF. Aquí el trabajo de la cámara consiste en su mayor parte en enchufar el cable correcto o unirse a la red inalámbrica correcta; el silicio hace el resto.

Capa de enlace. Mueve fotogramas (pequeños bloques de bytes) entre dos dispositivos que comparten un segmento local. Añade direcciones de hardware para que cada fotograma pueda dirigirse a un vecino específico. Ethernet y Wi-Fi son las dos tecnologías de enlace con las que se encuentra la cámara en la práctica.

Capa de red. Mueve paquetes entre dos dispositivos cualesquiera de internet, no solo en el mismo segmento local. Añade una dirección a nivel de software que identifica a un host independientemente del cable en el que esté, y un mecanismo de enrutamiento que salta un paquete de un segmento local al siguiente hasta que llega. Esta es la primera capa en la que el código Python de la cámara empieza a tener algo que decir.

Capa de transporte. Se asienta sobre los paquetes y ofrece la entrega entre programas de dos hosts, no solo entre los hosts en sí. Hay dos variantes comunes: una entrega un flujo de bytes conectado y ordenado (el caballo de batalla de la mayor parte del tráfico), la otra entrega mensajes autocontenidos que viajan de forma independiente entre sí (se usa cuando una baja sobrecarga importa más que las garantías). Añade números de puerto para que varios programas en el mismo host puedan mantener conversaciones en paralelo.

Capa de aplicación. Todo lo que está por encima del transporte: los protocolos que dan significado a los bytes. Aquí viven los que habla un navegador web para cargar páginas – y los que hay detrás de casi cualquier otro servicio de internet que el lector ya usa a diario –. El tutorial cubre el transporte en profundidad; esta capa tiene su propia sección de continuación.

9.2.2. Cómo se apilan las capas en tiempo de ejecución

Cuando la cámara envía bytes por la red, cada capa añade su propia cabecera delante de los datos, como anidar un sobre dentro de otro sobre:

  • Los bytes de la aplicación entran primero.

  • La capa de transporte los envuelve con una pequeña cabecera que indica a qué programa pertenecen (el número de puerto).

  • La capa de red envuelve eso con una cabecera que indica a qué host están destinados (la dirección a nivel de software).

  • La capa de enlace envuelve eso con una cabecera que indica a qué dispositivo del segmento local entregarlos a continuación (la dirección de hardware).

  • La capa física convierte todo el conjunto en bits sobre un cable.

En el otro extremo, cada capa retira su propia cabecera y entrega el resto hacia arriba. La aplicación receptora recupera sus bytes sin ser consciente de que las capas de red, enlace y física llegaran a existir.

Este anidamiento es la razón por la que el tutorial avanza de abajo hacia arriba. Entender qué hace la capa de debajo hace que la capa de arriba parezca inevitable. Las dos capas inferiores se cubren en una sola página cada una porque casi no hay nada que configurar desde Python. A partir de la capa de red hacia arriba, el ritmo se ralentiza a medida que el papel de Python se hace mayor.