9.1. Por que redes¶
O controle de hardware deu à câmera maneiras de conversar com um outro dispositivo específico em um outro fio específico. UART entre a câmera e uma única placa companheira. I2C entre a câmera e os sensores pendurados no mesmo barramento curto. CAN entre um pequeno conjunto de módulos que compartilham um barramento robusto. Cada caso segue a mesma forma: duas partes (ou um pequeno grupo conhecido), um meio compartilhado, 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 pontas estiverem próximas, ambas as pontas forem conhecidas de antemão e o script puder escolher por qual fio ele conversa. Assim que qualquer uma dessas restrições se quebra, a fiação deixa de ser suficiente.
Muitos interlocutores. Uma rede de cinquenta câmeras reportando a um servidor não pode ser ligada um a um; não há UARTs suficientes no servidor, e os comprimentos de cabo seriam impossíveis.
Interlocutores que não estão no mesmo fio. Uma câmera em uma fábrica e um painel em um escritório do outro lado da cidade não podem compartilhar um cabo serial. Algum caminho precisa existir entre eles através de qualquer infraestrutura que já exista entre os dois prédios.
Interlocutores não conhecidos de antemão. Uma câmera que publica seus resultados na nuvem não escolhe com qual servidor ela conversa no diagrama de fiação; o endereço da nuvem é algo que o script consulta em tempo de execução e para o qual roteia os dados.
Muitos programas em um cabo. Um laptop hoje está executando um navegador, um aplicativo de chat, uma chamada de vídeo e um backup, todos conversando através da mesma interface de rede ao mesmo tempo. O fio não pode ser “de propriedade” de uma conversa do jeito que uma UART é.
Cada uma dessas falhas é um tipo diferente de problema de endereçamento. Resolvê-las todas em conjunto requer mais do que um fio e uma taxa de transmissão (baud rate).
9.1.2. O que é uma rede¶
Uma rede é a infraestrutura que permite que qualquer um de um grande número de computadores troque mensagens com qualquer outro, sem que cada par precise de seu próprio enlace dedicado. Três propriedades fazem de uma rede algo mais do que um grande cabo serial:
Meio compartilhado. Muitos dispositivos se conectam ao mesmo cabo, switch ou canal de rádio. Eles se revezam ou multiplexam para que mais de uma conversa caiba no mesmo enlace físico.
Endereços lógicos. Cada dispositivo tem um número que o identifica independentemente de em qual cabo ele está conectado. Enviar uma mensagem significa escrever esse número na mensagem, não conectar um fio específico.
Roteamento. Quando o remetente e o receptor não estão no mesmo segmento local, a infraestrutura entre eles carrega a mensagem salto a salto. As pontas não conhecem a rota; elas apenas conhecem o endereço uma da outra.
Um laptop no Wi-Fi do escritório alcançando um servidor em um data center distante usa as três. O enlace Wi-Fi é um meio de rádio compartilhado; o laptop e o servidor cada um têm seu próprio endereço lógico; a mensagem percorre qualquer infraestrutura que esteja entre os dois, encaminhada um salto de cada vez. O usuário clica em um link, o laptop envia um pacote e a rede cuida do resto.
9.1.3. E a câmera?¶
A câmera desempenha exatamente o mesmo papel em uma rede que o laptop. Ela adquire um endereço lógico ao ingressar na rede, endereça as mensagens de saída aos endereços lógicos de outros dispositivos e deixa a infraestrutura roteá-las.
O que muda em relação aos capítulos de controle de hardware é a interface. Em vez de abrir uma instância de UART e escrever bytes nela, o script abre um socket e escreve bytes nele. O socket é uma ponta de acesso à rede, da mesma forma que uma instância de UART é uma ponta de acesso a um fio. As peças entre o socket e o fio – quadros, pacotes, tabelas de roteamento, switches, rádios – ficam todas por baixo e são em sua maior parte invisíveis ao código Python.
As páginas adiante detalham essas peças, camada por camada, para que a abstração “abra um socket e envie bytes” pareça inevitável em vez de mágica.