TFTP(Trivial File Transfer Protocol,簡單文件傳輸協議)是TCP/IP協議族中的一個用來在客戶機與服務器之間進行簡單文件傳輸的協議,提供不復雜、開銷不大的文件傳輸服務。TFTP承載在UDP上,提供不可靠的數據流傳輸服務,不提供存取授權與認證機制,使用超時重傳方式來保證數據的到達。
一、在談TFTP之前,先簡單講一下
Linux網絡配置,網絡中最重要的當然是IP地址了,這裡不講IP協議,在後面的網絡編程再講解,這裡主要學習一下
Linux下配置IP,配置IP地址的方法有兩種:
1、配置靜態IP:在主機進入網絡之前,事先未主機設置固定的IP地址;
2、配置動態IP:選擇DHCP網絡服務,在主機進行網絡之後,動態的隨機獲取IP地址;
當然,大家都知道ifconfig這個命令:
[cpp] view
plain copy
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地址:
[cpp] view
plain copy
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
[cpp] view
plain copy
fs@ubuntu:~/qiang/tftp$ cat /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
fs@ubuntu:~/qiang/tftp$
靜態IP
[cpp] view
plain copy
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地址
[cpp] view
plain copy
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.12、若不能訪問域名: ping 不通baidu.com解決方法: 1)-- sudo vi /etc/resolv.conf2) -- 添加 nameserver 114.114.114.114當然Linux網路配置還包括Route 、DNS等,這裡先不詳細介紹,下面進入我們的
二、TFTP環境的搭建:
我的Linux版本是Ubuntu,下面是配置過程:
1、配置服務器端[cpp] view
plain copy
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:
[cpp] view
plain copy
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、手動啟動、停止服務[cpp] view
plain copy
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、登陸服務器[cpp] view
plain copy
fs@ubuntu:~/qiang/1$ tftp localhost
或
[cpp] view
plain copy
fs@ubuntu:~/qiang/1$ tftp <主機IP>
b、從tftp服務器下載文件[cpp] view
plain copy
fs@ubuntu:~/qiang/1$ tftp localhost
tftp> get qiang
tftp>
c、上傳文件到tftp服務器[cpp] view
plain copy
fs@ubuntu:~/qiang/1$ tftp localhost
tftp> get qiang
tftp> put qiang
tftp>
d、查看幫助[cpp] view
plain copy
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、退出登陸[cpp] view
plain copy
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 上傳的文件要有相應的可讀寫(覆蓋)的權限才能上傳,要對文件的權限進行修改 chmod 777 a(文件名)