第27章 FTP:文件传送协议

所属:TCP/IP详解 卷1:协议 来源:TCP/IP详解 卷1:协议

本章介绍FTP协议,包括FTP的工作方式、控制连接和数据连接、FTP命令、主动模式和被动模式、匿名FTP等。


27.1 引言

FTP的作用

FTP(File Transfer Protocol):

  • 文件传送协议
  • 在网络上传输文件
  • 上传和下载
  • 应用层协议
  • 用TCP

FTP用于文件传输。


为什么需要FTP

为什么需要FTP:

  • 需要在不同计算机之间传文件
  • 需要可靠的文件传输
  • 需要目录列表等功能
  • 需要认证

FTP的功能:

  • 上传文件
  • 下载文件
  • 列出目录
  • 创建删除目录
  • 重命名删除文件
  • 等等

FTP功能丰富。


FTP的特点

FTP的特点:

  1. 两个连接

    • 控制连接:传命令
    • 数据连接:传数据
    • 分开的
  2. 面向文本

    • 命令是文本的
    • 人可读
  3. 多种传输模式

    • ASCII模式
    • 二进制模式
  4. 认证

    • 用户名密码
    • 也有匿名FTP

FTP有两个连接。


本章讨论的内容

本章讨论的内容:

  • FTP的工作方式
  • 控制连接和数据连接
  • FTP命令
  • 主动模式和被动模式
  • 匿名FTP
  • FTP的返回码

本章介绍FTP协议。


27.2 FTP的连接

两个连接

FTP有两个连接:

  1. 控制连接(Control Connection)

    • 传命令和响应
    • 一直保持
    • 整个会话期间都在
    • 端口21
  2. 数据连接(Data Connection)

    • 传文件数据
    • 传完就关
    • 每次传输都新建
    • 端口不固定

控制连接和数据连接分开。


为什么两个连接

为什么两个连接分开:

  1. 控制和数据分离

    • 命令和数据分开
    • 互不干扰
    • 传数据的时候还能发命令
  2. 数据连接可以随时建随时关

    • 传数据的时候建
    • 传完就关
    • 不占资源
  3. 灵活

    • 数据可以是不同方向
    • 可以是不同格式

分开有好处。


控制连接

控制连接:

  • 客户端连服务器的21端口
  • 一直保持连接
  • 传FTP命令和响应
  • 都是文本的
  • 一行一个命令
  • 一行一个响应

控制连接传命令。


数据连接

数据连接:

  • 传文件数据
  • 传目录列表
  • 每次传输新建
  • 传完就关闭
  • 端口不固定

什么时候建数据连接:

  • 下载文件
  • 上传文件
  • 列目录
  • 等等

数据连接传数据。


27.3 主动模式和被动模式

两种模式

FTP有两种模式:

  1. 主动模式(Active Mode)

    • 服务器主动连客户端
    • PORT命令
  2. 被动模式(Passive Mode)

    • 客户端主动连服务器
    • PASV命令

两种模式,数据连接的建立方式不同。


主动模式

主动模式(PORT):

过程:

  1. 客户端开一个随机端口N

    • 等数据连接
  2. 客户端发PORT命令

    • 告诉服务器自己的IP和端口N
    • 格式:PORT h1,h2,h3,h4,p1,p2
    • IP是h1.h2.h3.h4
    • 端口是p1×256 + p2
  3. 服务器主动连客户端

    • 服务器用20端口
    • 连客户端的端口N
    • 建立数据连接
  4. 传数据

    • 通过数据连接传

主动模式服务器主动连客户端。


主动模式的问题

主动模式的问题:

  • 客户端在防火墙后面
  • 防火墙不让外面连进来
  • 服务器连不上客户端
  • 数据连接建不起来
  • 就用不了

为什么:

  • 主动模式是服务器连客户端
  • 客户端在防火墙/NAT后面
  • 连不进去

主动模式有防火墙问题。


被动模式

被动模式(PASV):

过程:

  1. 客户端发PASV命令

    • 告诉服务器我要被动模式
  2. 服务器开一个随机端口M

    • 等客户端连
  3. 服务器回响应

    • 告诉客户端自己的IP和端口M
    • 格式和PORT类似
  4. 客户端主动连服务器

    • 连服务器的端口M
    • 建立数据连接
  5. 传数据

    • 通过数据连接传

被动模式客户端主动连服务器。


被动模式的好处

被动模式的好处:

  • 客户端在防火墙后面也能用
  • 因为是客户端主动连出去
  • 防火墙通常允许连出去
  • 不允许连进来
  • 被动模式就没问题

现在:

  • 被动模式更常用
  • 因为防火墙/NAT多
  • 主动模式经常用不了

被动模式解决防火墙问题。


27.4 FTP命令

常见的FTP命令

常见的FTP命令:

命令说明
USER用户名
PASS密码
QUIT退出
PORT主动模式,指定端口
PASV被动模式
LIST列出目录
RETR下载文件(RETRieve)
STOR上传文件(STORe)
DELE删除文件
MKD创建目录
RMD删除目录
PWD显示当前目录
CWD改变目录
TYPE设置传输类型(ASCII/二进制)
SYST系统类型
SIZE文件大小

很多FTP命令。


命令的例子

登录的例子:

客户端: USER anonymous
服务器: 331 Please specify the password.
客户端: PASS user@example.com
服务器: 230 Login successful.

列目录的例子(被动模式):

客户端: PASV
服务器: 227 Entering Passive Mode (192,168,1,1,10,20)
客户端: LIST
服务器: 150 Here comes the directory listing.
(数据连接传目录列表)
服务器: 226 Directory send OK.

命令都是文本的。


27.5 FTP返回码

返回码

FTP返回码:

  • 三位数字
  • 表示命令的结果
  • 第一位是类别
  • 后两位是具体的

三位数字的返回码。


第一位的含义

第一位的含义:

第一位含义
1xx初步应答,命令收到,继续
2xx成功,命令完成
3xx中间,需要更多信息
4xx暂时失败,稍后重试
5xx永久失败,不行

第一位是类别。


常见的返回码

常见的返回码:

返回码说明
150文件状态没问题,准备传输
200命令成功
220服务就绪
226传输完成
227进入被动模式
230登录成功
250文件操作完成
331用户名对,需要密码
425不能建数据连接
530登录失败
550文件不可用

很多返回码。


27.6 传输模式

两种传输模式

两种传输模式:

  1. ASCII模式

    • 文本模式
    • 传文本文件
    • 换行符转换
    • 不同系统换行不一样
  2. 二进制模式

    • 也叫Image模式
    • 传二进制文件
    • 不转换
    • 原样传

ASCII和二进制两种模式。


什么时候用哪个

什么时候用ASCII:

  • 文本文件
  • .txt, .html, .c等
  • 需要换行转换

什么时候用二进制:

  • 二进制文件
  • 图片、视频、压缩包、可执行文件
  • 不能转换,转换就坏了

注意:

  • 二进制文件用ASCII模式传会坏
  • 文本文件用二进制模式通常没问题
  • 所以不确定就用二进制

二进制文件必须用二进制模式。


27.7 匿名FTP

什么是匿名FTP

匿名FTP(Anonymous FTP):

  • 不用账号也能登录
  • 用户名:anonymous
  • 密码:通常是邮箱
  • 可以下载公开的文件

匿名FTP不用账号。


为什么有匿名FTP

为什么有匿名FTP:

  • 公开的软件、文档
  • 想让所有人都能下载
  • 不需要每个人都有账号
  • 匿名访问方便

方便公开文件分发。


匿名FTP的权限

匿名FTP的权限:

  • 通常只能下载
  • 不能上传
  • 或者上传到特定目录
  • 权限有限
  • 安全考虑

匿名用户权限有限。


27.8 小结

FTP概述

  1. 什么是FTP

    • 文件传送协议
    • 上传下载文件
    • 用TCP
  2. 特点

    • 两个连接
    • 面向文本
    • 多种传输模式
    • 认证

两个连接

  1. 控制连接

    • 传命令和响应
    • 端口21
    • 一直保持
  2. 数据连接

    • 传文件数据
    • 每次新建
    • 传完就关
  3. 为什么分开

    • 控制和数据分离
    • 灵活
    • 传数据还能发命令

主动模式和被动模式

  1. 主动模式(PORT)

    • 服务器主动连客户端
    • 有防火墙问题
  2. 被动模式(PASV)

    • 客户端主动连服务器
    • 解决防火墙问题
    • 更常用

FTP命令

  1. 常见命令

    • USER, PASS
    • PORT, PASV
    • LIST, RETR, STOR
    • CWD, PWD, MKD, RMD
    • TYPE, QUIT
  2. 命令是文本的

    • 人可读
    • 一行一个

FTP返回码

  1. 三位数字

    • 第一位是类别
    • 后两位具体的
  2. 第一位含义

    • 1xx:初步
    • 2xx:成功
    • 3xx:中间
    • 4xx:暂时失败
    • 5xx:永久失败
  3. 常见返回码

    • 230登录成功
    • 226传输完成
    • 530登录失败

传输模式

  1. ASCII模式

    • 文本文件
    • 换行转换
  2. 二进制模式

    • 二进制文件
    • 原样传
    • 不确定就用这个

匿名FTP

  1. 什么是匿名FTP

    • 不用账号
    • anonymous用户
    • 密码邮箱
  2. 用途

    • 公开文件分发
    • 软件下载
  3. 权限

    • 通常只能下载
    • 权限有限

关键概念

  1. FTP

    • 文件传输协议
    • 两个连接
  2. 主动/被动模式

    • 主动:服务器连客户端
    • 被动:客户端连服务器
  3. 控制/数据连接

    • 控制:命令,端口21
    • 数据:文件,临时端口
  4. 传输模式

    • ASCII:文本
    • 二进制:其他
  5. 匿名FTP

    • 公开访问
    • anonymous

FTP文件传送协议