TFTP、FTP、SFTP协议

一、TFTP

1.1 场景

TFTP(简单文件传输协议),由于TFTP最初是设计用于系统引导进程,它不提供用户名和口令。常用于优先考虑简便性和速度而非安全性和可靠性的场景。包括:

  • 无盘工作站引导:加载操作系统到无盘工作站或网络设备。
  • 固件升级:将固件传输到路由器和交换机等网络设备。
  • 配置文件传输:管理网络设备的配置文件。

1.2 特点

  • 客户机/服务器模式的文件传输协议
  • 适用于客户端和服务器之间不需要复杂交互的环境
  • 承载在UDP之上,端口号69
  • 仅提供简单的文件传输功能(上传、下载)
  • 协议传输由客户端发起的

1.3 功能

  1. 简单、占用资源小,由于TFTP报文比较小,能够迅速复制这些文件
  2. 适合传递小文件
  3. 适合在局域网进行传递
  4. 端口号为69
  5. 基于UDP实现
  6. TFTP是一种类似于停止等待协议,TFTP服务器只有收到客户端的确认报文ACK后才会向客户端接着发送新的数据。
  7. 服务器向客户端发送数据的过程中,每次都是发送512B的数据,如果客户进程收到某个DATA报文中数据部分的长度小于512B,说明这是收到的最后一个报文;如果待发送的数据的总长度正好是512的整数倍,这就意味着最后一个数据报的长度正好为512B,此时服务器进程会再次发送一个包含0字节数据的DATA报文。该报文的总长度为4B=2B操作码+2B块号+0B数据。
  8. TFTP协议中,用于读文件的连接和用于写文件的连接的建立方式不同。

1.4 缺陷

TFTP分组中并不提供用户名和口令。这是TFTP的一个特性(即"安全漏洞")。

1.5 报文

TFTP五种报文分别是: RRQ,WRQ,DATA,ACK和ERROR。
在这里插入图片描述

1.5.1 RRQ读请求、WRQ写请求

  1. RRQ 读请求,即下载。客户向TFTP服务器发送读请求后,服务器返回块编号为1的DATA报文。
  2. WRQ 写请求,即上传。客户向TFTP服务器发送写请求后,服务器返回的块编号为1的ACK报文。
  3. 模式字段包含:netascii 和 octet 两种,"netascii"表示ASCII文件,以\r\n作为行结束符,这两个行结束字符会在这种格式和本地主机使用的行定界符之间进行转化,"octet"表示二进制文件,将数据看作8bit一组的字节流。

在这里插入图片描述

1.5.2 DATA数据包

  1. 由客户或服务器使用(由写者发送),用于传送数据块。
  2. 所有的块都用数字顺序编码,从1开始。
  3. 在所有的DATA报文中,这个块必须准确地等于512B(源码实现可修改),但最后一个块可以小于或等于512B。
  4. 当发送的DATA报文中数据部分的长度小于512B后,表示DATA报文发送完毕,所以小于数据部分512B的DATA数据报可以作为文件结束的标志。
  5. 特殊的情况是,当文件中的数据正好是512B的整数倍时,那么发送端必须再发送一个具有数据部分为0B的额外的DATA数据块以表示传输的结束。
  6. 数据可以采用ASCII码或二进制组来传送。
    在这里插入图片描述

1.5.3 ACK 确认码

确认号表示它所收到的块号的一个确认。特殊情况是,当客户向服务器发送一个WRQ请求后,服务器返回给客户的是一个块号为0的ACK报文,表示服务器已经准备好了接收来自客户的数据报。
在这里插入图片描述

1.5.4 ERROR 错误码

ERROR报文既可以有客户发送,也可以由服务器发送。当一条连接(如读连接或写连接)不能建立或在数据传输中出现问题时使用。差错码定义了差错的类型,差错信息是一个可变字节,包含原文中的差错数据。其中,Opcode表示操作码,它的值为5;ErrorCode表示错误码,它的取值范围为0~7,具体含义如下:

  • 0:未定义的错误
  • 1:文件不存在
  • 2:访问被拒绝
  • 3:磁盘已满
  • 4:操作超时
  • 5:文件传输中断
  • 6:未知传输ID
  • 7:文件已存在
    ErrMsg表示错误信息的内容,它是一个以0结尾的字符串。
    在这里插入图片描述

1.5.5 说明

TFTP报文没有差错检验和字段,所以接收端检验数据是否出现差错的唯一方法是通过分组该TFTP数据报的UDP首部中的检验和字段。

1.6 传输过程

a) 服务器使用端口号69被动打开连接;
b) 客户主动打开连接,它使用临时端口作为源端口而端口69作为目的端口,向服务器进程发送RRQ报文;
c) 服务器主动打开连接,它使用新的临时端口作为源端口,而使用收到的来自客户的临时端口作为目的端口,向TFTP客户进程发送DATA报文(2B操作码,2B数据块的块号,512B数据);
d) 客户收到服务器的报文后,发送4B的ACK(2B的操作码和2B的数据块号)给TFTP服务器,告诉它之前发送给客户的数据报已经收到;
e) 重复步骤3-4,直到所有请求的数据发送完毕。
在这里插入图片描述

1.7 流量控制

TFTP流量控制采用的是停止等待协议。使用DATA报文发送数据块,并等待ACK报文的确认。若在超时之前发送端就收到了确认,它就发送下一个块。

1.8 差错控制

TFTP的差错机制与其他协议不同,它是对称的,在发送端和接收端都使用了计时器。客户和服务器两端,一方使用了DATA报文计时器(发送端),另一方使用ACK报文计时器(接收端)。若发送端丢失了数据报文,在计时器到期时发送端就重传该数据报文;若接收端丢失了ACK报文,在超时时接收端就重传该ACK报文。差错控制常用于这四种情况:报文受损、报文丢失、确认丢失和报文重复。

  1. 报文受损:当数据块出现差错(通过差错检验,得靠UDP首部)时,接收端能够检测出来并丢弃该报文。发送端等待确认,超时后就重传该数据报。
  2. 报文丢失:若数据报丢失了,它就用于不能到达接收方,而确认页不会发出。发送端在超时之后,就会重传该数据报。
  3. 确认丢失:确认丢失了,则可能发生两种情况:一是接收端的计时器比发送端的计时器先到期,则接收方重传确认;若发送端的计时器先期,则发送端重传该数据。
  4. 报文重复:接收端通过块编号可以检测出数据块的丢失。若数据块重复了,接收端就简单地将其丢弃。

1.9 使用:开发板和Ubuntu文件传输

  • 搭建TFTP服务器
    1:启动服务
    在Ubuntu虚拟机上通过如下命令安装TFTP服务器:sudo apt-get install tftpd-hpa
    查看服务是否启动:netstat -a | grep tftp
    若未启动:service tftpd-hpa start// 或者service tftpd-hpa restart
    在这里插入图片描述
    默认情况下,TFTP服务器的配置文件位于/etc/default/tftpd-hpa:
    在这里插入图片描述

修改TFTP默认服务器的路径(可以修改文件所在路径)权限为777,sudo chmod 777 test.log,则可以在开发板上通过TFTP客户端访问该路径。

  • 客户端访问
    zynq 7000从SD卡启动官网镜像,通过ifconfig查看网络信息,保证和Ubuntu虚拟机在同一网段,且可以相互ping通。
    Usage: tftp [OPTIONS] HOST [PORT]
    Transfer a file from/to tftp server

     -l FILE Local FILE
     -r FILE Remote FILE
     -g      Get file
     -p      Put file
    
tftp -g -r test.log 192.168.1.102 
#板子可以从ubuntu服务器(192.168.1.102)上获取test.log文件。
tftp -p -r test.log 192.168.1.102
#板子可以把test.log 发给ubuntu服务器(192.168.1.102)。

二、FTP

2.1 定义

FTP(File Transfer Protocal,文件传输协议)用于建立两台主机间的数据文件传输下载。使用客户/服务器(Client/Server)架构,基于TCP协议,服务端口为21。支持两种编码方式传输数据,ASCII方式和Binary方式。

指令:ftp://用户名:密码@IP或域名:端口号/文件路径/文件名
如:ftp://yu:123@196.168.1.50:21/test.log

2.2 数据结构

字节流:也称为文件结构。文件被认为是一个连续的字节流。
记录结构:该结构只用于ASCII或EBCDIC类型的文本文件。文件由连续的记录构成。
页结构:发送单位为页,每页发送时都带有页号,以便接收方可以随机存储页。

2.3 传输过程

FTP需要建立两次连接才能完成一次完整的文件传输服务。使用两个并行TCP连接,第一次连接我们称之为控制连接,第二次连接称为数据连接。 FTP也有其专属的知名端口,默认情况下,FTP使用20和21这两个端口,其中20用于数据连接(传递数据),21用于控制连接(传递控制信息)。
在这里插入图片描述
控制连接:建立会话,用于传输请求/应答信息(由客户端发起,服务端21端口)
数据连接:建立传输,用于传输文件(可由服务器或客户端任意一方发起)
根据FTP服务器发起数据连接的方式,分为主动模式和被动模式。
主动模式: 服务器主动连接客户端的数据端口(21端口),通过防火墙通常都会受到限制,对安全需求高适用。
被动模式: 服务器被动地等待客户端连接自己的数据端口(一个大于1024的端口)。

2.3.1 主动模式

在这里插入图片描述

  • 建立控制连接:在主动模式下,FTP客户端随机开启一个大于1024的端口N(如图为1026)向服务器的21号端口发起连接,发送FTP用户名和密码
  • 建立数据连接(主动模式):客户端开放N+1号端口(如图为1027)进行监听,并向服务器发出PORT N+1命令,告诉服务端客户端采用主动模式并开放了端口。
  • FTP服务器接收到PORT命令后,返回确认。
  • 服务器使用其本地的FTP数据端口(通常是20)来连接客户端指定的端口N+1,进行数据传输。
  • 客户端给服务器的数据端口返回一个"ACK"响应。

2.3.2 被动模式

在这里插入图片描述

  • 建立控制连接:在被动模式下,FTP客户端随机开启一个大于1024的端口N(如图为1026)向服务器的21号端口发起连接,发送用户名和密码登陆。
  • 建立数据连接(被动模式):客户端开启N+1(如图为1027)端口。然后向服务器发送PASV命令,通知服务器自己处于被动模式。
  • 服务器收到命令后,会开放一个大于1024的端口P(端口P的范围是可以设置的)进行监听,然后用PORT P命令通知客户端,自己的数据端口是P。
  • 客户端收到命令后,会通过N+1号端口连接服务器的端口P,然后在两个端口之间进行数据传输。
  • 服务器给客户端的数据端口返回一个"ACK"响应。

2.4 命令与响应

对于控制通信,FTP使用与TELNET相同的方法。它与TELNET一样使用NVT ASCII字符集。通信是通过命令和响应来完成的。这种简单方法适合控制连接。因为我们一次发送一条命令 (或响应)。每一条命令或响应都是一个短行, 因此不必担心它的文件格式或文件结构,每一行结束处是两个字符( 回车和换行)的行结束标记。

2.4.1 FTP命令

在控制连接期间,命令从客户端发送到服务器并且响应从服务器发送到客户端。从FTP客户控制进程发送的命令是ASCII大写字母形式的,可能带有也可能不带有参数。常见命令如下表所示。
在这里插入图片描述

2.4.2 FTP响应

每个FTP命令至少产生一个响应。一个响应有两部分:跟随在文本后的-一个三位数字,数字部分定义了编码。 第一个数字定义了命令状态,第二个数字定义了状态应用的区域,第三个数字提供了额外信息。
在这里插入图片描述

三、FTPS/SFTP

FTPS(也称为FTP安全,FTP-ES,FTP-SSL)是对常用文件传输协议(FTP)的扩展,增加了对传输层安全性(TLS,Transport Layer Security)和安全套接字层(SSL,Secure Sockets Layer)加密协议的支持。

3.1 工作模式

FPTS 有 FTPS 隐式 SSL 和 FTPS 显示 SSL 两种模式。
FTPS 隐式 SSL:该模式通常在端口 990 上运行。在这个模式下全部数据的交换都需要在客户端和服务器之间建立 SSL 会话,并且服务器会拒绝任何不使用 SSL 进行的连接尝试。
在这里插入图片描述
FTPS 显式 SSL:显示 SSL 下服务器可以同时支持 FTP 和 FTPS 会话。开始会话前客户端需要先建立与 FTP 服务器的未加密连接,并在发送用户凭证前先发送 AUTH TLS 或 AUTH SSL 命令来请求服务器将命令通道切换到 SSL 加密通道,成功建立通道后再将用户凭证发送到 FTP 服务器,从而保证在会话期间的任何命令都可以通过 SSL 通道自动加密。
在这里插入图片描述

3.2 工作方式

FTPS 协议的工作方式包括两个阶段:握手阶段和数据传输阶段。

  • 握手阶段
    在握手阶段,客户端与服务器之间建立安全连接。具体步骤如下:
    ① 客户端连接到服务器的默认 FTP 端口( 21 端口)。
    ② 服务器返回一个欢迎消息,并要求客户端协商使用 TLS/SSL 。
    ③ 客户端发起 TLS/SSL 握手请求。
    ④ 服务器验证客户端的身份,并发送证书给客户端。
    ⑤ 客户端验证服务器的证书,并生成一个用于加密通信的密钥。
    ⑥ 握手完成后,客户端与服务器之间的通信将采用 TLS/SSL 加密。
  • 数据传输阶段
    握手阶段完成后,客户端与服务器之间的数据传输将通过 TLS/SSL 加密进行保护。具体步骤如下:
    ① 客户端发送命令请求到服务器,如上传、下载文件等。
    ② 服务器响应客户端的命令请求,并准备进行数据传输。
    ③ 客户端与服务器建立一个新的数据连接。
    ④ 数据连接通过 TLS/SSL 加密进行保护。
    ⑤ 客户端与服务器之间传输数据。
    ⑥ 数据传输完成后,数据连接被关闭。

3.3 工作机制【SFTP】

一种替代FTPS的协议是安全文件传输协议(SFTP)。这个协议使用SSH文件传输协议加密从客户机到服务器的FTP连接。

SSH File Transfer Protocol(SFTP)是建立在SSH(Secure Shell,安全外壳)协议之上的安全文件传输协议。相比于FTP和TFTP,SFTP提供了加密的通信通道,更适用于对安全性有较高要求的文件传输场景。

SFTP 客户端与 SFTP 服务器之间的所有数据传输都通过 SSH 连接实现。当一个 SFTP 客户端程序连接到服务器时,首先建立一个 SSH 连接。在此基础上,传输的所有数据都会被 SSH 加密,保证了传输过程的机密性和完整性。
在这里插入图片描述

四、对比

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值