浅析文件传输协议 (ftp) 的工作原理

起初,FTP并不是应用于IP网络上的协议,而是ARPANEt网络中计算机间的文件传输协议, ARPANET是美国国防部组建的老网络,于1960-1980年使用。在那时, FTP的主要功能是在主机间高速可靠地传输文件。目前FTP仍然保持其可靠性,即使在今天,它还允许文件远程存取。这使得用户可以在某个系统上工作,而将文件存贮在别的系统。例如,如果某用户运行Web服务器,需要从远程主机上取得HTML文件和CGI程序在本机上工作,他需要从远程存储站点获取文件(远程站点也需安装Web服务器)。当用户完成工作后,可使用FTP将文件传回到Web服务器。采用这种方法,用户无需使用Telnet登录到远程主机进行工作,这样就使Web服务器的更新工作变得如此的轻松。

FTP是TCP/IP的一种具体应用,它工作在OSI模型的第七层,TCP模型的第四层上,即应用层,使用TCP传输而不是UDP,这样FTP客户在和服务器建立连接前就要经过一个被广为熟知的"三次握手"的过程,它带来的意义在于客户与服务器之间的连接是可靠的,而且是面向连接,为数据的传输提供了可靠的保证。

下面,让我们来看看,一个FTP客户在和服务器连接是怎么样的一个过程(以标准的FTP端口号为例)。

首先,FTP并不像HTTP协议那样,只需要一个端口作为连接(HTTP的默认端口是80,FTP的默认端口是21),FTP需要2个端口,一个端口是作为控制连接端口,也就是21这个端口,用于发送指令给服务器以及等待服务器响应;另一个端口是数据传输端口,端口号为20(仅PORT模式),是用来建立数据传输通道的,主要有3个作用:

  1. 从客户向服务器发送一个文件。
  2. 从服务器向客户发送一个文件。
  3. 从服务器向客户发送文件或目录列表。

其次,FTP的连接模式有两种,PORT和PASV。PORT模式是一个主动模式,PASV是被动模式,这里都是相对于服务器而言的。为了让大家清楚的认识这两种模式,分别举例说明。

PORT模式

当FTP客户以PORT模式连接服务器时,他动态的选择一个端口号(本次试验是6015)连接服务器的21端口,注意这个端口号一定是1024以上的,因为1024以前的端口都已经预先被定义好,被一些典型的服务使用,当然有的还没使用,保留给以后会用到这些端口的资源服务。当经过TCP的三次握手后,连接(控制信道)被建立(如图1和图2)。

图1:FTP客户使用FTP命令建立于服务器的连接

在这里插入图片描述

图2:用netstat命令查看,控制信道被建立在客户机的6015和服务器的20端口
在这里插入图片描述

现在用户要列出服务器上的目录结构(使用ls或dir命令),那么首先就要建立一个数据通道,因为只有数据通道才能传输目录和文件列表,此时用户会发出PORT指令告诉服务器连接自己的什么端口来建立一条数据通道(这个命令由控制信道发送给服务器),当服务器接到这一指令时,服务器会使用20端口连接用户在PORT指令中指定的端口号,用以发送目录的列表(如图3)。

图3:ls命令是一个交互命令,它会首先与服务器建立一个数据传输通道。经验证本次试验客户机使用6044端口
在这里插入图片描述

当完成这一操作时,FTP客户也许要下载一个文件,那么就会发出get指令,请注意,这时客户会再次发送PORT指令,告诉服务器连接他的哪个"新"端口,你可以先用netstat -na这个命令验证,上一次使用的6044已经处于TIME_WAIT状态(如图4)。

图4:使用netstat命令验证上一次使用ls命令建立的数据传输通道已经关闭
在这里插入图片描述

当这个新的数据传输通道建立后(在微软的系统中,客户端通常会使用连续的端口,也就是说这一次客户端会用6045这个端口),就开始了文件传输的工作。

PASV模式

然而,当FTP客户以PASV模式连接服务器时,情况就有些不同了。在初始化连接这个过程即连接服务器这个过程和PORT模式是一样的,不同的是,当FTP客户发送ls、dir、get等这些要求数据返回的命令时,他不向服务器发送PORT指令而是发送PASV指令,在这个指令中,用户告诉服务器自己要连接服务器的某一个端口,如果这个服务器上的这个端口是空闲的可用的,那么服务器会返回ACK的确认信息,之后数据传输通道被建立并返回用户所要的信息(根据用户发送的指令,如ls、dir、get等);如果服务器的这个端口被另一个资源所使用,那么服务器返回UNACK的信息,那么这时,FTP客户会再次发送PASV命令,这也就是所谓的连接建立的协商过程。为了验证这个过程我们不得不借助CUTEFTP Pro这个大家经常使用的FTP客户端软件,因为微软自带的FTP命令客户端,不支持PASV模式。虽然你可以使用QUOTE PASV这个命令强制使用PASV模式,但是当你用ls命令列出服务器目录列表,你会发现它还是使用PORT方式来连接服务器的。现在我们使用CUTEFTP Pro以PASV模式连接服务器(如图5)。

图5:使用CUTEFTP Pro以PASV模式连接服务器
在这里插入图片描述

请注意连接LOG里有这样几句话:

COMMAND:> PASV
227 Entering Passive Mode (127,0,0,1,26,108)
COMMAND:> LIST
STATUS:> Connecting ftp data socket 127.0.0.1: 6764...
125 Data connection already open; Transfer starting.
226 Transfer complete.

其中,227 Entering Passive Mode (127,0,0,1,26,80). 代表客户机使用PASV模式连接服务器的26x256+108=6764端口。(当然服务器要支持这种模式)

125 Data connection already open; Transfer starting.说明服务器的这个端口可用,返回ACK信息。

再让我们看看用CUTEFTP Pro以PORT模式连接服务器的情况。其中在LOG里有这样的记录:

COMMAND:> PORT 127,0,0,1,28,37
200 PORT command successful.
COMMAND:> LIST
150 Opening ASCII mode data connection for /bin/ls.
STATUS:> Accepting connection: 127.0.0.1:20.
226 Transfer complete.
STATUS:> Transfer complete.

其中,PORT 127,0,0,1,28,37告诉服务器当收到这个PORT指令后,连接FTP客户的28x256+37=7205这个端口。
Accepting connection: 127.0.0.1:20表示服务器接到指令后用20端口连接7205端口,而且被FTP客户接受。

比较分析

在这两个例子中,请注意: PORT模式建立数据传输通道是由服务器端发起的,服务器使用20端口连接客户端的某一个大于1024的端口;在PASV模式中,数据传输的通道的建立是由FTP客户端发起的,他使用一个大于1024的端口连接服务器的1024以上的某一个端口。如果从C/S模型这个角度来说,PORT对于服务器来说是OUTBOUND,而PASV模式对于服务器是INBOUND,这一点请特别注意,尤其是在使用防火墙的企业里,比如使用微软的ISA Server 2000发布一个FTP服务器,这一点非常关键,如果设置错了,那么客户将无法连接。

最后,请注意在FTP客户连接服务器的整个过程中,控制信道是一直保持连接的,而数据传输通道是临时建立的。

在本文中把重点放到了FTP的连接模式,没有涉及FTP的其他内容,比如FTP的文件类型(Type),格式控制(Format control)以及传输方式(Transmission mode)等。不过这些规范大家可能不需要花费过多的时间去了解,因为现在流行的FTP客户端都可以自动的选择正确的模式来处理,对于FTP服务器端通常也都做了一些限制,如下:

类型:A S C I I或图像。
格式控制:只允许非打印。
结构:只允许文件结构。
传输方式:只允许流方式

至于这些内容,限于篇幅在这里就不想再介绍了。希望这篇文章能对大家有些帮助!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334654.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

io流,装饰者模式_流与装饰器

io流,装饰者模式几年前, Streams API随lambda表达式一起在Java 8中引入。 作为一名训练有素的Java专家,我尝试在我的一些项目中使用此新功能,例如here和here 。 我真的不喜欢它,然后又回到了好的老房子里。 此外,我创建…

海湾汉字编码表全部_汉字编码简明对照表

汉字编码简明对照表说明:1、下列汉字取自国标(GB 2312-80)中的分级与排列内容;包含所有的第一级汉字和第二级汉字中的常用部分。2、第一级汉字(16—55区的汉字)以拼音字母为序进行排列,同音字以笔形顺序横、竖、撇、捺、折为序,起…

现代计算机教室布置图片,高中教室布置设计图

A:买几盆花要容易活的比如仙人球就不错还有买几张白纸布置一下学习园地在上面贴些作文*等可以*出不错的氛围办个比较好的黑板报,如果有兴趣可以做一些墙报。在教室的前面可以贴一些学有些教室布置是布置了,但很不理想:有的贴挂得五…

vb.net 同时给多个属性赋值_Python尚学堂高淇|1721时间表示unix时间点毫秒微秒time模块浮点数自动转换强制转换增强赋值运算符...

017浮点数-自动转换-强制转换-增强赋值运算符浮点数称为float用a*b^10形式表示的科学计数法,比如:3.14,314E-2或者314e-2这些数字在内存当中也是按照科学计数法存储、>>>float(3)3>>>314E-23.14>>>float(“3.14”)3.14>>>int(3…

计算机键盘复制键是哪个,键盘按什么键复制粘贴_键盘上复制粘贴快捷键是哪个键-win7之家...

使用电脑的时候经常会需要使用到复制粘贴功能,许多用户可能会习惯使用右键来复制粘贴,其实这样有点麻烦,比较简单的就是使用快捷键来操作,但是有部分用户还不知道键盘按什么键复制粘贴,如果你也有一样需求的话&#xf…

junit5和junit4_JUnit 5 –基础

junit5和junit4JUnit 5是适用于Java的下一代单元测试框架,具有许多有趣的功能,包括嵌套测试,参数化测试,新的扩展API或Java 8支持。 本文展示了JUnit 5的基本概念,包括测试生命周期,参数注入和声明&#x…

我的世界java无法安装包_手把手教你搭建java环境

前文由于一些历史原因,开发java程序需要技术人员自行搭建环境,而搭建环境对于新手来说并不友好,不像其他语言那般方便,现如今,为帮助想入门java却无法顺利搭建的同学,编写该教程,如果觉得本文有用,请添加关注,更多java教程,后续更新~第一步 下载JDK可自行前往Oracle官网下载指定…

FTP协议安全分析

文章目录前 言第一章 FTP协议一、协议简介二、数据表示(一)文件类型(二)格式控制(三)结构(四)传输方式三、FTP命令四、FTP应答五、连接管理第二章 安全隐患一、FTP服务器软件漏洞二、…

vs 2019 社区版许可证过期_Switch版《最终幻想12:黄道时代》对比PS4版 就没差

2017年7月发布的“最终幻想12”重制版《最终幻想12:黄道时代》登陆PS4平台,4月30日这款经典游戏还将登陆Xbox One和Switch平台,都将支持60帧运行。那么游戏在Switch这款掌机上的表现到底如何呢?油管频道Direct-Feed Games就为大家…

四川大学金融转计算机,[请教]川大和西财哪个金融系好?!

西郊网友们学学:看到别人学校比自己母校强心里不舒服怎么办?大洋之岸(1qaz2wsx33edc)其实这里很多人可能都有过这样的体验:当其它学校获得成绩的时候,当其它学校比自己母校进步更快的时候,心里免不了有点酸溜溜的感觉&…

MacBook/MacOS/Mac OS 查看进程/端口信息的相关命令

文章目录使用命令 lsof 查看某个端口的使用情况使用命令 netstat 查看某个端口的使用情况使用命令 ps 查看指定进程的信息(一)命令:ps auwx | grep sshd(二)命令:ps -ef | grep ssh(三&#xff…

mfc 弹簧_弹簧和线程:异步

mfc 弹簧以前,我们开始使用spring和TaskExecutor ,因此我们对如何在spring应用程序中使用线程更加熟悉。 但是,使用任务执行程序可能比较麻烦,尤其是当我们需要执行简单的操作时。 Spring的异步方法可以解决。 您不必为可运行对…

g30u盘启动 中科曙光1620_I620-G30

请选择国家/地区Afghanistan (93)Albania (355)Algeria (213)Andorra (376)Angola (244)Antigua and Barbuda (1268)Argentina (54)Armenia (374)Australia (61)Austria (43)Azerbaijan (994)Bahamas (1242)Bahrain (973)Bangladesh (880)Belarus (375)Belgium (32)Belize (501…

局域网限速软件_8款Windows实用软件推荐,纯干货,总有一款是你必备的

开学后,有些小伙伴得走进大学校门,有些小伙伴走向公司大门,不管你做出了哪种选择,最终都会走向社会,走向岗位。我已经毕业走向社会近10年了,珍藏了一些小视频,呃说错了,是珍藏了一些…

MySQL 插入数据时,中文乱码问题的解决

当向 MySQL 数据库插入一条带有中文的数据如下: insert into employee values(null,张三,female,1995-10-08,2015-11-12,Sales,2000,是个好员工!); 出现乱码时,可以使用语句 show variables like character%; 来查看当前数据库的字符编码集…

javaserver_什么是JavaServer Faces(JSF)

javaserver这是一个分为两部分的系列,其中我介绍了JSF 2及其如何适合Java EE生态系统。 在第1部分中,我将介绍JavaServer Pages(JSF)背后的基本思想 ,在第2部分中,我将介绍Facelets声明语言 。 在构建Web…

安装计算机一级出现appcrash,win10系统运行程序出现appcrash错误的办法

win10系统使用久了,好多网友反馈说win10系统运行程序出现appcrash错误的问题,非常不方便。有什么办法可以永久解决win10系统运行程序出现appcrash错误的问题,面对win10系统运行程序出现appcrash错误的图文步骤非常简单,只需要1、同…

winpe镜像文件iso下载_下载:微软正式发布Win10 2004版并即日起开始推送

PS:关于Windows 10 v2004版蓝点网早前已建立专题,目前该专题已收录关于该版本的101篇文章,微信篇幅有限无法全部发过来,准备升级的用户建议点击阅读原文按钮或使用电脑访问蓝点网首页查看Windows 10 v2004专题。刚刚微软在官方博客…

Linux 命令之 cat -- 在终端设备上显示文件内容(查看文件内容/浏览文件内容)

文章目录一、命令介绍二、命令选项三、参考示例(一)查看文件的内容,并显示行数编号(二)把 test4.txt 的内容加上行号后输出到 test3.txt 这个文档里(三)清空 test4.txt 的内容(四&am…

少儿计算机兴趣小组活动记录,2013年度儿童画兴趣小组活动记录Word编辑

《2013年度儿童画兴趣小组活动记录Word编辑》由会员分享,可在线阅读,更多相关《2013年度儿童画兴趣小组活动记录Word编辑(16页珍藏版)》请在人人文库网上搜索。1、传播优秀Word版文档 ,希望对您有帮助,可双击去除!岑兜…