FTP服务器的工作原理

1.1、概述

FTP服务器是网络中提供文件存储访问服务服务器,无论是个人还是企业,都可以搭建FTP服务器,用来上传数据下载数据共享文件。FTP采用C/S(客户端/服务器)架构,用户只要通过FTP客户端程序连接到FTP服务器,就能实现文件传输。

1.2、认识FTP

文件传输协议(File Transfer Protocol,FTP)是用于在网络上进行文件传输的协议。如果用户需要将文件从本机发送到另一台计算机,可以使用FTP上传操作;反之,用户可以使用FTP从其他计算机将文件下载到本机。

基于TCP/IP在不同主机之间提供可靠的数据传输,在传输过程中发生错误可以进行相应的修正。FTP在文件传输中的一个重要的特点是支持断点续传,可以应对数据传输过程中,因网络中断二导致的传输中断的情况。

1.3FTP的工作原理

一个完整的FTP文件传输过程需要建立两种类型的连接:一种是控制连接,用于在服务器与客户端之间的传输控制信息,如用户标识,口令,传输与操作命令等(上传下载的操作);另一种是数据连接,用于实际传输文件数据。

1.控制连接

FTP客户端在与FTP服务端建立上传、下载的数据传输时,它首先向FTP服务器的TCP 21号端口发起建立连接的请求,FTP服务器接受来自FTP客户端的请求,完成控制连接的建立。

2.数据连接

控制连接建立之后,FTP服务器的TCP 20号端口开始传输文件数据,传输文件数据的连接被称为数据连接。

说明:数据连接与控制连接同时存在,如果再传输数据的同时,控制连接断开了,数据连接也会自动关闭。

1.4FTP数据传输的模式

按照建立FTP的数据连接方式的不同,数据传输模式分为两种,即主动模式和被动模式。

1.4.1主动模式(PORT模式)

在主动模式下,FTP客户端告诉服务器它将打开一个特定的端口以接收数据连接。具体步骤如下:

1. 客户端随机选择一个端口(通常大于1024),并建立到FTP服务器命令端口(通常是端口21)的连接。
2. 客户端通过命令通道发送PORT命令给服务器,告诉服务器客户端的数据端口号。
3. 服务器收到PORT命令后,会尝试连接到客户端指定的数据端口,以便开始数据传输。


1.4.2被动模式(PASV)

在被动模式下,FTP服务器告诉客户端它将打开一个特定的端口以等待客户端的数据连接。具体步骤如下:

1. 客户端同样首先建立到FTP服务器命令端口的连接。
2. 客户端发送PASV命令给服务器,请求进入被动模式。
3. 服务器收到PASV命令后,会打开一个数据端口,并通知客户端该端口号。
4. 客户端使用这个端口号来建立到服务器的数据连接,以便开始数据传输。

为什么使用被动模式

被动模式被广泛使用,因为它解决了在网络中存在防火墙或NAT(网络地址转换)设备时的连接问题。在这些环境中,服务器可能无法成功连接到客户端指定的端口,因为客户端的端口通常是动态分配的,并且可能受到防火墙的限制。通过使用被动模式,客户端始终是连接的发起方,这使得数据传输更容易穿越防火墙和NAT设备。

如何选择模式

选择使用主动模式还是被动模式通常取决于网络环境和FTP服务器的配置。如果客户端位于防火墙后面或使用NAT,通常建议使用被动模式。如果网络环境较为简单,没有复杂的防火墙或NAT设置,主动模式也可以工作。

在实际使用中,大多数现代FTP客户端默认使用被动模式,因为它更可靠。然而,用户可以根据需要在FTP客户端中手动切换到主动模式。

1.5.FTP服务器的用户

FTP服务器默认提供了3类用户,不同的用户具有不同的访问权限和操作功能

FTP用户类型主要分为以下三种:

1. 匿名用户(Anonymous User):
   匿名用户是一种不需要特定用户名和密码即可登录的FTP账户。通常,匿名登录允许用户访问公共文件和目录,但不允许进行写入操作,也就是说,匿名用户通常只有读取权限。这种类型的账户用于公开分享文件,但出于安全考虑,匿名用户的权限通常受到限制。

2. 本地用户(Local User):
   本地用户是指在操作系统中已经创建的用户账户,这些账户可以直接用于登录FTP服务器。本地用户的权限和在操作系统中的权限一致,这意味着如果一个用户在操作系统中有足够的权限,他们可能能够访问FTP服务器上的任何文件。使用本地用户登录FTP可以方便地集成现有的用户账户管理,但也可能带来安全隐患,因为一旦FTP密码被破解,攻击者可能获得系统级别的访问权限。

3. 虚拟用户(Virtual User):
   虚拟用户是专门为FTP服务创建的用户账户,它们不依赖于操作系统的用户账户。虚拟用户的账号、密码和权限都是独立设置的,通常存储在一个单独的数据库或配置文件中。虚拟用户模式提供了更高的安全性,因为即使FTP账户信息被泄露,攻击者也无法获得操作系统的访问权限。虚拟用户非常适合用于企业环境,因为它们允许管理员精细控制FTP访问权限,而不影响操作系统的安全。

在实际部署FTP服务器时,管理员可以根据需要选择合适的用户类型,并根据安全策略和业务需求来配置相应的权限。例如,对于需要严格访问控制的内部文件共享,可能会选择使用虚拟用户;而对于公开的文件下载服务,则可能使用匿名用户。
 


 

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

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

相关文章

html--简历

文章目录 html html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"maximum-scale1.0,minimum-scale1.0,user-scalable0,widthdevice-width,initial-scale1.0&qu…

字母异位词分组【每日一题】

可以通过案例找到规律&#xff0c;每个词排序完后是同一个&#xff0c;所以通过hasmap存储排序过的值做key&#xff0c;值是存储单词集合。 package HasTable;import java.util.*;class Solution {static List<List<String>> groupAnagrams(String[] strs) {Map&l…

jupyter notebook 突然莫名奇妙的白屏

jupyter notebook 突然莫名奇妙的白屏 事件背景&#xff1a; 最近在折腾openai&#xff0c;哎&#xff0c;一言难尽&#xff0c;使用的是conda管理python版本的切换&#xff0c;使用jupyter notebook来运行python程序&#xff0c;其实PyCharm也行&#xff0c;但是&#xff0c;…

JAVA构造方法的作用

JAVA构造方法主要有以下作用&#xff1a; 1. 初始化对象的状态&#xff1a;构造方法用于创建对象时&#xff0c;可以初始化对象的实例变量和其他属性&#xff0c;为对象的状态赋初值。 2. 调用父类构造方法&#xff1a;构造方法还可以用来调用父类的构造方法&#xff0c;通过su…

uView Code 验证码输入框

考虑到用户实际发送验证码的场景&#xff0c;可能是一个按钮&#xff0c;也可能是一段文字&#xff0c;提示语各有不同&#xff0c;所以本组件 不提供界面显示&#xff0c;只提供提示语&#xff0c;由用户将提示语嵌入到具体的场景 #平台差异说明 App&#xff08;vue&#xf…

lqb省赛日志[11/37] -[dfs]

一只小蒟蒻备考蓝桥杯的日志 文章目录 笔记刷题心得小结 笔记 最近对二维数组[][]&#xff0c;xy的区分好混乱啊。。。 刷题 P1101 单词方阵P2404 自然数的拆分问题P1596 [USACO10OCT] Lake Counting SP1162 填涂颜色 心得 莫名其妙就爆0了&#xff0c;但是样例对&#x…

【递归搜索回溯专栏】专题二:二叉树中的深搜----二叉树剪枝

本专栏内容为&#xff1a;递归&#xff0c;搜索与回溯算法专栏。 通过本专栏的深入学习&#xff0c;你可以了解并掌握算法。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;递归搜索回溯专栏 &#x1f69a;代码仓库&#xff1a;小小unicorn的代…

git |常用命令

git 命令 非常常用 主流的仓库管理服务器&#xff0c;svn 和git 接下来&#xff0c;介绍git 操作&#xff08;自用 先讲一个简单的demo 流程 环境&#xff1a;centos、git #先创建一个本地 git 文件夹 mkdir test && cd ./test #写一个README.md #echo “# 张不大 的de…

MySQL调优:explain详解

MySQL的EXPLAIN命令用于获取SQL查询的执行计划&#xff08;Execution Plan&#xff09;&#xff0c;它揭示了MySQL服务器如何执行给定的SELECT语句&#xff0c;包括如何连接表、使用索引以及MySQL优化器选择的查询路径等重要信息。这对于分析查询性能、找出潜在的瓶颈并优化SQL…

redis发布订阅与stream类型

发布订阅 redis发布订阅(pub/sub)是一种消息通信模式&#xff1b;发送者(pub)发送消息&#xff0c;订阅者(sub)接收消息。redis客户端可以订阅任意数量的频道。 基础命令&#xff1a; 语法 redis publish命令基本语法如下&#xff1a; redis 127.0.0.1:6379> PUBLISH ch…

Matlab|考虑可再生能源消纳的电热综合能源系统日前经济调度模型

目录 1 主要内容 模型示意图 目标函数 程序亮点 2 部分程序 3 程序结果 4 下载链接 1 主要内容 本程序参考文献《考虑可再生能源消纳的建筑综合能源系统日前经济调度模型》模型&#xff0c;建立了电热综合能源系统优化调度模型&#xff0c;包括燃气轮机、燃气锅炉、余热…

Arduino RP2040 + SSD1306 I2C OLED +LittleFS存储GBK字库实现中文显示

Arduino RP2040 + SSD1306 I2C OLED +LittleFS存储GBK字库实现中文显示 📌LittleFS插件安装,可以参考《Arduino RP2040 LittleFS的使用介绍》🎈相关内容《Arduino esp8266 软件I2C SSD1306 +LittleFS存储GBK字库实现中文显示》🔖基于Earle F. Philhower, III的核心固件开…

如何针对机械表进行识别读数

识别机械表的读数通常涉及到图像处理和模式识别技术。以下是一个简单的例子&#xff0c;使用Python和OpenCV库来识别机械表的读数。这个例子假设表盘是静止的&#xff0c;并且有一个清晰的背景。 首先&#xff0c;你需要安装OpenCV库&#xff08;如果你还没有安装的话&#xff…

Python基础(七)之数值类型集合

Python基础&#xff08;七&#xff09;之数值类型集合 1、简介 集合&#xff0c;英文set。 集合&#xff08;set&#xff09;是由一个或多个元素组成&#xff0c;是一个无序且不可重复的序列。 集合&#xff08;set&#xff09;只存储不可变的数据类型&#xff0c;如Number、…

修改yolov9的模型打印不出来Gflops的解决办法

正在修改yolov9的模块&#xff0c;发现修改后的模型没有GFlops这个参数 解决办法&#xff1a; 找到utils/torch_utils.py这个文件&#xff0c;有一个model_info函数 然后将其中的stride改为固定的640就可以打印了。 stride max(int(model.stride.max()), 32) if hasattr(mo…

请求头content-type的类型有什么?

"Content-Type" 是 HTTP 请求头中的一个字段&#xff0c;用于指示发送给接收方的实体正文的媒体类型。常见的 "Content-Type" 类型包括但不限于以下几种&#xff1a; application/json&#xff1a; 用于指示请求或响应中的实体正文是 JSON 格式的数据。 ap…

telnet命令使用

window启用telnet telnet命令连接服务端 启动netty服务端后&#xff0c;使用如下cmd命令连接服务端&#xff0c;按enter&#xff0c;将连接到netty服务端 再按CTRL ]&#xff0c;进入命令交互界面 输入 help&#xff0c;查看命令介绍 发送消息&#xff0c;再断开连接&…

Linux:系统初始化,内核优化,性能优化(2)

优化ssh协议 Linux&#xff1a;ssh配置_ssh配置文件-CSDN博客https://blog.csdn.net/w14768855/article/details/131520745?ops_request_misc%257B%2522request%255Fid%2522%253A%2522171068202516800197044705%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fb…

js基础语法大全(时间戳,uuid,字符串转json)

目录 一、获取时间戳二、获取uuid三、字符串转json格式 一、获取时间戳 var times Math.round(new Date().getTime()/1000).toString(); //获取 10位 时间戳 console.log(times);二、获取uuid function guid() {return xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx.replace(/[xy]…

[蓝桥杯 2020 省 AB1] 走方格

题目链接 [蓝桥杯 2020 省 AB1] 走方格 题目描述 在平面上有一些二维的点阵。 这些点的编号就像二维数组的编号一样&#xff0c;从上到下依次为第 1 1 1 至第 n n n 行&#xff0c;从左到右依次为第 1 1 1 至第 m m m 列&#xff0c;每一个点可以用行号和列号来表示。 现…