Skip to content

wsw136474/miniftp

Repository files navigation

一FTP简介: 文件传输协议,工作在应用层,传输层使用的是TCP协议。支持ASCII码文件和二进制文件 1.1:ASCII文件:文本文件。 二进制文件。 物理上都是由一系列比特位组成,逻辑上 ASCII码字符是由7个比特位(0-127),最高位0组成 window  \r\n linux  \n mac    \r 如果以ASCII方式传输文件,并且从windows->linux会将\r\n转换为\n。反之亦然。如果以二进制传输,那么不做任何解析,保留不变。 1.2:FTP文件数据结构 默认文件被认为连续字节流,内部没有结构信息。 记录结构,由连续记录构成 页结构:文件每一部分称为页。当文件是由多个非连续的部分组成时,使用页结构,这种文件称为随机访问文件 1.3:文件传输方式 流方式、块方式、压缩方式 1.4:工作原理(CS) 用户终端 ------用户界面 用户协议解释器---(控制连接21端口)----服务器协议解释器 文件系统-----用户数据传输---------(数据连接传输通道)--------------服务器传输进程-------文件系统 1.5:FTP对应命令 一:访问控制命令: USER:服务器上的用户名 PASS:用户口令 CWD或XCWD:改变工作目录 CDUP或XCUP:回到上一层目录 QUIT:退出 ACCT: SMNT: REIN: 二:传输参数命令 PORT:数据端口,主要向服务器发送客户端数据连接的端口,格式为PORT h1,h2,h3,h4,p1,p2其中32位IP地址h1,h2,h3,h4 16位TCP端口号用p1,p2表示 PASV:此命令要求服务器数据传输进程在随机端口上监听,进入被动接受请求的状态 TYPE:文件类型,可指定ASCII码,二进制 STRU:文件结构 MODE:传输模式 三:服务命令 RETR:获得文件(下载文件) STOR:保存文件,向服务器传输文件。如果文件已经存在,原文件将被覆盖,如果文件不存在,则新建文件(上传文件) APPE:与STOR功能类似,但如果文件在指定路径已经存在,则把数据附加到原文件尾部,如果不存在,则新建一个文件 LIST:列目录详细清单 NLST:列出名字列表 REST:重新开始,参数代表服务器重新开始的那一点,它并不传送文件,而是略过指定点前的数据,此命令后该跟其他要求文件传输的FTP命令 ABOR:异常终止。此命令通知服务器终止以前的FTP命令和与之相关的数据传输。先前的操作已经完成,则没有动作,返回226。如果没有完成,返回225 PWD或XPWD:打印当前目录 MKD或XMKD:新建目录 RMD或XRMD:删除目录 DELE:删除文件 RNFR、RNTO:重命名 SITE CHMOD:修改权限 SYST:获取系统信息 FEAT:服务器特性 SIZE:获得文件大小 STAT:返回服务器状态 NOOP:该命令不指定任何动作,只是要求服务器返回OK响应 HELP:帮助 STOU:暂不实现(伪保存) ALLO:暂不实现 1.6:FTP应答 服务器通过控制连接发送给客户的FTP应答,由ASCII码形式的3位数字和一行文本提示信息组成,它们之间用一个空格分割。 应答信息的每行文本以回车和换行对结尾。如果需要产生一条多行的应答,第一行在3位数字应答代码之后包含该一个连字符- 而不是空格符。最后一行包含相同的3位数字应答代码,后跟一个空格。

应答确保传输过程中的请求和正在执行的行动保持一致(同步,无应答客户端就阻塞),保证用户程序总是可以得到服务器程序的状态信息,用户可以根据收到的状态信息对服务器是否正常执行了有关操作进行判定。

1.7:FTP应答数字含义 第一位(标志响应是好、坏或完成):如果是 1:预备状态 2:完成状态 3:中间状态 4:暂时拒绝状态 5:永久拒绝状态 第二位(大概发生了什么错误) 0:语法错误。给出的命令不存在、未实现或者多余 1:信息,对于请求信息的响应,比如对状态或帮助的请求 2:连接,关于控制连接和数据连接的响应 3:身份验证和账户,对登陆过程和账户处理的响应 4:未使用 5:文件系统。请求传输时服务器文件系统的状态或其他文件系统动作状态

第三位为第二位的更详细的说明 如:500语法错误,命令不能被识别.501:参数语法错误。 502:命令没有实现。 503:命令顺序错误。 504:没有实现这个命令参数

1.8FTP两种工作模式 一:主动模式(针对数据连接,服务器向客户端发起连接。控制连接都是客户端发起) 首先三次握手建立控制连接通道,交换信息。创建数据连接之前,通过控制连接告知PORT口,然后服务器(选择20端口)就可以连接客户端发送数据 PORT工作模式的过程 1、客户端向服务器发送port命令,客户端创建数据套接字,客户端绑定一个临时端口,在套接字上监听,将IP与端口格式化为h1,h2,h3,h4,p1,p2 从编程模型上来看,客户端相当于一个服务器,服务器相当于一个客户端。 2、服务器以200响应,解析客户端的命令,存储IP与端口,以便后续建立连接 3、客户端向服务器端发送LIST,服务器检测收到LIST之前是否收到PORT或PASV命令,如果没有则响应425.如果有,并且是PORT,则服务器端创建数据套接字(bind 20),调用connect主动连接客户端IP与端口,从而建立数据连接 4、服务器发送150应答给客户端表示准备就绪,可以开始传输。 5、开始传输 6、服务器发送226应答给客户端,表示数据传输结束。 二:被动模式 首先三次握手建立控制连接通道,交换信息。客户端发送PASV命令,表明客户端要主动连接,被动模式。服务器端PORT命告知 客户端被动模式端口PORT21,然后客户端跟服务器建立连接。 1、客户端发送PASV命令。 2、服务器以227响应,服务器创建数据套接字,绑定一个临时端口,在套接字上监听,将IP与端口格式化为h1,h2,h3,h4,p1,p2响应给客户端,以便发起数据连接。 3、客户端向服务器发送LIST命令,如果之前接受过PASV,则调用accept被动接收客户端的连接,返回已连接套接字,从而建立数据连接。 4、服务器发送150应答给客户端,表示准备就绪,可以开始传输 5、开始传输 6、服务器发送226应答给客户端,表示数据传输结束。客户端主动关闭数据连接套接字。

1.8NAT或防火墙对主被动模式的影响。 NAT全称网络地址转换,通过NAT可以将内网私有IP地址转换为公网IP地址。一定程度上解决了公网地址不足的问题。 很多局域网主机没有公网IP,需要进行地址转换,通过NAT服务器进行地址映射,与外界建立连接。 (192.168.1.100 5678)-》120.35.3.193 xxxx -》(50.118.99.200 80)

FTP客户端处于NAT或防火墙之后的主动模式: 见打印笔记(为何要有主动模式和被动模式的原因)



项目需求 2.1FTP命令列表 2.2参数配置veftp.conf 配置文件 2.3空闲断开功能。配置参数。 NOOP:该命令不指定任何动作,只是要求服务器返回OK响应。 2.4限速 local_max_rate(字节) 2.5连接数限制
1、最大连接数:max_clents 2、同一个IP总的连接数:max_per_ip 3、断点续传。

3.1系统逻辑结构。(见打印) 多进程的方式来实现:两个进程来实现,原因见打印 绝对不能用多线程:若多个客户端是同一个用户,若其中同一个用户修改了工作目录,则其他线程(用户)也会被更改,多个线程共享相同的地址空间和资源。 IO复用也不允许,单线程来处理多个客户端连接。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors