FTP学习笔记

FTP作为文件传输的应用,需要保证数据的完整性,即使用TCP可靠传输协议
FTP传输都是通过明文方式,包括用户名和密码;如需传输的安全性,可采用SFTP


FTP使用客户服务器方式,大致工作流程如下:
1、客户端通过TCP三次握手与服务器的21端口建立控制连接
2、服务器对客户端进行身份验证,授予客户端相应的操作权限
3、客户端请求数据传输建立数据连接
4、数据传输完成后断开数据连接
3、退出FTP服务器断开控制连接


FTP服务示意图如下所示:
FTP学习笔记_第1张图片

FTP客户端与服务器之间需要建立两个TCP连接,控制连接和数据连接。 
控制连接,用于传输控制信息,其在整个会话期间保持连接;
数据连接用于传输数据,在客户端发起数据传输请求后建立数据连接,在结束传输后断开连接,不必一直存在。


使用两个连接的好处是使协议更加简单和容易实现,且在传输的过程中,便于利用控制连接中断等操作。


命令
FTP命令按照ASCII格式在控制连接上传输,因此命令是可读的,每个命令后跟回车换行符 (\r\n)。下面列举一些常用的命令:
1)访问控制命令
USER username 向服务器传输用户名
PASS password 向服务器传输密码
ACCT 账户 (没有实际运用过,也不是很清楚,想的是USER就是账户的别名,一般使用用户名登入)
CWD 跳转目录
QUIT  从服务器上退出FTP登入


2)传输参数命令
TYPE   表示类型
这个命令的参数指定在数据表示和存储部分介绍的表示类型。某些类型需要第二个参数。第一个参数用单个Telnet字符表示,对于ASCII和EBCDIC的第二个格式化参数也是如此 ; 本地字节的第二个参数是一个表示字节长度的十进制整数。参数之间用 (空格 ,ASCII码的32)分开。
默认的表示类型是ASCII非打印。 如果格式化参数首先被更改 , 然后单独更改第一个参数,格式化参数会变回默认的非打印。
FTP学习笔记_第2张图片


MODE   传输模式
S-流
B-块
C-压缩
默认的传送模式是流。流式传输模式有天生的不可靠性 ,不能确定连接是否过早的关闭。 其他的传输模式(块,压缩)不用关闭连接来指示文件结束。他们使用FTP编码来确定文件结束。因此使用这些模式可以在多文件传输时保持使用同一个数据连接。


STRU   文件结构
这个命令的参数是单个Telnet字符,用来指定在数据表示和存储部分描述的文件结构 。
下面编码用来表示文件结构:
F-文件( 没有记录的结构)
R-记录结构
P-页结构
默认的结构是文件。


数据连接模式
数据连接分两种模式:被动模式和主动模式。其主动和被动都是相对服务端而言的。
PASV   请求服务器等待客户端建立数据连接
客户端通过控制连接向服务端发送PASV命令,服务端收到此命令开启一个数据端口( 任意非特权端口P>1024 ),并通过控制连接告诉设备,服务端 “监听 ” 并等待客户端连接;客户端收到服务器的地址和端口号发起数据连接。如下图所示(箭头方向表示发起方):
FTP学习笔记_第3张图片


PORT   请求服务器主动连接指定的端口
客户端通过控制连接向服务端发送本地ip地址和用于数据连接的端口号 ,ip地址信息被分解为每8位一个段 ,每个段都作为十进制数 ( 用字符串表示 )传送 。 段之间用逗号分隔 , 一个PORT命令像下面这样:
PORT h1,h2,h3,h4,p1,p2    (h1是因特网主机地址的高8位)
服务器打开20号端口与设备说明的端口号建立数据连接,如下图所示:

FTP学习笔记_第4张图片


3)服务命令
RETR filename   从远程主机获取文件
STOR filename   向远程主机当前目录存储文件,如存在同名文件则覆盖
MKD   在服务器上建立目录
STOU   唯一保存
APPE   追加(包括创建)
LIST   请求服务器返回远程主机当前目录下的所有文件列表
NOOP   该命令不指定任何动作 , 只是要求服务器返回OK响应


响应
命令发送后,服务器会发送相应的响应给客户端,以说明情况。响应是一个3位数字,后面跟一些文本信息供直接查看。

3位数字的每一位都有特定的意义。 允许用户进程将复杂的响应简化 。 第一位数字标识了响应是好,坏或者未完成。简单的用户进程可以通过检查第一位数字,决定它的下一个动作 ( 依计划处理, 重试 , 放弃等等 ) 。 用户进程如果希望知道大概是发生了什么错误 (比如 , 文件系统错误 , 语法错误 ) , 可以通过检查第二位数字来完成 。 第三位数字指示信息顺序是否有误(例如, RNTO前没有RNFR命令)。

响应的第一位数字可能有以下五个值:
1yz,预备状态
2yz,完成状态
3yz,中间状态
4yz,暂时拒绝状态
5yz,永久拒绝状态

下面为第二位数字的功能:
x0z语法-这种响应指出了语法错误。给出的命令不存在、没有被实现、或多余。
x1z信息-对于请求信息的响应,比如对状态或帮助的请求。
x2z连接-关于控制连接和数据连接的响应。
x3z身份验证和帐户-对登陆过程和帐户处理的响应。
x4z目前还未使用。
x5z文件系统-请求传输时服务器文件系统的状态或其他文件系统动作状态。


最后附一个经典的FTP交互图(直接摘至RFC文档):
FTP学习笔记_第5张图片


参考资料
《计算机网络》
RFC959中文版

你可能感兴趣的:(网络)