FTP协议详解

一:概述

        FTP协议是一个用于在计算机网络上在客户端和服务器之间进行文件传输的应用层协议,其英文全称是File Transfer Protocol。是TCP/IP协议簇中的重要一员。客户端和服务器按照FTP的协议规范进行通讯来实现文件传输。

        对于FTP服务器好理解,是对外提供FTP服务的机器。对于客户端怎么去连接服务器呢,在windows上可以通过ftp命令来进行连接,也可以通过第三方的FTP的客户端程序来连接服务器,场景的FTP客户端程序有FileZilla。

        FTP的出现极大方便了早期在互联网中的文件传输,时至今日也是文件传输不可或缺的一员。FTP协议的诞生实现了如下目标:

  1. 促进文件的共享(计算机程序或数据);
  2. 鼓励间接或者隐式的使用远程计算机;
  3. 向用户屏蔽不同主机中各种文件存储系统(File system)的细节;
  4. 可靠和高效的传输数据。

 

二:FTP工作模式

        谈FTP的工作模式之前,需简单了解一下FTP建立连接的过程。 我们知道HTTP传输数据前需要进行TCP的三次握手。同样FTP也是工作上TCP之上,但是与HTTP连接不同的是,FTP需要建立两次连接才能完成一次完整的文件传输服务。第一次连接我们称之为控制连接,第二次连接称为数据连接。两次连接缺一不可,这也是FTP和其他应用层协议的独特之处。       

        FTP也有其专属的知名端口,默认情况下,FTP使用2021这两个端口,其中20用于数据连接(传递数据),21用于控制连接(传递控制信息)。但是,是否使用20作为传输数据的端口与FTP使用的传输模式有关,如果采用主动模式,那么数据传输端口就是20;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定。

1,主动方式

        主动方式也称为PORT方式,是FTP协议最初定义的数据传输连接方式,主要特点是:

        FTP客户端通过向FTP服务器发送PORT命令,告诉服务器该客户端用于传输数据的临时端口号当需要传送数据时,服务器通过TCP端口号20与客户端的临时端口建立数据传输通道,完成数据传输。在建立数据连接的过程中,由服务器主动发起连接,因此被称为主动方式。

我们来通过FTP主动连接模式的报文来具体了解一下连接的过程

首先FTP在进行控制连发起前,需要先进行基本用户登录认证以及文件列表获取等操作;

1.由客户端发起FTP连接请求,FTP协议基于TCP,于是先进行TCP三次握手连接,连接服务器21端口;

2,TCP三次握手建立成功后,服务器也知道了客户端需要请求FTP服务,于是要求客户端提供相应的用户名(客户端在进行FTP连接时需要发送用户名和密码信息);

3,客户端收到服务器的验证需求后,接下来就是连接的验证工作了,发送用户名 user = zte

4.服务器收到后,确认用户名OK,此时需要客户端提供连接的密码password; 

5.客户端发送password; 

6,服务器端用户名密码验证成功允许用户登录;

7,由客户端发送PORT命令,同时自己随机生成一个数据端口,并将该端口信息通过控制链路发送给服务器;服务器收到PORT命令之后,此时就知道自己是处于主动模式

8,服务器开始与客户端建立数据链接,服务器主动发起连接请求,还是先进行三次握手,可以看到用到的端口号就是上面协商的5001

 9,连接建立好后传输数据

10,数据传输完由服务器断开链接

2,被动模式

被动方式也称为PASV方式,被动方式的主要特点是:

        FTP客户端通过向FTP服务器发送PASV命令,告诉服务器进入被动方式。服务器选择临时端口号并告知客户端当需要传送数据时,客户端主动与服务器的临时端口号建立数据传输通道,完成数据传输。在整个过程中,由于服务器总是被动接收客户端的数据连接,因此被称为被动方式。

同样我们通过具体的报文来展示FTP被动连接的精彩过程

1.由客户端发起FTP连接请求,和主动连接一样还是先进行TCP三次握手连接,连接服务器21端口;

2,TCP三次握手建立成功后,服务器也知道了客户端需要请求FTP服务,于是要求客户端提供相应的用户名(客户端在进行FTP连接时需要发送用户名和密码信息),在此就不一一展示报文仅在报文上展示(这部分与上面的主动连接一致,具体可以查看上边的报文)

3,客户端发送“PASV”命令

4,服务器收到PASV命令后,知道自己此时为被动方式,则开始生成随机的数据端口,以提供给客户端进行数据连接的时候使用,服务器开放自己的1443端口供客户端连接

5,接下来就是FTP的操作命令了,然后建立数据连接,首先还是三次握手,由客户端主动发起,目的端口号就是上面协商的1443

 6,然后传输数据,可以看到数据是一个目录

三:两种工作模式的应用场景

        当FTP服务器与FTP客户端均处于同一局域网内,即两者之间互访不存在防火墙或其他安全设备时,主动方式、被动方式均可实现FTP文件分发共享。

        如果FTP服务器处于路由器,防火墙或其他NAT设备之后,建议使用被动模式(passive mode)。因为在主动模式下传输数据时,由FTP发起的数据传输一般会被客户端网关的防火墙阻断。

关于主动与被动FTP优缺点的简要总结:

        主动FTP对FTP服务器的管理有利,但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。

        被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。

        针对上述防火墙带来的问题,有折衷的办法。既然FTP服务器的管理员需要他们的服务器有最多的客户连接,那么必须得支持被动FTP。我们可以通过为FTP服务器指定一个有限的端口范围来减小服务器高位端口的暴露。这样,不在这个范围的任何端口会被服务器的防火墙阻塞。虽然这没有消除所有针对服务器的危险,但它大大减少了危险。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

后仿真 ERROR

后仿真 error ERROR (SFE-23): "input.scs" 252: The instance _57_D32_noxref is referencing an undefined model or subcircuit, parasitic_nwd. Either include the file containing the definition of parasitic_nwd, or define parasitic_nwd before running t…

Adobe ColdFusion文件读取漏洞(CVE-2010-2861)

任务一: 复现漏洞 任务二: 尝试利用漏洞读取目标系统中的“opt/coldfusion8/license.txt"文件 1.环境搭建(网上写的密码是admin,就用admin) 2.看答案就是一层一层进行路径穿越攻击,这里要注意如果…

Vue+Element-ui实例_在form中动态校验tag标签

1.开发需求 在日常开发中,我们会遇到form表单的动态添加和校验,当我们需要在动态添加的内容中再次动态使用输入框的时候,就会变得很繁琐,我在网上找了很多案例,没有符合自己需求的内容,只好闲暇时间自己搞…

实现优雅的自增枚举类:Python中的枚举与自增技巧

更多资料获取 📚 个人网站:ipengtao.com 枚举类型在编程中扮演着重要的角色,它们为变量赋予了更加清晰的含义。然而,在Python中,实现自增的枚举类并非直接而简单的任务。本文将深入讨论如何通过不同的方式优雅地实现自…

matlab 混沌动力学行为-分岔图-李雅普指数等

1、内容简介 略 24-可以交流、咨询、答疑 2、内容说明 混沌动力学行为-分岔图-李雅普指数等 包含各种类型的混沌模型求解,包含其分叉图、李雅普指数等 混沌、分叉图、李雅普指数 3、仿真分析 略 4、参考论文 略 链接:https://pan.baidu.com/…

JMX的使用

1. 定义和意义 JMX是Java Management Extention的缩写,出发点是让外部通过属性/方法来读取或设置程序状态。对于提供对外服务的程序来说,天生就有这样的能力,Web程序通过HTTP接口对外暴露,RPC应用通过RPC接口暴露。不过带来的问…

matlab simulink 永磁同步电机PI调速控制

1、内容简介 略 27-可以交流、咨询、答疑 2、内容说明 永磁同步电机调速控制 永磁同步电机PI调速控制 永磁同步电机PI调速控制、PMSM 3、仿真分析 略 4、参考论文 略 链接:https://pan.baidu.com/s/1AAJ_SlHseYpa5HAwMJlk1w 提取码:rvol 路…

【Linux】:信号(三)捕捉

信号捕捉 一.sigaction1.基本使用2.sa_mask字段 二.可重入函数三.volatile四.SIGCHLD信号 承接上文 果信号的处理动作是用户自定义函数,在信号递达时就调用这个函数,这称为捕捉信号。由于信号处理函数的代码是在用户空间的,处理过程比较复杂,举例如下: 用户程序注册了SIGQUIT信…

React Native环境搭建及Hello World

写这篇博客的目的就是想说,react native 挺简单,但是大部分初级前端会被环境搭建给难住,从而放弃. 环境搭建 环境搭建其实说简单也挺简单的,有经验的前端直接翻看react native中文文档就行,直接按上面来肯定没错 以下以安卓开发,windows配置环境为例,来演示一遍 首先 电脑…

【开发PaaS】基于Postgresql的开发平台Supabase

Supadase是开源的。我们选择可扩展的开源工具,使其易于使用。 Supadase不是Firebase的1对1映射。虽然我们正在构建Firebase提供的许多功能,但我们不会以同样的方式进行: 我们的技术选择大不相同;我们使用的一切都是开源的&#…

python高级练习题库实验1(B)部分

文章目录 题目1代码实验结果题目2代码实验结果题目3代码实验结果题目4代码实验结果题目5代码实验结果题目总结题目1 打包糖果小游戏,用户输入糖果品牌与个数,还有一个盒子里面可以装多少个糖果,输出一些打印信息,如下图所示: 代码 print("Packaging lollies into…

Python+requests+Jenkins接口自动化测试实例

在做功能测试的基础上,我平时也会用postman测试接口,不过postman只能测试一个一个接口,不能连贯起来,特别是我们公司的接口很多都是要用到token的,导致我每次测个需要登录的接口都要去获取到token,做了很多…

Git常用命令#更改用户名

1.查看当前用户信息 git config user.name2.更改用户名 特定仓库中更改用户名 如果你只想在特定仓库中更改用户名,可以在不使用 --global 参数的情况下执行相同的命令,并进入特定仓库的目录进行修改。 cd /path/to/your/repository git config user.na…

ipa应用测试平台怎么开开具发票

控制台-个人中心-发票管理 ●点击申请发票可以开具发票 ●申请发票-填写资料-勾选订单 ●个人发票开具以及公司发票开具 ●提交发票申请 ●等待申请成功开具发票 ●发票开具成功,我们可以开具或者查看发票

《曾国藩传》:崇尚笨拙的人生哲学

哈喽啊,大家好,我是雷工! 以前读书喜欢读小说,喜欢看《我从你的全世界路过》《云间有个小卖铺》这些轻松的小说,读起来很轻松。 随着年龄增长,阅历的增加开始喜欢读历史,读人物传记,…

MOS管的静电击穿问题

MOS管输入电阻很高,为什么一遇到静电就不行了? 静电击穿:由于静电的积累导致电压超过了原本MOS的绝缘能力,导致电流突然增大的现象。 MOS管基础知识了解: G极(gate)—栅极,不用说比较好认 S极(source)—源…

C#中GDI+绘图应用(柱形图、折线图和饼形图)

目录 一、柱形图 1.示例源码 2.生成效果 二、折线图 1.示例源码 2.生成效果 三、饼形图 1.示例源码 2.生成效果 GDI绘制的一些常用的图形,其中包括柱形图、折线图和饼形图。 一、柱形图 柱形图也称为条形图,是程序开发中比较常用的一种图表技术…

【STM32】EXTI外部中断

1 中断系统 1.1 中断简介 中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行。 比如&a…

Unittest单元测试框架之unittest_执行用例的详细信息

unittest_执行用例的详细信息 用unittest.main()执行测试集 这里的verbosity是一个选项,表示测试结果的信息复杂度,有三个值: 0 (静默模式): 你只能获得总的测试用例数和总的结果 比如 总共100个 失败20 成功801 (默认模式): 非常类似静默模式 只是在…

SRE-架构框架-可靠性

Google-架构框架-可靠性 可靠性概览 Google Cloud 架构框架中的此类别介绍如何在云平台上构建和运营可靠的服务。此外,您还将了解一些支持可靠性的 Google Cloud 产品和功能。 该架构框架介绍了最佳实践,提供了实现建议,并说明了一些可用的…