1、FTP架构
如同其他的很多通讯协议,FTP通讯协议也采用客户机 / 服务器(Client / Server )架构。用户可以通过各种不同的FTP客户端程序,借助FTP协议,来连接FTP服务器,上传或下载文件。
2、FTP通讯端口知识
FTP服务器和客户端要进行文件传输,就需要通过端口来进行。FTP协议需要的端口一般包括两种:
控制链路--------TCP端口21
控制器端。用于发送指令给服务器以及等待服务器响应。所有你发往FTP服务器的命令和服务器反馈的指令都是通过服务器上的21端口传送的。
数据链路--------TCP端口20
数据传输端口。用来建立数据传输通道的。主要用来从客户向服务器发送一个文件、从服务器向客户发送一个文件、从服务器向客户发送文件或目录列表。数据链路主要是用来传送数据的,比如客户端上传、下载内容,以及列目录显示的内容等。
3、FTP连接的两种方式
在数据链路的建立上,FTP Server 为了适应不同的网络环境,支持两种连接模式:主动模式(Port)和被动模式(Pasv)。其实这两种连接模式主要是针对数据链路进行的,和控制链路无关。
主动模式
主动模式是这样工作的:客户端把自己的高位端口和服务器端口21建立控制链路。所有的控制命令比如Is或get都是通过这条链路传送的。当客户端需要服务器端给它传送数据时,客户端会发消息给服务器端,告诉自己的位置和打开的高位端口(一般大于1024的端口都就叫高位端口),等候服务器的20端口和客户端打开的端口进行连接,从而进行数据的传输。当服务器端收到信息后,就会和客户端打开的端口连接,这样数据链路就建立起来了。采用主动模式连接服务器的客户端,当它位于NAT或者防火墙的保护之后时会碰到连接失败的问题。这是因为当防火墙接到服务器发送过来的信息的时候,并不知道应该发送给内部网络中的哪一台客户端造成的。
被动模式
被动模式是这样工作的:当客户端发送数据请求后,服务器也会发信息给客户端,告诉客户端:服务器在本地打开了一个高位端口P,你现在来连接我吧。当客户端收到该信息时,
就会去连接服务器端的端口P,连接成功后,数据链路就建立了。从上面的解释中我们可以看到,两种模式主要的不同是数据连接建立的不同。对于Port模式,是客户端在本地打开一个端口等服务器去连接建立数据连接,而Pasv模式就是服务器打开一个端口等待客户端去建立一个数据连接。
主动模式(PORT)
主动模式下,客户端随机打开一个大于1024 的端口向服务器的命令端口P,即21 端口,发起连接,同时开放N +1 端口监听,并向服务器发出“port N+1” 命令,由服务器从它自己的数据端口(20) 主动连接到客户端指定的数据端口(N+1)。
FTP 的客户端只是告诉服务器自己的端口号,让服务器来连接客户端指定的端口。对于客户端的防火墙来说,这是从外部到内部的连接,可能会被阻塞。
被动模式(PASV)
为了解决服务器发起到客户的连接问题,有了另一种FTP 连接方式,即被动方式。命令连接和数据连接都由客户端发起,这样就解决了从服务器到客户端的数据端口的连接被防火墙过滤的问题。
被动模式下,当开启一个FTP 连接时,客户端打开两个任意的本地端口(N > 10 24 和N+1) 。
第一个端口连接服务器的21 端口,提交PASV 命令。然后,服务器会开启一个任意的端口(P > 1024 ),返回如“227 entering passive mode (127,0,0,1,4,1 8)”。它返回了227 开头的信息,在括号中有以逗号隔开的六个数字,前四个指服务器的地址,最后两个,将倒数第二个乘256 再加上最后一个数字,这就是FTP 服务器开放的用来进行数据传输的端口。如得到227 entering passive mode (h 1,h2,h3,h4,p1,p2),那么端口号是p1*256+p2,ip 地址为h1.h2.h3.h4。这意味着在服务器上有一个端口被开放。客户端收到命令取得端口号之后, 会通过N+1 号端口连接服务器的端口P,然后在两个端口之间进行数据传输。
Sftp和ftp的区别
SFTP是Secure File Transfer Protocol的缩写,是安全文件传送协议。可以为传输文件提供一种安全的加密方法。跟ftp几乎语法功能一样。SFTP是SSH的一部分,是一种传输档案至Blogger伺服器的安
全方式。它本身没有单独的守护进程,必须使用sshd守护进程来完成相应的连接操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以使用SFTP是十分安全的。但由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多。在对网络安全性要求更高时,代替FTP使用。
Sftp和Ftp都是文件传输协议。区别:sftp是ssh内含的协议(ssh是加密的telnet协议),只要sshd服务器启动了,它就可用,而且sftp安全性较高,它本身不需要ftp服务器启动。 sftp = ssh + ftp(安全文件传输协议)。由于ftp是明文传输的,没有安全性,而sftp基于ssh,传输内容是加密过的,较为安全。目前网络不太安全,以前用telnet的都改用ssh2(SSH1已被破解)。sftp这个工具和ftp用法一样。但是它的传输文件是通过ssl加密了的,即使被截获了也无法破解。而且sftp相比ftp功能要多一些,多了一些文件属性的设置。
1、SFTP的工作模式:
图1显示了SFTP的工作模式,它是作为SSH2的一个子服务工作的。
图 1
2、FTP的工作模式:
SFTP 和FTPS的区别
都是为ftp连接加密,协议非常相似。SFTP借助ssh加密,FTPS借助ssl协议加密。ssh 是为telnet/ftp等加密、建立传输通道而设计的,ssl是为http/smtp等加密设计的。其实ssh 建立传输通道就是为了加密和传输,而且这个通道是可以用来远程登录。
功能上,ssh就像铺管子,ssl就像打包裹,铺管子和打包裹都会使数据安全,都是一个制作密钥的过程,而因为ssh是一个管子所以它很适合ftp的安全传输。原理上,sftp协议是ssh中的一条独立的协议,利用sftp服务器就可以传输数据。而ftps是ftp-over-ssl的意思,即ftp借助ssl协议加密传输,不但要用ftp服务器还要用ssl协议加密。(如果ftp-over-ssh,就是完全不同于sftp的传输方式了,就是利用ftp服务器和ssh协议加密传输数据。)