9.3. O cabo e o fotograma¶
As duas camadas mais baixas da pilha são as mais fáceis de ignorar na câmara, porque tudo o que fazem acontece dentro do chip e a câmara trata delas sem que qualquer código Python esteja envolvido. Ainda assim, merecem uma breve visita, pois explicam o que significa «rede local» e onde começa a fronteira para o resto da infraestrutura.
9.3.1. A camada física¶
A camada inferior é a sinalização em si — os fios, fibras óticas ou ondas de rádio que transportam bits entre dois dispositivos. O Ethernet sobre cabos de par entrançado codifica cada bit como uma transição de tensão a uma taxa fixa. O Wi-Fi modula os mesmos bits numa portadora de rádio na banda dos 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âmara gere sem que o software precise de se preocupar.
Da perspetiva de um script Python, a camada física é «a ligação está ativa» ou «a ligação está inativa». O módulo network reporta esse estado através do método isconnected() na interface Wi-Fi e através do estado da ligação numa interface Ethernet com fios. Para além disso, tudo o que esta camada faz está oculto.
9.3.2. A camada de ligação¶
Um nível acima encontra-se a camada de ligação — as regras para enviar um bloco de bytes (um fotograma) entre dois dispositivos que partilham o mesmo segmento físico. A camada de ligação acrescenta duas coisas por cima da sinalização bruta:
Endereçamento de hardware. Cada interface de rede possui um identificador único de 48 bits chamado endereço MAC (Media Access Control). No Ethernet, está gravado no chip; no Wi-Fi, é o mesmo tipo de identificador gravado no módulo sem fios. Os endereços MAC são o que um switch — a caixa com várias portas Ethernet à qual os dispositivos próximos se ligam — utiliza para decidir por qual porta um determinado fotograma deve sair. Um ponto de acesso Wi-Fi desempenha o mesmo papel para os dispositivos sem fios no seu canal.
Enquadramento. Os bytes entregues por uma camada superior são empacotados num fotograma com um pequeno cabeçalho, a carga útil e uma soma de verificação no final. O cabeçalho transporta os endereços MAC de origem e destino; a soma de verificação permite ao recetor detetar um fotograma cujos bytes foram corrompidos durante a transmissão. Os fotogramas que não passam na verificação são descartados silenciosamente — quem se preocupa com a fiabilidade tem de a garantir numa camada superior.
Um segmento local é qualquer grupo de dispositivos que consegue ver os fotogramas uns dos outros diretamente — as portas com fio de um switch, todos os dispositivos associados a um ponto de acesso Wi-Fi, ou uma pequena malha de switches interligados. A camada de ligação não consegue alcançar para além desse segmento. Assim que o destino se encontra num segmento diferente, a mensagem tem de ser entregue à camada acima.
9.3.3. O que a câmara expõe¶
A câmara possui um endereço MAC para cada interface de rede que tem — um Wi-Fi se a câmara tem suporte sem fios, um Ethernet se a placa tem a porta correspondente. O módulo network dá acesso a ele através de network_interface.config("mac") no objeto de interface que a aplicação está a usar, quando necessita de ler o endereço. Algumas aplicações precisam disso, por exemplo para registar o dispositivo num sistema de gestão de frota. Caso contrário, este é o único controlo que a camada de ligação cede ao Python.
Tudo o resto — o enquadramento, o tráfego MAC efetivo no fio ou no ar, a negociação entre a câmara e o ponto de acesso sobre qual canal e taxa usar — acontece inteiramente dentro do hardware sem fios ou Ethernet. A página seguinte aborda o único ponto onde um script Python tem influência na camada de ligação: indicar à câmara a que rede se deve juntar.