zoukankan      html  css  js  c++  java
  • ftp的主动模式与被动模式

    FTP传输有两种工作模式,Active Mode和Passive Mode(主动模式和被动模式),简单描述连接过程如下:

      主动模式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时, 客户端在命令链路上用PORT命令告诉服务器:“我打开了***端口,你过来连接我”。于是服务器从20端口向客户端的***端口发送连接请求,建立一条数据链路来传送数据。  

      被动模式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时, 服务器在命令链路上用PASV命令告诉客户端:“我打开了***端口,你过来连接我”。于是客户端向服务器的***端口发送连接请求,建立一条数据链路来传送数据。 

    了解模式的目的,是为了了解端口。使用 FTP 传输时,至少会使用到两个 Port 来建立连接通道:

    • 一个为指令通道(Command Channel),默认使用 Port 21 建立,用来传输 FTP 指令,例如:列出清单(LIST)、变更目录(CWD)、取得目前的目录(PWD)、......等。

    • 另一个为数据通道(DATA Channel),默认使用 Port 20,但是会因 FTP Client 选择使用的模式不同而有所不同。

    主动模式 ( Active mode )

      FTP Client 跟 FTP Server 联机后,会主动利用 PORT 指令提出 DATA Channel 联机的要求,如下: 

    1
    2
    指令:PORT 10,18,53,171,17,114
    回应:200 Port command successful.

          这里的 PORT 指令是由 FTP Client 送出的,当需要建立 DATA Channel 时,FTP Server 会主动利用 Server 主机的 Port 20 发出联机到 FTP Client 的主机,而 PORT 指令后的参数说明如下:

          前四个数字是 FTP Client 的 IP 地址:10.18.53.171

          后两个数字是 FTP Client 接受联机的端口号,端口号的计算方式是 (第五个数字 * 256 + 第六个数字),以此范例来说,FTP Client 接受的联机端口号是 17 * 256 + 114 = 4,466

          由此可知,如果 FTP Client 处于 NAT 的环境下的话,FTP Server 几乎无法正常的联机到 FTP Client 的主机,所以现在大部分的联机模式几乎都建议用户使用被动模式(Passive mode)。

    被动模式 ( Passive mode )

      FTP Client 跟 FTP Server 联机后,会主动利用 PASV 指令提出 DATA Channel 联机的要求,如下:

    1
    2
    指令:PASV
    回应:227 Entering Passive Mode(59,37,124,43,158,251)

      你可以看到由 FTP Client 送出的 PASV 指令并没有送出其他的参数,而是在 FTP Server 响应的时候出现了(59,37,124,43,158,251) 字符串,当需要建立 DATA Channel 时,这时就会由 FTP Client 主动连至 FTP Server 动态开放的 Port 供 FTP Client 连接,其中 (59,37,124,43,158,251) 的说明如下:

          前四个数字是 FTP Server 的 IP 地址:59.37.124.43

          后两个数字是 FTP Server 接受联机的端口号,端口号的计算方式是 (第五个数字 * 256 + 第六个数字),以此范例来说,FTP Server 可接受的联机端口号是 158 * 256 + 251 = 40,699

          由此可知,使用被动模式(Passive mode)对 FTP Server 的系统管理员来说,可掌控的部分是比较多的,因为 FTP Server 无法决定用户是否可使用主动模式联机,但若改使用被动模式联机的话,就几乎能让所有人正常的使用。

    需要注意的是FTP Client每次下指令传输数据时,都会建立一次 Data Connection,指令包括取得远程的档案清单(LIST)时回传的档案列表、下载文件、或上传档案。

     

    原文链接: https://www.cnblogs.com/duanxz/p/5121190.html

  • 相关阅读:
    Debian 8(jessie)下设置系统启动直接进入命令行,无GUI
    Unity 查找物体对象
    Unity的生命周期函数
    Unity脚本实现添加子物体
    Unity工程中 .Meta 文件
    Unity 中简单的第三人称摄像机跟随
    github删除自己的库--Deleting a repository
    TypeScript函数
    Egret引擎学习笔记
    Egret引擎list内单个渲染对象代码编写
  • 原文地址:https://www.cnblogs.com/wangtaobiu/p/14241397.html
Copyright © 2011-2022 走看看