TP传输的两种模式
主动模式(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 端向外联机的信息,所以在 |
由于目前的 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)”。被动模式会经过经过以下几个步骤: |
|
|
|
|
|
|
上面说明了FTP的两种连接模式: |
|
Serv-U可以设定pasv模式时使用的端口范围,具体设置步骤如下:
|
在防火墙上需要开启上面指定的端口范围。 |
TP传输的两种模式的更多相关文章
- FTP文件传输协议两种模式 ftp协议集,错误码集,ftp客户端命令集
TCP/IP协议中,FTP标准命令TCP端口号为21,Port方式数据端口为20.FTP协议的任务是从一台计算机将文件传送到另一台计算机,它与这两台计算机所处的位置.联接的方式.甚至是是否使用相同的操 ...
- FTP 文件传输协议的两种模式:主动模式和被动模式
https://www.cnblogs.com/i-shu/articles/4905266.html FTP支持两种模式,一种方式叫做Standard (也就是 PORT方式,主动方式),一种是 P ...
- 协议中UART的两种模式 【转】
转自:http://wjf88223.blog.163.com/blog/static/3516800120104179327286/ ^^…… 协议栈中UART有两种模式:1.中断2.DMA 对于这 ...
- FTP具有两种模式
FTP具有两种模式,分别是port模式(也叫主动模式)和pasv模式(也叫被动模式),怎么来理解这两种模式呢?我来打个比喻吧,在主动模式下:客户端给服务器端的21端口发命令说,我要下载什么什么,并且还 ...
- Django---Http协议简述和原理,HTTP请求码,HTTP请求格式和响应格式(重点),Django的安装与使用,Django项目的创建和运行(cmd和pycharm两种模式),Django的基础文件配置,Web框架的本质,服务器程序和应用程序(wsgiref服务端模块,jinja2模板渲染模块)的使用
Django---Http协议简述和原理,HTTP请求码,HTTP请求格式和响应格式(重点),Django的安装与使用,Django项目的创建和运行(cmd和pycharm两种模式),Django的基 ...
- Windows2003 IIS6.0支持32位和64位两种模式的设置方法
IIS 6.0 可支持 32 位和 64 位两种模式.但是,IIS 6.0 不支持在 64 位版本的 Windows 上同时运行这两种模式.ASP.NET 1.1 只在 32 位模式下运行.而 ASP ...
- 【转】Reactor与Proactor两种模式区别
转自:http://www.cnblogs.com/cbscan/articles/2107494.html 两种IO多路复用方案:Reactor and Proactor 一般情况下,I/O 复用机 ...
- ACE_linux:Reactor与Proactor两种模式的区别
一.概念: Reactor与Proactor两种模式的区别.这里我们只关注read操作,因为write操作也是差不多的.下面是Reactor的做法: 某个事件处理器宣称它对某个socket上的读事件很 ...
- JSP中两种模式的总结
运用JSP/Servlet实现的Web动态交互,主要采用: 模式一:JSP+JavaBean 链接:http://wxmimperio.coding.io/?p=155 模式二;JSP+Servlet ...
随机推荐
- css3特效样式库
直接调用样式类即可: /* animation */ .a-bounce,.a-flip,.a-flash,.a-shake,.a-swing,.a-wobble,.a-ring{-webkit-an ...
- [编织消息框架][JAVA核心技术]动态代理应用1
前面几篇介绍,终于到了应用阶段啦,我们来做一个RPC来加强学过的知识 做基础核心时先确定解决什么问题,提供什么服务,同将来扩展等 rpc 分两部份,一个是调用者,另一方是服务提供者 调用者只关心那个服 ...
- APP瘦身绝技(快速减少包大小)
如果要清理无用类文件和无用图片,参考博客<iOS 清理Xcode项目中没有使用到的图片资源和类文件>.当下众多app项目,尤其是初创公司,明显的特点就是,开发周期短,迭代更新快,甚至一周一 ...
- vue2.0 vetur插件提示 'v-for' directives require 'v-bind:key' directives 的解决办法
在用vscode编写vue代码时,因为安装的有vetur插件,所以当代码中有v-for语法时,会提示 [vue-language-server] 'v-for' directives require ...
- 纯js代码生成可搜索选择下拉列表
1.因为动态的css楼主写不出来,因此需要引入layui中的css样式:<link rel="stylesheet" href="${ctxStatic}/layu ...
- Java学习笔记20(String类应用、StringBuffer类、StringBuilder类)
1.获取指定字符串中大小写和数字的个数: package demo; public class StringTest { public static void main(String[] args) ...
- python之 模块与包
一. 模块 1.模块定义: 将代码量较大的程序分割成多个有组织的.彼此独立但又能互相交互的代码片段,这些自我包含的有组织的代码段就是模块. 2.模块分类: a.标准库(又称内置模块) b.开源模块(又 ...
- Python爬虫下载美女图片(不同网站不同方法)
声明:以下代码,Python版本3.6完美运行 一.思路介绍 不同的图片网站设有不同的反爬虫机制,根据具体网站采取对应的方法 1. 浏览器浏览分析地址变化规律 2. Python测试类获取网页内容,从 ...
- Java设计模式总汇二(小白也要飞)
PS:上一篇我介绍了适配器设计模式.单例设计模式.静态代理设计模式.简单工厂设计模式,如果没有看过第一篇的小火鸡可以点这个看看http://www.cnblogs.com/cmusketeer/p/8 ...
- SPI通讯协议
一.SPI概述 SPI,是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接口.SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线, ...