作者:郝玉锴
FTP服务是目前广泛应用的因特网应用服务之一,为了在国产嵌入式实时操作系统平台上开发FTP服务,采用多线程并发服务器的体系结构设计了一种嵌入式FTP服务器,实现了包括对RFC959标准定义的访问控制命令、传输参数命令和FTP服务命令在内的常用命令的处理和响应功能,并且对该嵌入式FTP服务器的功能和性能进行了测试。
0 引言
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服务器采用多线程并发服务器结构的方案是比较合理的。