前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >FTP:构建在TCP协议之上的文件传输协议

FTP:构建在TCP协议之上的文件传输协议

作者头像
望月从良
发布2020-01-16 11:17:17
1.4K0
发布2020-01-16 11:17:17
举报
文章被收录于专栏:Coding迪斯尼Coding迪斯尼

在前几节我们辛苦完成了TCP协议的基本设计,我们的代码当然无法达到工业级要求,但是基本将TCP协议的要点表达出来,是一个”基本可用版本“。TCP协议类似于一条货轮,负责把货物也就是上层数据从一端稳定的运输到另一端,我们既然已经有了货轮,如果不让他来运货,那么其作用就难以体现,从本节开始我将从基于TCP之上的协议入手,理解它们的设计原理,并掌握上层协议如何应用TCP实现自己的数据传输目的。

我们首先关注的是FTP协议,因为它到目前依然还有较为广泛的应用,前几节我们实现了基于UDP的TFTP协议,从本节开始我们看看如何实现基于TCP的FTP协议。FTP提供了一系列方便的文件浏览,上传,删除和复制等操作,而这一系列功能都建立在TCP之上。FTP协议基于客户端-服务器模式,一旦底层TCP协议建立连接后,客户端和服务器可以通过交互控制命令来建立连接。整个协议建立在一个所谓的”FTP模型”之上,模型规定了文件传输的双方之间如何互动。

FTP模型要求建立两条逻辑连接,一条连接用于传输控制命令,另一条连接用于控制数据传输。一次FTP会话建立时首先要建立用于控制命令的逻辑连接,该链接直到断开时才结束。当双方需要实现数据传输时,第二条连接才需要建立。实现FTP协议的两端都需要设立两个组件,一个叫protocol interpreter,用于解读双方传输的控制命令,另一个叫data transfer process,用于负责数据块的传输,基本流程如下图所示:

在上图右边FTP 服务器中有两个模块,一个叫服务器协议解释器,它负责与左边帮客户的的协议解释器进行交互,相互间发送控制命令。第二个模块叫服务器数据传输进程,它与左边的客户端数据传输进程交互,双方负责发送和接收数据。接下来我们看看FTP两方在协议层面的连接过程。服务器端的协议模块会在给定端口21监听来自客户端的连接,首先是登陆过程,客户端将自己的用户名和密码发送给服务器,客户端使用USER控制命令发送自己的用户名,使用PASS控制命令发送密码,服务器接收后检索数据库看是否有给定用户存在,如果有那么双方就可以建立会话过程,该流程如下图所示:

两边在控制命令层面建立连接完成沟通后,接下来就是在数据传输层面完成连接。数据传输连接有两种方式,一种是主动连接,也就是服务器端通过TCP,以端口20主动向客户端发起连接请求,客户端使用自己的端口来接受服务器端的连接请求。我们看一个具体例子,假设客户端使用端口1678与服务器端口21在控制命令层面完成了连接,然后服务器会使用端口20向客户端发起连接请求,客户端重新使用另一个端口例如1742来承接服务器端的请求,一旦接受服务器端请求后,双方的数据传输通道就可以确立,整个过程如下图所示:

在使用主动连接模式时,在控制命令传输层面,客户端要通过PORT命令把自己用于数据传输的端口告知服务器,这样服务器才能主动发起连接。第二种数据连通方法是被动连接,也就是连接由客户端发起,服务器端只能被动等待客户端的连接请求。这需要在控制命令传输时,客户端向服务器端发送PASV控制命令告诉服务器由它来发起数据传输连接。然后服务器会将返回一个端口值例如2223,让客户端使用该端口向其发起连接。当客户端使用该端口发起连接后,服务器端才会接收然后双方才能相互发送文件数据,整个流程如下图所示:

这两种连接方式的差别主要在于安全性。通常情况下客户端极少会收到服务器端的主动连接,因此很多安全配置会让客户端封堵掉一切主动连接。使用被动连接时,客户端主动向服务器发起连接,于是安全防护的责任就落到服务器身上,因为任何主动进来的连接都会带有安全隐患。下一节我们看看FTP的数据发送流程。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Coding迪斯尼 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档