三、FTP(TCP)
FTP采用C/S架构,使用TCP可靠的传输服务。一个FTP服务器进程可同时为多个客户进程提供服务,FTP服务器检查有两大部分组成:一个主进程,负责接收新的请求,另外有若干的从属进程,负责处理单个请求,工作步骤如下:
1. 建立TCP连接
2. 打开控制端口21,使客户进程能够连接上
3. 等待客户进程发链接请求。
4. 启动从属进程来处理客户进程发来的请求。主进程与从进程并发执行,从属进程对客户进程的请求处理完毕后即终止。
5. 回到等待状态,继续接收其他客户进程的请求。
三、FTP的两种模式
主动模式下,客户端的FTP软件设置主动模式开放的端口段,在客户端的防火墙开放对应的端口段即可。
有一种常见问题是:服务器端只开放了21端口, 客户端机器没开放任何端口。FTP客户端连接采用的被动模式,结果客户端能登录成功,但是无法LIST列表和读取数据。很明显,是因为服务器端没开放被动模式下的随机端口导致。
由于被动模式下,服务器端开放的端口随机,但是防火墙要不能全部开放,解决的方案是,在ftp服务器配置被动模式下开放部分随机高位端口(范围在ftp服务器软件设置,可以设置任意1024上的端口段),然后在防火墙设置规则,开放服务器端相应的端口号即可。
按照FTP客户端上传文件 TFTP.rar 为例,
客户端: 192.100.100.100
服务器: 192.100.100.200整个过程,先三次握手,再进行账号的登录,然后再传输文件
整个报文结构是 以太网首部(14字节) + IP首部(20字节) + TCP首部(20字节) + TCP数据(FTP)
服务器(21端口)向客户端(3118端口)发出响应。
code字段表示新用户服务就绪,220代表服务就绪,可以执行信用与请求。
arg字段为服务器名称和服务器版本号
指令 描述 ABOR 中断数据连接程序 ACCT <account> 系统特权帐号 APPE <filename> 为服务器上的文件存储器分配字节 CDUP <dir path> 改变服务器上的父目录 CWD <dir path> 改变服务器上的工作目录 DELE <filename> 删除服务器上的指定文件 HELP <command> 返回指定命令信息 LIST <name> 如果是文件名列出文件信息,如果是目录则列出文件列表 MODE <mode> 传输模式(S=流模式,B=块模式,C=压缩模式) MKD <directory> 在服务器上建立指定目录 NLST <directory> 列出指定目录内容 NOOP 无动作,除了来自服务器上的承认 PASS <password> 系统登录密码 PASV 请求服务器等待数据连接(被动模式) PORT <address> IP 地址和两字节的端口 ID PWD 显示当前工作目录 QUIT 从 FTP 服务器上退出登录 REIN 重新初始化登录状态连接 REST <offset> 由特定偏移量重启文件传递 RETR <filename> 从服务器上找回(复制)文件 RMD <directory> 在服务器上删除指定目录 RNFR <old path> 对旧路径重命名 RNTO <new path> 对新路径重命名 SITE <params> 由服务器提供的站点特殊参数 SMNT <pathname> 挂载指定文件结构 STAT <directory> 在当前程序或目录上返回信息 STOR <filename> 储存(复制)文件到服务器上 STOU <filename> 储存文件到服务器名称上 STRU <type> 数据结构(F=文件,R=记录,P=页面) SYST 返回服务器使用的操作系统 TYPE <data type> 数据类型(A=ASCII,E=EBCDIC,I=binary) USER <username>> 系统登录的用户名