TP传输的两种模式

TP传输的两种模式

 
主动模式(active):
 
我们知道,FTP是由TCP封包的模式连接,TCP 这种封包由于需要经过 Server 端与 Client 端两边的『三次握手』之后,才能确定联机,也就是需要执行ACK确认的动作,需要经过以下几个动作。 
 
TP传输的两种模式
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 下达数据传输的命令初会出现一些问题,我们以底下的图示来说明好了:
TP传输的两种模式
由于目前的 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传输的两种模式
 

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/114156.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mysql 查看函数fsync_sync/fsync/fdatasync的简单比较

    mysql 查看函数fsync_sync/fsync/fdatasync的简单比较此文主要转载自官网上有关于MySQL的flushmethod的设置参数说明,但可能很多人不太明白。下文就详细说明此问题。首先官网的说明如下:http://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html#sysvar_innodb_flush_methodinnodb_flush_methodCommand-LineFormat–i…

    2022年5月31日
    32
  • python中文占几个字节_中文在python中占几个字节

    python中文占几个字节_中文在python中占几个字节如果是utf-8编码,那么一个中文字符占用三个字节,一个英文字符占用一个字节。如果是gbk编码,那么一个中文字符占用两个字节,一个英文字符占用一个字节。如果是utf-8编码,那么一个中文包含繁体字等于三个字节,一个英文字符等于一个字节。如果是gbk编码,那么一个中文包含繁体字等于两个字节,一个英文字符等于一个字节。(推荐学习:Python入门教程)我们可以用如下方法来判断:中文和符号:print(…

    2022年6月26日
    45
  • Java NIO详解[通俗易懂]

    Java NIO详解[通俗易懂]JAVANIO简介NIO与IO的对比

    2022年7月8日
    16
  • SSM项目部署到阿里云服务器。只需要五个步骤。

    SSM项目部署到阿里云服务器。只需要五个步骤。最近在看很多ssm项目部署到阿里云的教程:踩了很多坑,所以希望大家部署时候有所借鉴吧。有什么不懂可以联系qq交流:980631161.主要分为五个步骤:1.购买服务器2下载xshell和Xftp63.在服务器上安装jdk,mysql,tomcat。4.数据库准备数据5.maven项目生成war文件。1.购买服务器在阿里云购买一个ESC服务器网址是:https://www….

    2022年6月20日
    54
  • 原码、反码、补码知识详细讲解(此作者是我找到的讲的最细最明白的一个)[通俗易懂]

    原码、反码、补码知识详细讲解(此作者是我找到的讲的最细最明白的一个)[通俗易懂]本篇文章讲解了计算机的原码,反码和补码.并且进行了深入探求了为何要使用反码和补码,以及更进一步的论证了为何可以用反码,补码的加法计算原码的减法.论证部分如有不对的地方请各位牛人帮忙指正!希望本文对大家学习计算机基础有所帮助!一.机器数和真值在学习原码,反码和补码之前,需要先了解机器数和真值的概念.1、机器数一个数在计算机中的二进制表示形式,叫做这个数的机器数。机器数是带符号…

    2022年5月10日
    49
  • pycharm2021最新激活码[最新免费获取]

    (pycharm2021最新激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlS32PGH0SQB-eyJsaWN…

    2022年3月26日
    77

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号