Resumen
- XDR estableció una forma externa de cuatro bytes y orden de mayor a menor peso, en lugar de copiar la disposición nativa de cada equipo.
- La longitud contaba los datos; los ceros añadidos completaban la alineación sin convertirse en parte del valor.
- El esquema decidía el orden y la rama de una unión, pero no delimitaba por sí solo mensajes TCP ni concedía seguridad o autoridad.
Un hueco también necesitaba una regla
En el ejemplo de la RFC 4506, un nombre de archivo tiene nueve bytes. La codificación coloca primero su longitud, después esos nueve bytes y, por último, tres ceros antes del siguiente campo. El receptor sabe que el nombre no tiene doce bytes. También sabe que el nuevo campo empieza en una frontera de cuatro.
El relleno ocupa espacio en la representación, aunque no sea contenido. Y debe valer cero. Permitir residuos de memoria haría que dos codificadores produjeran secuencias distintas para el mismo valor. Una comparación byte a byte o una suma de comprobación dejaría de ser estable sin que la aplicación hubiera cambiado nada.
La aparente minucia resume XDR: el acuerdo no estaba en la RAM de los participantes, sino en la transformación que cada uno debía realizar al cruzar el límite común.
La red no heredó la memoria del procesador
La RFC 1014 publicó XDR en 1987 para describir y codificar datos entre arquitecturas heterogéneas. Mencionaba usos en Sun RPC y NFS. Su lenguaje se parecía a C porque debía expresar estructuras complejas con precisión, no porque transmitiera estructuras C o ejecutara programas.
Los enteros con signo ocupan 32 bits en complemento a dos y sitúan primero el byte de mayor peso. Los elementos de un arreglo conservan su orden; los campos de una estructura aparecen según la declaración. Una máquina little-endian y otra big-endian pueden mantener representaciones internas distintas. Las dos deben emitir y aceptar la misma forma XDR.
No se negocia el orden para cada objeto. XDR eligió uno. Esa decisión carga más conversión sobre algunas arquitecturas, pero evita depender de un protocolo superior para recordar qué orden se seleccionó. Incluso un objeto guardado fuera de una sesión conserva una lectura definida.
La unidad de cuatro bytes tampoco fue presentada como perfecta. Era un compromiso entre el tamaño de la codificación y las exigencias de alineación de máquinas distintas. La neutralidad consistió en publicar el coste, no en eliminarlo.
La cuenta mandaba sobre los datos, no sobre la memoria
Un bloque opaco de longitud variable empieza con una cuenta sin signo de 32 bits. Le siguen exactamente los bytes contados y de cero a tres ceros de relleno. Las cadenas adoptan la misma forma; los arreglos variables cuentan elementos antes de codificarlos uno tras otro.
El esquema puede declarar un máximo. Superarlo es un error de codificación. El decodificador puede comprobar esa cota, el espacio restante y su propia capacidad antes de reservar memoria. Si el autor omite una cota explícita, el enorme máximo del lenguaje no se convierte en una orden de asignación para todos los receptores.
Tampoco basta con convertir una cadena contada en la convención nativa más cercana. XDR puede transportar un NUL dentro de la cadena. Una biblioteca que lo toma como terminador puede medir menos de lo que reservó y provocar discrepancias en comparación o liberación. La sintaxis común define los bytes; el adaptador local sigue siendo responsable de su memoria.
El discriminante hacía visible una sola elección
XDR usa tipos implícitos. Normalmente el valor no repite el nombre y el tipo de cada campo en la red. Emisor y receptor comparten la declaración. Por eso cambiar el orden de una estructura altera el significado de las posiciones siguientes, aunque todos los bytes sigan pareciendo válidos.
Una unión discriminada codifica primero un entero, enumeración o booleano que selecciona la rama permitida. Si no hay rama por defecto, un discriminante desconocido no tiene codificación válida. Los datos opcionales son el caso mínimo: verdadero trae un elemento; falso elige void, que ocupa cero bytes. La ausencia se declara antes de la rama.
El selector no tiene autoridad fuera de ese punto. No autentica al emisor, no aprueba la operación y no certifica que el valor de la rama sea verdadero en el mundo.
XDR terminaba antes que el mensaje
La RFC 1832 describió en 1995 el formato desplegado como estándar de Internet. La RFC 4506 la sustituyó en 2006 como STD 67 sin introducir cambios técnicos en la codificación. Amplió, en cambio, la responsabilidad de los decodificadores: límites de buffers, NUL internos, caracteres peligrosos para la aplicación y recursión no acotada.
La RFC 5531 demuestra que representación y encuadre no eran lo mismo. ONC RPC describe sus mensajes con XDR. Para llevarlos sobre TCP añade un marcado de registros propio; la especificación advierte que esos encabezados de fragmento no están expresados en XDR. Reconocer una estructura XDR no indica por sí solo dónde termina cualquier mensaje en un flujo, a qué llamada pertenece o si una acción quedó confirmada.
La forma canónica tampoco cifra, autentica, autoriza ni evita repeticiones. Puede ofrecer invariantes precisos a un comprobador. No puede obligar al programa a usarlos bien.
Fuentes y límites
El conjunto cerrado incluye RFC 1014, RFC 1832, RFC 4506 y RFC 5531. Sustenta las reglas, su continuidad y el límite con RPC. No mide adopción actual, no prueba el comportamiento de un producto y no convierte una decodificación correcta en prueba de identidad, autorización o ejecución.
Informe para miembros
Contexto ampliado del perfil
Inicia sesión con el nivel de membresía adecuado para desbloquear el informe completo y las notas de las fuentes.
Solo para Strategic Circle
Strategic Circle
Abierto a todos los lectores. Desbloquea informes de perfil después de unirte e iniciar sesión.
Únete a Strategic CircleSolo para Leadership Alliance
Leadership Alliance
Para propietarios y directivos cualificados de activos de propiedad intelectual; inicia sesión para desbloquear los informes de la alianza.
Unirse a Leadership Alliance
