El Protocolo trivial de transferencia de archivos ( TFTP ) es un protocolo de transferencia de archivos simple y continuo que permite a un cliente obtener un archivo de un host remoto o colocarlo en él . Uno de sus usos principales es en las primeras etapas del arranque de los nodos desde una red de área local . TFTP se ha utilizado para esta aplicación porque es muy fácil de implementar.
TFTP se estandarizó por primera vez en 1981 [1] y la especificación actual del protocolo se puede encontrar en RFC 1350.
Debido a su diseño simple, TFTP se puede implementar fácilmente mediante código con un consumo de memoria reducido . Por lo tanto, es el protocolo de elección para las etapas iniciales de cualquier estrategia de arranque de red como BOOTP , PXE , BSDP , etc., cuando se apunta desde computadoras con muchos recursos a computadoras de placa única (SBC) y sistemas en un chip (SoC) con recursos muy bajos. También se utiliza para transferir imágenes de firmware y archivos de configuración a dispositivos de red como enrutadores , cortafuegos , teléfonos IP , etc. Hoy en día, TFTP prácticamente no se utiliza para transferencias por Internet.
El diseño de TFTP fue influenciado por el protocolo anterior EFTP , que era parte de la suite de protocolos de paquetes universales PARC . TFTP fue definido por primera vez en 1980 por IEN 133. [2] En junio de 1981, el Protocolo TFTP (Revisión 2) fue publicado como RFC 783 y posteriormente actualizado en julio de 1992 por RFC 1350 que solucionó, entre otras cosas, el síndrome del aprendiz de brujo . En marzo de 1995, la Extensión de opción TFTP RFC 1782 actualizada posteriormente en mayo de 1998 por RFC 2347, definió el mecanismo de negociación de opciones que establece el marco para las opciones de transferencia de archivos que se negociarán antes de la transferencia utilizando un mecanismo que es consistente con la especificación original de TFTP.
TFTP es un protocolo simple para transferir archivos, implementado sobre los protocolos UDP/IP utilizando el conocido puerto número 69. TFTP fue diseñado para ser pequeño y fácil de implementar, y por lo tanto carece de la mayoría de las características avanzadas que ofrecen los protocolos de transferencia de archivos más robustos. TFTP solo lee y escribe archivos desde o hacia un servidor remoto. No puede enumerar, eliminar o cambiar el nombre de archivos o directorios y no tiene disposiciones para la autenticación de usuarios. Hoy en día, TFTP generalmente solo se utiliza en redes de área local (LAN).
En TFTP, una transferencia se inicia cuando el cliente emite una solicitud para leer o escribir un archivo en particular en el servidor. La solicitud puede incluir opcionalmente un conjunto de parámetros de transferencia negociados propuestos por el cliente según los términos especificados por RFC 2347. Si el servidor acepta la solicitud, el archivo se envía en bloques de longitud fija de 512 bytes por defecto o la cantidad especificada en la opción negociada de tamaño de bloque definida por RFC 2348. Cada bloque de datos transferidos, que normalmente se transporta dentro de un único paquete IP para evitar la fragmentación de IP, debe ser reconocido por un paquete de reconocimiento antes de que se pueda enviar el siguiente bloque. Un paquete de datos de menos de 512 bytes o la opción de tamaño de bloque acordada señala la finalización de una transferencia. Si un paquete se pierde en la red, el destinatario previsto agotará el tiempo de espera y podrá retransmitir su último paquete (que puede ser de datos o un reconocimiento), lo que hará que el remitente del paquete perdido retransmita ese paquete perdido. El remitente debe tener a mano solo un paquete para la retransmisión, ya que el acuse de recibo de bloqueo garantiza que todos los paquetes anteriores se hayan recibido correctamente. Observe que ambos dispositivos involucrados en una transferencia se consideran remitentes y receptores. Uno envía datos y recibe acuses de recibo, el otro envía acuses de recibo y recibe datos.
TFTP define tres modos de transferencia: netascii, octet y mail.
TFTP utiliza UDP como protocolo de transporte . Una solicitud de transferencia siempre se inicia apuntando al puerto 69, pero los puertos de transferencia de datos son elegidos independientemente por el emisor y el receptor durante la inicialización de la transferencia. Los puertos se eligen al azar según los parámetros de la pila de red, normalmente de entre el rango de puertos efímeros . [4]
TFTP siempre ha estado asociado al arranque en red. Uno de los primeros intentos en este sentido fue el estándar RFC 906 de Bootstrap Loading using TFTP, publicado en 1984, que estableció el estándar RFC 783 de Trivial File Transfer Protocol publicado en 1981 para ser utilizado como el protocolo de transferencia de archivos estándar para la carga de bootstrap. Fue seguido poco después por el estándar de Bootstrap Protocol RFC 951 (BOOTP), publicado en 1985, que permitía a una máquina cliente sin disco descubrir su propia dirección IP, la dirección de un servidor TFTP y el nombre de un Network Bootstrap Program (NBP) para ser transferido por TFTP, cargado en memoria y ejecutado. El estándar de Dynamic Host Configuration Protocol RFC 2131 (DHCP) publicado en 1997 mejoró las capacidades de BOOTP. Finalmente, la versión 2.0 del Preboot Execution Environment (PXE) fue lanzada en diciembre de 1998, y la actualización 2.1 se hizo pública en septiembre de 1999 contando con TFTP como su protocolo de transferencia de archivos. [5] Intel ha decidido recientemente dar soporte amplio a PXE dentro de la nueva especificación UEFI extendiendo el soporte de TFTP a todos los entornos EFI/UEFI. [6] [7]
El protocolo original tiene un límite de tamaño de archivo de transferencia de 512 bytes/bloque x 65535 bloques = 32 MB. En 1998, este límite se amplió a 65535 bytes/bloque x 65535 bloques = 4 GB mediante la opción de tamaño de bloque TFTP RFC 2348. Si el tamaño de bloque definido produce un tamaño de paquete IP que excede la MTU mínima en cualquier punto de la ruta de red, se producirá fragmentación y reensamblado de IP, lo que no solo agregará más sobrecarga [8] sino que también provocará un fallo total de la transferencia cuando la implementación de la pila IP minimalista en la ROM BOOTP o PXE de un host no implementa (o no implementa correctamente) la fragmentación y reensamblado de IP. [9] Si los paquetes TFTP deben mantenerse dentro de la MTU estándar de Ethernet (1500), el valor del tamaño de bloque se calcula como 1500 menos los encabezados de TFTP (4 bytes), UDP (8 bytes) e IP (20 bytes) = 1468 bytes/bloque, lo que da un límite de 1468 bytes/bloque x 65535 bloques = 92 MB. Hoy en día, la mayoría de los servidores y clientes admiten la renovación del número de bloques (el contador de bloques vuelve a 0 o 1 [10] después de 65535), lo que da un tamaño de archivo de transferencia esencialmente ilimitado.
Dado que TFTP utiliza UDP, debe proporcionar su propio soporte de transporte y sesión. Cada archivo transferido a través de TFTP constituye un intercambio independiente. Clásicamente, esta transferencia se realiza en secuencia, con solo un paquete (ya sea un bloque de datos o un "reconocimiento") alternativamente en tránsito en la red en cualquier momento. Debido a esta estrategia de un solo bloque de datos en lugar de enviar una mayor cantidad de bloques de datos ininterrumpidos antes de pausar la transferencia para esperar el reconocimiento correspondiente (ventana), TFTP proporciona un bajo rendimiento, especialmente en enlaces de alta latencia . Microsoft introdujo TFTP en ventana en Windows 2008 como parte de sus Servicios de Implementación de Windows (WDS), en enero de 2015 se publicó TFTP Windowsize Option RFC 7440. Esto mejora sustancialmente el rendimiento para cosas como el arranque PXE sin el efecto secundario de fragmentación de IP que a veces se observa en Blocksize Option RFC 2348 [11].
TFTP no incluye mecanismos de inicio de sesión ni de control de acceso. Se debe tener cuidado al utilizar TFTP para transferencias de archivos en las que se necesita autenticación, control de acceso, confidencialidad o comprobación de integridad. Tenga en cuenta que esos servicios de seguridad se pueden proporcionar por encima o por debajo de la capa en la que se ejecuta TFTP. También se debe tener cuidado con los derechos otorgados a un proceso de servidor TFTP para no violar la seguridad del sistema de archivos del servidor. TFTP se instala a menudo con controles de modo que solo los archivos que tienen acceso de lectura público estén disponibles a través de TFTP. Además, normalmente no se permite enumerar, eliminar, renombrar y escribir archivos a través de TFTP. No se recomiendan las transferencias de archivos TFTP cuando las limitaciones inherentes del protocolo podrían generar problemas de responsabilidad insuperables. [12]