基本的FTP下载功能

  • FTP工作机制
  • FTP工作方式
  • 常用指令和返回码
  • 基本实现流程


FTP概述

FTP 是File Transfer Protocol(文件传输协议)的英文简称,用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。与大多数Internet服务一样,FTP也是一个客户机/服务器系统。用户通过一个支持FTP协议的客户机程序,连接到在远程主机上的FTP服务器程序。用户通过客户机程序向服务器程序发出命令,服务器程序执行用户所发出的命令,并将执行的结果返回到客户机。

FTP工作机制

服务器支持文件的定位:ftp服务器需要支持文件的定位
两个socket通道:一个控制命令通道用于客户端向服务器发送指令和接收服务器的应答码;一个数据传输通道用于文件的上传下载
指令交互:协议规定的客户端向服务器发送的指令以及服务器端的返回码

FTP工作方式

主动方式(PORT方式):客户端首先和FTP的TCP 21 端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令:“我打开了xxx端口,你连接我吧!”在传送数据的时候,服务器端通过自己的TCP20端口连接至客户端的xxx端口发送数据

被动方式(PASV方式):被动方式在建立控制通道的时候和主动模式类似,但建立连接后发送的不是PORT命令,而是PASV命令:“我打开了xxx端口准备连接过来哦,你要不要打开一个端口让我连接过来啊?”FTP服务器收到请求后,在返回码中告知服务器随机打开的一个临时端口(1023至65535)如返回码为227 Entering Passive Mode (70,0,10,62,120,18),则服务器打开的端口号为120*256+18。客户端连接此端口,然后FTP服务器将通过这个端口进行数据的传送

常用指令和返回码

返回码服务器可以设置,因此不同的服务器略有差异,但是返回码最前面的数字意义是固定的
USER 发送登录服务器的用户名,正常返回“331 Password required”
PASS 发送登录密码,正常返回“230 User xxxxx logged in”
SYST 获取服务器的系统信息,正常返回“215 xxxxx”
MKD 在当前路径中创建目录。返回“257 “/xxx” created successfully”或“550 Directory already exists”
CWD


改变工作路径,正常返回“250 CWD command successful.”

PWD 显示当前的工作路径,正常返回“257 “/” is current directory”


SIZE + 服务器上文件名,获取服务器上需要下载的文件名大小,正常返回213 xxxx,xxxx为文件字节数


REST 指定文件开始下载的偏移量(字节数),正常返回“350 Restarting at xxxx”


TYPE 传输模式,mode 为 I 或 A ,返回“200 Type set to x”


PASV 进入被动模式,返回码如“227 Entering Passive Mode (222,217,19,250,212,162)”


RETR + 服务器上文件名,定位到服务器上指定文件,开始传输,正常返回码为“125 Data connection already open; Transfer starting.”


基本实现流程

USER ===>发送登入名
PASS ===>发送登入密码
PASV ===>进行被动方式连接
SIZE ===>获取服务器文件字节数,实际应用中常用语判断下载完成状态、进行断点续传等
REST ===>指定文件开始下载的偏移量,断点续传常用
TYPE ===>指定文件传输模式
RETR ===>定位文件,开始传输