引言
FTP(文件传输协议)是一种用于从网络中一台主机向另外一台主机传输文件的协议,属于Internet上最早提供的应用服务之一,通常将文件传输服务称为FTP服务。FTP服务不受计算机类型及操作系统的限制,只要建立FTP链接的双方都支持FTP协议,就可以方便地通过网络进行远程文件的下载、上传和删除等操作。
根据RFC959描述,FTP的目标是:促进程序/数据文件的共享;鼓励(通过程序)使用远程计算机;使用户不必面对不同主机上不同文件系统的差异;对数据进行高效可靠的传输。本文在国产嵌入式实时操作系统的平台上,在已有TCP协议支持的基础上,设计开发满足RFC959要求的FTP服务器,功能支持对FTP客户端常用命令的正确响应,性能满足嵌入式环境的要求。
1 文件传输过程
1.1 FTP工作模式
FTP服务采用典型的客户端/服务器工作模式,在网络远端提供FTP服务的计算机称为FTP服务器,与用户的客户端通过TCP进行链接。FTP服务器通过2个并行的TCP链接来提供服务,一个是控制链接,一个是数据链接。控制链接始终等待客户与服务器之间的通信,该链接将客户命令从客户端传给服务器,并传回服务器的应答。数据链接则是每当一个文件在客户端和服务器之间传输前,才进行创建,只用于数据传输目的。
客户端与服务器及其连接情况如图1所示。
1.2 FTP工作流程
在典型的FTP客户机和服务器的链接建立及交互过程中,一般需要经历以下几个步骤:
(1)在服务器端运行FTP服务器端程序,等待用户发出链接请求,在客户端运行FTP客户端程序。
(2)当FTP 客户端发起FTP 会话尝试链接服务器时,客户端首先发起建立与FTP服务器21端口之间的控制链接,通过该TCP链接发送用户名和密码给服务器端。
(3)客户端为所在的数据链接选择一个临时的端口号,并通过控制链接将该端口号发送给服务器。
(4)当需要进入文件传输阶段,客户端和服务器通过“数据链接”来传输文件,通过“控制链接”来传输命令。
(5)当数据传输完毕后,关闭用于建立数据链接的端口,直到下次数据链接发起时重新打开,而控制链接在整个FTP会话期间一直处于打开状态。
2 FTP 服务器设计
选择不同的服务器模式将会影响到整个设计和实现阶段,并且很大程度影响着服务器的性能。FTP服务器的内部设计可以根据需要和平台软硬件的性能综合考虑,选择设计不同的服务器模式。
2.1 服务器结构
服务器的结构主要有循环服务器和并发服务器2种,其中并发服务器又可以细分为单线程并发服务器和多线程并发服务器。
2.1.1 循环服务器
循环服务器适用于简单的应用协议,与客户端采用停止-等待的通信方式,使用单个线程循环运行,每次只能处理一个客户端的请求,但是它的设计、编码、调试和后续维护相对并发服务器都比较简单。
2.1.2 单线程并发服务器
单线程并发服务器是由单个服务器线程预先为多个客户端打开TCP链接,当有任意的客户端请求到达时,服务器线程由阻塞态转为运行态来处理该客户端请求并发送响应,在此期间阻塞其他客户端请求。完成一个客户端请求后,服务器线程再次阻塞以等待其他的任意客户端的请求。单线程并发服务器适用于操作系统创建新的线程开销很大的情况下。
2.1.3 多线程并发服务器
多线程并发服务器设计使用多个进程及多个线程,服务器首先执行一个主线程,在熟知的端口上打开一个链接,等待客户端消息,当客户端请求到来时,主线程创建子线程来处理该客户请求,此时主线程不与客户端直接通信,而是由每个子线程并发地来与各自对应的客户端进行通信。当子线程完成客户请求的响应并发送给客户端之后,子线程退出,而此时主线程一直在等待其他的客户链接请求。
2.2 方案选择
服务器结构的方案选择主要取决于服务器的应用场景、期望达到的性能以及方案实现的难易程度。
循环服务器的结构容易实现但是需要客户端等待来获取服务,难以满足多个客户的需求,服务器效率性能低下;单线程服务器结构需要服务器线程反复地在它打开的链接上等待客户端请求,需要每次循环地检查网络链接状况和文件系统处理文件的状态,查询完成后才能够刷新数据显示,因此造成不必要的延迟;多线程并发服务器同时和多个客户端进行通信,由操作系统分配各个线程的处理器时间,比较适合FTP服务器的对每个客户端一直存在控制链接和需要时建立数据链接的特点。综合上述分析,本课题中FTP服务器采用多线程并发服务器结构的方案是比较合理的。
3 FTP 服务器实现
根据上述设计方案的描述,本课题中FTP服务器的程序架构进行如下设计:
系统上电操作系统运行之后,ftpdInit函数在默认的端口上创建一个FTP服务器控制链接,并且调用ftpd-Task创建一个FTP服务进程来响应多个用户的请求。其中ftpdTask使用ftpdWorkTask为每个不同的用户在各自需要时分别创建一个服务进程进行响应,如图2所示。
ftpdWorkTask 完成FTP 服务器的主要协议处理功能,该进程分析每个客户端请求命令,做出响应并且回复给客户端。函数的主体是一个循环结构,分析客户端请求命令的功能由简单的strncmp函数来实现,如果经过分析之后命令符合有效命令的格式,ftpdWorkTask将调用响应的处理函数并且将处理结果返回给客户端。
根据RFC959,FTP服务器需要响应的命令分为访问控制命令、传输参数命令和服务命令。本课题设计的FTP服务器实现了对以下命令的响应。
(1)访问控制命令。访问控制命令如表1所示。
(2)传输参数命令。所有的数据传输参数都有默认值,只有在默认值需要改变的时候才需要命令去指定传送数据传输参数。默认值是最后一次指定的值,如果未被指定,则是标准默认值。这意味着服务器必须“记住”
当前可用的默认值,如表2所示。
(3)FTP服务命令。FTP服务命令定义了用户请求传送文件或者文件系统的功能,如表3所示。
4 功能及性能测试
在完成设计、编码及交叉编译之后,对嵌入式FTP服务器在目标机上的运行的情况进行功能和简单的性能测试。
4.1 功能测试
功能测试的目的是验证FTP服务器是否能够正常处理协议所要求的功能,测试工具为FTP客户端软件包括WindowsXP 命令行中的FTP 命令,FlashFXP 以及在WindowsCE操作系统下开发的专用FTP客户端软件。
4.2 性能测试
嵌入式FTP服务器运行在MPC755处理器子卡上,处理器为PowerPC755,处理器工作频率为266 MHz,局部总线频率为66 MHz,1路10M/100M以太网接口。存储设备为大容量存储器子卡,存储容量为128 GB,读/写访问速度5 MB/s以上(裸盘)。测试结果表明使用Win-dows XP 平台的客户端软件进行下载速度可以达到800 KB/s以上,使用WindowsCE平台的客户端软件进行下载速度可以达到300 KB/s以上。
5 结语
本文介绍了FTP协议的工作模式和工作流程,介绍了FTP服务器的典型结构,即循环服务器、单线程并发服务器和多线程并发服务器,并且分析了这三种FTP服务器结构的优缺点,根据课题项目需要,选择多线程并发服务器的结构为设计方案进行详细设计。实现的功能包括对RFC959标准定义的访问控制命令、传输参数命令和FTP服务命令在内的常用命令的处理和响应。
最后对该嵌入式FTP服务器的功能和性能进行简单的测试,测试结果表明功能和性能符合期望标准。
全部0条评论
快来发表一下你的评论吧 !