c++ ftp服务端_FTP文件传输协议详解

FTP文件传输协议是应用层实现的一种通过网络传输文件的协议,这种协议采用C/S架构(即客户端/服务器模式)。

6b044c84b89879a793f726c93072afbb.png

C/S架构

FTP采用双连接的方式来进行文件的传输(TCP或UDP连接均可):

  • 控制连接;
  • 数据连接;

控制连接用于服务器和客户端之间命令的交互以及响应,而数据连接则用于文件数据的传输。

一个FTP控制连接的建立过程通常如下:

  1. 服务端打开用于FTP控制连接的TCP端口21(标准),等待FTP客户端的连接。当客户端需要登陆FTP服务器时,主动打开本地TCP端口21,与服务端建立连接(控制连接)。该连接始终等待客户和服务器之间的通信,将命令从客户端传递到服务器,并传回服务器的应答。
  2. 每当需要文件传输时,就创建一个数据连接。大致过程如下图:
afc8ef95e8e74cde43f67d2a17650b04.png

文件传输中的处理过程

模式选择

  • ASCII码文件类型(默认选择)

文本格式以ASCII码形式在数据连接中传输。这就要求发送方将本地文件转换为ASCII码形式,而接收方 再将ASCII码还原成本地文件。采用ASCII码形式传输,每一行都带有一个回车字符,而后是一个换行符。这就意味着接收方需要扫描每一个字节,查找CR,LF对。

  • 二进制文件类型

数据发送呈现为一个连续的比特流。通常用于传输二进制文件。

格式控制--

  • 非打印(默认选择)

文件不含有垂直格式信息。

结构--

  • 文件结构(默认选择)

文件被认为是一个连续的字节流,不存在内部的文件结构。

传输方式--

  • 流方式(默认选择)

文件以字节流的形式传输。对于文件结构,发方尾提示关闭数据连接。对于记录结构,有专用的两字节序列码标志记录结束和文件结束。

FTP命令

命令和应答在客户和服务器的控制连接上以ASCII码形式传送。以下为常用的FTP命令:

b7f4bf2b69da5585c9b4bbc06348dd25.png

FTP命令

FTP应答

应答都是ASCII码形式的3位数字,并跟有报文选项。其原因是软件系统需要根据数字代码来决定如何应答,而选项串是面向人工处理的。由于客户通常需要输出数字应答和报文串,一个可以交互的用户可以通过阅读报文串来确定应答的含义。

下图是应答代码第1位和第2位的含义。

dd5d03fd2cea77907cc5e04f52383c94.png

FTP应答报文解析

第3位数字给出差错报文的附加含义。以下是一些典型的应答:

  • 125 数据连接已经打开;传输开始。
  • 200 就绪命令。
  • 214 帮助报文(面向用户)。
  • 331 用户名就绪,要求输入口令。
  • 425 不能打开数据连接。
  • 452 错写文件。
  • 500 语法错误(未认可的命令)。
  • 501 语法错误(无效参数)。
  • 502 未实现的MODE(方式命令)类型。

如果需要产生一条多行应答,第1行在3为数字应答代码之后包含一个连字号,而不是空格。如:

32ad68d4b074a408cf1c64a10cd4727a.png

报文示例

连接管理

数据连接有以下三大用途:

  • 从客户向服务器发送一个文件;
  • 从服务器向客户发送一个文件;
  • 从服务器向客户发送文件或目录列表;

FTP把文件列表从数据连接上发回,而不是从控制连接上多行发回,这就避免了行的有限性对目录大小的限制,而且更易于客户将目录列表以文件形式保存,而不是把列表显示在终端上。

在上面的介绍中,我们简单叙述了一个FTP控制连接的建立过程,下面介绍FTP数据连接的建立过程。

由于通用的传输方式是采用流方式进行传输,这种传输方式的特点是结尾以关闭数据连接为标志。这就意味着每一个文件和文件列表的传输都要建立一个全新的数据连接。其过程一般如下:

  1. 由于是客户发出命令要求建立数据连接的,所以数据连接是在客户的控制下建立的。
  2. 客户通常需要在本地主机上打开一个临时端口号,从该端口号发布一个被动的打开。
  3. 客户使用PORT命令从控制连接上把端口号发向服务器。
  4. 服务器在控制连接上接收到端口号后,并向客户端主机上的端口发布一个主动的打开,这样服务器和客户端就建立了一条数据连接通信。对于服务器,数据连接端口号一直使用端口20。

下图是这个过程的简单示例:

f241cab253a7a0a5619fd943be194f09.png

控制连接过程

服务器总是执行数据连接的主动打开。通常也执行数据连接的主动关闭,除非当客户端向服务器发送流形式的文件时,需要客户来关闭连接(它给服务器一个文件结束的通知)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值