9.5. Endereços IP

Um endereço de hardware identifica um dispositivo entre os outros no mesmo cabo local ou célula de rádio. É adequado para essa função, mas inútil além do segmento local: um comutador no edifício seguinte não pode encaminhar por ele, porque o mecanismo subjacente que permite a um comutador aprender endereços MAC só funciona dentro de um segmento.

A camada de rede resolve isso com um segundo tipo de endereço que é independente do cabo ao qual um dispositivo está ligado. O nome deste tipo de endereço é o endereço do Protocolo Internet, ou endereço IP, e a parte «Protocolo Internet» designa o conjunto de regras que todos os anfitriões na internet seguem quando enviam ou reencaminham um. A internet actual 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 recente, que a vai substituindo gradualmente).

9.5.1. O que é um endereço IP

Um endereço IP é um número suficientemente grande para identificar de forma única qualquer dispositivo na internet. É escrito numa forma legível por humanos que o resto da secção utiliza, mas no cabeçalho do pacote é apenas um inteiro de tamanho fixo.

  • Os endereços IPv4 têm 32 bits e são escritos como quatro números decimais separados por pontos, sendo cada número um byte:

    192.168.1.42
    8.8.8.8
    10.0.0.1
    

    Trinta e dois bits dão aproximadamente quatro mil milhões de endereços possíveis, o que parecia suficiente quando o IPv4 foi concebido na década de 1970 e não foi suficiente no início da década de 2010.

  • Os endereços IPv6 têm 128 bits e são escritos como oito grupos de quatro dígitos hexadecimais separados por dois pontos:

    2001:0db8:85a3:0000:0000:8a2e:0370:7334
    

    As sequências de zeros podem ser abreviadas para ::, e os zeros iniciais num grupo podem ser omitidos, pelo que o endereço acima é normalmente escrito 2001:db8:85a3::8a2e:370:7334.

As duas famílias de endereços são de resto linguagens diferentes; um anfitrião IPv4 não pode enviar directamente um pacote a um anfitrião IPv6 sem a ajuda de um gateway. Os módulos network e socket da câmara suportam ambos. Este tutorial usa IPv4 nos exemplos porque a maioria das redes locais às quais a câmara se liga ainda são apenas IPv4, mas tudo o que se segue funciona exactamente da mesma forma para IPv6, bastando substituir os endereços.

9.5.2. Para que serve um endereço IP

O endereço IP diz para que anfitrião na internet um pacote se destina. Um router que não sabe como alcançar um destino directamente sabe que algum outro router provavelmente sabe, e reencaminha o pacote para lá. O pacote salta entre routers, cada um um pouco mais próximo do destino, até que um router que está no segmento local do destino entregue o último salto.

Este comportamento salto a salto é o que faz a internet funcionar como uma grande rede em vez de muitas pequenas ilhas. A página seguinte explica como os saltos são escolhidos; esta é apenas sobre o endereço.

9.5.3. Como uma câmara obtém um

Uma câmara que acabou de se ligar a uma rede Wi-Fi precisa de um endereço IP antes de poder comunicar com qualquer coisa. Há duas formas comuns de isso acontecer.

A primeira é a atribuição automática. A câmara pede um endereço à rede local; o dispositivo que o atribui é o router – a caixa que liga 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 funciona como comutador ao qual os dispositivos com fios se ligam e como ponto de acesso Wi-Fi ao qual os dispositivos sem fios se associam, pelo que «o router», «o comutador» e «o ponto de acesso» podem ser o mesmo equipamento. O router executa um pequeno serviço chamado DHCP (o Dynamic Host Configuration Protocol), que mantém um conjunto de endereços disponíveis, escolhe um para cada dispositivo que chega, e atribui-o por um tempo fixo. Enquanto o DHCP está a trabalhar, o router também fornece à câmara algumas outras informações de configuração úteis:

  • o endereço para onde enviar o tráfego de saída quando o destino está fora da rede local (o gateway predefinido, que é o próprio endereço do router); e

  • os endereços de um ou mais servidores de nomes que convertem nomes legíveis por humanos como example.com em endereços IP. O serviço de resolução de nomes chama-se DNS, o Domain Name System, e Nomes e DNS aborda-o em detalhe.

Tudo isto acontece automaticamente enquanto a ligação está a estabelecer-se. A câmara não tem de pedir nada disto explicitamente; no momento em que isconnected() retorna True no exemplo da página anterior, a câmara já tem o seu endereço, o seu gateway e os seus servidores de nomes.

A segunda opção é a configuração estática. Algumas instalações querem um endereço conhecido para a câmara, para que outros dispositivos possam alcançá-la sem ter de a procurar primeiro. 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 acidentalmente com o mesmo endereço entram em conflito). Utilize o DHCP predefinido a menos que surja uma razão específica para o substituir.

Assim que a câmara tem um endereço IP, aderiu à internet (ou pelo menos ao segmento da rede local). Outros dispositivos podem agora endereçar pacotes para ela através desse endereço, e ela pode endereçar pacotes para 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. Um endereço IP por si só não indica onde termina a rede local – 192.168.1.50 pode ser um de algumas centenas de endereços numa pequena rede doméstica, ou um de milhares numa maior. A máscara de rede diz quanto do endereço designa a rede e quanto designa o anfitrião dentro dela.

/24 significa «os primeiros 24 dos 32 bits designam a rede; os últimos 8 designam o anfitrião». Para 192.168.1.50/24 isso divide o endereço em 192.168.1 para a rede e .50 para o anfitrião, deixando espaço para cerca de 254 dispositivos na mesma rede local. /16 deixaria mais bits para a metade do anfitrião e caberia muito mais dispositivos numa rede; /30 deixaria apenas dois endereços de anfitrião e serviria uma ligação 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 do endereço. /24 é equivalente 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 subsecção seguinte devolve a forma de quatro bytes.

Por que razão a divisão importa – como um dispositivo usa a máscara de rede para decidir se um destino está na rede local ou precisa de sair pelo gateway, e por que razão a maioria das redes domésticas usa /24 – é abordado em Redes privadas e NAT.

9.5.5. Leitura do endereço

O método ipconfig() sem argumentos devolve a configuração activa. A vista addr4 devolve o endereço IP e a máscara de rede:

>>> wlan.ipconfig("addr4")
('192.168.1.50', '255.255.255.0')