FTP服务器客户端

以ftp fpt.pku.edu.cn为例进行测试。
一 概述:
(1)服务器:线程池+线程互斥调用accept
(2)客户端:线程化或select+shutdown
*角色:用户、ftp客户端和ftp服务器。
(3)主要功能:
*用户登录认证:匿名用户和有权限的用户
*上传和下载文件
*查看文件目录
*修改操作


(4)客户端主要模块:
*身份验证模块(是不是应该放在服务器上)
*命令分析模块(对用户输入命令进行解析)
*目录管理模块
*上传文件模块
*下载文件模块
*其它文件模块:包括对服务器文件的管理等。


(5)服务器主要模块:(可设置最大用户数量、最大上传和下载速度、删除部分上次的文件(上传失败))
*用户管理模块:通过区分权限用户和匿名用户,进行权限赋予(通过mysql进行用户身份验证)。
*命令处理模块:对客户端命令进行分析,进行相关操作。
*文件处理模块。


(6)控制连接:
*服务器使用被动方式打开众所周知的默认的FTP的21端口,来等待客户的连接请求。
*客户主动的连接服务器的21端口,来进行链接建立。
*控制连接始终在等待客户和服务器端之间的通讯,保持在客户端和服务器连接的整个过程。
*从客户端向服务器发送命令,然后服务器把应答返回给客户端。注意命令的种类和应答的格式。
*应该最大程度的降低延迟。


(7)数据连接:
*数据连接的用途:从客户端向服务器传送一个文件、从服务器向客户端传送一个文件、从服务器向客户端发送目录列表等。
*数据传送结束后,数据连接就自动断开。根据用户需要随时连接、随时断开。


(8)FTP根据数据连接的打开方式分为:主动模式FTP和模式方式FTP。主动模式数据连接的端口为20,被动模式下数据端口是随机的。
*主动模式:服务器发送数据连接请求,客户端使用port命令把临时选择的端口发送到服务器端,服务器端用自己的数据端口(一般20),发起到客户端临时端口的请求。
*被动模式:客户端发送pasv命令,通知服务器以被动方式进行连接,服务器会开启一个非特权端口(>1024),并发送port命令给客户端,客户端选择一个临时端口,在这个端口上发起到服务器指定数据端口的连接。被动方式下数据连接和控制连接都是客户端发起的。通常用在处于防火墙之后的FTP客户访问外界FTP服务器,因为防火墙同从配置为不允许外界访问防火墙之内的主机,而只允许由防火墙内的主机发起的连接请求。
*有些仅支持主动模式,但大部分支持两种模式。

(9)FTP数据连接上的数据规则:
*客户端需确定待传送文件类型、数据结构和传输方式等。

(10)要实现的功能:
*主动和被动接入方式、匿名登录、目录列表、文件或目录的更改和删除、文件上传、文件下载、断点续传。




二 客户端的设计:
(1)控制连接详细过程:
*在本地随机选择一个非特权端口
*向服务器的21端口发送主动连接
*限时条件下读取从服务器端返回的应答
*如果应答码为220,则FTP控制连接已经建立
(2)客户身份验证:
1.建立数据连接的前提是控制连接已经建立,因为客户身份验证必须在控制连接的引导下才完成。
2.步骤如下:
*客户发送user命令,供服务器验证。
*限时条件下读取从服务器端返回的应答。
*如果收到应答码为331(用户名正确,需要口令),则客户端发送PASS命令。
*限时条件下读取从服务器返回的应答。
*如果收到应答码为230(密码验证成功,用户登录正确)。
(3)数据连接:
1.前提是客户已经成功接入服务器,否则不允许建立数据连接,数据连接也必须在控制连接的引导下完成。
2.主动模式下的数据连接:
*客户端本地选择一个非特权端口
*客户端发送PORT命令,将本地IP地址和端口号发送给服务器
*服务器如果在规定时间内读取到服务器的应答200,则表示数据连接建立成功。
3.被动模式下数据连接:
*客户发送PASV命令,等待服务器应答
*如果收到应答码为227,则表示成功进入被动模式,这时可从应答串中提出服务器的IP地址和端口号。
*从本地临时端口向服务器指示的数据端口发出主动连接。
三 相关功能实现:
(1)文件传输:目录列表传输、文件上传和文件下载。
1.步骤:
*根据当前的工作方式,客户端打开数据连接。
*客户端向服务器发送文件或者传送命令。
*通过数据连接在两者间传输文件数据。
*关闭数据连接。
(2)其他。

四 运行流程:
(一)客户端:
1.用户以服务器IP或域名启动FTP客户端,这时客户端会向服务器发送控制连接请求。
2.如果连接成功,客户端提示用户输入用户名,这时用户只用输入用户名,客户端会用user 命令把用户名发送给服务器,服务器验证通过后,客户端提示用户输入密码,然后客户端用pass命令把用户的密码传送给服务器验证。
3.客户端等待用户输入FTP命令,然后对命令进行解析,做好相应的处理工作。
4.连接后用户使用命令来进行数据连接,注意:每一个命令的执行都要客户端都要用port命令把自己的IP和端口号发送给服务器,让服务器来进行主动连接,然后再把命令传送过去。
*补充:用户只管输入用户名、密码和相关FTP命令。

(二)服务器:
1.服务器在端口21进行监听,有连接请求则从线程池取出一个线程来处理。
2.每个线程对控制连接上的命令进行解析,并做好相应的处理工作。

五功能对应模块:(面试用)
(一)总体:
(1)客户端:select(shutdown)+单进程
(2)服务器:多线程
(3)注意相关引申问题:
*比如:select和poll和epoll区别?
(二)细分:
(1)上传:readn和writen
(2)下载:同上。
(3)cd:chdir函数。
(4)ls:system.
(5)pwd:system.
(6)delete:system.
(7)用户验证:msyql和C API.

*补充:后三个可以通过系统命令完成,然后存储在文件中发送给客户端。












































  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值