作者:cherry_odd
转自:http://blog.csdn.net/cherry_odd/article/details/11567945
之前把本地的nfs、TFTP服务调通了,等210开发板到了后,立马按照用户手册烧系统Qtopia、搭建PC端-客户端的NFS服务,调访谈ftp服务时,按照用户手册5.9.1的方法,但一旦涉及到上传文件,就报错,废话不多说,先将一步一步的操作记录下来,再分析原理:
一.操作
1.首先要安装ftp服务
# sudoyum install vsftpd
下面是一些查询命令,查询是否安装了vsftpd以及查询安装信息:
# rpm -qa|grep vsftpd查询是否安装了vsftpd
# rpm -qivsftpd查询vsftpd的详细信息
# rpm -qlvsftpd列出vsftpd中包含的文件
2.启动vsftpd服务并且随系统自动启动vsftpd
# servicevsftpd start
# chkconfig--level 3 vsftpd on打开3级别随系统自动vsftpd
3.按照用户手册ftp的方法来从PC端上传文件到客户端(210)
首先在PC端执行:
但是,前3步的执行都没问题,一到了第4步就出现问题,如下:
怎么解决呢?摸索了三天,发现其实很简单,只需要把被动模式关闭即可:
然后在目标板一端执行:
二.原理
FTP会话时包含了两个通道,一个叫控制通道,一个叫数据通道。
控制通道:控制通道是和FTP服务器进行沟通的通道,连接FTP,发送FTP指令都是通过控制通道来完成的, PI称为控制连接
数据通道:数据通道是和FTP服务器进行文件传输或者列表的通道。
FTP协议中,控制连接均有客户端发起,而数据连接有两种工作方式:PORT方式和PASV方式,DTP称为数据连接。
(1) PORT模式(主动方式)
FTP 客户端首先和FTP Server的TCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。 PORT命令包含了客户端用什么端口(一个大于1024的端口)接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口发送数据。 FTP server必须和客户端建立一个新的连接用来传送数据。
(2) PASV模式(被动方式)
在建立控制通道的时候和PORT模式类似,当客户端通过这个通道发送 PASV命令的时候,FTP server打开一个位于1024和5000之间的随机端口并且通知客户端在这个端口上传送数据的请求,然后FTP server将通过这个端口进行数据的传送,这个时候FTP server不再需要建立一个新的和客户端之间的连接传送数据.
三.FTP和TFTP的区别
FTP 是完整、面向会话、常规用途文件传输协议。而 TFTP用作 bones bare -特殊目的文件传输协议。
交互使用 FTP。 TFTP允许仅单向传输的文件。
FTP 提供身份验证。而TFTP不。
FTP 使用已知 TCP端口号: 20的数据和 21用于连接对话框。 TFTP用于 UDP端口号 69其文件传输活动。
因为 TFTP 不支持验证 WindowsNT,所以FTP服务器服务不支持 TFTP。
FTP 依赖于 TCP,是面向连接并提供可靠的控件。 TFTP依赖 UDP,需要减少开销,几乎不提供控件。
TFTP的主要特点是:
(1)每次传送的数据PDU中有512字节的数据,但最后一次可不足512字节。
(2)数据PDU也称为文件块(block),每个块按序编号,从1开始。
(3)支持ASCII码或二进制传送。
(4)可对文件进行读或写。
(5)使用很简单的首部。
(6)TFTP只支持文件传输而不支持交互;
(7)TFTP没有一个庞大的命令集;
(8)没有列目录的功能;
(9)也不能对用户进行身份鉴别。
TFTP的工作很像停止等待协议。例如:
(1)发送完一个文件块后就等待对方的确认,确认时应指明所确认的块编号。
(2)发完数据后在规定时间内收不到确认就要重发数据PDU。
(3)发送确认PDU的一*在规定时间内收不到下一个文件块,也要重发确认PDU。这样就可保证文件的传送不致因某一个数据报的丢失而告失败。
TFTP在一开始工作时,客户进程发送一个读请求PDU或写请求PDU给TFTP服务器进程,其熟知端口号码为69。TFTP服务器进程要选择一个新的端口和TFTP客户进程进行通信。若文件长度恰好为512字节的整数倍,则在文件传送完毕后,还必须在最后发送一个只含首部而无数据的数据PDU;若文件长度不是512字节的整数倍,则最后传送数据PDU的数据字段一定不满512字节,这正好可作为文件结束的标志。