9.3. El cable y la trama¶
Las dos capas más bajas de la pila son las más fáciles de dar por sentadas en la cámara, porque todo lo que hacen ocurre dentro del chip y la cámara las gestiona sin que intervenga ningún código Python. Aun así, merece la pena hacer un breve recorrido por ellas, porque explican qué significa «red local» y dónde empieza el límite con el resto de la infraestructura.
9.3.1. La capa física¶
La capa inferior es la señalización propiamente dicha: los cables, las fibras ópticas o las ondas de radio que transportan los bits entre dos dispositivos. Ethernet sobre cables de par trenzado codifica cada bit como una transición de voltaje a una tasa fija. El Wi-Fi modula esos mismos bits sobre una portadora de radio en la banda de 2,4 GHz o 5 GHz. Ambos producen un flujo de dígitos binarios entre dos piezas de hardware; ambos son la clase de detalle que el silicio de la cámara gestiona sin que el software tenga que pensar en ello.
Desde la perspectiva de un script de Python, la capa física es «el enlace está activo» o «el enlace está caído». El módulo network informa de ese estado a través de su método isconnected() en la interfaz Wi-Fi y a través del estado del enlace en una interfaz Ethernet cableada. Más allá de eso, todo lo demás que hace esta capa permanece oculto.
9.3.2. La capa de enlace¶
Un paso por encima se encuentra la capa de enlace: las reglas para enviar un bloque de bytes (una trama) entre dos dispositivos que comparten el mismo segmento físico. La capa de enlace añade dos cosas sobre la señalización pura:
Direccionamiento de hardware. Cada interfaz de red incluye un identificador único de 48 bits llamado dirección MAC (Media Access Control). En Ethernet está grabada en el chip; en Wi-Fi es el mismo tipo de identificador grabado en el módulo inalámbrico. Las direcciones MAC son lo que utiliza un conmutador (switch) – la caja con varios puertos Ethernet en la que se conectan los dispositivos cercanos – para decidir por qué puerto debe salir una trama determinada. Un punto de acceso Wi-Fi desempeña el mismo papel para los dispositivos inalámbricos de su canal.
Encapsulado en tramas. Los bytes que entrega una capa superior se empaquetan en una trama con una pequeña cabecera, la carga útil y una suma de comprobación al final. La cabecera lleva las direcciones MAC de origen y destino; la suma de comprobación permite al receptor detectar una trama cuyos bytes se corrompieron durante el tránsito. Las tramas que no superan la comprobación se descartan en silencio: quien necesite fiabilidad tiene que restituirla en una capa superior.
Un segmento local es cualquier grupo de dispositivos que pueden ver directamente las tramas de los demás: los puertos cableados de un conmutador, todos los dispositivos asociados a un punto de acceso Wi-Fi, o una pequeña malla de conmutadores interconectados. La capa de enlace no puede llegar más allá de ese segmento. En cuanto el destino se encuentra en un segmento distinto, el mensaje tiene que entregarse a la capa superior.
9.3.3. Lo que expone la cámara¶
La cámara tiene una dirección MAC por cada interfaz de red que posee: una Wi-Fi si la cámara cuenta con soporte inalámbrico, y una Ethernet si la placa dispone del puerto correspondiente. El módulo network da acceso a ella mediante network_interface.config("mac") sobre el objeto de interfaz que esté usando la aplicación, cuando necesita leer la dirección. Algunas aplicaciones lo necesitan, por ejemplo para registrar el dispositivo en un sistema de gestión de flota. Por lo demás, este es el único control que la capa de enlace cede a Python.
Todo lo demás – el encapsulado en tramas, el tráfico MAC real en el cable o en el aire, la negociación entre la cámara y el punto de acceso sobre qué canal y velocidad usar – ocurre por completo dentro del hardware inalámbrico o Ethernet. La siguiente página cubre el único lugar donde un script de Python sí tiene voz en la capa de enlace: indicarle a la cámara a qué red unirse.