[Programación de red] Explicación detallada del protocolo tftp

00. Tabla de contenidos

01. Introducción al protocolo tftp

TFTP (Protocolo trivial de transferencia de archivos, Protocolo simple de transferencia de archivos) es un protocolo del conjunto de protocolos TCP/IP que se utiliza para la transferencia simple de archivos entre clientes y servidores. Proporciona servicios de transferencia de archivos sencillos y de bajo costo. Puerto El número es 69.

TFTP generalmente se implementa en función del protocolo UDP , pero no es seguro que algunos protocolos TFTP se implementen en función de otros protocolos de transporte. El protocolo TFTP está diseñado principalmente para transferencias de archivos pequeños, por lo que no tiene muchas de las características del FTP habitual. Por ejemplo, sólo puede obtener o escribir archivos del servidor de archivos, no puede enumerar directorios y no realiza autenticación.

El código TFTP ocupa una pequeña cantidad de memoria, lo cual es muy importante para computadoras más pequeñas o algunos dispositivos de propósito especial, estos dispositivos no requieren un disco duro, solo requieren una memoria de solo lectura de pequeña capacidad que solidifique TFTP, UDP, y IP Eso es todo. Por lo tanto, a medida que aumenta la proporción de dispositivos integrados en los equipos de red, el protocolo TFTP se utiliza cada vez más.

02. formato de paquete tftp

Insertar descripción de la imagen aquí

2.1 Descripción general del formato de paquete tftp

TFTP define un total de seis tipos de paquetes. El tipo de paquete está determinado por los dos primeros bytes del paquete de datos, que llamamos campo Opcode. Estos cinco tipos de paquetes de datos son:

  • Paquete de solicitud de archivo de lectura: solicitud de lectura, abreviada como RRQ, el valor del campo de código de operación correspondiente es 1

  • Paquete de solicitud de archivo de escritura: solicitud de escritura, abreviada como WRQ, el valor del campo de código de operación correspondiente es 2

  • Paquete de datos de archivo: datos, abreviado como DATOS, el valor del campo de código de operación correspondiente es 3

  • Paquete de respuesta: Confirmación, abreviado como ACK, el valor del campo Código de operación correspondiente es 4

  • Paquete de información de error: Error, abreviado como ERROR, el valor del campo de código de operación correspondiente es 5

    Los formatos de paquetes de datos de RRQ y WRQ son los mismos, excepto que algunas configuraciones de rango de valores son diferentes y los tres formatos de paquetes de datos restantes son diferentes.

  • Solicitar paquete de recuperación: acuse de recibo, abreviado como ACK, el valor del campo de código de operación correspondiente es 6

2.2 Paquete de solicitud de lectura/escritura (RRQ/WRQ=1/2)

El formato de los paquetes de datos RRQ y WRQ:
\ 1. Código de operación (2 bytes), que se utiliza para indicar el tipo de paquete de datos actual (un valor de 1 indica que el paquete de datos es una solicitud de lectura, 2 indica que el el paquete de datos es una solicitud de escritura);

\2.Campo de longitud variable, que se utiliza para representar el nombre del archivo a leer o cargar, utiliza código ASCII y termina en \0;

\3. Modo, que también es un campo de longitud variable, se utiliza para indicar el tipo de datos del archivo transferido. Si el archivo transferido es un archivo de cadena, entonces completa la cadena "netascii". Si el archivo transferido es un archivo binario, luego completa la cadena "octeto", estas cadenas terminan en \0.

\4. Campos opcionales (timeout, blksize, tsize, etc., que terminan en \0)

Insertar descripción de la imagen aquí

Análisis de captura de paquetes de datos.

Insertar descripción de la imagen aquí

análisis de protocolo

00 01                                       (操作码)
31 2e 63 00                                 (1.c(文件名), 以 \0 结尾 即 00)
6f 63 74 65 74 00                           (octet(文件传输方式), 以 \0 结尾 即 00)
62 6c 6b 73 69 7a 65 00                     (blksize(每次传输文件大小), 以 \0 结尾 即 00)
35 31 32 00                                 (字符串), 以 \0 结尾 即 00)
74 73 69 7a 65 00                           (tsize(文件大小), 以 \0 结尾 即 00)
30 00                                       (0(字符串), 以 \0 结尾 即 00)

2.3 Paquete de datos (DATOS=3)

Paquete de DATOS que transmite bloques de datos,
\1.Código de operación (2 bytes)
\2.Número de bloque (2 bytes)
\3.Datos

Insertar descripción de la imagen aquí

Análisis de captura de paquetes de datos.
Insertar descripción de la imagen aquí

análisis de protocolo

00 03                 (操作码)
00 01                 (block number)
.....                 (DATA)

2.4 Paquete de respuesta (ACK=4)

El paquete de respuesta es una respuesta a los datos del archivo recibido
\1. Código de operación (2 bytes)
\2. Secuencia del paquete de datos (2 bytes)

Insertar descripción de la imagen aquí

Análisis de captura de paquetes de datos.
Insertar descripción de la imagen aquí

análisis de protocolo

00 04             (操作码)
00 01             (block number)

2.5 Paquete de información de error (Error=5)

Paquete de error ERROR
\1. Código de operación (2 bytes)
\2. Código de error (2 bytes)
\3. Razón específica del error (longitud variable)

Insertar descripción de la imagen aquí

2.6 Solicitar paquete de respuesta (ACK=6)

El paquete de respuesta a la solicitud es una respuesta a los datos de la solicitud. Es un paquete opcional y puede no ser necesario en algunos casos, según la situación específica.
\1. Código de operación (2 bytes)
\2. Campos opcionales (timeout, blksize, tsize, etc., que terminan en \0 y valores relacionados)

Insertar descripción de la imagen aquí

Análisis de captura de paquetes de datos.
Insertar descripción de la imagen aquí

análisis de protocolo

00 06                                  (操作码)
62 6c 6b 73 69 7a 65 00                (blksize, 以 \0 结尾 即 00)
35 31 32 00                            (512(字符串), 以 \0 结尾 即 00)
74 73 69 7a 65 00                      (tsize(文件大小), 以 \0 结尾 即 00)
31 39 34 37 00                         (1947(字符串), 以 \0 结尾 即 00)

03. proceso de trabajo tftp

3.1 proceso de descarga tftp

La siguiente figura muestra el diagrama de proceso de descarga de solicitudes TFTP. La carga y la descarga son direcciones de transmisión de archivos esencialmente diferentes.

Insertar descripción de la imagen aquí

3.2 proceso de carga tftp

El trabajo de TFTP comienza cuando el cliente inicia un RRQ o WRQ. Aquí tomamos WRQ (solicitud de escritura) como ejemplo para describir el proceso de trabajo de lectura y escritura, así como el manejo de errores y otros contenidos.
\ 1. El servidor espera a que el cliente envíe un paquete de solicitud de escritura de archivo en el puerto UDP 69.

\ 2. El cliente envía un paquete WRQ que se ajusta al formato de solicitud TFTP al servidor a través de UDP. Desde la perspectiva de un paquete UDP, el cliente selecciona arbitrariamente el puerto de origen del paquete UDP y el puerto de destino es el 69 del servidor.

\ 3. Después de recibir el paquete de solicitud del cliente, el servidor debe enviar ACK al cliente. Para el paquete de solicitud de escritura, el número de confirmación del paquete ACK enviado por el servidor es 0.

\ 4. El cliente envía datos de DATOS al servidor, y el servidor recibe los datos y escribe el archivo.

\ 5. Cuando la longitud de los datos de DATOS enviados por el cliente es inferior a 512 bytes, el servidor considera que la solicitud WRQ está completa.

04. Modo de transmisión TFTP

\ 1. Netascii: Este es un código ASCII de 8 bits, generalmente utilizado para transmitir datos de caracteres.

\ 2. Octeto: este es un tipo de datos fuente de 8 bits, generalmente utilizado para transmitir datos binarios.

\ 3. Correo: devuelve los datos devueltos directamente al usuario en lugar de guardarlos como un archivo, pero este modo ya no es compatible.

05. Discusión

1.tftp服务介绍
	1)TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。
	2)tftp服务的端口号为69。
	3)TFTP是一个传输文件的简单协议,它基于UDP协议而实现,但是我们也不能确定有些TFTP协议是基于其它传输协议完成的。
	4)此协议设计的时候是进行小文件传输的。因此它不具备通常的FTP的许多功能,它只能从文件服务器上获得或写入文件,不能列出目录,不进行认证,它传输8位数据。
	5)传输中有三种模式:
		1》netascii,这是8位的ASCII码形式;
		2》另一种是octet,这是8位源数据类型;
		3》最后一种mail已经不再支持,它将返回的数据直接返回给用户而不是保存为文件。
	
2.tftp传输过程
	1)任何传输起自一个读取或写入文件的请求,这个请求也是连接请求。
	2)如果服务器批准此请求,则服务器打开连接,数据以定长512字节传输。
	3)每个数据包包括一块数据,服务器发出下一个数据包以前必须得到客户对上一个数据包的确认。
	4)如果一个数据包的大小小于512字节,则表示传输结束。如果数据包在传输过程中丢失,发出方会在超时后重新传输最后一个未被确认的数据包。
	5)通信的双方都是数据的发出者与接收者,一方传输数据接收应答,另一方发出应答接收数据。
	6)大部分的错误会导致连接中断,错误由一个错误的数据包引起。这个包不会被确认,也不会被重新发送,因此另一方无法接收到。如果错误包丢失,则使用超时机制。
	7)错误主要是由三种情况引起的:
		1》不能满足请求。
		2》收到的数据包内容错误,而这种错误不能由延时或重发解释。
		3》对需要资源的访问丢失(如硬盘满)。
	8)TFTP只在一种情况下不中断连接,这种情况是源端口不正确,在这种情况下,指示错误的包会被发送到源机。

3.tftp特点
	1)由于TFTP使用UDP,而UDP使用IP,IP可以还使用其它本地通信方法。因此一个TFTP包中会有以下几段:本地媒介头,IP头,数据报头,TFTP头,剩下的就是TFTP数据了。
	2)TFTP在IP头中不指定任何数据,但是它使用UDP中的源和目标端口以及包长度域。
	3)由于TFTP使用的包标记(TID)在这里被用做端口,因此TID必须介于0到65,535之间。
	4)TFTP头中包括两个字节的操作码,这个码指出了包的类型,大体上的TFTP包格式为:| Local Medium | Internet | Datagram | TFTP |
	
4.tftp优点
	1)TFTP可用于UDP环境;比如当需要将程序或者文件同时向许多机器下载时就往往需要使用到TFTP协议。
	2)TFTP代码所占的内存较小,这对于较小的计算机或者某些特殊用途的设备来说是很重要的,这些设备不需要硬盘,只需要固化了TFTP、UDP和IP的小容量只读存储器即可。当电源接通后,设备执行只读存储器中的代码,在网络上广播一个TFTP请求。网络上的TFTP服务器就发送响应,其中包括可执行二进制程序。设备收到此文件后将其放入内存,然后开始运行程序。这种方式增加了灵活性,也减少了开销。
	
5.初始链接
	1)初始连接时候需要发出WRQ(请求写入远程系统)或RRQ(请求读取远程系统),收到一个确定应答,一个确定可以写出的包或应该读取的第一块数据。
	2)通常确认包包括要确认的包的包号,每个数据包都与一个块号相对应,块号从1开始而且是连续的。因此对于写入请求的确定是一个比较特殊的情况,因此它的包的包号是0。
	3)如果收到的包是一个错误的包,则这个请求被拒绝。
	4)创建连接时,通信双方随机选择一个TID,因为是随机选择的,因此两次选择同一个ID的可能性就很小了。
	5)每个包包括两个TID,发送者ID和接收者ID。这些ID用于在UDP通信时选择端口,请求主机选择ID的方法上面已经说过了,在第一次请求的时候它会将请求发到TID 69,也就是服务器的69端口上。应答时,服务器使用一个选择好的TID作为源TID,并用上一个包中的TID作为目的ID进行发送。这两个被选择的ID在随后的通信中会被一直使用。
	6)下例是一个写入的例子,其中WRQ,ACK和DATA代表写入请求,确认和数据。
		1》主机A向主机B发出WRQ,其中端口为69。
		2》B机向A机发出ACK,块号为0,包括B和A的TID
			此时连接建立,第一个数据包以序列号1从主机开始发出。以后两台主机要保证以开始时确定的TID进行通信。
			如果源ID与原来确定的ID不一样,这个包会被认识为发送到了错误的地址而被抛弃。错误的包是被发送到正确端口的,但是包本身有错误。
			设想发送方发出一个请求,这个请求在网络的那个设备中被复制成两个包,接收方先后接收到两个包。接收方会认为为这是两个独立的请求,会返回两个应答。
			当这两个应答其中之一被接收到时,连接已经建立。第二个应答再到达时,这个包会被抛弃,而不会因为接收到第二个应答包而导致第一个建立的连接失败。
6.正常终止
	1)传输的结束由DATA数据标记,其包括0-511个字符。这个包可以被其它数据包确认。
	2)接收方在发出对最后数据包的确认后可以断开连接,当然,适当的等待是比较好的,如果最后的确定包丢失可以再次传输。
	3)如果发出确认后仍然收到最后数据包,可以确定最后的确认丢失。发送最后一个DATA包的主机必须等待对此包的确认或超时。
	4)如果响应是ACK,传输完成。如果发送方超时并不准备重新发送并且接收方有问题或网络有问题时,发送也正常结束。当然实现时也可以是非正常结束,但无论如何连接都将被关闭。
	
7.早终结
	如果请求不能被满足,或者在传输中发生错误,需要发送ERROR包。这仅是一种传输友好的方式,这种包不会被确认也不会被重新传输,因此这种包可能永远不会被接收到。因此需要用超时来侦测错误。

8.TFTP数据包
	TFTP支持五种类型的包,已经说明这五种类型的包:
	包头中包括了这个包所指定的操作码。
		opcode operation
		1.Read request (RRQ)
		2.Write request (WRQ)
		3.Data (DATA)
		4.Acknowledgment (ACK)
		5.Error (ERROR)

9.tftp命令
	man tftp
	tftp - Trivial File Transfer Protocol client
	tftp是一个客户端,是一个不重要轻量级的文件传输协议,用于传输文件到远程主机上或从远程机器上下载数据。
	tftp [-4][-6][-v][-l][-m mode] [host [port]] [-c command]

10.in.tftpd命令
	man in.tftpd
	tftpd - Trivial File Transfer Protocol server
	in.tftpd [options...]  directory...
	
11.tftp实现
	tftp包有:tftp,tftp-server
	rpm -ql tftp
		/usr/bin/tftp
		/usr/share/doc/tftp-0.49
		/usr/share/doc/tftp-0.49/CHANGES
		/usr/share/doc/tftp-0.49/README
		/usr/share/doc/tftp-0.49/README.security
		/usr/share/doc/tftp-0.49/README.security.tftpboot
		/usr/share/man/man1/tftp.1.gz
	rpm -ql tftp-server
		/etc/xinetd.d/tftp
		/usr/sbin/in.tftpd
		/var/lib/tftpboot(库)
		/usr/share/doc/tftp-server-0.49
		/usr/share/doc/tftp-server-0.49/CHANGES
		/usr/share/doc/tftp-server-0.49/README
		/usr/share/doc/tftp-server-0.49/README.security
		/usr/share/doc/tftp-server-0.49/README.security.tftpboot
		/usr/share/man/man8/in.tftpd.8.gz
		/usr/share/man/man8/tftpd.8.gz

06. Apéndice

Supongo que te gusta

Origin blog.csdn.net/dengjin20104042056/article/details/133045783
Recomendado
Clasificación