###FTP 底层原理 FTP 使用两个 TCP 连接实现文件传输:一个 TCP 连接用于控制,另一个 TCP 连接用于数据传输。 控制主要包含用户登录和验证、发送文件的名称、发送方式设置等。利用这个连接,可以通过 ASCII 码字符串发送请求和接收应答。但在这个连接上无法发送数据,只能通过另一个专门的 TCP 连接实现数据传输。 FTP 控制用的连接使用的是 21 号端口,该端口进行文件 GET(RETR)、PUT(STOR)、以及文件预览(LIST)等操作时,每次都会建立一个用于数据传输的 TCP 连接。数据传输完毕后,传输数据的这个连接被断开,然后在控制用的连接上继续进行命令或应答的处理。 控制用的连接,在用户要求断开之前会一直保持连接状态,不过,绝大多数 FTP 服务器都会对长时间没有任何新命令输入的用户的连接强制断开。 数据传输用的连接通常使用端口 20,不过可以用 PORT 命令修改为其它值。 FTP 文件传输 以上就是 FTP 的大致原理,我们要使用 FTP 传输文件,需要准备好客户端和服务端守护进程,客户端一般就是支持 FTP 文件传输的软件,比如 FileZilla,而服务端守护进程就是 vsftpd。 服务器端守护进程启动以后,就会监听 21 号端口等待连接,然后我们可以通过前面介绍的 TELNET 在命令行测试连接到远程 FTP 服务器: ~ telnet 114.215.241.29 21 # 远程主机IP和端口号 Trying 114.215.241.29... Connected to 114.215.241.29. Escape character is '^]'. 220 (vsFTPd 3.0.2) USER ftpuser # 通过 USER 指令设置 FTP 用户名 331 Please specify the password. PASS ******** # 通过 PASS 指令设置 FTP 用户密码 230 Login successful. # 返回 230 表示认证成功 然后,就可以通过 FTP 支持的命令在 TELNET 客户端中进行文件传输操作。常见的 FTP 命令如下:   下面是常见的 FTP 服务器返回响应状态码:    FTP 在传输过程中不会对信息进行加密,都是明文传输,因而有被窃听和侵入的风险,由此衍生出了安全的文件传输协议 SFTP(SSH File Transfer Protocol),它会使用 SSH 协议进行身份验证并建立安全连接,所以推荐在日常使用时优先考虑 SFTP。