目前在网络上,如果你想把文件和其他人共享。最方便的办法莫过于将文件放 FTP 服务器上,然后其他人通过 FTP 客户端程序来下载所需要的文件。
FTP 是 TCP/IP 网络上两台计算机传送文件的应用层协议,如同其他的很多通讯协议,FTP 通讯协议也采用客户机 / 服务器(Client / Server )架构。用户可以通过各种不同的FTP客户端程序,借助FTP协议,来连接FTP服务器,以上传或者下载文件。
FTP 服务器和客户端要进行文件传输,就需要通过端口来进行。FTP 协议要用到两个 TCP(Transmission Control Protocol 传输控制协议) 连接端口:
控制链路(也叫命令链路,TCP 端口 21)
用来在 FTP 客户端与服务器之间传递命令,所有你发往FTP服务器的命令和服务器反馈的指令都是通过服务器上的 21 端口传送的。
数据链路(TCP 端口 20 或者 22)
数据链路主要是用来传送数据的,比如客户端上传、下载内容,以及显示服务端目录的内容等
FTP 服务器为了适应不同的网络环境,支持两种连接模式:主动模式(Port)和被动模式(Pasv)。其实这两种连接模式主要是针对数据链路进行的,和控制链路无关。
Standard (Port 模式,主动模式)
主动模式是这样工作的:
客户端把自己的高位端口(大于1024的端口都就叫高位端口,1024以前的端口都已经预先被定义好,被一些典型的服务使用,当然有的还没使用,保留给以后会用到这些端口的资源服务。)和服务器端口 21 建立控制链路(即控制通道)。所有的控制命令(Is、 get、put 等)都是通过这条链路传送的。
当客户端需要服务器端给它传送数据时(例如:查看服务端的文件和目录,从服务端下载资源等),客户端会发消息(即 Port 指令)给服务器端,告诉自己的位置和打开的高位端口(该端口用于接收从服务端传输过来的数据),当服务器端收到客户端发送过来的 Port 指令后,就主动通过 TCP 端口 20 和客户端在 Port 指令中指定的端口连接,从而进行数据的传输,这样数据链路就建立起来了。
采用主动模式连接 FTP 服务器的客户端,当它位于NAT或者防火墙的保护时会碰到连接失败的问题,这是因为当防火墙接到服务器发送过来的信息的时候,并不知道应该发送给内部网络中的哪一台客户端造成的。
注意:客户端与服务端都是先连接(即先建立好信息传输通道)再传输数据
Passive (Pasv 模式,被动模式)
被动模式是这样工作的:
当客户端发送 Pasv 指令给服务端,服务端收到 Pasv 指令后,会打开一个临时端口(端口号大于 1023 小于 65535),接着服务端发信息给客户端,通知客户端在这个临时端口上发起传输数据的请求(服务器很礼貌地告诉客户端:我为您临时打开了一个端口,您现在来连接我吧!)。当客户端收到该信息后,就主动(注意:服务端是被动的)去连接 FTP 服务器端的端口,连接成功后,数据链路就建立了。
从上面的解释中我们可以看到,两种模式主要的不同是数据连接建立的不同。对于 Port 模式,是客户端在本地打开一个端口等服务器去连接建立数据连接,而 Pasv 模式就是服务器打开一个端口等待客户端去建立一个数据连接。
在实际中,我们应该选择哪种模式呢?
由于防火墙的原因,外网的服务器是无法访问内网的PC的。当我们的服务器部署到外网,设备在内网的时候。我们必须使用被动模式。
ftp> ascii # 设定以ASCII方式传送文件(缺省值)
ftp> bell # 每完成一次文件传送,报警提示
ftp> binary # 设定以二进制方式传送文件
ftp> bye # 终止主机FTP进程,并退出FTP管理方式
ftp> case # 当为ON时,用MGET命令拷贝的文件名到本地机器中,全部转换为小写字母
ftp> cd # 同UNIX的CD命令
ftp> cdup # 返回上一级目录
ftp> chmod # 改变远端主机的文件权限
ftp> close # 终止远端的FTP进程,返回到FTP命令状态, 所有的宏定义都被删除
ftp> delete # 删除远端主机中的文件
ftp> dir [remote-directory] [local-file] # 列出当前远端主机目录中的文件.如果有本地文件,就将结果写至本地文件.
ftp> get [remote-file] [local-file] # 从远端主机中传送至本地主机中
ftp> help [command] # 输出命令的解释
ftp> lcd # 改变当前本地主机的工作目录,如果缺省,就转到当前用户的HOME目录
ftp> ls [remote-directory] [local-file] # 同DIR
ftp> macdef # 定义宏命令
ftp> mdelete [remote-files] # 删除一批文件
ftp> mget [remote-files] # 从远端主机接收一批文件至本地主机
ftp> mkdir directory-name # 在远端主机中建立目录
ftp> mput local-files # 将本地主机中一批文件传送至远端主机
ftp> open host [port] # 重新建立一个新的连接
ftp> prompt # 交互提示模式
ftp> put local-file [remote-file] # 将本地一个文件传送至远端主机中
ftp> pwd # 列出当前远端主机目录
ftp> quit # 同BYE
ftp> recv remote-file [local-file] # 同GET
ftp> rename [from] [to] # 改变远端主机中的文件名
ftp> rmdir directory-name # 删除远端主机中的目录
ftp> send local-file [remote-file] # 同PUT
ftp> status # 显示当前FTP的状态
ftp> system # 显示远端主机系统类型
ftp> user user-name [password] [account] # 重新以别的用户名登录远端主机
ftp> ? [command] # 同HELP. [command]指定需要帮助的命令名称。如果没有指定 command,ftp 将显示全部命令的列表
ftp> ! # 从 ftp 子系统退出到外壳
常用命令:
ftp> get readme.txt # 下载文件
ftp> put readme.txt # 上传文件
110: 重新启动标记应答。
120: 在n分钟内准备好
125: 连接打开准备传送
150: 打开数据连接
200: 命令成功
202: 命令失败
211: 系统状态
212: 目录状态
213: 文件状态
214: 帮助信息
215: 名字系统类型
220: 新用户服务准备好了
221: 服务关闭控制连接,可以退出登录
225: 数据连接打开,无传输正在进行
226: 关闭数据连接,请求的文件操作成功
227: 进入被动模式
230: 用户登录
250: 请求的文件操作完成
257: 创建”PATHNAME”
331: 用户名正确,需要口令
332: 登录时需要帐户信息
350: 下一步命令
421: 不能提供服务,关闭控制连接
425: 不能打开数据连接
426: 关闭连接,中止传输
450: 请求的文件操作未执行
451: 中止请求的操作:有本地错误
452: 未执行请求的操作:系统存储空间不足
500: 格式错误,命令不可识别
501: 参数语法错误
502: 命令未实现
503: 命令顺序错误
504: 此参数下的命令功能未实现
530: 未登录
532: 存储文件需要帐户信息
550: 未执行请求的操作
551: 请求操作中止:页类型未知
552: 请求的文件操作中止,存储分配溢出
553: 未执行请求的操作:文件名不合法
150 文件状态良好,打开数据连接
200 命令成功
202 命令未实现
211 系统状态或系统帮助响应
212 目录状态
213 文件状态
214 帮助信息,信息仅对人类用户有用
215 名字系统类型
220 对新用户服务准备好
221 服务关闭控制连接,可以退出登录
225 数据连接打开,无传输正在进行
226 关闭数据连接,请求的文件操作成功
227 进入被动模式
230 用户登录
250 请求的文件操作完成
257 创建”PATHNAME”
331 用户名正确,需要口令
332 登录时需要帐户信息
350 请求的文件操作需要进一步命令
421 连接用户过多
425 不能打开数据连接
426 关闭连接,中止传输
450 请求的文件操作未执行
451 中止请求的操作:有本地错误
452 未执行请求的操作:系统存储空间不足
500 格式错误,命令不可识别
501 参数语法错误
502 命令未实现
503 命令顺序错误
504 此参数下的命令功能未实现
530 账号或密码错误
532 存储文件需要帐户信息
550 未执行请求的操作
551 请求操作中止:页类型未知
552 请求的文件操作中止,存储分配溢出
553 未执行请求的操作:文件名不合法
与 FTP 一样,HTTP 文件传输是用于业务文件传输的广泛使用的协议。它易于实现用户与服务器,用户与用户之间的文件传输。用户只需要一个Web浏览器就可以使用,无需在客户端安装。
HTTP 也不太容易出现防火墙问题(与 FTP 不同)。但是,就像 FTP 一样,HTTP 也无法确保传输数据的安全。如果缺乏安全性对您来说不是问题,请大胆地使用 HTTP 吧!
FTPS 也称作 FTP-SSL 和 FTP-over-SSL。FTPS 相当于加密版的 FTP, 是一种在安全套接层(SSL 是 Secure Sockets Layer 的缩写)下使用标准的 FTP 协议和相关指令的增强型 FTP 协议,FTPS 为 FTP 协议的控制和数据通道增加了 SSL 安全功能。SSL 是一个在客户机和具有 SSL 功能的服务器之间的连接中对数据进行加密和解密的协议。
FTPS 连接通过用户 ID、密码和 SSL 证书进行身份验证。一旦建立 FTPS 连接,FTP 客户端软件将检查目标 FTP 服务器证书是否可信,如果证书由已知的证书颁发机构(CA)签发,或者证书由您的合作伙伴自己签发,并且您的信任密钥存储区中有其公开证书的副本,则 SSL 证书将被视为受信任的证书。FTPS 所有的用户名和密码信息将通过安全的 FTP 连接加密。
FTPS 同样存在防火墙的问题,一种替代 FTPS 的协议是 SFTP(SSH File Transfer Protocol)。
SFTP(Secure File Transfer Protocol 的缩写)是另一种广泛使用的安全文件传输协议,SFTP 与 FTP 有着几乎一样的语法和功能,SFTP 为 SSH 的一部份,SFTP 在 SSH 上运行,是一种传输文件到服务器的安全方式。其实在 SSH 软件包中,已经包含了一个叫作 SFTP 的安全文件传输子系统。
SFTP 是在 SSH 基础上扩展了文件传输功能,因此它通常仅使用 SSH 端口用于数据传输和控制。SFTP 本身没有单独的守护进程,它必须使用 SSH 守护进程来完成相应的连接操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。
SFTP 对传输的数据使用了加密/解密技术,所以传输效率比普通的 FTP 要低得多,如果您对网络安全性要求很高,可以使用 SFTP 代替FTP。
下图显示了SFTP的工作模式,它是作为SSH2的一个子服务工作的。
SFTP 和 FTPS 都提供高级别文件传输安全保护,通过强大的算法(如 AES 和 Triple DES)来加密传输的数据,两者都非常适合注重数据隐私性和安全性的企业,但是 SFTP 相对于 FTPS 的主要优点是它对防火墙更友好。SFTP 只需要通过防火墙打开一个端口(默认为 22)。此端口将用于所有 SFTP 通信,包括初始认证、发出的任何命令以及传输的任何数据。
FTPS 通过严格安全的防火墙相对难以实现,因为 FTPS 使用多个网络端口号。每次进行文件传输请求(get,put)或目录列表请求时,需要打开另一个端口号。因此,必须在您的防火墙中打开更多的端口以允许 FTPS 连接,这使得你的网络存在潜在的安全风险。
关于 sftp 和 ftps 的简单理解:
ftps 借助 ssl 协议加密,sftp 借助 ssh 加密。sftp 协议是 ssh 中的一条独立的协议,利用 sftp 服务器就可以安全传输数据。而 ftps 是ftp-over-ssl 的意思,即 ftp 借助 ssl 协议加密传输,不但要用 ftp 服务器还要用 ssl 协议加密。
如果是 ftp-over-ssh,就是完全不同于 sftp 的传输方式了,而是利用 ftp 服务器和 ssh 协议加密传输数据。
关于 ssl 和 ssh 的简单理解:
ssl 是为 http/smtp 等加密设计的,ssh 是为 telnet/ftp 等加密、建立传输通道而设计的。
通俗的讲,ssh 就像铺管子,ssl 就像打包裹,铺管子和打包裹都会使数据安全,都是一个制作密钥的过程,而因为ssh是一个管子所以它很适合ftp的安全传输。
HTTPS (全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 [1] 。HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面.
HTTPS 是 HTTP 的安全版本。如果您不喜欢为最终用户安装客户端应用程序,并且大多数最终用户都是非技术人员,那么这可能是理想的选择。与 FTPS 相比,它是安全的并且非常人性化。
SCP(Secure Copy)这是 SFTP 的旧版本,更原始。它也是在 SSH 上运行,因此具有相同的安全功能。但是,如果您使用的是最新版本的SSH,则已经可以访问SCP和SFTP。
SCP协议是用来定义“本地机器和远端机器之间”或者“远端机器和远端机器之间”传输文件的过程的协议,是应用层协议。SCP协议基于SSH协议,因而基于SCP协议的文件传输是安全的。
SCP客户端和服务器两者都包含有“从本地复制文件传输给对方”和“从对方获取文件复制到本地”的功能,但其服务器跟常见的服务器不同,它不是“持续运行,监听端口”,而是被触发运行的。
当SCP客户端发起文件传输请求时,会去调用同台机器上的SSH客户端程序,接着SSH客户端程序向SSH服务器进行文件传输请求,在得到允许的结果后,SSH服务器会建立一个SSH连接作为数据隧道,并运行同台机器上的SCP服务器。 此时如果是从SCP客户端传输文件到SCP服务器的情形:接下来SCP客户端从本地复制文件数据,将数据通过SSH隧道传输,SCP服务器从SSH隧道读取数据,将数据写入本地存储成一个文件。
-1: 强制scp命令使用协议ssh1
-2: 强制scp命令使用协议ssh2
-4: 强制scp命令只使用IPv4寻址
-6: 强制scp命令只使用IPv6寻址
-B: 使用批处理模式(传输过程中不询问传输口令或短语)
-C: 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
-p:保留原文件的修改时间,访问时间和访问权限。
-q: 不显示传输进度条。
-r: 递归复制整个目录。
-v:详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
-c cipher: 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
-F ssh_config: 指定一个替代的ssh配置文件,此参数直接传递给ssh。
-i identity_file: 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
-l limit: 限定用户所能使用的带宽,以Kbit/s为单位。
-o ssh_option: 如果习惯于使用ssh_config(5)中的参数传递方式,
-P port:注意是大写的P, port是指定数据传输用到的端口号
-S program: 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。
常用命令:
命令格式: scp srcusername@srcip:srcpath/srcfile dstusername@dstip:dstpath/dstfile
其中可以根据上传和下载的方式省略掉其中一各参数,具体如下:
上传:scp -r local_dir username@servername:remote_dir
下载:scp username@servername:/path/filename /var/www/local_dir
到目前为止,我们讨论的大多数文件传输协议主要用于文件传输。这不仅可以促进文件传输,还可以做更多的事情。WebDAV实际上运行在HTTP上,主要用于协作活动。通过WebDAV,用户不仅可以交换文件。即使他们(用户)在不同位置工作,他们也将能够在单个文件上进行协作。WebDAV可能最适合需要分布式创作功能的组织,例如大学和研究机构。
到目前为止,您应该能够猜出S代表什么。没错,WebDAVS是WebDAV的安全版本。如果WebDAV通过HTTP运行,则WebDAVS通过HTTPS运行。这意味着,它具有WebDAV的相同特征以及SSL的安全功能。
此文件传输协议与其他协议不同,因为您不会使用它来交换文档,图像或电子表格。实际上,您通常不会使用它与网络外部的计算机交换文件。TFTP更适合于网络管理任务,例如网络启动,备份配置文件以及通过网络安装操作系统。
尽管前面讨论的几乎所有协议都能够支持B2B交换,但是确实有一些协议专门针对此类任务而设计。其中之一是AS2。
AS2专为EDI(电子数据交换)交易而构建,EDI是制造业和零售业中常见的自动信息交换。
专为EDI设计的另一种文件传输协议是OFTP。OFTP在欧洲非常普遍,因此,如果您与欧洲的公司进行交易,则可能需要这样做。OFTP和AS2本质上都是安全的,甚至支持电子交付,使其非常适合B2B交易。
广域网文件传输,尤其是在远距离传输的文件,很容易受到诸如延迟和数据包丢失之类的不良网络条件的影响,这会导致吞吐量显着降低。AFTP是一种TCP-UDP混合,使文件传输实际上不受这些网络条件的影响。电影和制造行业会发现这个协议是非常有用的。
那么哪种文件传输协议最适合您的业务?确实没有一个正确的答案。那么,你可能必须同时满足互操作性,合规性和可用性要求,如果您面临此类挑战,那么最好的解决方案就是找到可以满足所有要求的解决方案。
传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
TCP 旨在适应支持多网络应用的分层协议层次结构。 连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠TCP提供可靠的通信服务。TCP假设它可以从较低级别的协议获得简单的,可能不可靠的数据报服务。 原则上,TCP应该能够在从硬线连接到分组交换或电路交换网络的各种通信系统之上操作。
它们都是传输层的协议,但两者的机制不同,它们的区别如下:
报文模式:TCP面向连接的流模式,UDP面向无连接的数据报模式;
TCP提供可靠服务,UDP可能丢包;
TCP要求系统资源较多,UDP对系统资源要求较少;
TCP传输效率较慢,UDP具有较好的实时性,工作效率比TCP高;
TCP的每条连接只能是点对点的,UDP支持一对一、一对多、多对一和多多的的交互通信。
从以上特点上我们已经知道:TCP 是可靠的、传输速度较慢 ,UDP 是不可靠的但传输速度快。因此在选用具体文件传输协议时,应该根据通信数据的要求来决定。
若对通信数据的实时性考察远重于通信数据完整性,则优先考虑选用 TCP 协议(如文件传输、重要状态的更新等);反之,则使用 UDP 协议(如视频传输、实时通信等)。
Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。RFC 768 [1] 描述了 UDP。
Internet 的传输层有两个主要协议,互为补充。无连接的是 UDP,它除了给应用程序发送数据包功能并允许它们在所需的层次上架构自己的协议之外,几乎没有做什么特别的事情。面向连接的是 TCP,该协议几乎做了所有的事情。
此协议还是基于ftp协议的。在此协议中SSH2服务器起了一个桥梁作用,把数据在客户端和ftp之间转发。ftp协议本身包括两个通道,一个是控制通道,另一个是数据通道。
FTP over SSH2有两种情况,半安全连接(Less Secure Connection)和安全连接(Full Secure Connection)。在半安全连接时,ftp客户端先和SSH2服务器连接,在这个连接中无论控制通道和数据通道都是加密的。但是SSH2服务器和ftp服务器之间就不是加密的了,如果ftp服务器运行在另外一台机器上,SSH2服务器和ftp直接就是明文传输。
半安全连接如下图所示:
下图所示是安全连接模式的情形,SSH2服务器和FTP服务器在同一台服务器上。
TFTP(Trivial File Transfer Protocol)是TCP/IP协议族中在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为69。
1)TFTP协议不需要验证客户端的权限,FTP需要进行客户端验证;
2)TFTP协议一般多用于局域网以及远程UNIX计算机中,而常见的FTP协议则多用于互联网中;
3)FTP客户与服务器间的通信使用TCP,而TFTP客户与服务器间的通信使用的是UDP;
4)TFTP只支持文件传输。也就是说,TFTP不支持交互,而且没有一个庞大的命令集。最为重要的是,TFTP不允许用户列出目录内容或者与服务器协商来决定哪些是可得到的文件。
-l 是local的缩写,后跟存在于Client的源文件名,或下载Client后 重命名的文件名。
-r 是remote的缩写,后跟Server即PC机tftp服务器根目录中的源文 件名,或上传Server后重命名后的文件名。
-g 是get的缩写,下载文件时用,
-p 是put的缩写,上传文件时用,
常用命令:
下载东西: tftp -g -r 1.txt -l 2.txt 192.168.1.1
上传东西:tftp -p -r 3.txt -l 2.txt 192.168.1.1