FTP 是一种基于 TCP 的应用层协议,它不支持 UDP 协议。 FTP 工作在一种特殊的服务机制上,它使用两个端口,一个 '数据' 端口和一个 '命令' 端口(也称为控制端口)。 通常情况下,端口 21 用作命令端口,端口 20 用作数据端口。 然而,我偶然间发现,数据端口有时候并不是在端口 20 上时,这就要谈到 FTP 的被动模式了。

主动模式

在主动模式的 FTP 中,客户端从一个随机的非系统端口(N > 1023)连接到 FTP 服务器的命令端口端口 21。然后,客户端开始监听端口 N+1,并将 FTP 命令端口 N+1 告诉 FTP 服务器,“请把数据发送给我的 N+1 端口”。然后,服务器将从本地数据端口 (端口20) 连接回客户端的数据端口,也就是 N+1 端口。

因为服务器防火墙的隔离作用,我们应该确保服务器 FTP 到客户端的一下几个通道的畅通:

FTP 服务器端口 21 (接受全部客户端)

FTP 服务器端口 21 到 > 1023 的端口 ( 服务器响应客户端控制端口 )

FTP 服务器端口 20 到 > 1023 的端口 ( 服务器发起到客户端的数据端口的连接 )

从 > 1023的端口到 FTP 服务器端口 20 ( 客户端发送 ack 到服务器的数据端口 )

用图来表示这些通道:

activeftp.gif

第 1 步,客户端的命令端口与服务器的命令端口连接并发送命令端口 1027。然后,服务器在第 2 步时将一个 ACK 发送回客户端的命令端口。第 3 步,服务器在其本地数据端口上启动连接,连接到前面指定的客户端的数据端口。最后,客户端返回 ACK,如第 4 步所示。

主动模式的 FTP 主要问题实际上落在客户端。FTP 的客户端并不会主动连接到服务器的数据端口,而是是告诉服务器它正在监听哪个端口,然后服务器发起连接到客户端上指定的端口。但是,这样的连接有时候会被客户端的防火墙阻止。‘

被动模式

为了解决服务器主动发起到客户端连接会北阻止的问题,另一种更完善的工作模式出现了,它就是 FTP 的被动模式,缩写作 PASV,它工作的前提是客户端明确告知 FTP 服务器它使用被动模式。

在被动模式的 FTP 中,客户端启动到服务器的两个连接,解决了防火墙阻止从服务器到客户端的传入数据端口连接的问题。FTP 连接建立后,客户端在本地打开两个随机的非系统端口 N 和 N + 1(N > 1023)。第一个端口连接服务器上的 21 端口,但是客户端这次将会发出 PASV 命令,也就是不允许服务器连接回其数据端口。这样,服务器随后会打开一个随机的非系统端口 P (P > 1023),并将 P 发送给客户端作为 PASV 命令的响应。然后客户端启动从端口 N+1 到端口 P 的连接来传输数据。

在被动模式中,要保持一下通道的畅通:

FTP服务器的 21 端口(接受所有客户端)

FTP服务器的 21端口到 > 1023 的远程端口 ( 服务器响应客户端控制端口 )

FTP服务器 > 1023 的端口(接受所有客户端发起的连接到服务器指定的随机端口)

FTP服务器 > 1023 的端口到 > 1023 的远程端口(服务器发送 ack 和数据到客户端数据端口)

被动模式用图表示:

passiveftp.gif

第 1 步,客户端在命令端口上与服务器连接,并发出 PASV 命令。然后,服务器在第 2 步时使用端口 2024 进行响应,告诉客户端它正在监听的数据连接端口。第 3 步,客户端启动从其数据端口到指定服务器数据端口的数据连接。最后,服务器在第 4 步将 ACK 发送回客户端的数据端口。

服务器防火墙需要给 FTP 的被动模式开放一个端口范围允许所有客户端连接,比如 5000 - 6000。

个人博客同步更新,获取更多技术分享请关注:郑保乐的博客

java ftp主动模式和被动模式_FTP 的主动模式和被动模式相关推荐

  1. java ftp 判断文件是否存在_FTP判断文件是否存在

    FTP Client使用的是Apache Commons Net 3.3 /** * 检查FTP上指定文件是否存在 * @param remoteFilePartNameList 文件路径 * @th ...

  2. java ftp 被动模式_ftp 主动模式与被动模式

    ftp 主动模式与被动模式 2018-09-15 ftp的工作原理 ftp要用到两个tcp连接即要使用两个端口 一个是命令链路:用来传递命令 一个是数据链路:用来上传下载数据 连接ftp server ...

  3. java ftp pasv_Ftp主动模式和被动模式以及java连接ftp模式设置

    FTP的主动模式与被动模式 FTP服务器使用20和21两个网络端口与FTP客户端进行通信. FTP服务器的21端口用于传输FTP的控制命令,20端口用于传输文件数据. FTP主动模式: FTP客户端向 ...

  4. ftp主动和被动模式_ftp协议,深入理解ftp协议只需3步

    FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一.FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端.其中FTP服务器用来存储 ...

  5. java ftp上传文件0字节_FTP上传无文件以及0字节问题

    这几天在做一个FTP上传文件的功能,在本地运行完全没有问题,上传文件成功,图片成功显示.在公网(centos系统)上进行测试的时候就出了问题了,上传一直卡到storeFile上,一般是会卡住30-60 ...

  6. java ftp ftpClient.storeFile 服务器失败

    本文由动哒公众号(tongmi5g),QQ群(58621899)提供,欢迎关注获取技术支持,有任何问题群里都会回复. 问题描述 在开发的本地电脑向服务器上传文件没问题,但是,部署之后,在服务器之间上传 ...

  7. java ftp详解_Java FTP 基本操作

    最近工作中用到了 FTP 相关的操作,所以借此机会了解了下具体内容. FTP基础 关于 FTP 基础推荐阅读<使用 Socket 通信实现 FTP 客户端程序>,其中需要特别注意的是主动模 ...

  8. FTP的20、21端口,工作模式

    什么是FTP? FTP就是文件传输协议 File Transfer Protocol 的缩写. FTP端口号是多少? 21 FTP的端口号能改吗? 能 ftp的端口号20.21有何区别? 一个是数据端 ...

  9. java FTP连接时出现“227 Entering Passive Mode”的解决方法

    FTPClient ftpClient = new FTPClient();ftpClient.connect(ftpAddress, ftpPort); // 连接FTP服务器ftpClient.l ...

最新文章

  1. 金融时报:谷歌撤离中国有99.9%的可能性
  2. 超越ResNet:南开提出Res2Net,不增计算负载,性能全面升级!
  3. linux wifi 报错 siocsifflags: operation not possible due to rf-kill
  4. java堆栈信息 linux_java - Java程序无法从Linux服务器远程读取文件 - 堆栈内存溢出...
  5. opencv 报错:Error: Assertion failed (data) in cv::Mat::at, file ... mat.inl.hpp, line 897(访问了不存在矩阵的像素)
  6. web项目从Myeclipse迁移到idea的二三事
  7. 计算机专业会议评级,2018计算机专业工程教育认证研讨会
  8. Linux(Ubuntu/CentOS)安装splunkforwarder步骤
  9. 开发方法---形式化方法
  10. guid主分区表损坏如何处理_guid主分区表损坏如何处理_windows10系统硬盘分区表损坏修复教程...
  11. C语言实现逆波兰表示法(栈)
  12. idea保存快捷键_windows10下idea快捷键文件
  13. 子线程中使用Handler
  14. 手把手调参最新 YOLOv7 模型 训练部分 - 最新版本(二)
  15. iPhone轻松共享wifi密码给好友
  16. JS学习--用JS读取本地文件
  17. 数字逻辑学习总结-MOOC数字逻辑设计
  18. yii2实战之初见端倪
  19. 有趣的自定义view —《聆雨》· 上下滑动面板
  20. 【毕业设计】基于stm32的便携用电功率统计系统 -物联网 嵌入式 单片机

热门文章

  1. app中jeDate日期控件的使用
  2. Day25:Python基础编程(函数)能力训练50天——回文数
  3. 大学里可以考的证书有哪些?
  4. Linux生成图片文字乱码
  5. [SDOI2012]拯救小云公主【bfs+二分答案】
  6. linux如何安装黑客帝国cmatrix代码雨效果
  7. java jsp页面传值_JSP 页面传值方法总结
  8. UE4 Windows环境下游戏打包基础教程(ios, windows, android)(UFE方式以及命令行方式)
  9. 防老人走失新方法:衣服上缝二维码 走失可扫码回家
  10. 辐射76 服务器离线维护,如果能有离线模式 完善《辐射76》的9种方法