简介

FTP协议要用到两个TCP连接, 一个是命令连接,用来在FTP客户端与服务器之间传递命令;另一个是数据连接,用来上传或下载数据。通常21端口是命令端口,20端口是数据端口。当混入主动/被动模式的概念时,数据端口就有可能不是20了。  
无论是主动模式还是被动模式,其要进行文件传输都必须依次建立两个连接,分别为命令连接与数据连接。而主动模式与被动模式的差异主要体现在数据连结通道上。

命令连接

 当FTP客户端需要登陆到FTP服务器上的时候,服务器与客户端需要进行一系列的身份验证过程,这个过程就叫做命令连接。如在客户端向服务器发起连接请 求的时候,客户端会随即的选择某个TCP端口来跟FTP服务器的21号端口进行连接,这主要是通过TCP三方握手来实现的。当三方握手完成之后,客户端与 服务器之间便建立了命令连接通道。不过这个通道的用途是非常有限的,其主要用来传输FTP的相关指令。如查看文件列表、删除文件等等,而不能够用来在客户 端与服务端进行文件传输。为此这个通道就被称之为命令通道。到客户端与服务器建立了连接之后,可能客户端暂时不需要进行数据传输。如只是需要查看目录下的文件或则其他相关的动作。此时之需要命令连接通道就可以完 成了。

数据连接

 如果此时客户端需要往FTP服务器上上传或者下载文件的话,就需要在客户端与服务器端再建立一条额外的数据传输连接。

主动模式

 主动模式下,FTP客户端从任意的非特殊的端口(N > 1024)连入到FTP服务器的命令端口--21端口。然后客户端在N+1(N+1 >= 1024)端口监听,并且通过N+1(N+1 >= 1024)端口发送命令给FTP服务器。服务器会反过来连接用户本地指定的数据端口,比如20端口。

  • FTP服务器命令(21)端口接受客户端端口(N > 1024)(客户端初始连接)
  • FTP服务器命令(21)端口到客户端端口(>1024)(服务器响应客户端命令)
  • FTP服务器数据(20)端口到客户端端口(>1024)(服务器初始化数据连接到客户端数据端口)
  • FTP服务器数据(20)端口接受客户端端口(>1024)(客户端发送ACK包到服务器的数据端口)

被动模式

在被动方式FTP中,命令连接和数据连接都由客户端发起,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。

在被动模式下,FTP库户端随机开启(N>1024)的端口向服务器的21号端口发起连接,同时会开启 N+1号端口。然后向服务器发送PASV命令,通知服务器自己处于被动模式。服务器收到命令后,会开放一个大于1024的端口P进行监听,然后用PORT P命令通知客户端,自己的数据端口是P。客户端收到命令后,会通过N+1号端口连接服务器的端口P,然后在两个端口之间进行数据传输。有效端口可以是1到65535,但是小于1024的端口是为其他协议保留的。对于被动模式FTP,最好选择端口> = 50000。 (在vsftpd.conf中指定被动端口范围为5000-5500)

  • FTP服务器命令(20)接收客户端任何大于1024的端口(客户端的初始化连接)
  • FTP服务器命令(21)到客户端(>1024)的端口 (服务器响应到客户端的控制端口的连接)
  • FTP服务器数据(>1024)接收客户端(>1024)的端口(客户端初始化数据连接到服务器指定的任意端口)
  • FTP服务器数据(>1024)到客户端(>1024)的端口(服务器发送ACK响应和数据到客户端的数据端口)

不同工作模式的网络设置

主动模式传送数据时是“服务器”连接到“客户端”的端口;被动模式传送数据是“客户端”连接到“服务器”的端口。

在实际项目中碰到的问题是,FTP的客户端和服务器分别在不同网络,两个网络之间有至少4层的防火墙,服务器端只开放了21端口, 客户端机器没开放任何端口。FTP客户端连接采用的被动模式,结果客户端能登录成功,但是无法LIST列表和读取数据。很明显,是因为服务器端没开放被动模式下的随机端口导致。

由于被动模式下,服务器端开放的端口随机,但是防火墙要不能全部开放,解决的方案是,在ftp服务器配置被动模式下开放随机端口在 50000-60000之间(范围在ftp服务器软件设置,可以设置任意1024上的端口段),然后在防火墙设置规则,开放服务器端50000-60000之间的端口端。

主动模式下,客户端的FTP软件设置主动模式开放的端口段,在客户端的防火墙开放对应的端口段。

转载于:https://www.cnblogs.com/xuey/p/9650277.html

FTP 两种连接模式相关推荐

  1. ftp无法与服务器建立连接_建立与Oracle数据库服务器连接的两种连接模式

    建立与Oracle数据库服务器连接的两种连接模式(专用服务器与共享服务器) 在建立Oracle数据库的时候,应该会在数据库建立助手向导上面看到这么一个选项,就是数据库的连接模式采用什么方式.在Orac ...

  2. 计算机接入因特网的方式一般分为哪两种?各自的连接设备有哪,无线局域网的接入方式 无线局域网有哪两种连接模式...

    1, 无线局域网有哪两种连接模式 计算机接入因特网的方式:1.通过公共交换电话网接入互联网.2.通过综合业务数字网接入互联网.3.通过非时称数字用户线接入互联网.4.通过局城网接入互联网.要使用互联网 ...

  3. FTP两种工作模式:主动模式(Active FTP)和被动模式(Passive FTP)

    http://jiahej.iteye.com/blog/179295 在主动模式下,FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,然后开放N+1号端口进行监听,并向服务器 ...

  4. Java使用SFTP和FTP两种连接服务器的方式实现对文件的上传下载

    一.Java实现对SFTP服务器的文件的上传下载: 1.添加maven依赖: <dependency><groupId>com.jcraft</groupId>&l ...

  5. FTP服务器的两种工作模式

    FTP协议: FTP(File transfer Protocol)是一种在互联网中进行文件传输的协议,基于客户端/服务器模式,默认使用20.21号端口, 其中端口20(数据端口)用于进行数据传输,端 ...

  6. FTP文件传输协议原理详解(两种工作模式)

    初始FTP     文件传输协议(File Transfer Protocol,缩写:FTP)是一个用于在计算机网络上在客户端和服务器之间进行文件传输的应用层协议.文件传送(file transfer ...

  7. linux apache两种工作模式详解

    apache两种工作模式详解 刚接触这两个配置时很迷糊,全部开启或全部注释没有几多变化.今天搜索到这么一篇讲得还不错的文章,看了几篇,还是不能完全记住,做一个收藏. 空闲子进程:是指没有正在处理请求的 ...

  8. Oracle 的两种工作模式Dedicated Server 和 Shared Server

    Oracle可以分成两种工作模式, 分别是 Dedicated Server 和 Shared Server                   1  Dedicated Server         ...

  9. 8086的两种工作模式_Lora自组网网关的两种工作模式

    LoRa技术具有远距离.低功耗.多节点.低成本和抗干扰的特点.另一方面,LoRa低速率支持较小的数据传输. 服务器.终端(内置LoRa模块).网关(或基站).云四部分组成了LoRa网络.如下所示 Lo ...

最新文章

  1. android 解决华为系列手机调试时不能打印Logcat日志信息
  2. python3 字符串大小写转换
  3. 基于weblogic 的EJB 学习笔记-JSP教程,资料/其它
  4. 欧拉回路 欧拉路径
  5. 定时器_Qt定时器小坑
  6. 程序员如何避免身体被掏空?
  7. xshell对mysql的备份与恢复_windows下mysql全备份及还原(亲测可用)
  8. jQuery焦点图插件
  9. 登录权限验证token
  10. CISCO防火墙自动配置、备份脚本
  11. 01.业务编号规则与算法整合
  12. 声网Agora 孙雨润:下一代实时传输体系结构的升级与应用
  13. mysql 显示 乱码_MySQL 中文显示乱码
  14. Paxos 实现日志复制同步(Basic Paxos)
  15. 图像特征原理--HOG特征
  16. 移动脑电在神经发展障碍研究中的运用
  17. mysql三叶草,温州日报瓯网 - 面对温州话,你被困住了吗?
  18. Should be compatible with WP_Widget::widget($args, $instance)
  19. agv系统介绍_AGV小车控制系统介绍
  20. 矩阵最大覆盖问题:最多有多少个矩阵是重合覆盖的

热门文章

  1. SpringBoot+Vue实现的高校图书馆管理系统 附带详细运行指导视频
  2. 能源管理系统与能源管理平台|瑜岿科技
  3. HTML5实现网页计算器清空操作,基于JavaScript实现网页计算器
  4. linux反编译unity手游,Unity3D安卓手游逆向
  5. 不利用math.h实现幂运算,开方,开立方,开四次方(新手篇02)
  6. 基于微信小程序的废品回收系统#毕业设计
  7. C语言每日一练——第60天:平分7筐鱼
  8. 大学计算机必修课 编译原理,大学计算机必修课新讲-编译原理+操作系统+图形学2020...
  9. 基于Java实现本地缓存,缓存过期删除和LRU缓存淘汰
  10. html离线教程,HTML5离线存储整理