返回首页
当前位置: 主页 > 互联网技术 > 网络管理 >

FTP主动与被动之NAT

时间:2015-10-18 22:20来源:电脑教程学习网 www.etwiki.cn 编辑:admin

FTP协议概述
ftp协议的正常工作需要两个TCP连接:命令端口、数据端口。 前者用来传输纯文本的命令交互,此连接在整个FTP会话周期中不中断; 后者用来传输二进制、文本等数据信息,只是在需要传输数据时,才会建立此连接,传输数据完毕就关闭,属于临时会话的性质。

第一阶段 建立ftp会话

1. 服务器在21端口监听。 客户端在本地随机端口(eg 1982)发起和服务器21端口的TCP 连接,建立TCP连接成功后 next 。
2. 服务器发送hello信息给客户端
3. 客户端分别 通过USER PASS命令输入正确的用户、口令登陆
4. 服务器认证通过后返回2xx 正确相应。
至此FTP会话层(按ISO7层的定义)已成功建立
5. 客户端发送 CDUP PWD CWD 等命令切换当前工作目录
6. 服务器响应请求,并在命令端口返回指令相应 eg: 2xx 5xx 4xx
至此客户端、服务端的交互均仅仅局限在命令端口进行,双方的交互只占用一个TCP连接。对于NAT 防火墙等都不会有什么特殊影响.

 第二阶段 客户端请求数据

所谓主动模式、被动模式是指在数据端口工作时 服务器的在TCP 传输层的动作模式 。

主动模式下

1. 客户端首先要用PORT命令告诉服务器,准备传数据了,并告知它自己在本地哪个端口listen;
2. 服务端收到PORT后,返回2xx 正确响应
3. 客户端再通过STOR RETR LIST等告诉服务端 它想要的数据
4. 服务端收到后,服务端主动发起本地一个随机端口连接至客户端listen的端口的 TCP连接, 再将数据塞给客户端
5. 服务器塞数据完毕后,在命令端口中返回2xx 正确响应。
6. 工作结束,关闭4 中建立的临时TCP连接。 命令端口的连接仍然保持,服务端等待客户端命令

被动模式下


1. 客户端首先要用PASV命令告诉服务器,准备传数据了
2. 服务端收到PASV后,在本地listen一个端口,并返回2xx 正确相应信息 + listen的端口
3. 客户端收到响应后,发送STOR RETR LIST 等告知服务端 它想要的数据
4. 服务端收到命令后,准备相关数据,完毕后发送150 响应
5. 客户端收到正确响应后,客户端主动发起一个本地随机端口连接至服务端listen的端口的 TCP连接, 然后服务器将数据在此TCP连接塞给客户端。
6. 服务端塞数据完毕后,在命令端口中返回2xx 正确响应。
7. 工作结束,关闭4 中建立的临时TCP连接。 命令端口的连接仍然保持,服务端等待客户端命令

PORT PASSIVE命令中携带的端口信息是这样的:192,168,0,1,55,66 。 前面4个 192 168 0 1 是ip地址,后面两个计算后代表端口号: 55*256 + 66 = 14146, 14146就是端口号了

简而言之就是:
主动模式下,服务器把活包干了。客户端想要数据时,就简单的开本地监听端口,坐等服务器将数据塞给客户端;

被动模式下,服务器比较懒,客户端想要数据时,得要请求服务器监听一个端口,然后客户端主动连接服务器才能得到想要的数据。
  部署Ftp-Server问题

中国的ip地址资源太少,很多情况下ftp回话两端要经过层层NAT、网关、防火墙。 导致PORT PASV中的ip 信息不一定都是正确的。比如client的ip是192.168.0.107,其实它是通过NAT连接上网的,该NAT对外的internet地址是218.2.135.1,那么client 发送的PORT指令中携带的192,168,0,107,xx,yy 对于server是没有意义的。 所幸现在的NAT、防火墙一般都有FTP应用层感知能力,它能够截获ftp会话中的PORT PASSIVE, 自动将private的ip翻译成对外的正确的ip,并实时的在NAT上开放临时端口转发 。刚才的例子就会翻译成 218,2,135,1,xx,yy。 所以一般情况下,ftp还是能够正常工作的。

主动模式下,客户端的NAT、防火墙容易导致连接问题。比如PORT 后 NAT需要临时开转发端口,并改变TCP报文中PORT的内容,如果NAT不具备应用层解析能力或只能感知标准21端口的命令,都将容易导致传数据失败。 而且 主动模式下对于使用代理、ssl,会带来很多其它问题。
被动模式下,问题主要集中在服务端的网络。因为需要服务器开临时端口并listen,对其部署的Firewall 要求有动态开 forward 的能力,这可能带来一定的安全隐患。 但是,大部分情况下,服务端的网络管理员应该已经配置了对FTP的支持。 所以推荐:大部分情况下,还是使用被动模式比较好。

PORT方式过NAT连接Ftp-Server OR Ftp-Client


NAT 网关的工作方式是在TCP/IP数据包的包头里找局域网的源地址和源端口,替换成网关的地址和端口。对数据包里的内容,是不会改变的。而使用PORT方式登录FTP的时候,IP地址与端口信息是在数据包里面的,而不是在包头。因此,没有公网IP,使用PORT方式是无法从internet上的ftp服务器下载数据的。
但是,极少数的NAT网关也支持PORT方式。这些NAT网关连数据包里面的内容都扫描,扫描到 PORT指令后会替换PORT方式的IP和端口。在这种NAT网关下面,用PORT方式就没问题了。不过,这些网关也只扫描21端口的数据包,如果FTP 服务器不是用默认的21端口,也无法使用PORT方式。解决方法就是NAT检查每一个数据包,检查固定的某个字节是否有port模式字样,如果有,则自动建立NAT映射。

Ftp-Server与WINDOWS防火墙

当我们FTP位于windows防火墙这之后,在启用防火墙 的情况下,如果使用被动将会失败,因为防火墙在FTP开启数据连接的时候,是由客户端连接服务器,位于服务器中的防火墙会阻止这个传入的连接。windows防火墙可没有NAT设备那种技术到应用层检测数据端口是多少,从而动态的开放端口。我们有没有办法解决这个问题呢?

其实很简单,我们只有找到哪个程序提供FTP服务,把这个程序添加成例外就可以了,因为WINDOWS对于特定程序的例外,就是允许外部连接该程序打开的所有端口[包括FTP-Server动态打开的数据端口],而不去阻止。我们怎么找到这种提供FTP服务的程序?我们可以运行CMD=>在CMD下输入NETSTAT -ANO=>找到监听端口为21的程序PID=》然后我们在到任务管理器中查看进程一列[没有PID一列,可以点‘查看’-‘选择列’,勾上PID],找到PID对应的进程名字,这个就是我们要找到那个程序,然后在WINDOWS防火墙中放行它。

顶一下
(0)
0%
踩一下
(0)
0%
标签(Tag):FTP协议
------分隔线----------------------------
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码:点击我更换图片
推荐内容