[Programmation réseau] Explication détaillée du protocole TFTP

00. Table des matières

01. Introduction au protocole TFTP

TFTP (Trivial File Transfer Protocol, Simple File Transfer Protocol) est un protocole de la suite de protocoles TCP/IP utilisé pour le transfert de fichiers simple entre clients et serveurs. Il fournit des services de transfert de fichiers simples et peu coûteux. Port Le numéro est 69.

TFTP est généralement implémenté sur la base du protocole UDP , mais il n'est pas certain que certains protocoles TFTP soient implémentés sur la base d'autres protocoles de transport. Le protocole TFTP est conçu principalement pour les transferts de petits fichiers, il ne possède donc pas beaucoup de fonctionnalités du FTP habituel. Par exemple, il peut uniquement obtenir ou écrire des fichiers à partir du serveur de fichiers, ne peut pas répertorier les répertoires et n'effectue pas d'authentification.

Le code TFTP occupe une petite quantité de mémoire, ce qui est très important pour les petits ordinateurs ou certains appareils à usage spécial. Ces appareils ne nécessitent pas de disque dur, mais nécessitent seulement une mémoire morte de petite capacité qui solidifie TFTP, UDP, et IP. C’est tout. Par conséquent, à mesure que la proportion de périphériques intégrés dans les équipements réseau continue d'augmenter, le protocole TFTP est de plus en plus utilisé.

02. format de paquet TFTP

Insérer la description de l'image ici

2.1 Présentation du format de paquet TFTP

TFTP définit un total de six types de paquets. Le type de paquet est déterminé par les deux premiers octets du paquet de données, que nous appelons le champ Opcode. Ces cinq types de paquets de données sont :

  • Paquet de demande de lecture de fichier : demande de lecture, abrégée en RRQ, la valeur du champ Opcode correspondant est 1

  • Package de demande d'écriture de fichier : demande d'écriture, abrégée en WRQ, la valeur du champ Opcode correspondant est 2

  • Paquet de données de fichier : données, en abrégé DATA, la valeur du champ Opcode correspondant est 3

  • Paquet de réponse : accusé de réception, abrégé en ACK, la valeur du champ Opcode correspondant est 4

  • Package d'informations sur l'erreur : Erreur, abrégé en ERREUR, la valeur du champ Opcode correspondant est 5

    Les formats de paquets de données RRQ et WRQ sont les mêmes, sauf que certains paramètres de plage de valeurs sont différents et que les trois formats de paquets de données restants sont différents.

  • Demander un package de récupération : accusé de réception, en abrégé ACK, la valeur du champ Opcode correspondant est 6

2.2 Paquet de requête de lecture/écriture (RRQ/WRQ=1/2)

Le format des paquets de données RRQ et WRQ :
\1. Code d'opération (2 octets), qui est utilisé pour indiquer le type du paquet de données actuel (une valeur de 1 indique que le paquet de données est une demande de lecture, 2 indique que le paquet de données le paquet de données est une demande d'écriture) ;

\2. Champ de longueur variable, utilisé pour représenter le nom du fichier à lire ou à télécharger. Il utilise le code ASCII et se termine par \0 ;

\3. Mode, qui est également un champ de longueur variable, est utilisé pour indiquer le type de données du fichier transféré. Si le fichier transféré est un fichier de chaîne, alors il remplit la chaîne "netascii". Si le fichier transféré est un fichier binaire, puis il remplit la chaîne " octet", ces chaînes se terminent par \0.

\4. Champs optionnels (timeout, blksize, tsize, etc., se terminant par \0)

Insérer la description de l'image ici

Analyse de capture de paquets de données

Insérer la description de l'image ici

analyse du protocole

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 Paquet de données (DATA=3)

Paquet de DONNÉES qui transmet des blocs de données,
\1. Code d'opération (2 octets)
\2. Numéro de bloc (2 octets)
\3. Données

Insérer la description de l'image ici

Analyse de capture de paquets de données
Insérer la description de l'image ici

analyse du protocole

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

2.4 Paquet de réponse (ACK=4)

Le paquet de réponse est une réponse aux données du fichier reçues
\ 1. Code d'opération (2 octets)
\ 2. Séquence de paquets de données (2 octets)

Insérer la description de l'image ici

Analyse de capture de paquets de données
Insérer la description de l'image ici

analyse du protocole

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

2.5 Paquet d'informations d'erreur (Erreur=5)

Erreur Paquet ERREUR
\1. Code d'opération (2 octets)
\2. Code d'erreur (2 octets)
\3. Raison spécifique de l'erreur (longueur variable)

Insérer la description de l'image ici

2.6 Paquet de réponse à la demande (ACK=6)

Le package de réponse à la demande est une réponse aux données de la demande. Il s'agit d'un package facultatif et peut ne pas être nécessaire dans certains cas, en fonction de la situation spécifique.
\1. Code d'opération (2 octets)
\2. Champs facultatifs (timeout, blksize, tsize, etc., se terminant par \0 et valeurs associées)

Insérer la description de l'image ici

Analyse de capture de paquets de données
Insérer la description de l'image ici

analyse du protocole

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. Processus de travail TFTP

Processus de téléchargement TFTP 3.1

La figure ci-dessous montre le diagramme de processus de téléchargement de la demande TFTP. Le téléchargement et le téléchargement sont essentiellement des directions de transmission de fichiers différentes.

Insérer la description de l'image ici

3.2 Processus de téléchargement TFTP

Le travail de TFTP commence avec le lancement par le client d'un RRQ ou d'un WRQ. Ici, nous prenons WRQ (demande d'écriture) comme exemple pour décrire le processus de travail de lecture et d'écriture, ainsi que la gestion des erreurs et d'autres contenus.
\1. Le serveur attend que le client envoie un paquet de demande d'écriture de fichier sur le port UDP 69.

\2. Le client envoie un paquet WRQ conforme au format de requête TFTP au serveur via UDP. Du point de vue d'un paquet UDP, le port source du paquet UDP est arbitrairement sélectionné par le client et le port de destination est le 69 du serveur.

\3. Après avoir reçu le paquet de requête du client, le serveur doit envoyer un ACK au client. Pour le paquet de demande d'écriture, le numéro de confirmation du paquet ACK envoyé par le serveur est 0.

\4. Le client envoie des données DATA au serveur, et le serveur reçoit les données et écrit le fichier.

\5. Lorsque la longueur des données DATA envoyées par le client est inférieure à 512 octets, le serveur considère que la requête WRQ est terminée.

04. Mode de transmission TFTP

\1. Netascii : Il s'agit d'une forme de code ASCII 8 bits, généralement utilisée pour transmettre des données de caractères.

\2. Octet : il s'agit d'un type de données source de 8 bits, généralement utilisé pour transmettre des données binaires.

\3. Mail : il renvoie les données renvoyées directement à l'utilisateur au lieu de les enregistrer sous forme de fichier, mais ce mode n'est plus pris en charge.

05. Débat

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. Annexe

Acho que você gosta

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