Resumen

  • RFC 3338 insertó un traductor entre API socket y pilas IPv4/IPv6. Ante un destino solo AAAA, podía sintetizar una respuesta A con un valor del pool local y vincularlo a IPv6 sin traducir cabeceras IP.
  • Ese valor era estado con ámbito y tiempo. Agotamiento, reutilización, diferencias de API y discordancia entre AAAA del host y soporte del servicio rompían la ilusión. Generación, llamada traducida, transporte y aplicación necesitaban recibos propios.

El nombre obtenía una forma antigua para un destino nuevo

Un programa IPv4 esperaba resultados de cuatro bytes. Si su fuente no estaba disponible, portarlo no era inmediato. BIA estaba pensado para un host dual stack cuya red ya hablaba IPv6 pero cuyos programas aún no.

El resolvedor interceptaba la consulta, pedía A y AAAA y, si solo encontraba AAAA, solicitaba al mapper un valor IPv4 interno. Guardaba el par y devolvía un A sintético.

Cuando el programa usaba el valor en un socket IPv4, el function mapper recuperaba IPv6 e invocaba la API correspondiente. La pila enviaba IPv6 nativo; BIA no reescribía cabeceras como BIS.

Los cuatro bytes señalaban una tabla privada

Una dirección normal parece tener significado en la red. El valor BIA significaba “esta entrada de esta tabla en esta generación”. Un pool por nodo, usuario o proceso podía dar referentes distintos a los mismos bits.

El documento usó como ejemplo valores no asignados entre 0.0.0.1 y 0.0.0.255, destinados a no salir del host. Su unicidad era local.

Por eso el log debe guardar ámbito, generación, proceso, respuesta DNS y IPv6 real. El valor era más parecido a un descriptor que a identidad de interfaz.

Reciclar el pool podía cambiar el destino

Muchos pares agotaban el pool. La norma contempló liberar la entrada más antigua y reutilizar el valor. El espacio volvía, pero el identificador pasaba a otro IPv6.

Una copia atrasada en caché, callback o registro podía seguir pareciendo válida. El riesgo nacía de dos conceptos de vida útil dentro del host.

Asignación, uso, expulsión, reutilización y generación deben conservarse. El mismo número antes y después no es la misma identidad operacional.

Las API no eran semánticamente idénticas

El mapper buscaba funciones equivalentes, pero IPv6 tenía capacidades nuevas. Raw sockets, ancillary data, ICMP y direcciones embebidas en protocolos dependían del sistema operativo.

Que la función retornara no probaba que opciones, errores y efectos fueran idénticos. La aplicación podía leer una diferencia que el traductor no veía.

El recibo conserva función y argumentos originales, resultado traducido, opciones, OS, retorno e interpretación. Evitar cabeceras no eliminó la traducción semántica.

AAAA para la máquina no era IPv6 para el servicio

Un host dual stack podía publicar AAAA porque algunos servicios hablaban IPv6 mientras una aplicación en cierto puerto seguía solo en IPv4. BIA alcanzaba el host y fallaba en el servicio.

En TCP podía observar connect fallido e intentar otra dirección. En UDP era difícil o imposible saber cuál funcionó sin ayuda de la aplicación.

DNS prueba registros; reachability, camino; listener, puerto; aplicación, operación. Cada capa debe dar su recibo.

El puente no debía sustituir al porting

RFC 3338 era Experimental, para early adopters con código no disponible. No se recomendaba para producción general y no debía retrasar el portado si existía fuente.

La advertencia anticipaba lock-in. La compatibilidad acumula excepciones y observabilidad propia hasta volverse infraestructura permanente.

Un despliegue necesitaba salida: aplicaciones elegibles, dueño del porting, llamadas sin soporte, revisión y señal de retirada.

Happy Eyeballs resolvió otra versión del problema

RFC 2767 colocó BIS bajo la API con SIIT de RFC 2765. RFC 2893 dio contexto dual stack. RFC 3493 describió sockets IPv6 y RFC 4038 la transición de aplicaciones.

RFC 6555 y RFC 8305 añadieron Happy Eyeballs, con intentos entre familias. No eran el alias IPv4 privado de BIA y no deben proyectarse hacia 2002.

RFC 4291 define IPv6, no el significado global del pool sintético. Ningún texto demuestra adopción.

Un identificador mutable necesita generación

BIA conservó la interfaz y cambió la ejecución. El precio fue estado oculto: una dirección se convirtió en referencia y un socket ordinario en llamada interceptada.

Cada A sintético necesita mapping; cada llamada, antes y después; cada conexión, IPv6 real y resultado. Sin ello, el investigador atribuye identidad global a un número local.

Los bits no eran el par. La tabla viva era el significado.

Fuentes