TFTP (Trivial File Transfer Protocol): un protocolo muy simple para la transferencia de archivos
Para que dos sistemas informáticos puedan intercambiar datos en la red, es indispensable disponer de una base de comunicación común. Uno de los protocolos más simples desarrollados con este fin es el Trivial File Transfer Protocol (TFTP), un protocolo que tuvo mucha importancia durante los primeros tiempos de Internet.
¿Qué es el protocolo TFTP?
El protocolo Trivial File Transfer Protocol, en su forma abreviada TFTP, es un protocolo cliente-servidor muy simple que regula la transferencia de archivos en redes informáticas. Se definió originalmente en junio de 1981 en el RFC 783, si bien en la actualidad está vigente el estándar RFC 1350, publicado en 1992. Por defecto, el protocolo TFTP se basa en el protocolo mínimo de nivel de transporte UDP (User Datagram Protocol), que ofrece la posibilidad de transmitir datos sin necesidad de una conexión fija entre los miembros de la comunicación. No obstante, también es posible implementar el protocolo TFPT basándose en otros protocolos diferentes.
Se trata de un protocolo de transferencia de archivos que funciona mediante paquetes de datos. Forma parte de la familia de protocolos TCP/IP y fue específicamente diseñado para que su implementación fuese lo más sencilla y ligera posible. Por esta razón, su funcionalidad consiste principalmente en la lectura o escritura de un archivo o un correo electrónico de un servidor. Sin embargo, con el protocolo TFTP no es posible listar directorios o establecer permisos usando chmod. TFTP utiliza el puerto 69. Posteriormente, la comunicación se produce a través de números de puerto asignados individualmente (entre el 1024 y el 65535), que el servidor del protocolo TFTP envía al cliente solicitante a través de identificadores TID (Transfer Identifiers)
Muchos sistemas operativos tienen implementados un servidor y un cliente TFTP propios para poder realizar la transferencia de archivos a través del protocolo. Por ejemplo, muchas versiones Linux y Windows (especialmente en la versión servidor) presentan por defecto las herramientas de línea de comandos tftpd (servidor) y tftp (cliente). Además, existen otras soluciones de terceros, como el software de código abierto Tftpd32, que incluye tanto al servidor como al cliente.
¿Cómo funciona el protocolo TFTP?
La transferencia de archivos a través de TFTP se basa siempre en una solicitud de acceso del cliente, bien de lectura bien de escritura. Esta solicitud funciona al mismo tiempo como petición de conexión que se concede automáticamente en el momento en el que el servidor acepta el acceso. A continuación, el cliente o el servidor envía el archivo que corresponda en bloques de tamaño fijo. En las primeras versiones del protocolo, se utilizaba un valor fijo de 512 bytes pero, a partir del RFC 2348, el servidor y el cliente tienen la posibilidad de negociar en cada caso el tamaño del bloque.
Originalmente, el tamaño de los archivos enviados a través de TFTP estaba limitado a 32 MB. Pero desde que publicaron el RFC 2347 en 1998, se aumentó el límite a 4GB.
La transferencia se realiza bloque a bloque. El servidor no envía un nuevo bloque hasta que reciba el paquete de confirmación del bloque anterior. El paquete de datos final se identifica por ser más pequeño del tamaño establecido. Si un paquete se pierde se generará un timeout, tras el que se efectuará la retransmisión del último paquete. De esta manera, el emisor del paquete perdido sabrá que tiene que retransmitir dicho paquete. Cualquier error que ocurra al transferir archivos mediante TFTP dan lugar a paquetes de error que en la mayoría de los casos causan la finalización de la transferencia. Las posibles causas de error son:
- No es posible aceptar una solicitud de transferencia, por ejemplo, porque el archivo no se ha podido encontrar, el usuario no existe o se ha producido una violación de permisos (archivo protegido, etc.).
- Los clientes o servidores reciben un paquete que no se puede explicar por un retraso o duplicación en la red. Es el caso, por ejemplo, de paquetes con formato incorrecto.
- Se pierde el acceso a un recurso necesario, por ejemplo, si no hay espacio en el disco duro.
¿Cómo se estructuran los paquetes TFTP?
El protocolo TFTP utiliza cinco tipos de paquetes, cada uno de los cuales empieza con un campo de código de operación de 16 bits (Operations Code) con el valor correspondiente:
Código de operación | Tipo de paquete | Descripción |
---|---|---|
1 | RRQ (Read request) | Solicitud de lectura |
2 | WRQ (Write request) | Solicitud de escritura |
3 | DATA (Data) | Paquete de datos |
4 | ACK (Acknowledgment) | Paquete de confirmación |
5 | ERROR (Error) | Paquete de error |
Sin embargo, el valor del código de operación no es el único componente que distingue la estructura de los tipos de paquetes listados.
Crear paquetes de lectura (RRQ) y paquetes de escritura (WRQ) TFTP
El cliente TFTP comienza la operación al enviar al servidor TFTP una solicitud de lectura (paquete RRQ) o de escritura (paquete WRQ), que se diferencian solo en el código de operación. Por lo demás, los dos tipos de paquetes se caracterizan por el siguiente formato:
Los mensajes RRQ y WRQ empiezan los dos con el campo de código de la operación de 16 bits que caracteriza al protocolo. Como se muestra en la primera tabla, los paquetes RRQ utilizan el valor "1", mientras que los paquetes WRQ utilizan el valor "2". A esto le sigue una secuencia de bits en formato NetASCII de tamaño variable que contiene el nombre del archivo que hay que leer o enviar. Este campo de 8 bits está formado por ceros.
El formato NetASCII es un formato de 8 bits ASCII especial que deja sin definir los caracteres de control que no suelen utilizarse. Contiene el bloque completo de 95 caracteres imprimibles desde x20 a x7E (32-126) y algunos caracteres especiales (concretamente NUL, CR, LF).
Otra cadena de longitud variable contiene la información sobre el modo de transferencia de los datos. Se definen tres variantes “netascii”, "octeto” (para transferir datos de 8 bits) y “mail” (para efectuar la transferencia a una dirección de correo). El final de este campo se indica mediante un grupo de ceros de 8 bits.
Crear paquetes de datos (DATA) en TFTP
Los paquetes DATA contienen archivos que se van a intercambiar entre cliente y servidor. La transferencia de estos datos se realiza en bloques, por lo que un mensaje DATA en TFTP contiene exclusivamente una parte del archivo, salvo en aquellos casos en que el tamaño total sea inferior al tamaño establecido por defecto en 512 bytes o el tamaño especificado para ese bloque concreto. El formato de los paquetes de datos tiene la siguiente apariencia:
Los paquetes DATA también comienzan con el campo de código de operación que, en este caso, tiene asignado el valor "3". La siguiente secuencia de 16 bits identifica el número del bloque de datos, donde el valor "1" sirve como número de inicio. Este valor se incrementa automáticamente de uno en uno con cada bloque de datos adicional asociado al archivo. Los bloques pertenecen al campo de datos y tienen un tamaño de 0 a 512 bytes (4096 bits), a menos que el servidor y el cliente TFTP hayan establecido un tamaño máximo diferente para los bloques. El último bloque, con el que se indica el final de la transferencia, es al menos un bit más pequeño del tamaño máximo estipulado. Es decir, con un tamaño por bloque de 512 bytes, el último bloque tendría de 0 a 511 bytes. Si se da el caso de que el último paquete con el resto de archivos tuviese el mismo tamaño que los bloques anteriores, el remitente todavía haría llegar un paquete con un bloque de datos vacío.
Estructura de los paquetes ACK del protocolo TFTP
Todos los paquetes WRQ, así como todos los paquetes de datos que no marcan el final de la transferencia de archivos, deben ser confirmados mediante un mensaje ACK siempre y cuando el Trivial File Transfer Protocol funcione correctamente (salvo que se produzca un timeout).
Las solicitudes de acceso de lectura a un archivo (paquetes RRQ) no son confirmadas por ACK sino por paquetes DATA.
La estructura de estos mensajes de confirmación es muy simple:
Los mensajes ACK utilizados en la comunicación del protocolo TFTP están formados por un código de operación de 16 bits, que toma el valor "4", y el número de 16 bits del bloque de datos que confirma el mensaje ACK. Si se trata de una respuesta a una solicitud WRQ, el paquete ACK tiene como número de bloque de datos el valor "0".
Estructura del mensaje de error en TFTP (ERROR)
El cliente o el servidor envían los mensajes de ERROR en cuanto se produce un fallo en la comunicación TFTP. Por ello, estos paquetes son una posible respuesta a todos los tipos de paquetes ya listados. Los paquetes de error están estructurados de la siguiente manera:
Al código de operación con valor "5", que aparece en los mensajes de ERROR, le sigue un campo de 16 bits con el código de error. Por ejemplo, el valor "1" significa que no se pudo encontrar el archivo correspondiente, mientras que el valor "6" indica al receptor que el archivo ya existe. El mensaje de error que se muestra ayuda al usuario a comprender el problema. Ese es uno de los motivos por el que esta cadena de longitud variable se encuentra normalmente en formato NetASCII. El paquete contiene al final un campo de 8 bits formado por ceros.
Pros y contras del protocolo TFTP
Una de las principales ventajas del protocolo TFTP es su simplicidad, pues está diseñado para permitir la escritura y la lectura de archivos sin tener que establecer una conexión entre el cliente y el servidor. Por ello, el protocolo TFTP no solo es fácil de implementar, sino que también es el precursor de la transferencia rápida de archivos. Los identificadores TID y los números de bloque de datos únicos hacen que el archivo llegue en su totalidad al destinatario.
Sin embargo, la falta de cifrado y de un mecanismo de control de autenticación y acceso hacen que el envío de archivos confidenciales a través del protocolo TFTP suponga riesgos altos. En su lugar, pueden utilizarse otras alternativas más seguras como FTP, un protocolo más complejo. Además, muchos servidores TFTP no permiten eliminar y renombrar archivos.
¿En qué casos se utiliza el Trivial File Transfer Protocol?
El protocolo TFTP está estrechamente relacionado con el llamado arranque en la red (también conocido como "bootstrapping"). Con esta técnica, que se utilizó especialmente en la década de los años 80, un ordenador de red obtiene e inicia el sistema operativo desde un servidor central. Especialmente en el caso de terminales y estaciones de trabajo sin disco duro, que no permitían la instalación de su propio sistema operativo, el desarrollo y la implementación del protocolo TFTP fue crucial. El protocolo de transferencia de archivos era compatible con BOOTP, publicado en 1985, que permitía a los clientes de la red obtener de forma automática la dirección del servidor TFTP.
Hoy en día, el protocolo Trivial File Transfer Protocol ya no es tan popular. En las redes donde los usuarios disponen de sus propios sistemas operativos de forma estándar, el método de arranque solo se encuentra de forma aislada y modificada. Por ejemplo, las instalaciones del sistema, el mantenimiento, las actualizaciones de firmware o los análisis de virus pueden ayudar a reducir la sobrecarga administrativa a través de los llamados sistemas operativos auxiliares. También en el caso de las memorias de solo lectura (ROM), es frecuente encontrar implementaciones de TFTP debido a que requieren poco esfuerzo, pues este protocolo no exige que haya una conexión. Además, los servidores TFTP se utilizan para guardar las configuraciones y crear copias de seguridad de la imagen CISCO IOS y para almacenar los registros de carga de las centrales de Siemens.