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个端口,一个数据端口和一个命令端口(也可叫做控制端口).通常来说这 ...
随机推荐
- 142. O(1) Check Power of 2【easy】
142. O(1) Check Power of 2[easy] Using O(1) time to check whether an integer n is a power of 2. Have ...
- response.addCookie(cookie),添加失败
问题:添加cookie到浏览器如下,在浏览器f12查看请求过程,发现cookie中只添加了:JSESSIONID E849DAFEE4A36B6D955F9D96D6D06207 却没有想要的“use ...
- 如何修改SESSION的生存时间
php中session过期时间设置网上很多人给出了解答:修改php配置文件中的session.gc_maxlifetime.如果想了解更多session回收机制,继续阅读.(本文环境php5.2) 概 ...
- nginx+python+fastcgi环境配置(flup版本)
昨天花了一整天的时间研究搭建了nginx+python+fastcgi环境,并测试没问题,由于是第一次,并且参考了网上很多东西,网上也有很多,但还是把自己的过程记录下. 主要感谢这位兄弟的文章给了我很 ...
- UVA1658 Admiral 拆点法解决结点容量(路径不能有公共点,容量为1的时候) 最小费用最大流
/** 题目:UVA1658 Admiral 链接:https://vjudge.net/problem/UVA-1658 题意:lrj入门经典P375 求从s到t的两条不相交(除了s和t外,没有公共 ...
- 使用Hyper-V安装Ubuntu16.04 Server 网络配置
由于最近在研究Docker, 于是需要用到虚拟机,安装Ubuntu 16.04到Hyper-V并部署Docker.这个过程中填平了几个小坑,为了大家以后遇到类似情况节省时间,我将这几个小坑的问题和解决 ...
- python第三周文件处理和函数-----下
#默认参数的值是在一开始定义的时候就传给了函数, # 在后来的修改中不会被修改. #默认参数的值必须放到位置形参参数的最后面 #默认参数使用的场景是一个参数不经常变得场景,所以参数一般是不可变类型.字 ...
- 23:LVS客户端配置脚本案例
[root@web03 scripts]# cat prevent_arp.sh #!/bin/bash lo_ip=$(ip a s lo|grep "10.0.0.1[3]/32&quo ...
- HTTPS请求 SSL证书验证
import urllib2 url = "https://www.12306.cn/mormhweb/" headers = {"User-Agent": & ...
- 微信 oauth4
4.最后 4. 使用access_token获取用户信息 请求方法: https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN& ...