嵌入式FTP服务器的设计与实现

随着嵌入式设备的不断发展,其对通信也提出了越来越高的要求。ftp(file transfer protocol)作为internet上最早提供的服务之一,至今仍然被人们广泛使用,ftp是实现文件传输服务的最主要的规范。当需要考虑到文件传输安全、传输质量、访问控制等诸多因素时,ftp服务器就成了解决文件传输问题的关键所在。
然而,有时嵌入式系统的开发环境并不支持ftp协议(如adsp的集成开发环境visual dsp++),在这种情况下,利用已有的lwip堆栈中的一些基础函数来构建一个ftp服务器,正是本文要详细探讨的话题。
1 文件传输过程
ftp协议与一般的intemet协议不同。intemet协议通常采用一个tcp连接来传送信息(如http协议);而ftp协议则采用两个tcp连接来实现文件的传输,其中一个用来为文件传输下命令,另一个则实现真正的传输过程。图1所示是ftp文件传输的原理图。
客户端想要获取存放在服务器上的文件时,应先通过一个预定义的端口号21主动与服务器建立连接,服务器收到请求后,通过3次握手,就可在进行ftp命令处理的用户协议解释器(pi)和服务器协议解释器之间建立一条tcp连接。该连接始终等待用户和服务器之间的通信,并传输用户输入的所有ftp命令和服务器的应答,即ftp传输中的命令连接。
当客户通过交互式用户界面向ftp服务器发出要下载服务器上某一文件的命令时,该命令即被送到用户协议解释器,并由用户协议解释器进行处理。ftp将在服务器端口号20上打开一个数据tcp连接。在数据连接上传送完本次请求需传送的文件之后,它将关闭数据连接,直到再有文件传送请求时再重新打开。因此,在ftp中,控制连接在整个用户会话期间一直打开着,而数据连接则是一条临时连接,当且仅当执行文件传输过程时才被创建。
ftp服务器的内部结构可根据不同的需求,选择不同的服务器模式。因为服务器模式决定着设计结构,而不同的设计结构又很大程度地影响着ftp服务器的性能。服务器的模式主要有循环服务器和并发服务器。
1.1循环服务器
循环服务器只适应于最简单的应用协议,它采用客户轮流等待的工作方式。但它的设计、编程、调试和修改都比较简单,在其响应时间可以满足需求的条件下(这个时间可以在本地或全局网络中进行测试),可以采用循环服务器模式。
1.2 并发服务器
如果构建一个响应需要大量的i/o操作,且各个请求所需要的处理时间差别非常大,或服务器在一台多处理器的计算机上运行,则可引入并发性方法来缩短响应时间。大多数并发服务器使用多个进程以及多个线程。其线程可分为两类:主服务器线程和从服务器线程。然而,在有些情况下,一些操作系统创建一个线程的开销很大,服务器无法承担为每个请求或每个连接都创建一个线程的重负时,可采用单线程的并发模式。
2 嵌入式ftp服务器的实现
图2所示是以adsp-bf537为核心的嵌入式系统的硬件组成框图。图中,基于blackfin处理器的adsp--bf537具有接口丰富,性能优良,价格低廉等特点,并具有强大的多媒体数据处理能力。adsp的集成开发环境visual dsp++中嵌入了实时操作系统内核vdk,适合于多任务多线程的嵌入式操作。此外,adi还提供了一个用于blackfin系列嵌入式处理器的lwip协议栈端口,利用它可以快速将一个独立的嵌入式应用联网。图2中的bf537可通过网络芯片lan8187实现与上位机之间的网络通信,同时利用自身的ppi口实现与存储阵列的通信和管理。
由于系统中的服务器和客户端在同一个局域网内,考虑到硬件芯片本身的特点,在文件下载时,与存储阵列的通信只能通过同一套ppi总线,因此,较好的方式是一次只接受一个用户的下载请求,于是可构建一个循环服务器来满足需求。
出于安全性考虑,服务器通常只接受用户名/密码的登录方式。登录时所需的用户名和密码存放在存储板中。每次收到用户请求信息后,先从存储板处获得已有的用户信息并比较,若与其中任何一个相符合,则发送接受请求信息,否则,回送拒绝信息。用户登陆成功后,服务器会响应它的各种操作。图3所示是ftp服务器的操作流程图。
当用户需要下载文件时,需先获取文件列表。文件列表存放于存储板中,可先由服务器向存储板发送回送文件列表的请求,在得到响应后。再通过网络回送给用户,由用户从中选择所需下载文件的文件名,并发送给服务器。服务器收到文件名后,先判断其所属的文件夹,再由此向对应存储板发送下载该文件的命令。存储板通过ppi向管理板回送信息(在此每包数据的大小为64kb),管理板每缓存完十包数据后,将通过网络回送给用户。需要指出的是,一开始,在实际的下载过程中,有时文件会出现丢帧现象,而且跟网络状况有关。经过分析其原因是网络速度与ppi传输相比过慢而导致接收缓存溢出,从而引起下载过程中的数据丢失。于是,可采取流控的下载方式。事实上,存储板并不会一下将所有数据都连续地发送过来,而是每发送完十包以后,再等待控制板的确认包。控制板只有在将所有数据都通过网路发送完毕后,才给存储板发送确认包,以等待接收下一次的十包数据。以此循环,直至下载完成。其命令处理流程图如图4所示。
3 结束语
在嵌入式系统中,依靠通信技术可以创造出很多十分有用的产品,本文重点介绍了一个以dsp为核心所构建的嵌入式ftp服务器的实现方法。且经实际检验,运行状况良好。本方法对其它形式的嵌入式系统的ftp下载功能,也有很强的借鉴意义。
高频头基本原理
聊聊Spartan-7到底有哪些特色与优势
预测:2021年自发光Micro LED电视有望问世
华为全联接大会2023|华为面向中小企业发布四大产品组合,构建高品质联接
AI 技术领域提供可靠的专线精品网络解决方案
嵌入式FTP服务器的设计与实现
广和通Cat.1模组与亚华物联智慧燃气表组成“CP”,高效赋能智慧城市建设
复位电路中电阻和电容的作用
比亚迪获得283项专利授权 固态电池瞩目
了解网络攻击从而保障自身的信息安全
土壤肥料养分速测仪的测试项目
4K电视普及浪潮来袭 推动4K生态系统发展
初识FPGA CLB之LUT实现逻辑函数
简易磁感应线圈磁性检测装置
塑料、金属与木质音箱比较
“厚道”的孙宏斌自评,帮助贾跃亭是性情使然?
用增强并口EPP协议扩展计算机的ISA接口
概述全球范围内制造业迁徙趋势
全球首款配备完整QWERTY键盘的5G手机
博通以189亿美元收购软件公司CA获批准