1, 数据传输模式不合理
不考虑文件自身的内容, 一味使用 ASCII 模式传输数据是不合理的. 文件传输协议 (FTP) 应该具有自动检测功能, 当然用户也可以进行自定义.
虽然现在许多 Linux 和 Windows 客户端已经支持自动传输模式, 但多达数代的 UNIX 和 Windows 客户端都默认使用 ASCII 传输模式, 这种传输模式甚至会造成文件损坏.
2, 工作方式设计不合理
文件传输协议 (FTP) 可以在主动模式 (PORT) 或被动模式 (PASV) 下工作, 这决定了数据链接建立的方式.
在主动模式下, 客户端首先向服务器端发送 IP 地址和端口号, 然后等待服务器端建立 TCP 链接. 在被动模式下, 客户端同样首先建立到服务器的链接, 但服务器端会开启一个端口(1024 到 5000 之间), 等待客户端传输数据.
文件传输协议 (FTP) 中最让人不可思议的是, 客户端会侦听服务器端!
3, 与防火墙工作不协调
在文件传输协议 (FTP) 诞生在网络地址转换 (NAT) 和防火墙之前, 那时的网络还不存在恶意 ***. 今天大多数最终用户的 IPv4 地址已不可路由, 这是因为防火墙的使用和 IPv4 地址的短缺.
这对 FTP 意味着什么呢? 这意味着如果 FTP 客户端 IP 地址不可路由, 或者位于防火墙之后, 那么就只能使用被动传输模式进行数据传输.
如果服务器端的 IP 地址也不可路由, 或者位于防火墙之后呢? FTP 将无法进行数据传输!
现在, 许多防火墙适用于 NAT 环境, 可以使用一些特殊的技巧 (hacks) 允许 FTP 在防火墙之后正常工作. 当然, 这需要对防火墙进行配置.
4, 密码安全策略不完善
在互联网早期, 文件传输协议 (FTP) 并没有对密码安全作出规定. 在 FTP 客户端和服务器端, 数据以明文的形式传输, 任何对通讯路径上的路由具有控制能力的人, 都可以通过嗅探获取你的密码和数据.
我们当然可以使用 SSL 封装 FTP, 但 FTP 是通过建立多次链接进行数据传输的, 我们即便是保护了密码安全, 也很难保护数据传输的安全性.
自文件传输协议 (FTP) 发布以来, 安全的数据传输也经历了长足发展, 推荐使用 SCP 取代 FTP 进行文件传输.
5,FTP 协议效率低下
从 FTP 服务器上检索一个文件, 包含繁复的交换握手步骤:
客户端建立到 FTP 服务器端控制端口的 TCP Socket 链接, 并等待 TCP 握手完成
客户端等待服务器端发送回执
客户端向服务器端发送用户名并等待响应
客户端向服务器端发送密码并等待响应
客户端向服务器端发送 SYST 命令并等待响应
客户端向服务器端发送 TYPE I 命令并等待响应
如果用户需要在服务器端切换目录, 客户端仍然发送命令并等待响应
主动模式下, 客户端需要发送 PORT 命令到服务器端, 然后等待响应(被动模式与主动模式相反)
建立数据传输链接(需要经过三次握手, 建立一条 TCP Socket 连接)
通过链接传输数据
客户端等待服务器端从控制连接发送 2xx 指令, 以确保数据传输成功
客户端发送 QUIT 命令, 并等待服务器响应
同样的情形, 我们来看看 HTTP 协议:
HTTP 客户端向 HTTP 服务器端建立一条 TCP Socket 连接
HTTP 客户端向 HTTP 服务器端发送 GET 命令, 包含 URL,HTTP 协议版本, 虚拟主机名等等, 并等待响应
HTTP 服务器端的响应包含了所有想要的数据, 完成!
传输一个文件, FTP 需要往复 10 次, 而 HTTP 只需要 2 次! 如果传输多个文件, FTP 可以省略发送用户名和密码的步骤, 而 HTTP 则可以使用固定的套接字(Socket), 在相同的 TCP 连接中传输文件.
综上所述, 虽然文件传输协议 (FTP) 曾经显赫一时, 但现在已经过时了, 它是一个既不不安全, 也不不友好, 而且效率低下的协议, 势必被取而代之.
Raysync 文件传输协议(FTP)
来源: http://www.bubuko.com/infodetail-3075463.html