9.1. Por qué redes¶
El control de hardware le dio a la cámara formas de hablar con otro dispositivo específico en otro cable específico. UART entre la cámara y una única placa acompañante. I2C entre la cámara y los sensores conectados al mismo bus corto. CAN entre un pequeño conjunto de módulos que comparten un bus robusto. Cada caso sigue la misma forma: dos partes (o un pequeño grupo conocido), un medio compartido, un acuerdo entre ellas sobre lo que significan los bytes en ese medio.
9.1.1. Esa forma deja de escalar¶
El patrón punto a punto funciona mientras ambos extremos estén cerca, ambos extremos se conozcan de antemano y el script pueda elegir por qué cable habla. En cuanto cualquiera de esas restricciones se rompe, el cableado deja de ser suficiente.
Muchas contrapartes. Una red de cincuenta cámaras que reportan a un servidor no puede cablearse una a una; no hay suficientes UART en el servidor y los tendidos de cable serían imposibles.
Contrapartes que no están en el mismo cable. Una cámara en una fábrica y un panel de control en una oficina al otro lado de la ciudad no pueden compartir un cable serie. Tiene que existir alguna ruta entre ellos a través de la infraestructura que ya conecta los dos edificios.
Contrapartes no conocidas de antemano. Una cámara que publica sus resultados en la nube no elige con qué servidor habla en el diagrama de cableado; la dirección de la nube es algo que el script consulta en tiempo de ejecución y hacia donde enruta los datos.
Muchos programas en un cable. Un portátil hoy en día está ejecutando un navegador, una aplicación de chat, una videollamada y una copia de seguridad, todos comunicándose a través de la misma interfaz de red al mismo tiempo. El cable no puede ser «propiedad» de una sola conversación como lo es un UART.
Cada uno de esos fallos es un tipo distinto de problema de direccionamiento. Resolverlos todos juntos requiere más que un cable y una velocidad en baudios.
9.1.2. Qué es una red¶
Una red es la infraestructura que permite que cualquiera de un gran número de ordenadores intercambie mensajes con cualquier otro, sin que cada par necesite su propio enlace dedicado. Tres propiedades hacen que una red sea algo más que un gran cable serie:
Medio compartido. Muchos dispositivos se conectan al mismo cable, conmutador o canal de radio. Se turnan o multiplexan para que más de una conversación quepa en el mismo enlace físico.
Direcciones lógicas. Cada dispositivo tiene un número que lo identifica independientemente del cable al que esté enchufado. Enviar un mensaje significa escribir ese número en el mensaje, no conectar un cable específico.
Enrutamiento. Cuando el emisor y el receptor no están en el mismo segmento local, la infraestructura entre ellos transporta el mensaje salto a salto. Los extremos no conocen la ruta; solo conocen la dirección del otro.
Un portátil en el Wi-Fi de la oficina que alcanza un servidor en un centro de datos lejano usa las tres. El enlace Wi-Fi es un medio de radio compartido; el portátil y el servidor tienen cada uno su propia dirección lógica; el mensaje se abre paso a través de la infraestructura que se sitúa entre ambos, reenviado salto a salto. El usuario hace clic en un enlace, el portátil envía un paquete y la red se encarga del resto.
9.1.3. ¿Y la cámara?¶
La cámara desempeña exactamente el mismo papel en una red que el portátil. Adquiere una dirección lógica cuando se une a la red, dirige los mensajes salientes a las direcciones lógicas de otros dispositivos y deja que la infraestructura los enrute.
Lo que cambia respecto a los capítulos de control de hardware es la interfaz. En lugar de abrir una instancia de UART y escribirle bytes, el script abre un socket y escribe bytes en él. El socket es un punto de acceso a la red, igual que una instancia de UART es un punto de acceso a un cable. Las piezas entre el socket y el cable – fotogramas, paquetes, tablas de enrutamiento, conmutadores, radios – se sitúan todas por debajo y son en su mayor parte invisibles para el código Python.
Las páginas que vienen a continuación detallan esas piezas, capa por capa, para que la abstracción «abrir un socket y enviar bytes» parezca inevitable en lugar de magia.