Resumen

  • MODE C tenía formas distintas para datos literales, repeticiones arbitrarias y relleno; solo el relleno no transmitía el valor repetido.
  • TYPE completaba el dato ausente: espacio para ASCII/EBCDIC y byte cero para Image/Local byte.
  • Conservar todos los octetos del canal de datos no basta si se pierde el estado de representación que les daba significado.

El descriptor ya estaba completo

Dos bits iniciales 11 y seis bits de cuenta forman toda la cadena de relleno. No hay un valor a continuación. El receptor expande n copias del relleno que corresponde al TYPE vigente.

Los documentos RFC 765 y RFC 959 no confunden esta forma con cualquier repetición. Para repetir un byte cualquiera usan la clase 10: seis bits de longitud y, después, un byte explícito d. El valor viaja cuando no puede inferirse.

La distinción cambia lo que cuenta como error. Si un 10 termina sin muestra, el flujo está incompleto. Si un 11 aparece solo, es válido; tomar el octeto siguiente como muestra desincroniza el resto. La forma, y no la expectativa de una biblioteca moderna, decide cuántos elementos siguen.

El TYPE ponía la materia

En ASCII, el relleno es el espacio de código 32. En EBCDIC, el espacio de código 64. Para Image y Local byte, el resultado es cero. Un mismo descriptor de relleno puede expandirse en bytes distintos según el parámetro negociado.

Por eso MODE C no describe por sí solo la salida. RFC 959 llama básicamente independientes a representación y modo de transmisión, pero señala justo después esta dependencia: la naturaleza del relleno comprimido varía con el tipo. La excepción no es decorativa; permite omitir el valor.

Una captura aislada del canal de datos puede ser perfecta y todavía no responder si esa serie debía convertirse en espacios o ceros. El contexto no es metadato opcional: es una entrada del algoritmo.

Lo literal, lo repetido y lo implícito

Los datos ordinarios llevaban un encabezado con bit alto cero y una cuenta positiva de siete bits, hasta 127, seguido de los n octetos. Una repetición llevaba clase 10, cuenta de seis bits y muestra. El relleno, clase 11 y cuenta.

El ahorro expresaba una categoría semántica. Muchos ceros en una transferencia ASCII no adquirían por ello la forma privilegiada: el relleno ASCII era espacio. En Image, en cambio, ceros consecutivos podían reconstruirse sin muestra. No bastaba observar frecuencia; había que conocer la representación.

La información de control también tenía su gramática: un byte de escape nulo y otro descriptor recuperaban códigos del modo BLOCK. El decodificador debía clasificar antes de copiar, repetir, inferir o aplicar una frontera.

Una solución para márgenes costosos

RFC 959 explicaba que COMPRESSED podía ganar ancho de banda a cambio de algo de CPU. Mencionaba en particular los grandes archivos de impresora producidos por sistemas RJE. Sus diseños fijos podían dedicar largas zonas a espacios.

El contexto histórico aclara por qué el espacio recibió tratamiento especial. No era una teoría general sobre compresibilidad, sino una optimización ligada a representaciones y cargas de trabajo concretas. En binario, el cero asumió el papel equivalente.

El coste oculto fue probatorio. Un sensor que guardase solo el flujo de datos retenía la cuenta, pero no la tabla que definía el relleno. Un registro que atribuyese el TYPE equivocado podía cambiar el archivo reconstruido sin alterar el hash del flujo.

El estado aceptado, no solo la orden enviada

Los parámetros se establecían por el canal de control. Para reconstruir con rigor hay que registrar órdenes y respuestas y vincularlas al inicio de cada transferencia. Un intento de TYPE I rechazado no crea el mismo contexto que uno aceptado.

Cada cambio abre una nueva época de decodificación. El sistema debe conservar TYPE, STRU y MODE efectivos, los límites del flujo, el estado final del analizador y una huella de la salida canónica. Los cortes de paquetes o de lecturas locales no abren épocas ni delimitan formas.

MODE era base; C no era garantía universal

RFC 959 asigna S, B y C, con Stream por defecto. RFC 1123 define después el mínimo alrededor de Stream, no de todos los modos. Hablar del diseño estándar no autoriza a afirmar que todos los productos lo implementaron o que los actuales lo aceptan.

RFC 5797 y el registro de IANA mantienen MODE entre los comandos base. El registro prueba un nombre coordinado y una referencia normativa. No ejecuta MODE C, no somete el analizador a casos límite ni verifica una ida y vuelta.

Dos huellas para una sola afirmación

La evidencia completa conserva flujo, longitud y hash; cronología de parámetros aceptados; clase y cuenta de cada forma; eventos de control; estado terminal; y hash del objeto decodificado. Debe seguir distinguiendo relleno de repetición incluso si ambos producen, por casualidad, la misma cadena.

Las pruebas repiten un mismo 11 bajo ASCII, EBCDIC, Image y Local byte; enfrentan relleno con 10 más muestra; separan descriptor y valor entre llamadas; y terminan el flujo después de una repetición incompleta. El resultado esperado nace de la sintaxis y del contexto, nunca del tamaño del búfer.

El remitente no envió el byte porque FTP ya lo había definido en otra parte de la conversación. La compresión ahorró tráfico tomando significado prestado; la conservación responsable debe devolver ese significado al expediente.

Fuentes