第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的特点:
-
两个连接
- 控制连接:传命令
- 数据连接:传数据
- 分开的
-
面向文本
- 命令是文本的
- 人可读
-
多种传输模式
- ASCII模式
- 二进制模式
-
认证
- 用户名密码
- 也有匿名FTP
FTP有两个连接。
本章讨论的内容
本章讨论的内容:
- FTP的工作方式
- 控制连接和数据连接
- FTP命令
- 主动模式和被动模式
- 匿名FTP
- FTP的返回码
本章介绍FTP协议。
27.2 FTP的连接
两个连接
FTP有两个连接:
-
控制连接(Control Connection)
- 传命令和响应
- 一直保持
- 整个会话期间都在
- 端口21
-
数据连接(Data Connection)
- 传文件数据
- 传完就关
- 每次传输都新建
- 端口不固定
控制连接和数据连接分开。
为什么两个连接
为什么两个连接分开:
-
控制和数据分离
- 命令和数据分开
- 互不干扰
- 传数据的时候还能发命令
-
数据连接可以随时建随时关
- 传数据的时候建
- 传完就关
- 不占资源
-
灵活
- 数据可以是不同方向
- 可以是不同格式
分开有好处。
控制连接
控制连接:
- 客户端连服务器的21端口
- 一直保持连接
- 传FTP命令和响应
- 都是文本的
- 一行一个命令
- 一行一个响应
控制连接传命令。
数据连接
数据连接:
- 传文件数据
- 传目录列表
- 每次传输新建
- 传完就关闭
- 端口不固定
什么时候建数据连接:
- 下载文件
- 上传文件
- 列目录
- 等等
数据连接传数据。
27.3 主动模式和被动模式
两种模式
FTP有两种模式:
-
主动模式(Active Mode)
- 服务器主动连客户端
- PORT命令
-
被动模式(Passive Mode)
- 客户端主动连服务器
- PASV命令
两种模式,数据连接的建立方式不同。
主动模式
主动模式(PORT):
过程:
-
客户端开一个随机端口N
- 等数据连接
-
客户端发PORT命令
- 告诉服务器自己的IP和端口N
- 格式:PORT h1,h2,h3,h4,p1,p2
- IP是h1.h2.h3.h4
- 端口是p1×256 + p2
-
服务器主动连客户端
- 服务器用20端口
- 连客户端的端口N
- 建立数据连接
-
传数据
- 通过数据连接传
主动模式服务器主动连客户端。
主动模式的问题
主动模式的问题:
- 客户端在防火墙后面
- 防火墙不让外面连进来
- 服务器连不上客户端
- 数据连接建不起来
- 就用不了
为什么:
- 主动模式是服务器连客户端
- 客户端在防火墙/NAT后面
- 连不进去
主动模式有防火墙问题。
被动模式
被动模式(PASV):
过程:
-
客户端发PASV命令
- 告诉服务器我要被动模式
-
服务器开一个随机端口M
- 等客户端连
-
服务器回响应
- 告诉客户端自己的IP和端口M
- 格式和PORT类似
-
客户端主动连服务器
- 连服务器的端口M
- 建立数据连接
-
传数据
- 通过数据连接传
被动模式客户端主动连服务器。
被动模式的好处
被动模式的好处:
- 客户端在防火墙后面也能用
- 因为是客户端主动连出去
- 防火墙通常允许连出去
- 不允许连进来
- 被动模式就没问题
现在:
- 被动模式更常用
- 因为防火墙/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 传输模式
两种传输模式
两种传输模式:
-
ASCII模式
- 文本模式
- 传文本文件
- 换行符转换
- 不同系统换行不一样
-
二进制模式
- 也叫Image模式
- 传二进制文件
- 不转换
- 原样传
ASCII和二进制两种模式。
什么时候用哪个
什么时候用ASCII:
- 文本文件
- .txt, .html, .c等
- 需要换行转换
什么时候用二进制:
- 二进制文件
- 图片、视频、压缩包、可执行文件
- 不能转换,转换就坏了
注意:
- 二进制文件用ASCII模式传会坏
- 文本文件用二进制模式通常没问题
- 所以不确定就用二进制
二进制文件必须用二进制模式。
27.7 匿名FTP
什么是匿名FTP
匿名FTP(Anonymous FTP):
- 不用账号也能登录
- 用户名:anonymous
- 密码:通常是邮箱
- 可以下载公开的文件
匿名FTP不用账号。
为什么有匿名FTP
为什么有匿名FTP:
- 公开的软件、文档
- 想让所有人都能下载
- 不需要每个人都有账号
- 匿名访问方便
方便公开文件分发。
匿名FTP的权限
匿名FTP的权限:
- 通常只能下载
- 不能上传
- 或者上传到特定目录
- 权限有限
- 安全考虑
匿名用户权限有限。
27.8 小结
FTP概述
-
什么是FTP
- 文件传送协议
- 上传下载文件
- 用TCP
-
特点
- 两个连接
- 面向文本
- 多种传输模式
- 认证
两个连接
-
控制连接
- 传命令和响应
- 端口21
- 一直保持
-
数据连接
- 传文件数据
- 每次新建
- 传完就关
-
为什么分开
- 控制和数据分离
- 灵活
- 传数据还能发命令
主动模式和被动模式
-
主动模式(PORT)
- 服务器主动连客户端
- 有防火墙问题
-
被动模式(PASV)
- 客户端主动连服务器
- 解决防火墙问题
- 更常用
FTP命令
-
常见命令
- USER, PASS
- PORT, PASV
- LIST, RETR, STOR
- CWD, PWD, MKD, RMD
- TYPE, QUIT
-
命令是文本的
- 人可读
- 一行一个
FTP返回码
-
三位数字
- 第一位是类别
- 后两位具体的
-
第一位含义
- 1xx:初步
- 2xx:成功
- 3xx:中间
- 4xx:暂时失败
- 5xx:永久失败
-
常见返回码
- 230登录成功
- 226传输完成
- 530登录失败
传输模式
-
ASCII模式
- 文本文件
- 换行转换
-
二进制模式
- 二进制文件
- 原样传
- 不确定就用这个
匿名FTP
-
什么是匿名FTP
- 不用账号
- anonymous用户
- 密码邮箱
-
用途
- 公开文件分发
- 软件下载
-
权限
- 通常只能下载
- 权限有限
关键概念
-
FTP
- 文件传输协议
- 两个连接
-
主动/被动模式
- 主动:服务器连客户端
- 被动:客户端连服务器
-
控制/数据连接
- 控制:命令,端口21
- 数据:文件,临时端口
-
传输模式
- ASCII:文本
- 二进制:其他
-
匿名FTP
- 公开访问
- anonymous