9.2. Protocolos em camadas¶
Enviar um fotograma da câmara para um servidor noutra cidade significa resolver vários problemas em simultâneo. O sinal elétrico tem de percorrer o primeiro cabo. Os bytes nesse cabo têm de encontrar o caminho através de um switch local. A rede local tem de entregar a mensagem ao que quer que esteja entre ela e o resto da internet. Os pacotes que sobrevivem à viagem têm de ser remontados por ordem. O recetor tem de saber a qual dos seus programas os deve entregar. E os próprios bytes têm de significar algo com que ambas as extremidades concordam.
Tentar resolver tudo isso num único bloco de código seria ingerível. A resposta padrão consiste em dividir o trabalho em camadas. Cada camada resolve um problema bem definido e expõe um serviço simples à camada acima. Um programa comunica apenas com a camada diretamente abaixo; as camadas por baixo dessa são invisíveis.
Cada camada de uma pilha de rede resolve um problema e passa uma abstração limpa para a seguinte.¶
9.2.1. As cinco camadas¶
Os nomes abaixo são os utilizados no resto desta secção. Provêm do modelo padrão em torno do qual as redes foram concebidas. As fronteiras exatas entre camadas são por vezes difusas, mas o papel de cada uma é estável.
Camada física. Mover bits entre dois dispositivos no mesmo cabo ou rádio. Níveis de tensão, impulsos de luz, modulação RF. O trabalho da câmara aqui é sobretudo ligar o cabo correto ou juntar-se à rede sem fios correta; o silício trata do resto.
Camada de ligação. Mover frames (pequenos blocos de bytes) entre dois dispositivos que partilham um segmento local. Acrescenta endereços de hardware para que cada frame possa ser dirigido a um vizinho específico. Ethernet e Wi-Fi são as duas tecnologias de ligação que a câmara encontra na prática.
Camada de rede. Mover pacotes entre quaisquer dois dispositivos na internet, não apenas no mesmo segmento local. Acrescenta um endereço de nível lógico que identifica um host independentemente do cabo em que está, e um mecanismo de encaminhamento que transporta um pacote de um segmento local para o seguinte até chegar ao destino. Esta é a primeira camada em que o código Python da câmara começa a ter algo a dizer.
Camada de transporte. Situa-se acima dos pacotes e oferece entrega entre programas em dois hosts, não apenas os hosts em si. Dois tipos são comuns: um entrega um fluxo de bytes contínuo e ordenado (o motor para a maioria do tráfego), o outro entrega mensagens autónomas que viajam independentemente umas das outras (utilizado quando a baixa sobrecarga importa mais do que as garantias). Acrescenta números de porta para que vários programas no mesmo host possam manter conversas em paralelo.
Camada de aplicação. Tudo acima do transporte: os protocolos que dão significado aos bytes. Os que um browser utiliza para carregar páginas – e os que estão por detrás de quase todos os outros serviços de internet que o leitor já usa diariamente – vivem aqui. O tutorial aborda o transporte em profundidade; esta camada tem uma secção dedicada própria.
9.2.2. Como as camadas se organizam em tempo de execução¶
Quando a câmara envia bytes pela rede, cada camada acrescenta o seu próprio cabeçalho antes dos dados, como encapsular um envelope dentro de outro envelope:
Os bytes da aplicação são colocados primeiro.
A camada de transporte envolve-os com um pequeno cabeçalho que indica a que programa pertencem (o número de porta).
A camada de rede envolve isso com um cabeçalho que indica para que host se destinam (o endereço de nível lógico).
A camada de ligação envolve isso com um cabeçalho que indica a que dispositivo no segmento local os deve entregar a seguir (o endereço de hardware).
A camada física transforma o conjunto completo em bits num cabo.
Na outra extremidade, cada camada remove o seu próprio cabeçalho e passa o resto para cima. A aplicação recetora obtém os seus bytes de volta sem saber que as camadas de rede, ligação e física alguma vez existiram.
Este encapsulamento é a razão pela qual o tutorial avança de baixo para cima. Compreender o que a camada abaixo faz torna a camada acima inevitável. As duas camadas inferiores são abordadas numa única página cada uma porque há quase nada a configurar a partir de Python. A partir da camada de rede para cima, o ritmo abranda à medida que o papel do Python aumenta.