ftp协议的正常工作需要两个TCP连接:命令端口、数据端口。 前者用来传输纯文本的命令交互,此连接在整个FTP会话周期中不中断; 后者用来传输二进制、文本等数据信息,只是在需要传输数据时,才会建立此连接,传输数据完毕就关闭,属于临时会话的性质。
1. 服务器在21端口监听。 客户端在本地随机端口(eg 1982)发起和服务器21端口的TCP 连接,建立TCP连接成功后 next 。
2. 服务器发送hello信息给客户端
3. 客户端分别 通过USER PASS命令输入正确的用户、口令登陆
4. 服务器认证通过后返回2xx 正确相应。
至此FTP会话层(按ISO7层的定义)已成功建立
5. 客户端发送 CDUP PWD CWD 等命令切换当前工作目录
6. 服务器响应请求,并在命令端口返回指令相应 eg: 2xx 5xx 4xx
至此客户端、服务端的交互均仅仅局限在命令端口进行,双方的交互只占用一个TCP连接。对于NAT 防火墙等都不会有什么特殊影响
所谓主动模式、被动模式是指在数据端口工作时 服务器的在TCP 传输层的动作模式
。
主动模式下:
1. 客户端首先要用PORT命令告诉服务器,准备传数据了,并告知它自己在本地哪个端口listen;
2. 服务端收到PORT后,返回2xx 正确响应
3. 客户端再通过STOR RETR LIST等告诉服务端 它想要的数据
4. 服务端收到后,服务端主动发起本地一个随机端口至客户端listen的端口的 TCP连接, 再将数据塞给客户端
5. 服务器塞数据完毕后,在命令端口中返回2xx 正确响应。
6. 工作结束,关闭4 中建立的临时TCP连接。 命令端口的连接仍然保持,服务端等待客户端命令
被动模式下:
1. 客户端首先要用PASV命令告诉服务器,准备传数据了
2. 服务端收到PASV后,在本地listen一个端口,并返回2xx 正确相应信息 + listen的端口
3. 客户端收到响应后,发送STOR RETR LIST 等告知服务端 它想要的数据
4. 服务端收到命令后,准备相关数据,完毕后发送150 响应
5. 客户端收到正确响应后,客户端主动发起一个本地随机端口至服务端listen的端口的 TCP连接, 然后服务器将数据在此TCP连接塞给客户端。
6. 服务端塞数据完毕后,在命令端口中返回2xx 正确响应。
7. 工作结束,关闭4 中建立的临时TCP连接。 命令端口的连接仍然保持,服务端等待客户端命令
另:PORT PASSIVE命令中携带的端口信息是这样的:192,168,0,1,55,66 。 前面4个 192 168 0 1 是ip地址,后面两个计算后代表端口号: 55*256 + 66 = 14146, 14146就是端口号了
简而言之就是:
主动模式下,服务器把活包干了。客户端想要数据时,就简单的开本地监听端口,坐等服务器将数据塞给客户端;
被动模式下,服务器比较懒,客户端想要数据时,得要请求服务器监听一个端口,然后客户端主动连接服务器才能得到想要的数据。
中国的ip地址资源太少,很多情况下ftp回话两端要经过层层NAT、网关、防火墙。 导致PORT PASV中的ip 信息不一定都是正确的。比如client的ip是192.168.0.107,其实它是通过NAT连接上网的,该NAT对外的internet地址是218.2.135.1,那么client 发送的PORT指令中携带的192,168,0,107,xx,yy 对于server是没有意义的。 所幸现在的NAT、防火墙一般都有FTP应用层感知能力,它能够截获ftp会话中的PORT PASSIVE, 自动将private的ip翻译成对外的正确的ip,并实时的在NAT上开放临时端口转发 。刚才的例子就会翻译成 218,2,135,1,xx,yy。 所以一般情况下,ftp还是能够正常工作的。
主动模式下,客户端的NAT、防火墙容易导致连接问题。比如PORT 后 NAT需要临时开转发端口,并改变TCP报文中PORT的内容,如果NAT不具备应用层解析能力或只能感知标准21端口的命令,都将容易导致传数据失败。 而且 主动模式下对于使用代理、ssl,会带来很多其它问题。
被动模式下,问题主要集中在服务端的网络。因为需要服务器开临时端口并listen,对其部署的Firewall 要求有动态开 forward 的能力,这可能带来一定的安全隐患。 但是,大部分情况下,服务端的网络管理员应该已经配置了对FTP的支持。 所以推荐:大部分情况下,还是使用被动模式比较好。
分享到:
相关推荐
【PHP】基于ThinkPHP 5.0的考试系统tp5
资源说明: 1:csdn平台资源详情页的文档预览若发现'异常',属平台多文档混合解析和叠加展示风格,请放心使用。 2:32页图文详解文档(从零开始项目全套环境工具安装搭建调试运行部署,保姆级图文详解)。 3:34页范例参考毕业论文,万字长文,word文档,支持二次编辑。 4:27页范例参考答辩ppt,pptx格式,支持二次编辑。 5:工具环境、ppt参考模板、相关教程资源分享。 6:资源项目源码均已通过严格测试验证,保证能够正常运行,本项目仅用作交流学习参考,请切勿用于商业用途。 7:项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通。 内容概要: 本系统基于 B/S 网络结构,在IDEA中开发。服务端用 Java 并借 ssm 框架(Spring+SpringMVC+MyBatis)搭建后台。前台采用支持 HTML5 的 VUE 框架。用 MySQL 存储数据,可靠性强。 能学到什么: 学会用ssm搭建后台,提升效率、专注业务。学习 VUE 框架构建交互界面、前后端数据交互、MySQL管理数据、从零开始环境搭建、调试、运行、打包、部署流程。
三台松下的PLC一起通信控制16轴的程序,表格定位,用于固态硬盘的组装,精密度要求高,手动,自动、报景、空机运行等,程序写法新颖,清晰明了,注释清晰易懂,是学习多台PLC并联和定位控制非常好的栗子
资源说明: 1:csdn平台资源详情页的文档预览若发现'异常',属平台多文档混合解析和叠加展示风格,请放心使用。 2:32页图文详解文档(从零开始项目全套环境工具安装搭建调试运行部署,保姆级图文详解)。 3:34页范例参考毕业论文,万字长文,word文档,支持二次编辑。 4:27页范例参考答辩ppt,pptx格式,支持二次编辑。 5:工具环境、ppt参考模板、相关教程资源分享。 6:资源项目源码均已通过严格测试验证,保证能够正常运行,本项目仅用作交流学习参考,请切勿用于商业用途。 7:项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通。 内容概要: 本系统基于 B/S 网络结构,在 IDEA 中开发。服务端用 Java 并借 ssm 框架(Spring+SpringMVC+MyBatis)搭建后台。用 MySQL 存储数据,可靠性强。 能学到什么: 学会用ssm搭建后台,提升效率、专注业务。学习使用jsp、html构建交互界面、前后端数据交互、MySQL管理数据、从零开始环境搭建、调试、运行、打包、部署流程。
【课程设计】基于pytorch实现Transformer模型的最简洁方式源码+模型+详细注释+运行说明.zip
资源说明: 1:csdn平台资源详情页的文档预览若发现'异常',属平台多文档混合解析和叠加展示风格,请放心使用。 2:32页图文详解文档(从零开始项目全套环境工具安装搭建调试运行部署,保姆级图文详解)。 3:34页范例参考毕业论文,万字长文,word文档,支持二次编辑。 4:27页范例参考答辩ppt,pptx格式,支持二次编辑。 5:工具环境、ppt参考模板、相关教程资源分享。 6:资源项目源码均已通过严格测试验证,保证能够正常运行,本项目仅用作交流学习参考,请切勿用于商业用途。 7:项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通。 内容概要: 本系统基于 B/S 网络结构,在 IDEA 中开发。服务端用 Java 并借 ssm 框架(Spring+SpringMVC+MyBatis)搭建后台。用 MySQL 存储数据,可靠性强。 能学到什么: 学会用ssm搭建后台,提升效率、专注业务。学习使用jsp、html构建交互界面、前后端数据交互、MySQL管理数据、从零开始环境搭建、调试、运行、打包、部署流程。
【课程设计】基于keil手机菜单系统仿真程序源码.zip
内容概要:本文介绍了HBase与Cassandra这两种大数据存储技术的实际应用场景,主要侧重于Cassandra的具体实施细节。首先详细展示了Cassandra在单个节点上的部署与配置步骤,如下载软件包、解压、启动与连接等基本操作。其次深入讲解了多节点环境下Cassandra的分布式部署,涵盖环境准备(包括关闭防火墙、设置无密码登陆)、文件上传与配置编辑直至最后的启动检查。进一步,文章通过建立图书管理系统来演示如何利用CQL进行数据库的基本操作(CRUD),从定义库结构(如创建Keyspaces和表格)、键值设置再到数据的增、删、改、查操作流程都有涉及。此外,提供了具体的Python代码示例指导用户完成基于Cassandra的图书管理系统编程实战部分,从而巩固对于所讲概念和技术点的理解。 使用场景及目标:旨在让读者熟悉NoSQL数据库特性,尤其是面向非结构化数据处理时的优势;掌握Cassandra这种分布式的NoSQL数据库系统的架构设计与运维方法;最终能够在实际项目中独立运用Cassandra搭建高效能的应用程序,像文中提到的图书管理系统。
PDD盈利增长特训营教程
基于配电网有功电压控制的多智能体强化学习,python代码,可以发中文核心或者中文ei,非常好的代码
塑料链板输送机sw16可编辑全套技术资料100%好用.zip
毕业设计基于python+pyqt5+sqlite3的学生通讯录管理系统源码,个人大四的毕业设计、经导师指导并认可通过的高分设计项目,评审分99分,代码完整确保可以运行,小白也可以亲自搞定,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 毕业设计基于python+pyqt5+sqlite3的学生通讯录管理系统源码毕业设计基于python+pyqt5+sqlite3的学生通讯录管理系统源码毕业设计基于python+pyqt5+sqlite3的学生通讯录管理系统源码毕业设计基于python+pyqt5+sqlite3的学生通讯录管理系统源码毕业设计基于python+pyqt5+sqlite3的学生通讯录管理系统源码毕业设计基于python+pyqt5+sqlite3的学生通讯录管理系统源码毕业设计基于python+pyqt5+sqlite3的学生通讯录管理系统源码毕业设计基于python+pyqt5+sqlite3的学生通讯录管理系统源码毕业设计基于python+pyqt5+sqlite3的学生通讯录管理系统源码毕业设计基于python
内容概要:这篇结题报告详细介绍了从220V交流电到5V直流电的小功率手机充电器设计方案。整个充电器设计由四大部分组成:变压器降压,桥式整流电路,LC低通滤波及基于Buck电路的降压斩波电路。其中Buck电路是重点讨论的内容之一,它不仅起到了重要的电压调整角色并且在PWM调制方式下可以实现对电压精确的控制。文中通过理论推导以及数学公式,阐述了不同组件的选择理由及依据,并结合具体实例给出了关键元件的选型计算。为了进一步验证此设计的效果,还建立了完整的充电器Simulink仿真环境,分别针对两种典型负载情况(轻载及突加双倍负载)、短路保护三种工况进行了多次实验测试,并最终得出所提出设计方案可以在较大幅范围内保证5V输出电压稳定性。 适用人群:本文适用于电力电子技术领域的科研人员和技术爱好者,特别是那些专注于小功率电源设计的研究群体。 使用场景及目标:本项目的实施旨在帮助理解现代手机充电器的基本工作原理及其各组件的具体运作机制;通过对Buck电路和PWM调制的理解和掌握解决实际工程中遇到的问题。 其他说明:报告引用了一些相关文献,提供了深入探讨某些细节的基础资料。此外,所有设计都基于MATLAB/Simulink仿真工具完成,为后续可能的实物制造提供了有力支持。这表明了MATLAB/Simulink在现代电子设计流程里的重要地位。
基于绿证-阶梯式碳交易交互的源荷互补调度优化 23年新鲜代码,基本完成四个场景的复现。 程序注释齐全 针对多能精合的区域综合能源系统的低经济运行问题,提出基于绿证-阶梯式碳交易交与的源荷互补优化调度模型。 首先,通过引入绿证-阶梯式碳交易交互机制来提高源侧可再生能源的消纳水平和降低系统碳排放量,其次,在负荷侧引入考用户满意度的激励型需求响应和调峰收益来实现热电负荷的\\\"峰填公”。 最后以日运行成本最小化为标。
Carsim与matlab simulink联合仿真,线控转向,四轮电动汽车转向失效容错控制模型,提供参考文献
该项目基于 Flask 框架开发,用于提供音乐数据分析与可视化功能,涉及用户管理、音乐数据爬取、聚类分析及其可视化展示。系统包含用户和管理员角色,提供丰富的页面功能。 主要功能: 用户登录与注册 音乐数据展示与搜索 管理员管理用户与音乐数据 K-Means 聚类分析及其可视化 数据爬取与存储 运行环境: 语言: Python 3.x 依赖库: Flask (Web 框架) pymysql (数据库操作) sklearn (聚类算法) matplotlib (可视化) WordCloud (词云生成) 数据库: MySQL
【java】基于jsp+servlet+mysql+tomcat的在线考试系统_pgj
低秩矩阵分解代码 用于图像、信号等杂波去除 Matlab实现 算法较新,实现效果好。
锂离子电池恒流恒压充电Simulink仿真模型(CC-CV) 电路结构包括:直流电压源、DC DC变器、锂离子电池、CCCV控制系统 赠送2000多字的说明文档和参考文献,帮助您更快理解 恒流恒压充电过程: [1]在CC阶段对电池施加恒定电流,以获得更快的充电速度,此时电池电压持续升高,经过一段时间后达到预设的最大电压,但是由于极化的存在,充电过程中测量的电池电压要大于实际的电池电压;所以还需要进入CV阶段继续充电 [2]在CV阶段电压保持恒定,电流呈指数级下降,极化电压逐渐降低,测量的电池电压更加接近于电池真实电压,当充电电流减小到一定值或SOC升高到一定值时,可以认为电池已经完全充电。
资源说明: 1:csdn平台资源详情页的文档预览若发现'异常',属平台多文档混合解析和叠加展示风格,请放心使用。 2:32页图文详解文档(从零开始项目全套环境工具安装搭建调试运行部署,保姆级图文详解)。 3:34页范例参考毕业论文,万字长文,word文档,支持二次编辑。 4:27页范例参考答辩ppt,pptx格式,支持二次编辑。 5:工具环境、ppt参考模板、相关教程资源分享。 6:资源项目源码均已通过严格测试验证,保证能够正常运行,本项目仅用作交流学习参考,请切勿用于商业用途。 7:项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通。 内容概要: 本系统基于 B/S 网络结构,在IDEA中开发。服务端用 Java 并借 ssm 框架(Spring+SpringMVC+MyBatis)搭建后台。前台采用支持 HTML5 的 VUE 框架。用 MySQL 存储数据,可靠性强。 能学到什么: 学会用ssm搭建后台,提升效率、专注业务。学习 VUE 框架构建交互界面、前后端数据交互、MySQL管理数据、从零开始环境搭建、调试、运行、打包、部署流程。