TFTP 服務器搭建和測試
關于TFTP:TFTP(Trivial File Transfer Protocol,簡單文件傳輸協議),是一個基于UDP 協議實現 的用于在客戶機和服務器之間進行簡單文件傳輸的協議,適合于開銷不大、不復雜的應用場合
搭建服務器
首先,打開ubuntu終端,輸入命令“sudo apt-get install xinetd”,安裝xinetd
【注釋:xinetd 的主要作用是監聽并管理各種網絡服務的連接請求。
它可以通過配置文件來定義服務及其相關參數,如監聽端口、協議類型、啟動腳本等。當有客戶端發送連接請求時,xinetd 可以根據配置文件中的規則決定是否接受連接并將連接轉發給相應的服務進程處理。這種按需啟動服務的方式可以極大地減少系統資源的消耗,提高系統的安全性和效率。】
輸入命令“sudo apt-get install tftp tftpd”安裝tftp 和tftpd,然后建立TFTP 的配置文件,使用命令“vi /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
}
【注釋:service tftp: 定義了服務名稱為 tftp
socket_type = dgram: 指定了使用數據報(datagram)類型的套接字進行通信
server = /usr/sbin/in.tftpd: 指定了 tftp 服務器進程的可執行文件路徑
server_args = -s /var/tftpboot/: 指定了 tftp 服務器進程的參數,其中 -s 表示指定 TFTP 的根目錄為 /var/tftpboot/ ——————TFTP 客戶端就是從這個目錄里面獲取服務器上的文件
】
之后建立mkdir /var/tftpboot 建立tftp 服務器的目錄,設置訪問權限777
之后輸入:sudo /etc/init.d/xinetd restart 命令重啟xinetd 服務
這一步就搭建好了服務器
服務器測試
在/var/tftpboot (上面提到的TFTP 的根目錄)下面建立一個文件test,在里面輸入hello world,之后打開另一個終端,輸入tftp 127.0.0.1,之后輸入get test獲取test文件,輸入q退出tftp
之后用ls看有沒有test文件,如果有就用cat查看文件內容是不是hello world,如果是就測試成功完成。
【注釋:
- tftp:表示要使用 TFTP 協議進行文件傳輸。
- 127.0.0.1:表示本地回環地址,也就是指向本地計算機的 IP 地址。
通過運行這個命令,你可以在本地計算機上創建一個 TFTP 客戶端,并嘗試與同一臺本地計算機上運行的 TFTP 服務器進行文件傳輸
】
開發板實現TFTP 文件傳輸
IP地址的查看
用ifconfig看的是Ubuntu系統下的IP,使用SSH 軟件和Ubuntu 連通傳文件,就需要先在Ubuntu 下查看IP 地址。
開發板的IP,在查看最小文件系統的etc 文件可以看到默認的IP地址
子網掩碼的查看
使用ifconfig,可以查看Ubuntu 系統下的子網掩碼
查看最小文件系統的etc/eth0-setting 文件可以看到默認的子網掩碼
如何確認IP地址在不在一個網段:
如果大家計算發現Ubuntu 系統的IP 和開發板的IP 不在同一網段,則需要修改開發板的
IP。【因為如果Ubuntu系統的IP地址與開發板的IP地址不在同一網段,它們之間無法直接進行通信。在局域網中,不同網段的設備之間需要通過路由器或者網絡設備進行數據包轉發才能實現通信。如果想Ubuntu系統和開發板能夠互相通信,需要將它們的IP地址設置在同一網段內。這樣它們就可以直接通過局域網進行通信,而無需經過路由器。】
單純的兩個IP 不能直接拿來確認是不是在同一網段,必須結合子網掩碼經過計算才能得出
結論。
計算方法是:兩個IP 分別和相應的子網掩碼做與運算,得出的結果相等則表明在同一網段
如果要改開發板的默認的IP,子網掩碼,網關,DNS,MAC,要在文件系統的etc/eth0-setting 文件里更改
客戶端的測試
首先看一下TFTP 服務器的IP 地址,輸入“ifconfig”
可見tftp的ip地址是192.168.1.109,開發板的默認IP 是192.168.1.230,它們在同一個網段
之后開發板連到電腦上,然后輸入ping 命令確認開發板和TFTP 服務器是連通
超級終端返回“xx bytes from xx.xx.xx.xx"就是連通的
在開發板的串口輸入:tftp -g -l test -r test 192.168.1.109,獲取文件test
【注釋:
- tftp:表示要使用TFTP協議進行文件傳輸。
- -g:表示使用“get”模式,即從服務器下載文件到客戶端。
- -l test:表示將下載的文件保存為本地文件名為test。
- -r test:表示從服務器上獲取的文件名為test。
- 192.168.1.109:表示TFTP服務器的IP地址,即文件傳輸的目標地址。】
之后可以用cat指令去查看下載的test文件,看看是不是‘hello world”,是的話就說明測試成功
我們之前調試程序都是用U盤將某個文件掛載在開發板上,現在我們可以用TFTP去調試程序:
在虛擬機的Ubuntu 上編寫過一個輸出helloworld 的小程序,然后通過交叉編譯器編譯這個程序生成了可執行文件helloworld,通過cp 命令把這個可執行程序helloworld 拷貝到了/var/tftpboot 目錄下,在開發板的串口上執行“tftp -g -l helloworld -rhelloworld 192.168.1.109”
輸入ls 命令查看一下當前目錄,可以看到已經有helloworld 這個文件了,使用命令“./helloworld”運行程序,會發現輸出”hello world“