1_文件传输协议
- FTP(File Transfer Protocol)是互联网上文件传输的标准协议,使用tcp作为传输协议,支持用户的登录认证及访问权限的设置
- TFTP(Trival File Transfer Protocol)是一种简单的文件传输协议,使用udp作为传输协议,不支持用户的登录认,也不局部复杂的命令
1.1_FTP协议
1.1.1_FTP协议介绍
- 采用客户端/服务器的设计模式,承载在TCP协议之上
- 拥有丰富的指令集,支持对登录服务器的用户名和口令进行验证,提供交互式的文件访问,允许客户指定文件的传输类型和设定文件的存取权限
- 采用双TCP连接方式,使用TCP协议的端口20和21
- 20用于数据连接
- 21用于控制连接
- FTP的数据传输方式分为:主动方式和被动方式
- 主动方式
- 数据连接由服务器发起:控制连接21,数据连接20
- 被动连接
- 数据连接由客户端主动发起:控制连接21,数据连接是服务器随机产生
- 主动方式
1.1.2_FTP双链接方式
- 传输时,需要在服务器和客户端之间建立两个TCP连接:控制连接和数据连接
- FTP服务器启动后,FTP服务打开TCP端口号21作为侦听端口,等待客户端的连接
- 客户端随机选择一个TCP端口号作为控制连接的源端口,主动发起对FTP服务器端口号的TCP连接
- FTP客户端服务器之间通过该连接交互FTP控制命令和命令执行的应答信息
- FTP控制连接在整个FTP会话过程中一直保持打开
- FTP的数据连接主要有三大用途
- 服务器向客户端发送文件
- 客户端向服务器发送文件
- 服务器向客户端发送文件列表
1.1.3_FTP文件传输模式
一个文件,不同的操作系统可能会有不同的存储表达方式,所以FTP协议定义了不同的文件传说模式,其中使用最多的包括:
- ASCll模式是默认的文件传输模式,主要特点是:
- 本地文件转换成标准的ASCll码再传输
- 适用于传输文本文件
- 二进制流模式也称为图像文件传输模式,主要特点是:
- 文件按照比特流的方式进行传输
- 适用于传输程序文件
1.1.4_FTP主动数据传输方式
- 主动模式也成为了PORT方式,是FTP协议最初定义的数据传输连接方式,主要特点是
- 客户端通过向服务端发送PORT命令,告诉服务器该客户端用于传输数据的临时端口号
- PORT命令携带如下格式的参数(A1、A2、A3、A4、P1、P2),其中A1、A2、A3、A4表示需要建立数据连接的主机IP地址,而P1和P2表示客户端用于传输数据的临时端口号,数值为256∗P1+P2256∗�1+�2
- 当需要传输数据时,服务器通过TCP端口号20余客户端的临时端口建立数据传输通道,完成数据传输
- 客户端通过向服务端发送PORT命令,告诉服务器该客户端用于传输数据的临时端口号
- 因为在建立数据连接的过程中,由服务器主动发起连接,因此被称为主动连接
- 如果客户端在防火墙内部,可能会遇到问题,因为端口随机,防火墙不知道,因为防火墙通常只允许外部主机访问部分内部已知的端口。阻断对内部随机端口的访问,所以可能造成无法建立数据连接
阶段一:建立控制通道 TCP 连接
- FTP 客户端以随机端口(图中是 1174)作为源端口,向 FTP 服务器的 TCP 端口 21发送一个 TCP SYN 报文,开始建立 TCP 连接
- FTP 服务器收到 SYN 报文后发送 SYN ACK 报文给客户端,源端口为 TCP 端口 21,目的端口为 FTP 客户端使用的随机端口 1174
- FTP 客户端收到 FTP 服务器发送的 SYN ACK 报文后,向 FTP 服务器回送一个 ACK报文,完成 TCP 三次握手,建立 FTP 控制连接
阶段二:主动方式参数传递 - 当 FTP 客户端希望请求文件列表或者需要同服务器进行文件传输时,FTP 客户端会通过已经建立好的控制通道向服务器发送 PORT 命令,命令中包含了自己的 IP 地址和端口号。在图中,IP 地址是 192.168.0.1,端口号是 13∗256+238=356613∗256+238=3566
阶段三:建立数据通道 TCP 连接 - FTP 服务器向 FTP 客户端发送一个 SYN 报文,主动建立 TCP 连接。通信的源端口为 FTP 服务器的TCP 端口号 20,目的端口为客户端在 PORT 命令中发送给服务器的端口号 3566
- FTP客户端以端口号3566 为源端口,20为目的端口向FTP服务器发送一个SYN ACK报文
- FTP 服务器端向 FTP 客户端发送一个 ACK 报文,完成 TCP 三次握手,建立数据通道的 TCP 连接
阶段四:数据传输 - 数据通道连接建立后,FTP 客户端与 FTP 服务器利用该通道进行数据的传输
- 数据传输完毕后,由发送数据的一方发送 FIN 报文,关闭这条数据连接。如果 FTP客户端需要打开新的数据连接,则可以通过控制通道发送相关命令再次建立新的数据传输通道
1.1.5_FTP被动数据传输方式
- 也称为PASV方式,主要特点
- FTP客户端通过向FTP服务器发送PASV命令,告诉服务器进入被动方式,服务器选择到临时端口号并告知客户端
- 一般采用如下形式命令:Entering Passive Mode(A1、A2、A3、A4、P1、P2)其中A1、A2、A3、A4表示服务器的IP地址,P1、P2表示服务器的临时端口号,数值为256∗P1+P2256∗�1+�2
- 当需要传送数据时,客户端主动与服务器的临时端口号建立数据传输通道,完成数据传输
- FTP客户端通过向FTP服务器发送PASV命令,告诉服务器进入被动方式,服务器选择到临时端口号并告知客户端
- 由于服务器总是被动接收客户端的数据连接,因此被称为被动方式
- 因为两个连接都是客户端发起的,一般防火墙不会限制内部的客户端发出的连接,所以这样就解决了在主动方式下,防火墙阻断问题
FTP 被动方式建立连接的过程如下:
阶段一:建立控制通道 TCP 连接
- FTP 客户端以随机选择的临时端口号(图中是 1174)作为源端口向 FTP 服务器 TCP21 端口发送一个 TCP SYN 报文,开始建立TCP 连接
- FTP 服务器收到 SYN 报文后发送 SYN ACK 报文给客户端,源端口为 TCP 21 端口,目的端口为 FTP 客户端使用的随机端口号 1174
- FTP 客户端收到 FTP 服务器发送的 SYN ACK 报文后,向 FTP 服务器回送一个 ACK报文,完成 TCP 三次握手建立FTP 控制连接
阶段二:被动方式参数传递 - 当 FTP 客户端希望请求文件列表或者需要同服务器进行文件传输时,FTP 客户端会通过已经建立好的控制通道向服务器发送 PASV 命令,告诉服务器进入被动模式。服务器对客户端的 PASV 命令应答,应答中包含了服务器的 IP 地址和一个临时端口信息。在图中,IP 地址是 192.168.0.10,端口号是 20∗256+245=536520∗256+245=5365
阶段三:建立数据通道 TCP 连接 - 此时,FTP 客户端已经得知 FTP 服务器使用的临时端口号是5365。FTP 客户端以随机选择的临时端口号(图中是 3789)作为源端口,向 FTP 服务器的端口 5365 发送一个 SYN 报文,主动建立 TCP 连接
- FTP服务器端发送 SYN ACK 给 FTP 客户端,目的端口为客户端自己选择的端口 3789,源端口为 5365
- FTP 客户端向 FTP 服务器端发送 ACK 消息,完成 TCP 三次握手,建立数据通道的TCP 连接
阶段四:数据传输 - 数据通道连接建立后,FTP 客户端与 FTP 服务器利用该通道进行数据的传输
- 数据传输完毕后,由发送数据的一方发送 FIN 报文,关闭这条数据连接。如果 FTP 客户端需要打开新的数据连接,则可以通过控制通道发送相关命令再次建立新的数据传输通道
1.2_TFTP协议
- TFTP(简单文件传输协议)也是采用客户机/服务器模式的文件传输协议
- TFTP适用于客户端和服务器之间不需要复杂交互的环境
- TFTP承载在UDP之上,端口号69
- TFTP仅提供简单的文件传输功能(上传、下载)
- TFTP没有存取授权与认证机制,不提供目录列表功能
- TFTP协议传输是由客户端发起的
- 具有两种传输模式
- netascii模式:对应FTP中的ASCII模式,用于传输文本文件
- octet模式:对应FTP中的二进制流模式,用于传输程序文件
1.2.1_TFTP文件传输过程
-
TFTP 进行文件传输时,将待传输文件看成由多个连续的文件块组成
- 每一个 TFTP 数据报文中包含一个文件块,同时对应一个文件块编号
- 每次发完一个文件块后就等待对方的确认,确认时应指明所确认的块编号
- 发送方发完数据后如果在规定的时间内收不到对端的确认那么发送方就要重新发送数据
- 发送确认的一方如果在规定时间内没有收到下一个文件块数据,则重发确认报文
- 这种方式可以确保文件的传送不会因某一数据的丢失而失败
-
每次TFTP 发送的数据报文中包含的文件块大小固定为512字节
- 如果文件长度恰好是512字节的整数倍,那么在文件传送完毕后,发送方还必须在最后发送一个不包含数据的数据报文,用来表明文件传输完毕
- 如果文件长度不是 512 字节的整数倍,那么最后传送的数据报文所包含的文件块肯定小于 512 字节,这正好作为文件结束的标志
-
TFTP 的文件传输过程以 TFTP 客户端向 TFTP 服务器发送一个读请求或写请求开始读请求表示 TFTP 客户端需要从 TFTP 服务器下载文件,写请求表示客户端需要向服务器上传文件
-
TFTP 客户端需要从 TFTP 服务器下载文件时,会向 TFTP 服务器发送一个读请求报文,包含需要下载的文件名信息和文件传输的模式(netascii 或 octet)
- 如果这个文件可以被客戶端下载,那么服务器回应一个数据报文,报文中包括文件的第一个文件块,块编号为1
- 客户端收到块编号为1的数据报文后,返回一个确认报文,报文中的块编号为1
- 服务器收到确认后继续发送块编号为2的数据报文,客户端回应块编号为2的确认报文
- 这个过程周而复始,直至文件全部传输完毕
- 除了最后一个数据报文可含有不足 512 字节的数据,其他每个数据报文均含有 512 字节的数据
-
当客户端收到一个不足 512 字节的数据报文后,就知道它收到了最后一个数据分组
-
TFTP 客户端需要向 TFTP 服务器上传文件时,会向 TFTP 服务器发送一个写请求报文,包含需要在服务器上保存的文件名信息和文件传输模式(netascii 或 octet)
- 如果这个文件可以被客户端上传,那么服务器回应一个块编号为0的确认报文
- 客户端继续发送块编号为1的 数据报文,服务器返回块编号为1的确认报文
- 然后客户端继续发送块编号为2的数据报文,
- 服务器返回块编号为2的确认报文
-
以此类推,直至文件全部传输完毕
1.3_配置FTP与TFTP
1.3.3_FTP
text
在用户视图中用以下命令登录FTP并进入客户端视图 ftp ftp-server [service-port] [vpn-instance vpn-instance-name] [dscp dscp-value | source {interface {interface-name | interface-type interface-number} | ip source-ip-address}] 常见的参数含义如下 ftp-server:服务器的主机名或ip地址 service-port:源端设备提供的服务的端口号,范围0-65535,缺省值为21 vpn-instance vpn-instance-name:指定服务器所属的vpn source {interface {interface-name | interface-type interface-number} | ip source-ip-address}:指定建立连接时使用源地址
常用交互命令
text
登录ftp之后可用以下几个命令来操作服务器上的文件和目录 查看文件和目录:ls remotefile [localfile] 下载文件:get remotefile [localfile] 上传文件:put localfile [remotefile] 断开连接:bye 设置文件传输模式为二进制流模式:binary 显示目录:pwd 切换目录:cd pathname 删除文件:delete remotefile
1.3.4_FTP服务器配置
text
启动ftp服务器 [系统视图]ftp server enable 创建本地用户进入本地视图 [系统视图]local-user user-name [class {manage netwoek}] 设置当前用户的密码 [用户视图]passeord [{hash | simple} password] 设置服务类型 [用户视图]service-type {ftp | {ssh|telnet | terminal}
1.3.5_TFTP客户端配置
text
tftp tftp-server { get | put | sget} source-filename [ destination-filename ] [ vpn-instance vpn-instance-name ] [ dscp dscp-value | source { interface interface-type interface-number | ip source-ip-address } ] tftp-server:TFTP 服务器的IP地址或主机名 source-filename:源文件名 destination-filename:目标文件名 vpn-instance vpn-instance-name:指定 TFTP 服务器所属的 VPN dscp dscp-value:指定设备发送的 TFTP 报文中携带的 DSCP 优先级的取值,取值范围为 0~63,缺省值为0 get:表示普通下载文件操作 put:表示上传文件操作 sget:表示安全下载文件操作 ip source-ip-address:当前 TFTP 客户端发送报文所使用的源 IP 地址,此地址必须是设备上已配置的 IP 地址 interface interface-type interface-number:当前 TFTP 客户端传输使用的源接口,包括接口类型和接口编号,此接口下配置的