9.1. Porquê as redes¶
O controlo de hardware deu à câmara formas de comunicar com um dispositivo específico noutro cabo específico. UART entre a câmara e uma única placa companheira. I2C entre a câmara e os sensores ligados ao mesmo barramento curto. CAN entre um pequeno conjunto de módulos a partilhar um barramento robusto. Cada caso segue a mesma forma: duas partes (ou um pequeno grupo conhecido), um meio partilhado, um acordo entre elas sobre o que os bytes nesse meio significam.
9.1.1. Essa forma deixa de escalar¶
O padrão ponto-a-ponto funciona enquanto ambas as extremidades estão próximas, ambas são conhecidas antecipadamente, e o script consegue escolher por qual cabo comunica. Assim que qualquer uma dessas condicionantes se quebra, a cablagem deixa de ser suficiente.
Muitos interlocutores. Uma rede de cinquenta câmaras a reportar a um servidor não pode ser ligada um-a-um; não há UARTs suficientes no servidor e as passagens de cabo seriam impossíveis.
Interlocutores não no mesmo cabo. Uma câmara numa fábrica e um painel de controlo num escritório do outro lado da cidade não podem partilhar um cabo série. Tem de existir algum caminho entre eles através da infraestrutura que já existe entre os dois edifícios.
Interlocutores não conhecidos antecipadamente. Uma câmara que publica os seus resultados na cloud não escolhe com que servidor comunica no diagrama de cablagem; o endereço da cloud é algo que o script descobre em tempo de execução e para onde encaminha os dados.
Vários programas num cabo. Um portátil hoje em dia corre um browser, uma aplicação de chat, uma videochamada e um backup, todos a comunicar através da mesma interface de rede ao mesmo tempo. O cabo não pode ser «propriedade» de uma conversa da forma como o é um UART.
Cada uma dessas falhas é um tipo diferente de problema de endereçamento. Resolvê-las todas em conjunto requer mais do que um cabo e uma taxa de baud.
9.1.2. O que é uma rede¶
Uma rede é a infraestrutura que permite a qualquer número de computadores trocar mensagens com qualquer outro, sem que cada par necessite de uma ligação dedicada própria. Três propriedades fazem de uma rede algo mais do que um grande cabo série:
Meio partilhado. Muitos dispositivos ligam-se ao mesmo cabo, switch ou canal de rádio. Alternam ou multiplexam para que mais de uma conversa caiba na mesma ligação física.
Endereços lógicos. Cada dispositivo tem um número que o identifica independentemente do cabo ao qual está ligado. Enviar uma mensagem significa escrever esse número na mensagem, não ligar um cabo específico.
Encaminhamento. Quando o remetente e o recetor não estão no mesmo segmento local, a infraestrutura entre eles transporta a mensagem salto a salto. Os endpoints não conhecem a rota; conhecem apenas os endereços um do outro.
Um portátil na Wi-Fi do escritório a aceder a um servidor num centro de dados distante utiliza as três. A ligação Wi-Fi é um meio de rádio partilhado; o portátil e o servidor têm cada um o seu próprio endereço lógico; a mensagem percorre a infraestrutura que existe entre os dois, reencaminhada um salto de cada vez. O utilizador clica numa ligação, o portátil envia um pacote, e a rede trata do resto.
9.1.3. E a câmara?¶
A câmara desempenha exatamente o mesmo papel numa rede que o portátil. Obtém um endereço lógico quando se junta à rede, endereça as mensagens de saída para os endereços lógicos de outros dispositivos, e deixa a infraestrutura encaminhá-las.
O que muda em relação aos capítulos de controlo de hardware é a interface. Em vez de abrir uma instância UART e escrever bytes nela, o script abre um socket e escreve bytes nesse. O socket é um ponto de entrada para a rede, da mesma forma que uma instância UART é um ponto de entrada para um cabo. As peças entre o socket e o cabo – frames, pacotes, tabelas de encaminhamento, switches, rádios – ficam por baixo e são na sua maioria invisíveis para o código Python.
As páginas seguintes descrevem essas peças, camada a camada, para que a abstração «abrir um socket e enviar bytes» pareça inevitável em vez de mágica.