9.5. Direcciones IP

Una dirección de hardware distingue un dispositivo de los demás en el mismo cable local o celda de radio. Sirve para esa tarea, pero es inútil más allá del segmento local: un conmutador en el edificio de al lado no puede enrutar con ella, porque el mecanismo subyacente que permite a un conmutador aprender direcciones MAC solo funciona dentro de un segmento.

La capa de red resuelve esto con un segundo tipo de dirección que es independiente del cable al que esté conectado un dispositivo. El nombre de este tipo de dirección es dirección del Protocolo de Internet, o dirección IP, y la parte de «Protocolo de Internet» da nombre al conjunto de reglas que sigue cada host de internet cuando envía o reenvía una. La internet actual usa dos versiones del esquema de direccionamiento en paralelo – IPv4 (la forma más antigua, todavía dominante en redes pequeñas) e IPv6 (la forma más nueva, que la reemplaza lentamente).

9.5.1. Qué es una dirección IP

Una dirección IP es un número lo bastante grande como para identificar de forma única cualquier dispositivo en internet. Se escribe en una forma legible para humanos que usa el resto de la sección, pero en la cabecera del paquete es solo un entero de tamaño fijo.

  • Las direcciones IPv4 tienen 32 bits de longitud y se escriben como cuatro números decimales separados por puntos, siendo cada número un byte:

    192.168.1.42
    8.8.8.8
    10.0.0.1
    

    Treinta y dos bits dan aproximadamente cuatro mil millones de direcciones posibles, lo que parecía de sobra cuando se diseñó IPv4 en los años 70 y no fue suficiente a principios de la década de 2010.

  • Las direcciones IPv6 tienen 128 bits de longitud y se escriben como ocho grupos de cuatro dígitos hexadecimales separados por dos puntos:

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

    Las series de ceros pueden abreviarse a ::, y los ceros a la izquierda de un grupo pueden omitirse, por lo que la dirección anterior se escribe normalmente como 2001:db8:85a3::8a2e:370:7334.

Por lo demás, las dos familias de direcciones son idiomas diferentes; un host IPv4 no puede enviar directamente un paquete a un host IPv6 sin la ayuda de una pasarela. Los módulos network y socket de la cámara admiten ambas. Este tutorial usa IPv4 en los ejemplos porque la mayoría de las redes locales a las que se unirá la cámara siguen siendo solo IPv4, pero todo lo que sigue funciona exactamente igual para IPv6 una vez que se sustituyen las direcciones.

9.5.2. Para qué sirve una dirección IP

La dirección IP indica para qué host de internet está destinado un paquete. Un router que no sabe cómo alcanzar un destino directamente sabe que probablemente algún otro router sí lo sabe, y reenvía el paquete allí. El paquete salta entre routers, cada uno un poco más cerca del destino, hasta que un router que está en el segmento local del destino realiza el salto final.

Ese comportamiento salto a salto es lo que hace que internet funcione como una gran red en lugar de muchas islas pequeñas. La página siguiente cubre cómo se eligen los saltos; esta trata solo de la dirección.

9.5.3. Cómo obtiene una la cámara

Una cámara que acaba de unirse a una red Wi-Fi necesita una dirección IP antes de poder comunicarse con nada. Hay dos formas comunes de que esto ocurra.

La primera es la asignación automática. La cámara le pide una dirección a la red local; el dispositivo que la reparte es el router – la caja que conecta la red local con la internet más amplia. En la mayoría de las configuraciones domésticas y de oficinas pequeñas, la misma caja física actúa también como el conmutador al que se conectan los dispositivos cableados y como el punto de acceso Wi-Fi al que se asocian los inalámbricos, por lo que «el router», «el conmutador» y «el punto de acceso» pueden ser todos la misma pieza de hardware. El router ejecuta un pequeño servicio llamado DHCP (el Dynamic Host Configuration Protocol), que mantiene un grupo de direcciones disponibles, elige una para cada dispositivo recién llegado y se la arrienda durante un tiempo fijo. Mientras lo hace, el router también le entrega a la cámara un par de otros datos útiles de configuración:

  • la dirección a la que enviar el tráfico saliente cuando el destino está fuera de la red local (la pasarela predeterminada, que es la propia dirección del router); y

  • las direcciones de uno o más servidores de nombres que convierten nombres legibles para humanos como example.com en direcciones IP. El servicio de resolución de nombres se llama DNS, el Domain Name System, y Nombres y DNS lo cubre en detalle.

Todo esto ocurre automáticamente mientras el enlace se está estableciendo. La cámara no tiene que pedir nada de ello explícitamente; en el momento en que isconnected() retorna True en el ejemplo de la página anterior, la cámara ya tiene su dirección, su pasarela y sus servidores de nombres.

La segunda opción es la configuración estática. Algunos despliegues quieren una dirección conocida para la cámara de modo que otros dispositivos puedan alcanzarla sin tener que buscarla antes. El método ipconfig() establece la dirección, la pasarela y el servidor de nombres a mano:

wlan.ipconfig(addr4=("192.168.1.50/24", "192.168.1.1"))
wlan.ipconfig(dns="192.168.1.1")

La configuración estática es frágil (dos dispositivos a los que se les asigna accidentalmente la misma dirección entran en conflicto). Recurre al valor predeterminado de DHCP a menos que aparezca una razón específica para anularlo.

Una vez que la cámara tiene una dirección IP, se ha unido a internet (o al menos a la parte de la red local que le corresponde). Otros dispositivos pueden ahora dirigir paquetes a ella mediante esa dirección, y ella puede dirigir paquetes a ellos.

9.5.4. La máscara de red y el /24

El /24 al final de la dirección del ejemplo estático anterior es la máscara de red. Una dirección IP por sí sola no indica dónde termina la red local – 192.168.1.50 podría ser una de unos pocos cientos de direcciones en una pequeña red doméstica, o una de miles en una más grande. La máscara de red indica qué parte de la dirección nombra a la red y qué parte nombra al host dentro de ella.

/24 significa «los primeros 24 de los 32 bits nombran a la red; los últimos 8 nombran al host». Para 192.168.1.50/24 eso divide la dirección en 192.168.1 para la red y .50 para el host, dejando espacio para unos 254 dispositivos en la misma red local. /16 dejaría más bits para la mitad del host y admitiría muchos más dispositivos en una red; /30 dejaría solo dos direcciones de host y admitiría un enlace punto a punto.

La máscara de red también se escribe comúnmente como un número de cuatro bytes en la misma notación con puntos que la dirección. /24 equivale a 255.255.255.0 – lee cada byte como «todos los bits que pertenecen a la mitad de la red». Las dos formas son intercambiables; el lector ipconfig() de la siguiente subsección resulta que devuelve la forma de cuatro bytes.

Por qué importa la división en absoluto – cómo un dispositivo usa la máscara de red para decidir si un destino está en la red local o necesita salir a través de la pasarela, y por qué la mayoría de las redes domésticas acaban en /24 – se cubre en Redes privadas y NAT.

9.5.5. Leer la dirección de vuelta

El método ipconfig() sin argumentos devuelve la configuración activa. La vista addr4 devuelve la dirección IP y la máscara de red:

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