9.3. O cabo e o quadro¶
As duas camadas mais baixas da pilha são as mais fáceis de tomar como certas na câmera, porque tudo o que elas fazem acontece dentro do chip e a câmera as gerencia sem que nenhum código Python esteja envolvido. Ainda assim, vale a pena um breve tour por elas, porque explicam o que significa “rede local” e onde começa a fronteira com o restante da infraestrutura.
9.3.1. A camada física¶
A camada mais baixa é a sinalização propriamente dita – os fios, fibras ópticas ou ondas de rádio que transportam bits entre dois dispositivos. A Ethernet sobre cabos de par trançado codifica cada bit como uma transição de tensão a uma taxa fixa. O Wi-Fi modula esses mesmos bits sobre uma portadora de rádio na banda de 2,4 GHz ou 5 GHz. Ambos produzem um fluxo de dígitos binários entre dois equipamentos de hardware; ambos são o tipo de detalhe que o silício da câmera trata sem que o software precise pensar nisso.
Da perspectiva de um script Python, a camada física é “o link está ativo” ou “o link está inativo”. O módulo network informa esse estado por meio de seu método isconnected() na interface Wi-Fi e por meio do status do link em uma interface Ethernet cabeada. Além disso, tudo o mais que essa camada faz fica oculto.
9.3.2. A camada de enlace¶
Um passo acima fica a camada de enlace – as regras para enviar um bloco de bytes (um quadro) entre dois dispositivos que compartilham o mesmo segmento físico. A camada de enlace adiciona duas coisas por cima da sinalização bruta:
Endereçamento de hardware. Toda interface de rede vem com um identificador único de 48 bits chamado endereço MAC (Media Access Control). Na Ethernet, ele é gravado no chip; no Wi-Fi, é o mesmo tipo de identificador gravado no módulo sem fio. Os endereços MAC são o que um switch – a caixa com múltiplas portas Ethernet na qual os dispositivos próximos se conectam – usa para decidir por qual porta um determinado quadro deve sair. Um ponto de acesso Wi-Fi desempenha o mesmo papel para os dispositivos sem fio em seu canal.
Enquadramento. Os bytes que uma camada superior repassa para baixo são empacotados em um quadro com um pequeno cabeçalho, a carga útil (payload) e um checksum no final. O cabeçalho carrega os endereços MAC de origem e destino; o checksum permite que o receptor detecte um quadro cujos bytes foram corrompidos durante o trânsito. Quadros que falham na verificação são descartados silenciosamente – quem se importa com confiabilidade precisa restabelecê-la em uma camada superior.
Um segmento local é qualquer grupo de dispositivos que conseguem ver diretamente os quadros uns dos outros – as portas cabeadas de um switch, todos os dispositivos associados a um ponto de acesso Wi-Fi ou uma pequena malha de switches interconectados. A camada de enlace não consegue alcançar além desse segmento. Assim que o destino estiver em um segmento diferente, a mensagem precisa ser repassada para a camada acima.
9.3.3. O que a câmera expõe¶
A câmera tem um endereço MAC para cada interface de rede que possui – um de Wi-Fi se a câmera tiver suporte sem fio, e um de Ethernet se a placa tiver a porta correspondente. O módulo network dá acesso a ele por meio de network_interface.config("mac") em qualquer objeto de interface que a aplicação esteja usando, quando ela precisa ler o endereço. Algumas aplicações precisam fazer isso, por exemplo, para registrar o dispositivo em um sistema de gerenciamento de frota. Fora isso, esse é o único controle que a camada de enlace entrega ao Python.
Todo o resto – o enquadramento, o tráfego MAC propriamente dito no fio ou no ar, a negociação entre a câmera e o ponto de acesso sobre qual canal e qual taxa usar – acontece inteiramente dentro do hardware sem fio ou Ethernet. A próxima página aborda o único ponto em que um script Python de fato tem voz na camada de enlace: dizer à câmera a qual rede se conectar.