9.5. Endereços IP¶
Um endereço de hardware distingue um dispositivo dos demais no mesmo cabo local ou célula de rádio. Ele serve bem para essa função, mas é inútil além do segmento local: um switch no prédio ao lado não consegue rotear por ele, porque o mecanismo subjacente que permite a um switch aprender endereços MAC só funciona dentro de um único segmento.
A camada de rede resolve isso com um segundo tipo de endereço que é independente de em qual cabo um dispositivo está conectado. O nome desse tipo de endereço é endereço de Protocolo de Internet, ou endereço IP, e a parte “Protocolo de Internet” nomeia o conjunto de regras que todo host na internet segue ao enviar ou encaminhar um deles. A internet atual usa duas versões do esquema de endereçamento em paralelo – IPv4 (a forma mais antiga, ainda dominante em redes pequenas) e IPv6 (a forma mais nova, que aos poucos a substitui).
9.5.1. O que é um endereço IP¶
Um endereço IP é um número grande o suficiente para identificar de forma única qualquer dispositivo na internet. Ele é escrito em uma forma legível por humanos que o restante da seção utiliza, mas no cabeçalho do pacote é apenas um inteiro de tamanho fixo.
Os endereços IPv4 têm 32 bits de comprimento e são escritos como quatro números decimais separados por pontos, cada número sendo um byte:
192.168.1.42 8.8.8.8 10.0.0.1
Trinta e dois bits dão cerca de quatro bilhões de endereços possíveis, o que parecia bastante quando o IPv4 foi projetado na década de 1970 e já não era suficiente no início da década de 2010.
Os endereços IPv6 têm 128 bits de comprimento e são escritos como oito grupos de quatro dígitos hexadecimais separados por dois-pontos:
2001:0db8:85a3:0000:0000:8a2e:0370:7334Sequências de zeros podem ser abreviadas para
::, e os zeros à esquerda em um grupo podem ser omitidos, de modo que o endereço acima normalmente é escrito2001:db8:85a3::8a2e:370:7334.
Fora isso, as duas famílias de endereços são linguagens diferentes; um host IPv4 não pode enviar um pacote diretamente a um host IPv6 sem a ajuda de um gateway. Os módulos network e socket da câmera suportam ambos. Este tutorial usa IPv4 nos exemplos porque a maioria das redes locais a que a câmera se conectará ainda são exclusivamente IPv4, mas tudo o que segue funciona exatamente da mesma forma para IPv6 quando os endereços são trocados.
9.5.2. Para o que serve um endereço IP¶
O endereço IP indica para qual host na internet um pacote se destina. Um roteador que não sabe como alcançar um destino diretamente sabe que provavelmente algum outro roteador sabe, e encaminha o pacote para lá. O pacote salta entre roteadores, cada um um pouco mais próximo do destino, até que um roteador que está no segmento local do destino faça a entrega do salto final.
Esse comportamento salto a salto é o que faz a internet funcionar como uma grande rede única em vez de muitas pequenas ilhas. A próxima página aborda como os saltos são escolhidos; esta trata apenas do endereço.
9.5.3. Como uma câmera obtém um¶
Uma câmera que acabou de entrar em uma rede Wi-Fi precisa de um endereço IP antes de poder se comunicar com qualquer coisa. Há duas formas comuns de isso acontecer.
A primeira é a atribuição automática. A câmera pede um endereço à rede local; o dispositivo que distribui esses endereços é o roteador – a caixa que conecta a rede local à internet mais ampla. Na maioria das configurações domésticas e de pequenos escritórios, a mesma caixa física também atua como o switch ao qual os dispositivos cabeados se conectam e como o ponto de acesso Wi-Fi ao qual os dispositivos sem fio se associam, então “o roteador”, “o switch” e “o ponto de acesso” podem ser todos o mesmo equipamento. O roteador executa um pequeno serviço chamado DHCP (o Dynamic Host Configuration Protocol), que mantém um pool de endereços disponíveis, escolhe um para cada dispositivo recém-chegado e o aluga (leases) por um tempo determinado. Enquanto o DHCP faz isso, o roteador também entrega à câmera algumas outras informações úteis de configuração:
o endereço para onde enviar o tráfego de saída quando o destino está fora da rede local (o gateway padrão, que é o próprio endereço do roteador); e
os endereços de um ou mais servidores de nomes que convertem nomes legíveis por humanos como
example.comem endereços IP. O serviço de resolução de nomes é chamado DNS, o Domain Name System, e Nomes e DNS o aborda em detalhes.
Tudo isso acontece automaticamente enquanto o enlace está sendo estabelecido. A câmera não precisa solicitar nada disso explicitamente; no momento em que isconnected() retorna True no exemplo da página anterior, a câmera já tem seu endereço, seu gateway e seus servidores de nomes.
A segunda opção é a configuração estática. Algumas implantações querem um endereço conhecido para a câmera, de modo que outros dispositivos possam alcançá-la sem precisar primeiro consultá-lo. O método ipconfig() define o endereço, o gateway e o servidor de nomes manualmente:
wlan.ipconfig(addr4=("192.168.1.50/24", "192.168.1.1"))
wlan.ipconfig(dns="192.168.1.1")
A configuração estática é frágil (dois dispositivos que acidentalmente recebem o mesmo endereço entram em conflito). Recorra ao padrão DHCP a menos que surja um motivo específico para sobrescrevê-lo.
Uma vez que a câmera tem um endereço IP, ela entrou na internet (ou pelo menos na parte dela correspondente à rede local). Outros dispositivos agora podem endereçar pacotes a ela por esse endereço, e ela pode endereçar pacotes a eles.
9.5.4. A máscara de rede e o /24¶
O /24 no final do endereço no exemplo estático acima é a máscara de rede (netmask). Um endereço IP por si só não diz onde termina a rede local – 192.168.1.50 poderia ser um de algumas centenas de endereços em uma pequena rede doméstica, ou um de milhares em uma rede maior. A máscara de rede diz quanto do endereço nomeia a rede e quanto nomeia o host dentro dela.
/24 significa “os primeiros 24 dos 32 bits nomeiam a rede; os últimos 8 nomeiam o host”. Para 192.168.1.50/24 isso divide o endereço em 192.168.1 para a rede e .50 para o host, deixando espaço para cerca de 254 dispositivos na mesma rede local. /16 deixaria mais bits para a metade do host e comportaria muito mais dispositivos em uma rede; /30 deixaria apenas dois endereços de host e comportaria um enlace ponto a ponto.
A máscara de rede também é comumente escrita como um número de quatro bytes na mesma notação com pontos usada pelo endereço. /24 equivale a 255.255.255.0 – leia cada byte como “todos os bits que pertencem à metade da rede”. As duas formas são intercambiáveis; o leitor ipconfig() na próxima subseção por acaso retorna a forma de quatro bytes.
Por que a divisão importa, afinal – como um dispositivo usa a máscara de rede para decidir se um destino está na rede local ou precisa sair pelo gateway, e por que a maioria das redes domésticas acaba em /24 – é abordado em Redes privadas e NAT.
9.5.5. Lendo o endereço de volta¶
O método ipconfig() sem argumentos retorna a configuração ativa. A visão addr4 retorna o endereço IP e a máscara de rede:
>>> wlan.ipconfig("addr4")
('192.168.1.50', '255.255.255.0')