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.1
2、若不能访问域名: ping 不通baidu.com
解决方法:
1)-- sudo vi /etc/resolv.conf
2) -- 添加 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(文件名)