FTP协议学习心得

因为关于协议和socket编程这一块感觉有些薄弱,所以最近在网上看了很多有关socket和协议的文章。

soket连接如果大家不是很熟悉的话,可以阅读一下这片文章。强烈推荐,写的是非常的好,而且很详细。

文章名称:Soket详解

 

我们进入主题,看下FTP协议的定义。它是一个位于OSI七层结构中应用层的协议,中文名是文件传输协议(File Transfer Protocol)。总觉得协议是一种摸不到,看不着的东西,感觉学起来不好入手。其实很容易,随便挑一个,找一篇讲解的详细的文章,从头到尾边看边写,收获会非常的大。废话不多说,开始讲讲我对FTP的理解和总结。

 

首先,目的很重要。为什么这么说呢,我们不能抱着为了去解决问题的想法去理解一门技术,这样的理解是不深刻的,等到下一次你再遇到这门技术,你依旧是印象不深,我们应该带着一个问题去理解这门技术。什么问题呢?我们用这个技术的目的是什么。FTP到底是为了做什么而出现的,大家都知道叫文本传输协议,所以就像它的名字一样,这个协议,是用来传输数据的。前辈们是为了解决传输数据这一目的,而创作的这个协议。所以你可以想一下,如果换做是你,你会怎么去设计这个所谓的协议?显而易见,首先我们肯定得让两台机器获得一个能交流数据的机会,也就是说创建一条可以交流数据的桥梁,在FTP协议中,这个桥梁就是数据连接 data_socket 。目的有了,我们就得想,怎么去实现这个目的?种种测试之后,我们的前辈留下了方法,创建一个命令连接 control_socket。命令连接就可以为建立数据连接铺设道路。至此,我们的大局观就已经很清晰了,我们的目的呢,就是下面这张图。

 

FTP协议学习心得_第1张图片

目的是不是很明确了呢?我们的目的就是创建命令连接数据连接

命令连接:control_socket就是命令连接,负责传输一些命令道服务器端,主要是不涉及数据交互的操作,比如登录选择连接模式更改目录位置(客户端本地已经获得过目录,如果说本地没获得过,则需要通过数据连接先获取目录结构的数据)等。

数据连接:data_socket则是数据连接,我们上传下载之类的与数据相关的操作,都会在这个连接上进行。

 

接下来,我们稍微深入一点,来理解一下FTP协议是怎么做到这两个连接的。

我们先来看一下下侧的流程图,该流程即是FTP协议的主要流程了。

FTP协议学习心得_第2张图片

 

一、客户端与服务器端进行soket连接

这一个步骤主要是为了建立一个命令连接——control_soket,这个soket的作用呢,就是为了传输下面步骤中的命令,如USER、PASS、PASV等。

二、登录

这个步骤是为了建立数据连接,客户机通过"USER username"命令去申请连接,服务器这个时候会给你返回一个密码的请求。然后客户机再通过"PASS ******"命令将密码传输过去。

三、设置数据连接模式

这一块为什么我单拿出来了呢?因为,很重要。数据连接模式个人感觉是FTP协议的重点部分,这个地方,大家一定要搞清楚什么是主动模式,什么是被动模式,以及在什么场合使用主动模式和被动模式。

关于主动模式和被动模式的文章,可以参考一下我的另一片文章 FTP协议中数据连接的主动模式和被动模式

关于什么场合使用主动模式和被动模式,可以看一下我转载的文章 主动模式FTP与被动模式FTP该如何选择

主动模式:我们通过"PORT "的形式将IP和端口发送给服务器,来选择主动模式。

被动模式:我们通过"PASV"的形式告诉服务器,我们选择被动模式。

选完模式之后,我们的准备工作就已经全部做完了。

四、建立数据连接,进行上传/下载

当我们选择完模式之后,就可以创建数据连接了。建立data_socket后,使用"STOR filename"和"RETR filename"命令,来上传和下载文件。至此,我们的目的就达到了,完成了文件的传输。

五、关闭

如果说大家关于IO部分了解一些的话,应该知道内存占用和资源问题。我们都养成习惯,创建的流,在使用完之后,一定要close掉。否则会发生意想不到的问题,切记。

 

至此,就是本人对FTP协议的一点浅浅的理解,如果有什么地方说的有纰漏的,还请大家多多指出,在下方留言栏中留言给我,我会及时回复。一同学习,共同进步!

 

stay hungry! stay foolish!

你可能感兴趣的:(协议)