Resumen
- RFC 1014 describió en junio de 1987 un formato cuyos elementos ocupaban múltiplos de cuatro bytes. Una cadena variable llevaba su longitud en cuatro bytes, sus caracteres y los ceros necesarios para cerrar el bloque.
- En el ejemplo del propio RFC, el nombre
sillyprogcontiene nueve bytes de letras y tres de relleno. El tipo de archivo aparece a partir del desplazamiento 16. La longitud identifica el contenido; el relleno sitúa el dato siguiente.
Un archivo que sale de una máquina y llega a otra necesita algo más que un cable: ambas deben saber dónde termina el nombre y dónde empieza el tipo. La estación Sun y el Cray del universo que describe el RFC podían tener hábitos de memoria muy distintos. Sun eligió un archivo de juguete para hacer visible el problema: john guarda un programa Lisp llamado sillyprog, con contenido (quit). El nombre necesita nueve bytes. XDR anota primero el 9 en un entero de cuatro bytes, coloca las letras y añade tres ceros. El tipo de archivo empieza justo en la posición 16. Hay una precisión doméstica en el método: cada cosa a su hora, incluso las plazas vacías.
El problema que resolvía el formato era muy poco doméstico. En 1987 podían conversar una estación Sun, un VAX, un IBM PC y un Cray sin compartir arquitectura. El RFC presentó XDR, External Data Representation, como lenguaje para describir datos y como reglas para codificarlos. Sun RPC y NFS lo utilizaban. El acuerdo partía de un byte portable de ocho bits y ordenaba los valores en unidades de cuatro bytes. Esa cadencia permitía al receptor seguir el flujo aun cuando su propia memoria organizara los datos de otra manera.
Los enteros de 32 bits ya ocupaban una unidad completa. Las secuencias de longitud caprichosa, como un nombre de nueve letras, tenían que completar la unidad final. Por eso el nombre ocupa doce bytes de espacio después de su contador, aunque solo nueve son caracteres. El contador señala cuánto pertenece al nombre. Los ceros empujan el siguiente dato hasta una frontera que ambas máquinas pueden calcular. Ahorrar esos tres bytes rompería la cita con el campo que viene después.
La tabla hexadecimal del RFC permite recorrerlo sin fe ciega. Los desplazamientos 0 a 3 guardan la longitud 9. Desde el 4 salen las nueve letras y terminan en el 12. Los desplazamientos 13, 14 y 15 contienen ceros. En el 16 comienza EXEC, valor 2 de la categoría de archivo. Si un lector suma esos ceros al nombre, obtiene otro nombre. Si los omite al avanzar, busca la categoría donde todavía acaba el nombre. La regla convierte una secuencia de bytes en un mapa compartido.
A partir de EXEC, el ejemplo enseña otra pieza de XDR. Una unión discriminada utiliza la categoría para decidir qué campo sigue. En este caso aparece el intérprete lisp, con contador 4 y cuatro letras. El propietario john recibe la misma forma. Los datos (quit) suman seis bytes: delante va el contador 6, detrás dos ceros. Cada elemento tiene un contenido diferente, pero el lector aplica siempre la misma disciplina de contar, leer y avanzar hasta el próximo múltiplo de cuatro.
El estándar separaba una cadena de caracteres de una secuencia opaca. Para la cadena del RFC, los bytes representan ASCII. En una secuencia opaca, XDR conserva los bytes sin interpretar su significado. Ambas formas variables podían declarar una longitud máxima, y sobrepasarla era un error de codificación. El contador daba al lector una medida para localizar el final y comprobar el límite. El relleno atendía a otra pregunta: dónde comienza el campo siguiente. A nadie le interesa confundir el equipaje con el espacio libre en la estantería.
Había también un problema de autoridad. La disposición de una estructura en la memoria de un ordenador responde a su compilador y a su arquitectura. Un puntero local no viaja con sentido útil hasta otra máquina. La descripción XDR fijaba los tipos y su orden; la codificación fijaba la sucesión de bytes. La unión del ejemplo le decía al receptor que después de EXEC vendría un intérprete. El receptor podía leer el archivo siguiendo el contrato del flujo, no las costumbres de la estación que lo había enviado.
El coste de los ceros se ve y se puede contar. Tres después del nombre; dos después del contenido de seis bytes. A cambio, el próximo campo arranca en un punto esperado. La demostración cabe en un archivo de juguete y sirve para entender un intercambio entre máquinas de verdad. sillyprog ganó tres asientos vacíos en el tren. La gracia estaba en el andén: al llegar al desplazamiento 16, máquinas distintas encontraban el mismo tipo de archivo y podían seguir leyendo la misma historia.
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





