FTP协议

FTP(File Transfer Protocol)文件传输协议
用于在远端服务器和本地主机之传输文件,是现在网络通用的文件传输协议。
在网络中,我们经常需要在本地主机与远端主机或服务器之间传输文件,文件传输协议的出现,满足了我们这种需求。
FTP采用典型的C/S架构,基于TCP协议,FTP支持对登入服务器的用户名和密码进行验证(可靠的安全保障)。
FTP使用TCP连接方式,使用TCP协议的端口20和21,20用于数据传输21用于控制连接

控制连接

用于在FTP客户端和FTP服务器之间传输FTP控制命令以及命令执行信息,控制连接在整个FTP会话期间一直保持打开状态。

数据连接

用于传输数据,包括上传、下载、文件列表发送等,数据传输结束后,连接将终止。

控制和连接


FTP文件传输的模式

目前使用最广的文件传输模式有两种ASCII模式二进制流模式

ASCII模式

这个模式主要适用于文本文件的传输
通过将本地文件转换成标准的ASCII码再进行传输
对方收到后,会根据自己文件存存储的方式转换成本地文件

二进制流模式

这种多用于程序文件、图片、视频等待,通过将文件转换成二进制比特流进行传输。

FTP传输数据的方式

为了保证文件能够准确无误的送达目的地,FTP使用了两种传输模式:主动方式被动方式

主动方式

也称作Port方式
FTP客户端通过向FTP服务器发送PORT命令,告诉服务器该客户端用于传输数据的临时端口号。
当需要传送数据时,服务器通过TCP端口号20与客户端的临时端口建立数据传输通道,完成数据传输。
流程图

数据的连接由服务器主动发起
控制连接:21端口
数据连接:20端口
被动方式

也称作PASV模式
FTP客户端通过向FTP服务器发送PASV命令,告诉服务器进入被动传输方式。服务器选择临时端口号告知客户端。
当需要传输数据时,客户端会主动与服务器的临时端口号建立数据传输通道,完成数据传输
流程

数据连接由客户端主动发起
控制连接:21端口
数据连接:由服务器随机产生的端口

TFTP协议

TFTP(Trivial File Transfer Protocol)简单的文件传输协议,同样也是采用C/S架构
TFTP适用于客户端和服务器之间不需要复杂交互的环境
采用UDP协议,端口号69
TFTP仅提供简单的文件传输功能(上传、下载),没有所谓的认证机制,不提供目录列表功能,通常TFTP传输是由客户端发起
传输流程
TFTP我们之做了解认识即可

FTP基本配置

路由器作为客户端的场景
/*连接至FTP服务器,Source是指连接FTP时使用的源地址*/
<Router> ftp ftp-server [ service-port ] [ vpn-instance
vpn-instance-name ] [ dscp dscp-value | source
{ interface { interface-name | interface-type interfacenumber } | ip source-ip-address } ]

/*
几个常见参数解释
ftp-server:FTP 服务器的主机名或 IP 地址。
service-port:远端设备提供 FTP 服务的 TCP 端口号,取值范围为 0~65535,缺省值为 21。
vpn-instance vpn-instance-name:指定 FTP 服务器所属的 VPN。
source { interface interface-type interface-number | ip source-ip-address }:指定建立 FTP 连接时使用的源地址
*/
FTP常用的交互命令
/*查看远程FTP服务器上的目录或者文件*/
[ftp] ls [remotefile] [ localfile ]
/*显示FTP服务器上的工作目录*/
[ftp] pwd
/*切换工作目录*/
[ftp] cd [pathname]
/*删除FTP服务器上的文件*/
[ftp] delete [remotefile]
/*从FTP服务器上下载文件*/
[ftp] get remotefile [ localfile ]
/*从本地上传文件至FTP服务器*/
[ftp] put localfile [remotefile] 
/*断开连接*/
[ftp] bye
/*将FTP传输文件的模式切换城二进制流模式*/
[ftp] binary
在路由器上搭建FTP服务器
/*开启路由器FTP服务器功能*/
[Router] ftp server enable
/*创建一个用于FTP登入验证的用户*/
[Router] local-user user-name [ class { manage | network } ]
/*设置用户的密码*/
[Router-luser-abc] password [ { hash | simple } password ]
/*设置该用户的服务类型*/
[Router-luser-abc] service-type { ftp | { ssh | telnet | terminal }

实例