前面我們嘗試了FTP和SFTP兩個協議的使用方式,都是通過圖形化的界面來使用的,也是最常用的使用方式,但是也是支持命令行操作的,感興趣可以自己網上去搜一下相關的命令。
這一篇文章我要介紹的是TFTP協議,這個協議在使用中一般不是圖形化的使用,一般都是通過命令來進行操作。
典型的使用場景就是嵌入式設備的程序下載,用你的開發機(或者編譯機)作為文件服務器,嵌入式設備通過網絡連接到服務器作為客戶端,通過命令就可以從服務器下載文件,下載的文件一般都是二進制程序或者相關的配置文件。
為什么嵌入式常用TFTP?
我覺得跟主要還是他的方便性更優,TFTP不需要進行身份驗證,只要你知道服務器的地址和文件列表,你就可以下載他的文件,同時使用UDP協議使它的傳輸速度也比FTP更快。
但是TFTP缺點也很明顯,它不及FTP安全,同時TFTP的UDP對傳輸質量保障也不如FTP的TCP那樣好。
下面我們還是從服務器搭建和客戶端測試來說明如何使用TFTP。
TFTP服務端
和兩種情況下都可能需要作為TFTP服務器,所以我們這里講解兩種環境下的TFTP服務器搭建。
環境
ubuntu@ubuntu-virtual-machine:~$ mkdir ~/tftp_root
ubuntu@ubuntu-virtual-machine:~$ sudo apt install tftp-hpa
ubuntu@ubuntu-virtual-machine:~$ sudo apt install tftpd-hpa
ubuntu@ubuntu-virtual-machine:~$ sudo apt install xinetd
修改配置文件/etc//tftpd-hpa的內容為:
# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/ubuntu/tftp_root/"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="-l -c -s"
新建配置文件/etc/.d/tftp,其內容為:
server tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /home/ubuntu/tftp_root/
disable = no

per_source = 11
cps = 100 2
flags = IPv4
}
打開69號端口的防火墻限制
ubuntu@ubuntu-virtual-machine:~$ sudo ufw allow 69/udp
重新啟動tftpd服務
ubuntu@ubuntu-virtual-machine:~$ sudo service tftpd-hpa restart
至此,下的TFTP服務配置完成。
環境
可以訪問下面的官網下載軟件對應版本。
安裝以后打開軟件,這是一個非常輕量化的軟件。界面如下:
tftp
默認打開就是在Tftp 功能下。
“ ”表示你將要作為文件服務的TFTP目錄;
“ ”表示你創建服務器使用的網卡,這里很重要否則客戶端無法正常訪問,簡單的方式就是你要確保客戶端可以通過ping通你選擇的網卡的本機IP地址,比如我這里選擇無線網卡的地址是192.168.3.26;
選擇完成這兩個信息以后TFTP服務就已經搭建完成了。
這里也需要配置一下的防火墻,開放規則也是69端口,也可以直接把防火墻關閉。
TFTP客戶端
這里也講兩種客戶端使用方法,一種是下使用作為客戶端,一種是在嵌入式Linux下使用tftp命令作為客戶端的使用,主要是第二種。
環境
打開:
tftp
如圖點擊“Tftp ”,輸入你的服務器IP地址,端口69;
“Local File”寫入你本地存儲或需要上傳到服務器的文件地址;
“ File” 寫入你下載的服務器文件地址或你需要上傳到服務器的文件對應地址;
“Get”按鈕用于將服務器上的文件(即 File)下載并保存為你的本地文件(即Local File);
“Put”按鈕用于將你本地文件(即Local File)上傳到服務器并存儲為設置的文件地址(即 File);
其他區域你就當沒看見就行了,TFTP客戶端就這兩個功能。
嵌入式Linux環境
我這里使用我的樹莓派作為客戶端來訪問搭建的TFTP服務器作為演示。
pi@raspberrypi:~ $ sudo apt install tftp
pi@raspberrypi:~ $ tftp
tftp> ?
Commands may be abbreviated. Commands are:
connect connect to remote tftp
mode set file transfer mode
put send file
get receive file
quit exit tftp
verbose toggle verbose mode
trace toggle packet tracing

status show current status
binary set mode to octet
ascii set mode to netascii
rexmt set per-packet retransmission timeout
timeout set total retransmission timeout
? print help information
tftp> connect 192.168.3.26
tftp> get test.txt
Received 6 bytes in 0.0 seconds
pi@raspberrypi:~ $ tftp 192.168.3.26
tftp> put test.txt
Sent 14 bytes in 0.0 seconds
文末
TFTP是一個小型且易用的文件分享方式,主要用在不方便配置FTP工具的情況下使用。
uboot使用的tftp命令有一些差別,具體命令的使用的時候你一定能明白本地文件上傳到服務器,只要你明白原理和基本的操作步驟。
同時現在交叉編譯環境下的文件傳輸還有一個更好的方案:NFS本地文件上傳到服務器,又叫網絡文件系統,這個后面找時間為大家整理一下。