TFTP(Trivial File Transfer Protocol,簡單文件傳輸協議)是TCP/IP協議族中的一個用來在客戶機與服務器之間進行簡單文件傳輸的協議,提供不復雜、開銷不大的文件傳輸服務。TFTP承載在UDP上,提供不可靠的數據流傳輸服務,不提供存取授權與認證機制,使用超時重傳方式來保證數據的到達。
一、在談TFTP之前,先簡單講一下Linux網絡配置,網絡中最重要的當然是IP地址了,這裡不講IP協議,在後面的網絡編程再講解,這裡主要學習一下Linux下配置IP,配置IP地址的方法有兩種:
1、配置靜態IP:在主機進入網絡之前,事先未主機設置固定的IP地址;
2、配置動態IP:選擇DHCP網絡服務,在主機進行網絡之後,動態的隨機獲取IP地址;
當然,大家都知道ifconfig這個命令:
- fs@ubuntu:~/qiang/tftp$ ifconfig
- eth0 Link encap:Ethernet HWaddr 00:0c:29:6c:c2:ec
- inet addr:172.16.58.130 Bcast:172.16.58.255 Mask:255.255.255.0
- inet6 addr: fe80::20c:29ff:fe6c:c2ec/64 Scope:Link
- UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
- RX packets:337 errors:0 dropped:0 overruns:0 frame:0
- TX packets:358 errors:0 dropped:0 overruns:0 carrier:0
- collisions:0 txqueuelen:1000
- RX bytes:123712 (123.7 KB) TX bytes:42430 (42.4 KB)
- Interrupt:19 Base address:0x2024
-
- lo Link encap:Local Loopback
- inet addr:127.0.0.1 Mask:255.0.0.0
- inet6 addr: ::1/128 Scope:Host
- UP LOOPBACK RUNNING MTU:16436 Metric:1
- RX packets:149 errors:0 dropped:0 overruns:0 frame:0
- TX packets:149 errors:0 dropped:0 overruns:0 carrier:0
- collisions:0 txqueuelen:0
- RX bytes:10307 (10.3 KB) TX bytes:10307 (10.3 KB)
-
- fs@ubuntu:~/qiang/tftp$
如果ifconfig命令不帶任何參數時,用於顯示當前主機中狀態為“活動”的網絡接口信息;
當然,ifconfig命令可以修改IP地址:
- fs@ubuntu:~/qiang/tftp$ sudo ifconfig eth0 192.168.3.51
但是這是動態的修改IP地址,重啟以後,IP地址又變回原來的靜態IP地址;
修改IP地址除了可以在圖形界面中修改,也可以在配置文件中修改,這才是Linux的特性!無論是配置靜態IP還是動態IP,計算機系統將IP信息保存在什麼地方呢?
答案是配置文件 "/etc/network/interfaces".在UBuntu Linux 啟動時就能獲得IP地址的配置信息。若是配置靜態IP。就從配置文件中讀取IP地址參數,直接配置網絡接口設備;若是配置動態IP,就通知主機通過DHCP協議獲取網絡配置。
以下分別為配置靜態IP和動態IP時,配置文件"/etc/network/interfaces"的實例:
動態IP
- fs@ubuntu:~/qiang/tftp$ cat /etc/network/interfaces
- auto lo
- iface lo inet loopback
-
- auto eth0
- fs@ubuntu:~/qiang/tftp$
靜態IP
- fs@ubuntu:~/qiang/tftp$ cat /etc/network/interfaces
- auto lo
- iface lo inet loopback
-
- auto eth0
- iface eth0 inet static
- address 192.168.3.51
- netmask 255.255.0.0
- gateway 192.168.1.1
- fs@ubuntu:~/qiang/tftp$
重啟下系統,用ifconfig命令查看IP地址
- fs@ubuntu:~$ ifconfig
- eth0 Link encap:Ethernet HWaddr 00:0c:29:6c:c2:ec
- inet addr:192.168.3.51 Bcast:192.168.255.255 Mask:255.255.0.0
明顯看到IP地址依然是我們靜態修改過的IP地址。
注意:
1、若不能訪問外網: ping 不通114.114.114.114
解決方法: sudo route add default gw 192.168.1.1
2、若不能訪問域名: ping 不通baidu.com
解決方法:
1)-- sudo vi /etc/resolv.conf
2) -- 添加 nameserver 114.114.114.114
當然Linux網路配置還包括Route 、DNS等,這裡先不詳細介紹,下面進入我們的
二、TFTP環境的搭建:
我的Linux版本是Ubuntu,下面是配置過程:
1、配置服務器端
- fs@ubuntu:~$ sudo apt-get install tftp-hpa thtpd-hpa
這裡是因為我們再同一台機器上操作的,在實際使用中,一般是
Client :PC 安裝tftp-hpa
Server :ARM 安裝tftpd-hpa
後面的 tftp <IP> 此處的IP地址應該是ARM的IP地址。
2、修改配置文件
在/etc/default下修改tftp服務的配置文件tftpd-hpa:
- fs@ubuntu:~$ sudo vi /etc/default/tftpd-hpa
- fs@ubuntu:~$ cat /etc/default/tftpd-hpa
- # /etc/default/tftpd-hpa
-
- TFTP_USERNAME="tftp"
- TFTP_DIRECTORY="/home/fs/qiang/tftpd"
- TFTP_ADDRESS="0.0.0.0:69"
- TFTP_OPTIONS="-l-c-s"
- fs@ubuntu:~$
說明:修改項,其中TFTP_DIRECTORY處可以改為你的tftp-server的根目錄,博主這裡是/home/fs/qiang/tftpd,當然可以改成其他地址,參數 -c 指定了可以創建文件,參數 -s是指定tftpd-hpa服務目錄,上面已經指定;
創建文件夾/home/fs/qiang/tftpd,修改權限,這裡我直接 chmod 777.
3、手動啟動、停止服務
- fs@ubuntu:~$ sudo service tftpd-hpa stop
- tftpd-hpa stop/waiting
- fs@ubuntu:~$ sudo service tftpd-hpa start
- tftpd-hpa start/running, process 3041
- fs@ubuntu:~$ sudo service tftpd-hpa status
- tftpd-hpa start/running, process 3041
- fs@ubuntu:~$ sudo service tftpd-hpa restart
- tftpd-hpa stop/waiting
- tftpd-hpa start/running, process 3055
- fs@ubuntu:~$
4、tftp服務器測試
a、登陸服務器
- fs@ubuntu:~/qiang/1$ tftp localhost
或
- fs@ubuntu:~/qiang/1$ tftp <主機IP>
b、從tftp服務器下載文件
- fs@ubuntu:~/qiang/1$ tftp localhost
- tftp> get qiang
- tftp>
c、上傳文件到tftp服務器
- fs@ubuntu:~/qiang/1$ tftp localhost
- tftp> get qiang
- tftp> put qiang
- tftp>
d、查看幫助
- fs@ubuntu:~/qiang/1$ tftp localhost
- tftp> get qiang
- tftp> put qiang
- tftp> ?
- tftp-hpa 5.2
- 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
- literal toggle literal mode, ignore ':' in file name
- status show current status
- binary set mode to octet
- ascii set mode to netascii
- rexmt set per-packet transmission timeout
- timeout set total retransmission timeout
- ? print help information
- help print help information
- tftp>
e、退出登陸
- tftp> q
這裡將大家容易出現的錯誤以及解決方法介紹給大家:
出現的一些問題及原因(解決方法):
1、Transfer time out.
tftpd服務沒有啟動
2、Error code 0:Permission denied
可能是由SELinux造成的,在FC3和FC3以後的FC版本中SELinux默認的都是開啟的,現在要關掉它。
修改文件/etc/sysconfig/selinux,設定SELINUX=disabled,然後重啟電腦即可
或者 執行命令system-config-securitylevel打開“安全級別配置”對話框,將SELinux(S)選項中“強制”改為“允許”
3、Error code 1:File not found
指定的文件夾不存在;或tftpd啟動參數中沒有指定-c選項,允許上傳文件
4、Error code 2:Only absolute filenames allowed
TFTP_OPTIONS="-l -c -s",中的選項注意一下,是否沒 -c
5、Error code 2:Access violation