FTP和TFTP
文件传输协议
- FTP概述:
- 文件传输协议FTP(File Transfer Protocol)[RFC 959]是互联网上使用最广泛的文件传输协议,
FTP提供交互式的访问,允许用户知指明文件类型与格式,并允许文件是否具有某种权限等。 - 文件共享协议FTP一大类是联机访问(online access)。联机访问意味着允许多个程序对同一个文件进行存取,
属于文件共享协议的有网络文件系统NFS(Network File System),NFS可以使本地计算机远程共享远地的资源,就想这些资源在本地一样。
- 文件传输协议FTP(File Transfer Protocol)[RFC 959]是互联网上使用最广泛的文件传输协议,
- FTP的基本原理
- 在两台主机之间传递文件是一种非常大的挑战,因为不同的计算机厂商研制出的文件系统高达数百种,且差别很大,经常遇到的问题有:
- 计算机存储数据的格式不同。
- 文件的目录结构和文件命名不同。
- 对于相同的文件存储功能,操作系统使用的命令不同。
- 访问控制方法不同。
- FTP只提供文件传送的基本的一些服务,它使用TCP可靠的运输服务,FTP主要的功能就是减少或者消除在不同操作系统下处理文件的不兼容性。
- FTP使用客户服务期方式。一个FTP服务器进程可以同时为多个FTP客户进程提供服务。FTP的服务进程主要有两大类:
- 一个主进程:负责接受新的请求。
- 若干个从属进程,负责处理单个请求。
- 主进程的工作步骤:
- 打开熟知端口号(21),使得客户端进程能够连接得上。
- 等待客户进程发出连接请求。
- 启动从属进程处理客户进程发来的请求,从属进程对客户进程的请求处理完毕后就终止了,
但从属进程在运行期间根据需要还可以创建其他一些子进程。 - 回到等待状态,继续接受其他客户端进程发来的请求。主进程与从属进程是并发进行的
- 如上图,图中的椭圆形表示在系统中运行的进程,图中的服务器端有两个从属进程:
控制进程和数据传送进程(图中服务器主进程没有画上),客户端除了控制进程和数据传送进程之外,
还有一个用户界面进程用来和用户接口。 - 在进行文件传输时候,FTP的客户和服务器之间要建立两个并行的TCP连接:
“连接控制”和“数据连接”,连接控制在整个会话期间一直保持打开,FTP客户发出的传送请求,通过
控制连接发给服务器端的控制进程,但控制进程并不是用来传送文件。实际用来传送文件的是”数据连接“
服务器端的控制进程在接收到TCP客户端发来的文件传输请求后就创建数据传送进程和数据连接,
用来连接客户端,和服务器端的数据传送进程。数据传送进程实际完成文件的传输。在传送完毕后关闭数据传送连接进程,
由于FTP使用的是分离的控制连接,因此FTP的控制信息是带外传送的。 - 当客户进程向服务器进程发出建立连接的请求时,要寻找连接服务器进程的熟知端口号(21),同时还要告诉服务器进程自己的另一个端口号码,
用于建立数据传送连接,接着,服务器进程用自己传送的熟知端口20与客户进程所提供的端口号建立连接。
由于 FTP使用了两个不同的端口号,所以数据连接与控制连接不会发生混乱。使用两个独立的端口连接的好处是使协议更加简单和容易的实现,
同时在文件传输的时候还可以利用控制对文件的传输速进行控制。例如客户端发送请求终止传输。 - 然而网路文件系统NFS则采用的是另一种思路:NFS允许应用进程打开一个远程文件,并能在该文件的某一个特定位置上开始读写数据。这样
,NFS用户可使用户只复制一个打文件中的一小部分,而并不需要复制整个文件。
- 如上图,图中的椭圆形表示在系统中运行的进程,图中的服务器端有两个从属进程:
- 在两台主机之间传递文件是一种非常大的挑战,因为不同的计算机厂商研制出的文件系统高达数百种,且差别很大,经常遇到的问题有:
简单文件传输协议TFTP(Trivial File Transfer System)
- TCP/IP家族中有一个简单文件传输协议TFTP,它是很小且易于实现的文件传输协议。TFTP的版本2是互联网的正式标准[RTC 1350],
芮然TFTP也使用的是客户服务器方式,但是它使用的是UDP数据报,因此TFTP需要自己的差错处理。TFTP只支持文件传输并不支持交互,TFFTP不能进行用户身份鉴别,没有列目录,没有庞大指令集。 - TFTP主要有两个优点
- TFTP可用于UDP环境,例如当需要将文件同时向许多机器下载的时候往往就需要TFTP.
- TFTP占用代码较少,这对较小的计算机或者其他硬件设备来说是非常重要的,这些设备不需要硬盘,
只需要固化好了TFTP,UDP和IP的小容量只读存储器即可,当接通电源后,设备执行只读存储器中的代码,
在网络上广播一个TFTP请求。网络上的TFTP服务器就会响应,设备收到的文件后会放到内存中,然后开始运行内存,这种方式增加了灵活性,也减少了开销。
- TFTP的主要特点是:
1,每次传送的数据报文中由512字节的数据,但最后一次可不足512字节。
2. 数据报文按序编号,从1开始。
3. 支持ASCII码或二进制传送。
4. 可对文件进行读或者写。
5. 使用很简单的首部。 - TFTP发完一个文件块后就等待对方的确认,确认时就应指明所确认的块编号。发完数据后在规定的时间内收不到
确认就要重发数据协议数据单元PDU,发送确认PDU的一方若在规定时间内收不到下一个文件块,也要重发确认PDU,这样可以保证文件的传输不会因一个数据报的丢失而失败。 - 在一开始工作时,TFTP客户进程发送一个读请求报文或者写请求报文给TFTP服务器进程,其熟知端口号为69
TFTP服务器进程选择一条新的端口和TFTP客户进程进行通信。若文件长度刚好为512字节的整数倍,则在文件传输完毕后,还需要再发送一个只含首部而无数据的数据报文。
若文件长度不是512的整数倍,则最后传送的数据报文中的数据字段一定不满512字节。这正好可以作为文件结束的标志。
FTP和TFTP的更多相关文章
- 应用层HTTP,FTP,TFTP,TELNET,DNS,EMAIL
ip路由选择 crc校验 数据包转发子模块 ttl值 ip输出队列/输入队列icmp报文 路由表 ip是网络层 tcp是传输层 应用层表示层会话层传输层网络层链路层物理层 网卡工作在链路层 网卡是工作 ...
- [置顶]
从零制作文件系统到JZ2440,使其支持telnet , ftp 和tftp
转自:http://mp.weixin.qq.com/s?__biz=MzAxNTAyOTczMw==&mid=2649328515&idx=1&sn=5849fba4b44e ...
- FTP、TFTP
FTP 文件传送协议 (File Transfer Protocol) FTP是因特网上使用得最广泛的文件传送协议. 文件传送协议 FTP (File Transfer Protocol) 是因 ...
- FTP与TFTP
文件传输协议如今有了很大的广泛,他屏蔽了计算机内部的实现细节,因为可以适用于各种计算机之间文件的传输. 文件咋网络中传输其实是一件很复杂的事情,涉及的问题有很多,比如 (1)计算机存储数据的格式不同 ...
- 文件传输协议:FTP、TFTP、SFTP有什么区别?
一个执着于技术的公众号 FTP 提供一种在服务器和客户机之间上传和下载文件的有效方式:是基于TCP的传输,FTP采用双TCP连接方式:支持授权与认证机制,提供目录列表功能. ---控制连接使用TCP端 ...
- TCP/IP协议族-----21、文件传送:FTP和TFTP
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGVrZXdhbmd6aQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...
- kickstart+ftp+tftp+dhcp+PXE
##########yum less install.log #看安装log yum install system-config-kickstart* -y yum install tftp* -y ...
- TCP/IP FTP/TFTP
引言 从一台计算机向另一台计算机传送文件是在连网或互联网环境中最常见的任务.而FTP和TFTP就是这样的协议. 关于文件传输协议FTP? 端口21使用服务TCP [FTP模型] FTP连接? 1.控制 ...
- TFTP 与 FTP的区别
FTP(File Transfer Protocol,文件传输协议)协议在TCP/IP协议族中属于应用层协议,用于在远端服务器和本地客户端之间传输文件,使用TCP端口20和21进行传输.端口20用于传 ...
随机推荐
- c++与c#混合编程
C#写界面比较方便,而C++则擅长写算法,所以将两者结合起来将会加快程序的开发速度,并保证程序的质量.但C#与C++的混合编程有很多细节问题需要注意,下面简要列举一些并指出相应的解决办法. 1. 将本 ...
- Maven脑图
转自:https://segmentfault.com/a/1190000017832792 参考:https://www.cnblogs.com/mzywucai/p/11053341.html
- 硬核! Github上 ,star超高的Java 开源项目分享给你!
Awsome JavaGreat Java project on Github(Github 上非常棒的 Java 开源项目). English Version 大家都知道 Github 是一个程序员 ...
- 基于SigalR实现的奥运会实时金牌榜
系统架构 三端 winform 后台数据管理 + Asp.Net Mvc 前台数据展示 + Xamarin.Forms 移动端跨平台APP 因为本人的代码水平一般,期间遇到了一些问题,如signalR ...
- lsyncd替代inotify+rsync实现实时同步
因公司业务需要需要实时同步日志文件,刚一开始使用的是inotify+rsync来实现实时同步,但时间久而久之发现同步的速度越来越慢,往往延迟好几个小时.查了一下网上的inotify+rsync方案基本 ...
- Python之requests模块-session
http协议本身是无状态的,为了让请求之间保持状态,有了session和cookie机制.requests也提供了相应的方法去操纵它们. requests中的session对象能够让我们跨http请求 ...
- Geode member发现机制
Geode member发现机制 Apache Geode 为集群和客户端服务器间提供了多种member 发现机制,具体如下: Peer Member Discovery Standalone Mem ...
- 利用 Spring Boot 中的 @ConfigurationProperties,优雅绑定配置参数
使用 @Value("${property}") 注释注入配置属性有时会很麻烦,尤其是当你使用多个属性或你的数据是分层的时候. Spring Boot 引入了一个可替换的方案 -- ...
- wireshark 解密加密报文
wireshark 解密IPSec加密后的报文 序言 wireshark作为一款非常优秀的抓包工具,支持了各种各样的网络协议,成为了网络开发中必不可少的工具之一.一般而言,对于普通的网络数据包,wir ...
- 一行Java代码实现游戏中交换装备
摘要:JDK 1.5 开始 JUC 包下提供的 Exchanger 类可用于两个线程之间交换信息. 本文分享自华为云社区<一行Java代码实现两玩家交换装备[并发编程]>,作者:陈皮的Ja ...