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
FTP主动连接与被动连接的更多相关文章
- linux上搭建ftp、vsftp, 解决访问ftp超时连接, 解决用户指定访问其根目录,解决ftp主动连接、被动连接的问题
linux上搭建ftp 重要 解决如何搭建ftp 解决用户指定访问其根目录 解决访问ftp超时连接 解决ftp主动连接.被动连接的问题 1.安装ftp ...
- Nginx主动连接与被动连接的差别
1.主动连接是指Nginx主动发起的同上游server的连接:被动连接是指Nginx接收到的来自client主动发起的连接; 2.主动连接用ngx_peer_connection_t结构体表示:被动连 ...
- [服务]ftp主动模式和被动模式
经常忘记这个东西.于是总结下这东西感受下这个协议. FTP连接方式 控制连接:标准端口为21,用于发送FTP命令信息 数据连接:标准端口为20,用于上传.下载数据 数据连接的建立类型: 主动模式:服务 ...
- Ftp主动模式和被动模式以及java连接ftp模式设置
Ftp主动模式和被动模式以及java连接ftp模式设置 https://www.cnblogs.com/huhaoshida/p/5412615.html (1) PORT(主动模式) PORT中文称 ...
- FTP开启被动连接模式
在Linux环境下搭建ftp服务器,具体步骤见:http://www.cnblogs.com/zjiacun/p/6896803.html 配置被动连接的方法: 找到配置文件/etc/vsftpd/v ...
- FTP主动/被动原理
FTP 主动模式 1.客户端用大于1024的高位端口发起初始化连接到vsftp服务器的21端口 2.vsftp服务器的21端口主动与客户端大于1024的高位端口建立控制连接 3.vsftp服务器的20 ...
- ftp主动模式 被动模式 和iptables 设置
FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式. Port模式:ftp server:tcp 21 <------client:dynamic ftp se ...
- FTP主动模式和被动模式的区别
基础知识: FTP只通过TCP连接,没有用于FTP的UDP组件.FTP不同于其他服务的是它使用了两个端口, 一个数据端口和一个命令端口(或称为控制端口).通常21端口是命令端口,20端口是数据端口.当 ...
- 【转】FTP主动模式和被动模式的比较
总是记不住FTP主动和被动模式的区别.放在这里,以备日后查阅. FTP是仅基于TCP的服务,不支持UDP.与众不同的是FTP使用2个端口,一个数据端口和一个命令端口(也可叫做控制端口).通常来说这 ...
随机推荐
- Java获取网卡的mac地址
为了项目的安全,有时候需要得到电脑的唯一码,比如:网卡的mac地址.和大家分享一下,下面是项目中用到的工具类: import java.io.BufferedReader;import java.io ...
- Spring/SpringMVC在启动完成后执行方法
在某些情况下,有可能你会有这种需求:在Spring/SpringMVC项目中,当Spring/SpringMVC启动完成后,你需要执行一个方法来完成某些事件(比如创建网站地图,比如从订阅Redis服务 ...
- 喜闻乐见的const int *p、int* const p、const int* const p
不废话直接代码示例: void f(const int *p) { ; *p = ; // error p = &b; // fine } void f(int* const p) { ; * ...
- Extjs中设置只读的样式问题
废话不多说,直接上代码: view.down('#imageFile').hide(); view.down('#save_button').hide(); view.show(); view.d ...
- 一起talk C栗子吧(第八十七回:C语言实例--使用管道进行进程间通信概述)
各位看官们,大家好.上一回中咱们说的是进程间通信的样例.这一回咱们说的样例是:使用管道进行进程间通信. 闲话休提,言归正转. 让我们一起talk C栗子吧! 我们在前面的的章回中介绍了使用管道进行进程 ...
- ORA-00349: failure obtaining block size for '+fra_grp01_d
有一次恢复库以后,open时报错ORA-00349,例如以下.最后通过删除这个log group解决. SQL> alter database open resetlogs; alter d ...
- Java正则表达式之Matcher类的find和matches方法的区别
讨论整个问题之前,先看个例子: 从上面的例子可以看出 matches()是整个字符串完全匹配时,才会返回true 而find()则只需要字符串中,找到某部分的子字符串匹配则返回true ...
- jQuery 尺寸 方法
jQuery 提供多个处理尺寸的重要方法: width() height() innerWidth() innerHeight() outerWidth() outerHeight()
- php 打印debug日志
A lesser known trick is that mod_php maps stderr to the Apache log. And, there is a stream for that, ...
- spark+hadoop+sqoop+hive平台bug解决方法
bug集锦 1. hadoop平台datanode无法启动: 原因: 由于多次hdfs namenode -format导致dfs/data/current/version中的cluserID与当前的 ...