一、tftp介紹
TFTP(Trivial File Transfer Protocol,簡單文件傳輸協議)是TCP/IP協議族中的一個用來在客戶機與服務器之間進行簡單文件傳輸的協議,提供不復雜、開銷不大的文件傳輸服務。端口號為69.
二、目的
TFTP是一個傳輸文件的簡單協議,它基於UDP協議而實現,但是我們也不能確定有些TFTP協議是基於其它傳輸協議完成的。此協議設計的時候是進行小文件傳輸的。因此它不具備通常的FTP的許多功能,只能從文件服務器上獲得或寫入文件,不能列出目錄,不進行認證,它傳輸8位數據。傳輸中有三種模式:
- netascii,這是8位的ASCII碼形式,
- 另一種是octet,這是8位源數據類型;
- 最后一種mail已經不再支持,它將返回的數據直接返回給用戶而不是保存為文件。
三、概況
任何傳輸起自一個讀取或寫入文件的請求,這個請求也是連接請求。如果服務器批准此請求,則服務器打開連接,數據以定長512字節傳輸。每個數據包包括一塊數據,服務器發出下一個數據包以前必須得到客戶對上一個數據包的確認。如果一個數據包的大小小於512字節,則表示傳輸結束。如果數據包在傳輸過程中丟失,發出方會在超時后重新傳輸最后一個未被確認的數據包。通信的雙方都是數據的發出者與接收者,一方傳輸數據接收應答,另一方發出應答接收數據。大部分的錯誤會導致連接中斷,錯誤由一個錯誤的數據包引起。這個包不會被確認,也不會被重新發送,因此另一方無法接收到。如果錯誤包丟失,則使用超時機制。錯誤主要是由下面三種情況引起的:不能滿足請求,收到的數據包內容錯誤,而這種錯誤不能由延時或重發解釋,對需要資源的訪問丟失(如硬盤滿)。TFTP只在一種情況下不中斷連接,這種情況是源端口不正確,在這種情況下,指示錯誤的包會被發送到源機。這個協議限制很多,這些都是為了實現起來比較方便而進行的。
四、應用
在開發板上調試代碼,使用的是交叉編譯環境,即在電腦上編譯,在開發板上運行,在前面電腦上編譯后的可執行,通過存儲介質(U盤、TF卡)拷貝,然后掛載到開發板上,再進行運行。為減少中間拷貝、掛載操作,現提供一種更為便捷的方式,即tftp功能,此功能將電腦設置為tftp服務器,開發板通過網絡直接在電腦上獲取文件。
- tftp服務器的搭建和測試
- 搭建服務器
– 安裝xinetd,sudo apt-get install xinetd
– 安裝tftp 和tftpd,sudo apt-get install tftp tftpd
– 配置/etc/xinetd.d/tftp文件(一定要對齊,嚴格按照以下格式輸入!)
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/tftpboot/
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
注意:server_args 配置了路徑,是tftp獲取文件的路徑,如果客戶端想要獲取服務器的文件,只會在這里面找,因此需要將文件放到該目錄下。
- tftp文件中的/var/tftpboot是服務器的目錄
– 新建tftp服務器目錄mkdir /var/tftpboot
– 修改權限為777 : chmod 777 /var/tftpboot
– 重啟xinetd服務sudo /etc/init.d/xinetd restart
- 本機測試
– 在/var/tftpboot 下面建立一個文件test,輸入任意內容
– 啟動另一個終端
– 輸入命令tftp 127.0.0.1
– 輸入get test
– 輸入q可以退出
– 退出后,使用ls命令可以發現當前目錄下有test文件,如果這個文件和服務器中的test文件內容一模一樣,表明服務器搭建成功
- 同一網段的概念
“同一網段” – IP和子網掩碼做與運算得到網絡標識,如果兩個網絡的網絡標示一樣,則在同一網段.
網線接到交換機
– 一個局域網的網絡協議,使用UDP協議工作, 主要有兩個用途:
給內部網絡或網絡服務供應商自動分配IP地址;
演示計算網絡標識,確認IP在同一網段.
- 開發板與tftp服務器的文件傳輸
需要具備的3個條件:
1、開發板與tftp服務器在同一網段,且沒有IP沖突。
2、文件放在指定的目錄下,具體的路徑在配置服務器時已經寫入。
3、客戶端想要獲取文件,需要知道文件名。
具備以上條件,通過 tftp 命令進行操作:
ftfp命令介紹:
在迅為4412提供的最小系統里面輸入tftp有相應的介紹:
[root@iTOP-4412]# tftp
BusyBox v1.21.1 (2014-10-17 01:48:59 PDT) multi-call binary.
Usage: tftp [OPTIONS] HOST [PORT]
Transfer a file from/to tftp server
-l FILE Local FILE
-r FILE Remote FILE
-g Get file
-p Put file
-b SIZE Transfer blocks of SIZE octets
例:在tftp服務器的 /var/tftpboot 目錄下有 test.txt文件,內容為 hello world!
在開發板上使用:
1、不更名獲取
tftp -g -l/-r test 192.168.1.106
解釋:
-g :下載
-l/-r:在不更改獲取文件名的情況下,兩者都可以
test:獲取的文件名
192.168.1.106:tftp服務器的IP
獲取的文件存放在當前路徑下。
[root@iTOP-4412]# tftp -g -l test 192.168.1.106
[ 835.761330] [dm96-TxRound].2 for LEN_ODD tail_room +1, rslt add 1
[root@iTOP-4412]# ls
test
[root@iTOP-4412]# cat test
hello world!
2、更名獲取
tftp -g -l hello -r test 192.168.1.106
解釋:
-g :下載
-l :存放到本地的文件
hello:存放到本地的文件名
-r :獲取的文件
test :獲取的文件名
192.168.1.106 :tftp服務器的IP
[root@iTOP-4412]# tftp -g -l hello -r test 192.168.1.106
[ 1190.843793] [dm96-TxRound].3 for LEN_ODD tail_room +1, rslt add 1
[root@iTOP-4412]# ls
hello
[root@iTOP-4412]# cat hello
hello world!