专栏首页Coding迪斯尼FTP:构建在TCP协议之上的文件传输协议

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

在前几节我们辛苦完成了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的数据发送流程。

本文分享自微信公众号 - Coding迪斯尼(gh_c9f933e7765d),作者:陈屹

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-01-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • HTTP协议的状态码解读

    当客户端把请求发送给服务器后,对方会根据处理结果返回一系列HTTP数据包。其中第一行就用给定格式表明服务器对请求处理的结果。第一行包括三部分信息,第一部分是一个...

    望月从良
  • TCP窗口调整与数据流控制以及病态窗口症状

    TCP协议主要依赖不断调整窗口大小来保证数据收发吞吐率。在三次握手时,客户端会告诉服务器自己一次能接收数据量的大小,这就对应客户端的接收窗口以及服务器的发送端口...

    望月从良
  • 实现应用于AlphaGo得增强式学习算法,代码实现1

    它将作为工具,用于分析环境,以便帮助Agent做出正确选择。我们将构造一个Agent对象,真正的主角是它,它将执行我们制定的策略算法,然后不断调教网络,让它深入...

    望月从良
  • 资源 | 小米开源移动端深度学习框架MACE:可转换TensorFlow模型

    文档地址:https://mace.readthedocs.io/en/latest/

    机器之心
  • 浏览器与服务器的消息通信

    最近工作中遇到一个场景,商家在商家后台需要实时的获取到有没有新订单,有的话是几个;这个需求类似与日常中使用QQ或者微信时的新信息提醒一样,只要有新信息就需要提醒...

    哲洛不闹
  • 文件传输协议——FTP

    FTP是在两个计算机之间传输文件的协议。一般有两种情形,一种是需要登录的FTP文件服务器,另外一种FTP服务器是匿名的,它允许任何人进行访问。

    zy010101
  • 浏览器与服务器的消息通信

    最近工作中遇到一个场景,商家在商家后台需要实时的获取到有没有新订单,有的话是几个;这个需求类似与日常中使用QQ或者微信时的新信息提醒一样,只要有新信息就需要提醒...

    李海彬
  • 浏览器与服务器的消息通信

    最近工作中遇到一个场景,商家在商家后台需要实时的获取到有没有新订单,有的话是几个;这个需求类似与日常中使用QQ或者微信时的新信息提醒一样,只要有新信息就需要提醒...

    李海彬
  • OpenAI提出能合成高清逼真图像的模型:“我们和GAN不一样!”

    这篇文章介绍了我们的新成果——Glow,这是一个可逆的生成模型,其中使用了可反复的1×1卷积网络。2015年,我们曾推出过NICE,它是一种针对复杂高维进行建模...

    崔庆才
  • AI 技术讲座精选:深度学习是如何改变数据科学范式的?

    【AI100 导读】深度学习正在改变一切。就像电子学和计算机改变了所有的经济活动一样,人工智能将重塑零售、运输、制造、医药、电信、重工业等行业,即使是数据科学本...

    AI科技大本营

扫码关注云+社区

领取腾讯云代金券