• FTP主动连接与被动连接


    FTP(File Transfer Protocol, FTP)是TCP/IP网络上两台计算机传送文件的协议,应用层的协议,它基于传输层, FTP是一个8位的客户端-服务器协议,能操作任何类型的文件而不需要进一步处理 , FTP服务一般运行在20和21两个端口。端口20用于在客户端和服务器之间传输数据流,而端口21用于传输控制流,并且是命令通向ftp服务器的进口。FTP客户机可以给服务器发出命令来下载文件,上载文件,创建或改变服务器上的目录。

    FTP功能

    FTP服务器功能除了单纯的进行文件的传输与管理以外,还提供一下几个主要功能。

    不同等级的用户身份:user,guest,anonymous

    FTP服务器在预设的情况下,根据使用者的登入情况而分为三种不用的身份

    1.user:实体账号,realuser

    2.guest:访客

    3.anonymous:匿名登录者

    当然3者在系统上的权限差异很大,例如:实体用户取得的系统权限比较完整;而对于匿名用户不对其开放太多的权限。

    命令记录与登录文件记录

    FTP可以利用系统的syslogd服务来进行数据的记录,而记录的数据包括用户曾今下达过的命令与用户传输数据(传输时间,文件大小)的记录,所以可以从/var/log/中找到各项登录信息

    限制用户活动目录(change root 简称:chroot)

    为了避免用户在你的linux系统中离开自己的家目录进入到linux系统的其他重要目录中,所以将使用者的工作范围局限在自己的家目录中。FTP可以限制用户只能在自己的家目录活动,使用者无法离开自己的家目录,登入FTP后看到的根目录就是自己的家目录

    FTP运作流程

    FTP是应用层的协议,它基于传输层TCP协议传输,TCP建立连接需要三次握手,FTP服务一般运行在20和21两个端口,端口20用于在客户端和服务器之间传输数据流,而端口21用于传输控制流.这两种传输都需要经过三次握手。

    这里以主动连接(Active)讲解运作流程

    1.建立命令通信

    客户端会随机取一个大与1024的端口(portAA)经过三次握手与FTP服务器21端口达成联机,此后客户端便可以通过这个联机来对FTP服务器进行指令的下达,包括查询文件名、下载、上传等指令。

    2.通过FTP服务端使用主动连接

    FTP服务器的21端口主要用来下达命令,当要开始传输数据时,就不适用这个联机了。客户端在需要数据的情况下,会告知服务端要用什么方式来联机,如果是主动式联机,客户端会先随机启动一个端口(portBB),通过命令通道高数FTP服务器这两个消息,并等待FTP服务器的联机。

    3.服务器主动向客户机联机

    服务器命令通道了解客户端的请求后,会主动的由20号端口向客户端的portBB联机,同样需要三次握手,此时FTP客户端与服务器端共建立了2条联机(命令与数据传输两个信道)。注意,数据传输信道只在有数据传输行为时才建立。

    命令通道21与数据传输通道20

    21端口主要接受来自客户端的主动联机,20端口则为FTP服务器主动联机至客户端。

    主动连接的FTP服务器与客户端之间具有防火墙的连接问题

    一般来说,很多局域网都会使用防火墙(iptables)的NAT功能,那么在NAT后端的FTP用户如何连接到FTP服务器呢。

    1.用户与服务器间命令信道的建立:

    因为NAT会主动记录有内部送往外部的联机信息,而由于命令信道的建立是由客户端向服务器联机的,因此这条联机可以顺利建立起来。

    2.用户与服务器间数据信道的建立:

    客户主机会先启用portBB,并透过命令通信告知FTP服务器,而等待服务器的主动连接。

    3.服务器主动连到NAT等待转递至客户端的连接问题:

    由于偷狗NAT转换后,FTP服务器只能得到NAT的IP而不是客户端的IP,因此FTP会以20端口主动向NAT的PortBB发送主动联机的要求,但是你的NAT并没有启动portBB来监听FTP的联机。所以这里就出现了问题。

    如何解决这样的问题呢?

    1.使用iptables所提供的FTP侦测模块:

    可以使用modprobe指令来加载ip_conntrack_ftp及ip_nat_ftp等模块,这几个模块会主动分析目标是21的联机信息,所以可以得到portBB的资料,此时若接收到FTP服务器的主动联机,就能将该封包导向正确的后端主机了。

    但是,如果命令通道并非是通过默认端口21来建立的,那么这两个模块就无法解析出来了。

    2.客户端选择被动式(Passive)连接模式:

    主动模式是由服务器向客户端发起连接,那么被动式就是客户端向服务端发起连接。

    被动连接

    1.客户端与服务器建立命令信道:

    同样,客户端选一个大与1024的端口向服务器21号端口通过三次握手建立通道。

    2.客户端发出PASV的连接请求:

    当要进行数据传输时,客户端可以通过命令通道发出PASV(Passive的缩写)的被动联机求情求,并等待服务端回应。

    3.FTP服务器启动数据端口,并通知客户端

    这时服务器会打开一个端口port pasv(可能是随机的也可能是自定义的)处于listen状态,并通过21端口的指令通道将处在监听状态下的次端口发给客户端,并等待客户端通过此端口进行数据传输。

    4.客户端随机取用大于1024的端口进行连接:

    客户端随机取用大于1024的端口连接服务器的port pasv端口,那么通过portBB和port PASV数据通道就建立好了。

    引用: http://blog.chinaunix.net/uid-26413668-id-3379352.html

  • 相关阅读:
    定义全局时间过滤器
    vue局部过滤器和全局过滤器
    vue-ref指令
    vue进行代码排序
    vue-通过name进行数据过滤
    将vue文档下载到本地预览
    由于vue的for循环id并不严谨,提高id严谨性
    vue指令v-for报错:Elements in iteration expect to have 'v-bind:key' directives.eslint-plugin-vue
    FlowPortal BPM历史版本升级说明
    102从 Outlook 中将电子邮件、联系人和日历导出到 .pst 文件
  • 原文地址:https://www.cnblogs.com/chencidi/p/6057077.html
Copyright © 2020-2023  润新知