TFTP and FTP Basics

File Transfer And Access

◼ Providing computers with the ability to access files on remote machines

◼ To lower overall cost

◼ To archive data

◼ To share data across multiple programs, multiple users, or multiple sites

On-line access: NFS 在线编辑

Whole-file copying: FTP, TFTP 不会同步,下载后修改

TFTP (Trivial File Transfer Protocol)

没有访问控制/没有目录检索

最低开销(无安全)

为UDP设计,但可以与其他传输协议一起使用

Easy to implement

Packet Format

image-20230509153608796

下载

上传

数据

服务器ACK

错误

Read request (RRQ)

image-20230509153658936

01表示RRQ

filename 文件名加0(null)字符

mode文件传输模式

Write request (WRQ)

image-20230509154126273

Data (DATA)

image-20230509154152264

block表示数据编号

Data 定长 如果小于512,标识文件结尾

Acknowledgment (ACK)

image-20230509154316360

block 对具体某个数据记录

Error (ERROR)

image-20230509154346129

传输模式

Netascii - 用来传输文本文件

  • 每一行都以\r\n结尾
  • 提供传输文本的标准格式
  • 传输完后会有响应

Octet - 用来传输二进制文件

  • 不会把二进制文本翻译

重传

Symmetric

参与传输的两台机器都被认为是发送者和接收者。

一方发送数据并接收确认

另一个接收数据并发送确认

发送时启动定时器 每方执行超时和重传

如果一个数据包在网络中丢失,数据发送者会超时并重新传输最后一个数据包

如果确认丢失,确认发送方会重传上次的确认

stop and wait mechanism

guarantees that all older packets have been received

一个一个发

Duplicate data packets must be recognized (ignored) and acknowledgment retransmitted

重复的数据包被确认但是不接收,并且返回ack

Sorcerer’s Apprentice Syndrome

image-20230509102407657

当数据包的确认信息被延迟但没有丢失时,会导致过多的重传,从而导致数据包被传输两次。一旦开始,这个循环就会无限地继续下去,每个数据包都会被传输两次。

带宽浪费

How to fix SAS

Sender should not resend a data packet in response to a duplicate ACK

收到重复ACK不发data

If sender receives ACK[n] - don’t send DATA[n+1] if the ACK was a duplicate

(收到重复data,还会返回ACK)

TFTP Example

image-20230509103035582

Both sides use timers

Simple stop and wait mechanism provides reliable delivery and flow control

A block of less than512 bytes signals the end of the file

image-20230509103355501

FTP

FTP 特征

  • 用来在两个host之间传输文件
  • 用来操作文件
    • 打印目录
    • 删除
    • 重命名
  • ==使用TCP==

user commands

将FTP command封装:

◼ Open connection to remote host

​ ◼ ftp hostname

​ ◼ open hostname

◼ Log into server (provide username and password)

​ ◼ user [username [password]]

◼ Set file transfer mode (such as ASCII or image)

​ ◼ type type-code

​ ◼ stru and mode commands used to alter transfer

◼ Transfer files (using get or put commands)

​ ◼ get remote-file [local-file]

​ ◼ put local-file [remote-file]

​ get用来获取,put用来发送

​ ◼ mget and mput commands used to transfer ** ** (such as * to transfer all of a directory)

◼ Perform other file operations

​ ◼ delete, rename, mkdir, rmdir, ls, dir, …

◼ Exit client (quit) or close connection (close)

先要用用户名和密码进行登录

登陆成功后:

  • 进入了>之后,表示可以进入使用

  • pwd:显示当前目录路径

  • ls:显示当前目录下的内容

image-20230509104952380

FTP Model

image-20230509105011981

PI 协议解析器:把user commend转为FTP commend

每文件传输一次,data connection 建立一次,使用完就拆除

  • FTP Client

    ◼ Users interact with Client directly

    ◼ Active open of control connection

    ◼ Control connection uses ASCII plain-text

    ◼ Sends commands (over control connection)

    ◼ Receives replies (over control connection)

    ◼ Data connection used to transfer file data

  • FTP Server

◼ System process

◼ “Listens” for connection on well-known port 21

◼ Receives commands

◼ Sends replies

PI (Protocol Interpreter): The user and server sides of the protocol have distinct roles implemented in a user-PI and a server-PI. 协议的用户端和服务器端在user- pi和server- pi中实现了不同的角色。

image-20230509163315120

DTP (Data Transfer Process): The data transfer process establishes and manages the data connection. The DTP can be passive or active. 【有主动模式和被动模式】只针对data connection

Control Connection: 交换命令和应答 follows the Telnet Protocol.

Data Connection: 一种全双工连接,在其上以指定的模式和类型传输数据。所传输的数据可以是一个文件的一部分、整个文件或多个文件。路径可以在服务器- dtp和客户机- dtp之间,也可以在两个服务器- dtp之间。

Overview of an FTP Transfer

image-20230509163629792

active mode : server主动建立

a)由User发起跟Server通过Control Process【双方之间的与建立连接相同的进程,可以看成两边的PI】建立连接

(b)连接建立之后,client发送account name

(c)用户发送password

(d)用户指定要下载文件名

(e)用户和server分别建立data process。在第11步才开始建立数据连接,在active mode中,data connection是由server发起建立的。主动模式就是由server主动进行连接

(f,g)在data connection之上传输数据

(h)16,17,18,19。16是server开始关闭data connection,17是用户回ack,18用户关process,19用户关process

control connection永远是client建立。

data connection分主被动

FTP Control Connection & Data Connection

  • Control Connection的时间是很长的,只要用户还在使用FTP,那么Control Connection就会存在。用来协调client端的端口

  • Data Connection只在数据传输时候建立,每一个数据连接都会在一个文件传输完成后马上关掉。

image-20230509163947616

FTP Control Commands

  • 通常四个字符(如RETR)
  • 由空格分隔的参数
  • 由CR/LF序列终止
  • 从client-PI发送到server-PI
  • 客户端程序将请求转换为必要的命令和响应

三个命令组

  • Access Control
  • Transfer Parameter
  • Service

Access Control

  • 表示用户名:USER
  • 表示密码:PASS
  • 标识account:ACCT
  • 更改目录:CWD
    • 返回上级目录(返回parent directory):CDUP
  • 重启:REIN
  • 结束:QUIT

Transfer parameter

Define data connection port:

  • PORT h1,h2,h3,h4,p1,p2

–used in active mode, telling FTP server the port number of client to accept data connection

image-20230509164552678

client发此命令,server进入active状态,把信息发给server,server可以和client建立数据连接(server主动建立连接,所以client主动告知端口和IP)

  • PASV

client端建立连接,需要server提供地址和端口

client发PASV,server回地址+端口

  • 用于确定传输的文本类型:TYPE type-code

    A表示ASCII,用于文本文件【默认】转化为/r/n结尾

    I表示Image,用于二进制文件

  • 指明file structure:STRU structure-code
    • F表示File(以EOF终止的连续字节)整个文件【默认】
    • R为Record(EOR终止)
    • P为Page(indexed pages)文件分页
  • 指明file mode:MODE mode-code
    • S 用于stream 按字节流传【默认】
    • B用于block 文件分块
    • C用于compressed 压缩

Service

  • 检索得到文件:RETR
  • 存文件:STOR
  • 添加文件:APPE
  • 删除文件:DELE
  • 创建文件夹:MKD
  • 删除文件夹:RMD
  • 重命名文件夹:RNFR / RNTO
  • 查看当前目录下的文件:LIST / NLST
  • 其他:HELP / SITE / SYST

FTP Control Replies

Every command must generate at least one reply

三个数字code + 描述文字

如果文本消息的最后一行,分隔符为空格

分隔符如果不是短信的最后一行,则是连字符

image-20230509171244818

image-20230509171255703

第二位代表和什么相关

image-20230509171931851

主动模式

image-20230509180606087

21 control

20 data

客户端设置为在一个独特的端口上“监听

客户端使用本地套接字信息向服务器发送PORT命令(应该是六个数)

服务器以“200”回复确认端口号

客户端发送RETR、STOR或其他传输命令(发送具体连接命令后才启动数据连接的建立过程)

服务器建立数据连接

client回一个ack表示正式建立data connection

在控制连接中回一个reply

通过数据连接发送的文件数据

服务器发送“226”或其他回复

服务器/客户端关闭数据连接

被动模式

==server的端口也是临时分配的== 不是20了

客户端发送命令PASV

server返回227并返回他的端口

服务器监听一个特定的端口,客户端应该访问该端口

主动模式传送数据时是“服务器”连接到“客户端”的端口;被动模式传送数据是“客户端”连接到“服务器”的端口

image-20230509181418926

client请求建立data 连接

image-20230509193505970

image-20230509193513715

image-20230509193522645

image-20230509193534283

image-20230509193547451

Traditional FTP vs. Anonymous FTP

image-20230509194544695

image-20230509194611867

image-20230509194635981

最后几个看书

NFS(Network File System)

image-20230509195008047

image-20230509194940687