ZMODEM es un protocolo de transferencia de archivos en línea desarrollado por Chuck Forsberg en 1986, en un proyecto financiado por Telenet para mejorar las transferencias de archivos en su red X.25 . Además de un rendimiento notablemente superior al de los protocolos anteriores, ZMODEM ofrecía transferencias reiniciables, inicio automático por parte del remitente, un CRC ampliado de 32 bits y la posibilidad de incluir caracteres de control para transferencias limpias de 8 bits , lo que permitía su uso en redes que no transmitían caracteres de control.
A diferencia de la mayoría de los protocolos de transferencia desarrollados para sistemas de tablones de anuncios (BBS), ZMODEM no se basaba directamente en el protocolo XMODEM original ni era compatible con él. Se habían desarrollado muchas variantes de XMODEM para solucionar una o varias de sus deficiencias, y la mayoría seguía siendo compatible con versiones anteriores y permitía realizar transferencias con éxito mediante implementaciones clásicas de XMODEM. Esta lista incluye el protocolo YMODEM del propio Forsberg .
ZMODEM dejó de lado la retrocompatibilidad para centrarse en un protocolo radicalmente mejorado. Su rendimiento era al menos igual al de cualquiera de las variantes de alto rendimiento de XMODEM, y lo hacía a través de enlaces que antes no funcionaban en absoluto, como X.25, o que tenían un rendimiento deficiente, como los módems Telebit . Además, incluía funciones útiles presentes en pocos otros protocolos. ZMODEM se popularizó enormemente en los sistemas de tablones de anuncios (BBS) a principios de la década de 1990, convirtiéndose en un estándar tan extendido como lo había sido XMODEM anteriormente.
mejoras
Sistemas más antiguos
Generalmente, los primeros protocolos de transferencia de archivos dividen un archivo en una serie de paquetes y los envían uno a uno al receptor. La parte principal del paquete, la carga útil , consiste en una cantidad determinada de bytes del archivo que se envía. Después de la carga útil, se incluye una suma de verificación o una comprobación de redundancia cíclica (CRC) que permite determinar si la carga útil se recibió correctamente. Si el paquete se recibe correctamente, el receptor envía un mensaje ACK y el remitente comienza a enviar el siguiente paquete.
El sistema telefónico introduce un pequeño retardo, conocido como latencia , que interfiere con este proceso. Aunque el receptor envíe el ACK inmediatamente, el retardo en las líneas telefónicas implica que siempre transcurrirá un tiempo antes de que el emisor lo reciba y envíe el siguiente paquete. A medida que aumenta la velocidad del módem , este retardo representa un número cada vez mayor de paquetes que podrían haberse enviado durante ese tiempo, lo que reduce la eficiencia del canal .
XMODEM utilizaba cargas útiles de 128 bytes con una cabecera de tres bytes y una suma de comprobación de un byte, para un total de 132 bytes por paquete. En la época de los módems de 300 bit/s, un paquete tardaba unos cuatro segundos en enviarse, y las latencias típicas eran del orden de 1/10 de segundo, por lo que la sobrecarga de rendimiento no era significativa. A medida que aumenta la velocidad , el problema se agrava; a 2400 bit/sa , un paquete tarda unos 0,55 segundos en enviarse, por lo que se desperdicia aproximadamente 1/5 del ancho de banda disponible esperando las confirmaciones (ACK ). A 9600 bit/sa , un paquete requiere solo 0,13 segundos para enviarse, por lo que se desperdicia aproximadamente 1/2 del ancho de banda.
Windows y streaming
Una solución a este problema es el uso de una ventana deslizante . Estos protocolos reducen la latencia permitiendo al remitente enviar varios paquetes sin esperar una confirmación (ACK) . El número de paquetes que permite enviar continuamente se conoce como "ventana", que generalmente oscilaba entre dos y dieciséis paquetes en la mayoría de las implementaciones. A principios de la década de 1980 aparecieron varias versiones nuevas de XMODEM con soporte para ventanas deslizantes.
Las ventanas deslizantes son útiles para latencias del orden de varias longitudes de paquete, como ocurre con XMODEM en líneas telefónicas convencionales. Sin embargo, no bastan para solucionar las latencias más largas que se producen en llamadas internacionales, conexiones satelitales o servicios X.25 como PC Pursuit , donde las latencias pueden ser del orden de un segundo o más. En otros casos, donde el canal de retorno era mucho más lento que el de envío, como sucedía con los módems Telebit o USRobotics , incluso la pequeña cantidad de ACK podría saturar el canal de retorno y provocar la pausa de la transferencia.
ZMODEM solucionó estos problemas eliminando por completo la necesidad de ACK , lo que permitía al emisor enviar datos continuamente siempre que el receptor no detectara errores. Solo se enviaban NAK si se producía algún problema. Dado que ZMODEM se utilizaba a menudo en enlaces con corrección de errores integrada , como X.25, el receptor solía no enviar ningún mensaje de vuelta al emisor. Como resultado, el sistema enviaba el archivo completo en un flujo continuo, y ZMODEM se autodenominaba un "protocolo de transmisión".
El rendimiento de ZMODEM mejoró tanto con respecto a los protocolos comunes anteriores que, en general, reemplazó incluso a protocolos especiales como YMODEM-g , que no incluían ninguna corrección de errores y, en cambio, dependían de enlaces sin errores mantenidos por los módems. Si bien YMODEM-g era más rápido (y, por lo tanto, popular entre los usuarios avanzados ), la falta de otras características, como las transferencias reiniciables, lo hacía menos atractivo.
Reanudar
XMODEM, y la mayoría de los protocolos basados en él, gestionaban el orden de los paquetes anteponiendo a los datos un número de paquete del 1 al 255. Las versiones con ventana utilizaban este número de paquete para indicar qué paquetes se habían recibido correctamente o para especificar uno que no se había recibido. Dado que los paquetes tenían una longitud de 128 bytes, esto significaba que la cantidad máxima de datos que se podía transferir antes de que se reiniciara el número de paquete era de 32 KB.
ZMODEM sustituyó el número de paquete por la ubicación real en el archivo, indicada por un número de 32 bits. Esto le permitía enviar mensajes NAK que rebobinaban la transferencia hasta el punto de fallo, independientemente de la longitud del archivo. Esta misma función también se utilizaba para reiniciar las transferencias si fallaban o se interrumpían deliberadamente. En este caso, el receptor comprobaba la cantidad de datos recibidos previamente y enviaba un mensaje NAK con esa ubicación, lo que activaba automáticamente al remitente para que reiniciara la transferencia desde ese punto.
Arranque automático
El inicio automático simplificó la gestión al permitir que la máquina remitente iniciara la transferencia. Anteriormente, el usuario debía solicitar primero el archivo al remitente, lo que lo ponía en estado de espera, para luego regresar a su programa local e invocar un comando para iniciar la transferencia. Con la transferencia automática, simplemente solicitaba el archivo y el remitente activaba automáticamente la transferencia en el programa del usuario.
Variaciones
Aparecieron varias versiones modificadas de ZMODEM. Las implementaciones más destacadas fueron las de Omen Technology, Inc., de Chuck Forsberg. Estas incluían DSZ (DOS Send ZMODEM), GSZ (Graphical Send ZMODEM) y la omnipresente (l)rzsz para variantes de Unix .
ZedZap era una variante de ZMODEM con bloques de 8 KB para un mejor rendimiento en módems de alta velocidad. ADONTEC creó en 2002 y 2007 una extensión retrocompatible de ZMODEM con longitudes de bloque de 32 KB y 64 KB para aumentar el rendimiento en conexiones de alta velocidad sin errores, como las redes ISDN o TCP/IP .
El propio Forsberg incorporó varias mejoras a ZMODEM-90. La primera de ellas es MobyTurbo, que eliminó las comillas de control para mejorar aún más el rendimiento, en aproximadamente un 15 %. Incluso en redes que "consumen" caracteres de control, ZMODEM-90 se puede adaptar para entrecomillar solo aquellos caracteres que la red realmente consume, en lugar de todos los posibles. Una mejora similar permite que ZMODEM-90 funcione en redes de 7 bits, mientras que los protocolos anteriores (con la notable excepción de Kermit ) requerían 8 bits en mayor o menor medida. Finalmente, ZMODEM-90 incluye un sistema básico de compresión de codificación de longitud de ejecución para mejorar aún más el rendimiento en archivos sin comprimir.
En tiempos más recientes, los desarrolladores de Synchronet han creado una implementación moderna de X/Y/ZMODEM llamada SEXYZ, basada libremente en el paquete zmtx/zmrx, que se ejecuta de forma nativa en Windows y variantes de Unix, admite nombres de archivo largos y transferencias de datos más rápidas y fiables. La implementación de ZMODEM de SEXYZ también se ha incorporado al proyecto SyncTERM. Synchronet, SEXYZ y SyncTERM son proyectos de código abierto , multiplataforma y centrados en BBS.
LeechZmodem era una variante maliciosa de ZMODEM (entre otros derivados similares de XMODEM e YMODEM) que burlaba las cuotas de descarga de los BBS .
Limitaciones
- Algunos paquetes ZMODEM (por ejemplo, ZACK, ZRPOS) incluyen un desplazamiento de bytes dentro del archivo transferido como un entero sin signo de 32 bits. Este diseño limita la viabilidad de ZMODEM a la transferencia fiable de archivos de menos de 4 GB.
- Aunque el protocolo lo permita, la implementación de referencia (l)rzsz no puede codificar caracteres arbitrarios que no sean de control (por ejemplo, '~'), que suelen ser utilizados por programas de conexión TCP/IP como telnet y ssh como caracteres de escape de terminal del lado del cliente. Los usuarios deben deshabilitar la función de escape de terminal para lograr transferencias confiables a través de este tipo de enlaces, por ejemplo, ssh -e none user@hostname.
Referencias
- El protocolo de transferencia de archivos entre aplicaciones ZMODEM
- Historia del repositorio de código fuente RZ/SZ de Chuck Forsberg
- Controlador del protocolo de transferencia de archivos Synchronet External X/Y/Zmodem (SEXYZ)
- Transcripción de una conversación con Chuck Forsberg sobre ZMODEM de 1986.
Enlaces externos
- Evolución y selección de protocolos de transferencia de archivos
- protocolos de transferencia de archivos BBS
- Introducciones relacionadas con la informática en 1986