您的位置:首页 > 编程语言 > PHP开发

FTP原理

2015-09-21 21:23 567 查看
一、FTP基本概念
1、FTP简介

FTP,File Transfer Protocol,文件传输协议。这个协议的作用就是能让网络中的主机可以相互传输文件。
FTP是基于TCP的,它的TCP端口有两个,21和20。21用于建立控制连接,20用于建立数据连接(主动模式下)

2、控制连接和数据连接
1)控制连接
ftp协议要正常工作,需要首先成功建立控制连接,默认情况下,是由ftp客户端向ftp服务器的端口21发起连接请求,通过3次握手成功建立控制连接。控制连接建立之后,ftp客户端会和ftp服务器端协商数据连接建立的方式,有2种方式:主动模式、被动模式,这两种方式分别适用于不同的网络场景。

2)数据连接
当ftp客户端和ftp服务器端协商好数据连接采用的方式以后,就会用协商好的方式建立数据连接。大家平时使用ftp客户端软件连接ftp服务器并且看到的文件列表,就是通过数据连接传送的。因此,ftp映射通常碰到的一个问题,列目录超时,就是数据连接无法成功建立的原因。

3、建立数据连接的方式:主动模式和被动模式
*所谓的主动被动,是站在FTP服务器的角度看的,如果是FTP先发起数据连接请求,则叫主动模式,如果是客户端先发起的,那则叫被动模式。
1)主动模式
客户端向FTP服务器发起请求,开始建立TCP控制连接。客户端的源端口是高位随机端口,目标端口是21端口;

控制连接建立完毕后,客户端进行身份验证(输入用户名密码或者匿名登录),并且协商数据连接所采用的模式。如果是主动模式,客户端会向FTP服务器发送Port报文,表明自己监听的IP+端口(这个端口一般是控制连接使用的端口+1),并等待FTP服务器向自己监听的IP+端口发起数据连接请求;

FTP服务器向客户端监听的IP+端口发起数据连接请求,建立数据连接;

数据连接建立完毕后就可以开始传输文件了。




2)被动模式

客户端向FTP服务器发起请求,开始建立TCP控制连接。客户端的源端口是高位随机端口,目标端口是21端口;

控制连接建立完毕后,客户端进行身份验证(输入用户名密码或者匿名登录),并且协商数据连接所采用的模式。如果是被动模式,客户端会向FTP服务器发送PASV报文,表示我要用被动模式(也就是说使用主动还是被动,由客户端说的算~);

FT服务器收到PASV报文,了解到这次要用被动模式,于是向客户端发送Port报文,表明自己监听的IP+端口(高位随机端口);

客户端向FTP服务器监听的IP+端口发起数据连接请求,建立数据连接;

数据连接建立完毕后就可以开始传输文件了。




二、FTP的特殊性
FTP是一个比较特殊的协议,因为它会建立两个不同的连接,这就会造成在不同的场景下,会出现奇怪的问题,比如登录成功,但无法传输数据等,这往往是防火墙搞的鬼。
在实际环境当中,被动模式用的多,因为客户端(PC)往往安装了防火墙,这时如果用主动模式的话,ftp服务器主动发起数据连接请求时,目标端口是客户端的高位随机端口,防火墙会拒绝掉没有开放的高位随机端口,这样数据连接就被拒绝了。而在被动模式当中,数据连接是由客户端先发起的,就不会有刚才那个问题。虽然ftp服务器端也会有防火墙,但一般服务器端防火墙都比较智能,只要是放行了FTP协议,它就能根据客户端和FTP服务器在控制连接所协商出的数据连接端口,放行被动模式中开放的高位随机端口,像是建立了一条专属通道一样。

本文出自 “华哥在路上” 博客,请务必保留此出处http://wshstc.blog.51cto.com/10676059/1696900
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: