主动模式(active):
 
我们知道,FTP是由TCP封包的模式连接,TCP
这种封包由于需要经过 Server 端与 Client
端两边的『三次握手』之后,才能确定联机,也就是需要执行ACK确认的动作,需要经过以下几个动作。 
 
Client 端主动向 Server 端发送联机需求:
首先client端会随机选取1024以上的端口来主动联机到server端提供的21端口,也就是会主动发送一个封包到server。
 
Server 端接受后,响应给 Client 端:当 Server
接收到 Client 的要求之后,会响应 Client 端的需求,此时 Server 端会建立等待联机的资源,并且将一带有 SYN
与确认 (ACK) 的封包送回 Client 端;
 
Client 端回应确认封包:在 Client 端接收到来自
Server 端告知的封包后,会再次的发送一个确认封包给主机,此时,两边才会正式的建立起联机的通道,这个步骤 1 ~ 3 就是
Three-Way Handshake(三次握手)。需要注意的是,这个已经建立联机的通道(通常是 port 21)仅能进行 FTP
的『指令』而已,如果该指令涉及到数据的传送(data
transfer)时,例如上传或下载等等,那么就需要额外建立一条数据传输的通道才行 ( ftp-data
)!而数据传输的通道建立则需要继续底下的步骤;


 
Client 端发送数据传输要求的命令给
Server:当需要进行数据的传输时,Client 端会启用另一个高于 1024 的端口来做为联机的准备(这个高于 1024
的端口与步骤 1 那个端口不是同一个!),并且 Client 端会主动的利用刚刚已经建立的指令信道(通常是 port
21)发送一个命令告诉 Server 说:『我已经准备好一个数据传输的端口了,请准备进行传输吧』!
 
Server 端以 ftp-data 端口主动联机到 Client
:收到命令之后的 Server 会『主动』的以 ftp-data 端口(一般为 port 20)向 Client 端通知的那个高于
1024 的端口进行联机。
 
Client 端响应主机端,并继续完成三次握手:在接到
Server 来的封包之后, Client 会响应一个带有 ACK
确认的封包,并继续来完成另一个三次握手的程序,此时,数据传输的通道才正式的建立。
 
以上就是client端以主动模式连接Server端的过程,适合FTP 服务器和PC客户端的直接建立连接,使用到的端口: 
(1)命令通道的 (预设为port 21) 。

(2)数据传输的 (预设为port 20)。
 
被动模式(passive)
 
还有一种网络状况,就是Client
端是在防火墙后端,或者是NAT主机后端,这个时候client端和server端之间建立FTP连接时,就会出现一些不一样的状况。

FTP client 是在 NAT 主机的后端,那由于我们的 NAT 主机会自动的纪录 client 端向外联机的信息,所以在
Client 依上面步骤 1 送出要求封包后,步骤 2 的 FTP 回传的封包可以透过 NAT 转交给 client
,这没有问题!所以, Client 连接到 Server 的命令通道 ( port 21 )可以正确的被建立起来的。不过,Client
端在建立起了命令通道之后,对 Server 下达数据传输的命令初会出现一些问题,我们以底下的图示来说明好了:

由于目前的 NAT
主机可以记录由内部计算机联机出去的信息,因此,由 port 21 的联机可以顺利的被建立起来;
 
当 Client 端由 port 21
下达数据传输的命令时,此时client会告诉 FTP Server 说:『我开了一个 >1024
的端口,请来连接吧』!
 
这个时候要特别留意的是,client经过NAT主机联机后,在
FTP Server 看到的client的 IP 其实是 NAT 那部主机的!所以,这个时候 FTP Server 会主动的由
port 20 向 NAT 主机的 >1024 那个 port 要求建立联机!
 
经过上图我们会发现,FTP
Server会根据client的命令去连接那个>1024的端口,NAT主机或者防火墙并没有那个开启那个>1024的端口,所以就会造成无法连接的问题。
 
既然这样不能正常连接,那么我们就让client主动去连接服务器,这样就不会出现上述的问题了,这种方式我们称之为“被动模式(passive)”。被动模式会经过经过以下几个步骤:
 
  • Client 端主动向 Server 端发送联机需求:
  • Server 端接受后,响应给 Client 端:
  • Client
    端回应确认封包:上面这三个步骤与主动式联机一样,同样的完成三次握手后,建立命令通道了!底下说明被动式数据传输信道的建立。
  • Client 端发送数据传输要求的命令给 Server:与主动模式不一样的是,在被动模式时,Client
    端在下达命令之后,并告诉 FTP Server要使用的是PASV模式。 
  • Server 端挑选 > 1024 的端口等待联机:在接受 client 的 PASV 要求之后,如果没有特别的设定时
    (目前的 Serv-U服务器可以指定PASV模式连接时的端口) ,Server 会随机选取一个大于 1024
    的端口,并经由命令通道反馈给client。
  • Client 端主动向 Server 端建立联机并继续完成三次握手:经由命令通道得知 Server 的端口之后, Client
    端会随机挑选另一个大于 1024 的端口,并主动向 Server 端的等待联机的端口进行联机动作,然后 Server 会响应一个带有
    ACK 确认的封包,并继续来完成另一个三次握手的程序,此时,数据传输的信道就正式的建立。
上面说明了FTP的两种连接模式:
 
  • 主动模式(active):适合FTP Server和client直接建立连接时使用,
  • 被动模式(passive):适合client位于NAT或者防火墙之后的环境。
 
Serv-U可以设定pasv模式时使用的端口范围,具体设置步骤如下:

  • Serv-U管理控制台------服务器限制和设置----设置----PASV端口范围(这里指定一个大于1024的端口,比如50000~50010)
 
 

在防火墙上需要开启上面指定的端口范围。

TP传输的两种模式的更多相关文章

  1. FTP文件传输协议两种模式 ftp协议集,错误码集,ftp客户端命令集

    TCP/IP协议中,FTP标准命令TCP端口号为21,Port方式数据端口为20.FTP协议的任务是从一台计算机将文件传送到另一台计算机,它与这两台计算机所处的位置.联接的方式.甚至是是否使用相同的操 ...

  2. FTP 文件传输协议的两种模式:主动模式和被动模式

    https://www.cnblogs.com/i-shu/articles/4905266.html FTP支持两种模式,一种方式叫做Standard (也就是 PORT方式,主动方式),一种是 P ...

  3. 协议中UART的两种模式 【转】

    转自:http://wjf88223.blog.163.com/blog/static/3516800120104179327286/ ^^…… 协议栈中UART有两种模式:1.中断2.DMA 对于这 ...

  4. FTP具有两种模式

    FTP具有两种模式,分别是port模式(也叫主动模式)和pasv模式(也叫被动模式),怎么来理解这两种模式呢?我来打个比喻吧,在主动模式下:客户端给服务器端的21端口发命令说,我要下载什么什么,并且还 ...

  5. Django---Http协议简述和原理,HTTP请求码,HTTP请求格式和响应格式(重点),Django的安装与使用,Django项目的创建和运行(cmd和pycharm两种模式),Django的基础文件配置,Web框架的本质,服务器程序和应用程序(wsgiref服务端模块,jinja2模板渲染模块)的使用

    Django---Http协议简述和原理,HTTP请求码,HTTP请求格式和响应格式(重点),Django的安装与使用,Django项目的创建和运行(cmd和pycharm两种模式),Django的基 ...

  6. Windows2003 IIS6.0支持32位和64位两种模式的设置方法

    IIS 6.0 可支持 32 位和 64 位两种模式.但是,IIS 6.0 不支持在 64 位版本的 Windows 上同时运行这两种模式.ASP.NET 1.1 只在 32 位模式下运行.而 ASP ...

  7. 【转】Reactor与Proactor两种模式区别

    转自:http://www.cnblogs.com/cbscan/articles/2107494.html 两种IO多路复用方案:Reactor and Proactor 一般情况下,I/O 复用机 ...

  8. ACE_linux:Reactor与Proactor两种模式的区别

    一.概念: Reactor与Proactor两种模式的区别.这里我们只关注read操作,因为write操作也是差不多的.下面是Reactor的做法: 某个事件处理器宣称它对某个socket上的读事件很 ...

  9. JSP中两种模式的总结

    运用JSP/Servlet实现的Web动态交互,主要采用: 模式一:JSP+JavaBean 链接:http://wxmimperio.coding.io/?p=155 模式二;JSP+Servlet ...

随机推荐

  1. 使用C#开发数据库应用系统 习题

    错题积累 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:

  2. mac 安装mysql特种报错的对应解决方式

    参考 :http://www.jianshu.com/p/776e72742c6e 原文废话太多了, 还是看我的好了. 配置环境变量 echo "export PATH=$PATH:/usr ...

  3. Mac下安装pymssql

    需要先安装freetds 先用 brew list 查看已经安装的包 如果已经安装freetds,则使用 brew uninstall freetds先卸载 brew unlink freetds b ...

  4. MicroPython教程之TPYBoard v102 CAN总线通信

    0x00前言 CAN是控制器局域网络(ControllerAreaNetwork,CAN)的简称,是ISO国际标准化的串行通信协议.CAN总线结构简单,只需2根线与外部相连,并且内部集成了错误探测和管 ...

  5. MicroPython+北斗+GPS+GPRS:TPYBoardv702短信功能使用说明

    转载请以链接形式注明文章来源(MicroPythonQQ技术交流群:157816561,公众号:MicroPython玩家汇) TPYBoardv702是目前市面上唯一支持通信定位功能的MicroPy ...

  6. 【HTTP协议】

    一.简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议 ...

  7. Python(三)字典的增删改查和遍历

    一.增加

  8. poi 读取word文档

    1.导入jar包 官网下载地址: https://www.apache.org/dyn/closer.lua/poi/release/bin/poi-bin-3.17-20170915.zip 最开始 ...

  9. web前端教程:CSS 布局十八般武艺都在这里了

      CSS布局 布局是CSS中一个重要部分,本文总结了CSS布局中的常用技巧,包括常用的水平居中.垂直居中方法,以及单列布局.多列布局的多种实现方式(包括传统的盒模型布局和比较新的flex布局实现), ...

  10. Use of Deep Learning in Modern Recommendation System: A Summary of Recent Works(笔记)

    注意:论文中,很多的地方出现baseline,可以理解为参照物的意思,但是在论文中,我们还是直接将它称之为基线,也 就是对照物,参照物. 这片论文中,作者没有去做实际的实验,但是却做了一件很有意义的事 ...