9.6. Pacotes e roteamento¶
Um endereço IP diz para quem uma mensagem se destina. O mecanismo que de fato a entrega é chamado roteamento, e é o processo salto a salto pelo qual um pacote viaja da rede local de um remetente até a rede local de um destinatário, possivelmente muito distante.
9.6.1. Um pacote, em poucas palavras¶
Um pacote é a unidade de trabalho da camada IP – um bloco de bytes com um pequeno cabeçalho e uma carga útil (payload). O cabeçalho tem dois campos que importam para o roteamento:
O endereço IP de origem (de onde o pacote veio).
O endereço IP de destino (para onde ele está indo).
A carga útil é o que quer que a camada de transporte tenha pedido à camada de rede para entregar. O cabeçalho do pacote também inclui um contador de time-to-live, um checksum sobre o cabeçalho e alguns flags de controle. Nenhum desses é algo que o código Python da câmera manipule diretamente.
Os pacotes não prometem nada além de “nós tentamos” – eles podem ser perdidos, duplicados ou entregues fora de ordem. Confiabilidade e ordenação são problemas que a camada de transporte acima resolve; a camada de rede apenas faz o melhor que pode para encaminhar cada pacote em direção ao seu destino.
9.6.2. Salto a salto¶
O pacote sai da câmera e chega ao primeiro dispositivo que não está no segmento local da câmera: o gateway padrão. (A página anterior mencionou o DHCP entregando à câmera o endereço do gateway quando a rede subiu.) Esse dispositivo é um roteador – uma caixa cuja função é receber pacotes, olhar seu destino e encaminhá-los adiante.
Um pacote da câmera até o destino salta entre roteadores, cada um um passo mais próximo.¶
O roteador tem uma tabela de roteamento – uma lista de “para destinos que correspondem a este padrão, envie o pacote por esta interface”. Para destinos na mesma rede que a câmera, a entrada diz “envie de volta pelo cabo por onde ele chegou”. Para destinos na internet mais ampla, a entrada diz “envie ao roteador upstream”. Para padrões conhecidos de destinos (uma VPN corporativa, a rede de um parceiro de negócios específico, um enlace via satélite), o roteador pode ter uma entrada mais específica que sobrepõe o padrão.
O roteador upstream faz a mesma coisa. E o próximo. E o seguinte. Cada salto tem o mesmo formato: receber o pacote, consultar o destino na tabela, enviá-lo pela interface correta. Eventualmente o pacote chega a um roteador que está no mesmo segmento local que o IP de destino. Esse roteador faz a entrega do salto final, o destino recebe o pacote, e a viagem termina.
9.6.3. Os pontos finais não conhecem a rota¶
Uma câmera que envia um pacote a um servidor remoto não sabe como o pacote chegará lá. Ela só conhece o IP de destino e o endereço de seu próprio gateway padrão. Tudo o que está no meio – quais roteadores, quais fibras, quais cabos submarinos – é algo que os roteadores ao longo do caminho decidem à medida que avançam, com base em suas próprias tabelas. Os próprios roteadores conhecem apenas seus vizinhos imediatos e a direção aproximada dos destinos comuns; nenhum dispositivo isolado na internet tem um mapa completo dela.
Essa descentralização é o motivo de a rede continuar funcionando quando caminhos individuais falham. Um cabo rompido em algum ponto do meio se torna um evento de reroteamento em alguns roteadores; os pontos finais nunca percebem. É também por isso que um pacote de uma câmera em Tóquio para um servidor em Dublin pode ter sucesso sem que nenhum dos lados saiba quais países estão no meio do caminho.
9.6.4. O que isso significa para um script Python¶
A tarefa da câmera na camada de rede se resume a:
Ter um endereço IP.
Conhecer o endereço do gateway padrão (o DHCP preenche isso automaticamente).
Entregar os pacotes de saída, endereçados a qualquer IP, a esse gateway e confiar no restante do caminho.
Um script nunca escolhe uma rota, nunca nomeia um salto intermediário e nunca enxerga os roteadores no meio. Ele escreve o IP de destino no pacote e a camada de rede assume o controle. Do ponto de vista de um script Python, todo o roteamento é apenas uma propriedade da rede à qual a câmera se conectou – “o gateway envia os pacotes para algum lugar útil para mim”.
A camada de transporte que vem a seguir assume que o roteamento simplesmente funciona, e constrói confiabilidade, ordenação e endereçamento programa a programa sobre isso.