/article/2017/06/09/ftp-about/

ftp协议 功能及工作模式

  • 【作者】看不见我
  • 【分类】Linux
  • 【发布】2017-06-09 22:09
  • 【更新】2017-06-09 22:09

FTP 介绍

  • FTP (File transfer protocol).
  • FTP 最主要的功能是在服务器与客户端之间进行文件传输.
  • FTP协议使用的是明文传输方式.

FTP 功能

(1)命令记录与登录文件记录

  • FTP 可以利用系统的 syslogd 来进行数据的纪录,
  • 记录的数据包括了用户曾经下达过的命令与用户传输数据(传输时间、文件w大小等等)的纪录.
  • FTP 日志可以的在 /var/log/ 查到.

(2)不同等级的用户身份:user, guest, anonymous

FTP 服务器在预设的情况下,依据使用者登入的情况而分为三种不同的身份:

  • 实体账号,real user
  • 访客, guest
  • 匿名登录者, anonymous

(3)限制用户活动的目录:(change root, 简称 chroot)

FTP 可以限制用户仅能在自己的家目录当中活动,使用者无法离开自己的家目录。 而且登入 FTP 后,显示的根目录就是自己家目录的内容。

FTP 的运作流程与使用到的端口

FTP 的传输使用的是 TCP 封包协议,TCP 在建立链接前会先进行三次握手。 FTP 服务的交互比较复杂,使用了两个TCP连接,分别是命令信道与数据流通道(ftp-data)。

FTP 有两种工作模式

FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。

FTP主动连接模式 (active)

PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。 当需要传送数据时,客户端在命令链路上用 PORT命令告诉服务器:“我打开了*端口,你过来连接我”。于是服务器从20端口 向客户端的*端口发送连接请求,建立一条数据链路来传送数据。

Client->FtpServer: ClientPort:A - 建立tcp通道连接 - FtpServerPort:21
Client->FtpServer: ClientPort:A - 知服务器端使用active且连接的client端口号B - FtpServerPort:21
FtpServer-->Client: ClientPort:B - 建立tcp连接 - FtpServerPort:20
  1. 客户端会随机取一个大于1024以上的端口(port A)来与FTP服务器端的(port 21)建立连接,连接后客户端可以通过这个连接对FTP服务器发送命令。
  2. 在有数据传输的行为时,客户端通知FTP服务器端使用active,且告知连接的端口号(port B)。
  3. FTP服务进行数据传输前通过客户端的端口号通告,使用(port 20)主动与客户端建立连接后,开始交互传输数据。

如此一来就成功的建立起命令与数据传输两个通道。不过,要注意的是, 数据传输通道是在有数据传输的行为时才会建立的通道, 并不是一开始连接到FTP服务器就立刻建立的通道。

FTP被动连接模式 (passive)

PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。 当需要传送数据时,服务器在命令链路上用 PASV命令告诉客户端:“我打开了*端口,你过来连接我”。于是客户端向服务器 的*端口发送连接请求,建立一条数据链路来传送数据。

Client->FtpServer: ClientPort:A - 建立tcp通道连接 - FtpServerPort:21
Client->FtpServer: ClientPort:A - 向服务器端发送passive连接请求 - FtpServerPort:21
FtpServer-->Client: ClientPort:A - 服务器返回passvie连接端口号(Port X) - FtpServerPort:21
Client->FtpServer: ClientPort:B - 建立tcp通道连接 - FtpServerPort:X
  1. 客户端会随机取一个大于1024以上的端口(port A)来与FTP服务器端的(port 21)建立连接,连接后客户端可以通过这个连接对FTP服务器发送命令。
  2. 在有数据传输的行为时,客户端通过命令通道向FTP服务器端发送passive连接请求。
  3. 在服务器支持被动连接时,服务器先启动一个端口监听(这个端口号可能是随机的,也可以自定义某一范围的端口号),并讲端口号返回给通知客户端。
  4. 接收服务器通知的端口号后客户端随机取用一个大于1024的端口号与服务器建立tcp连接。

原文资料

http://blog.csdn.net/wave_1102/article/details/50651433

Top