计算机网络 —— 应用层(FTP)
计算机网络 —— 应用层(FTP)
- FTP
- 核心特性:
- 运作流程:
- FTP工作原理
- 主动模式
- 被动模式
我门今天来看应用层的FTP(文件传输协议)
FTP
FTP(File Transfer Protocol,文件传输协议) 是一种广泛使用的标准协议,它使用户能够在计算机网络上进行文件的上传和下载。FTP设计用于在客户端和服务器之间提供文件访问、传输和管理能力,常用于网页托管、文件共享和大量数据传输场景。以下是FTP的一些核心特点和运作机制:
核心特性:
- 应用层协议:FTP工作在OSI模型的应用层和TCP/IP模型的传输层,使用TCP作为传输协议,确保数据传输的可靠性和顺序。
- 双通道通信:FTP使用两个TCP连接来完成文件传输,一个是控制连接(默认端口21),用于传输控制信息(如登录认证、命令和响应);另一个是数据连接(默认端口20用于主动模式,或者临时端口用于被动模式),用于实际的数据传输。
- 两种传输模式:主动模式(Active)和被动模式(Passive)。在主动模式下,服务器发起数据连接到客户端;而在被动模式下,客户端发起数据连接到服务器,更适合穿越防火墙的场景。
- 认证与安全性:FTP支持多种认证机制,包括匿名访问和密码验证。传统FTP以明文形式传输数据和认证信息,存在安全风险,因此现代应用中常结合SSL/TLS加密层使用FTPS(FTP over SSL)或SFTP(Secure File Transfer Protocol,虽然名称相似,但基于SSH协议,与FTP有本质区别)来提升安全性。
- 文件操作命令:FTP协议定义了一系列命令,允许用户执行文件和目录操作,如上传(STOR)、下载(RETR)、删除(DELE)、重命名(RNFR/RNTO)、创建目录(MKD)等。
运作流程:
- 建立控制连接:客户端首先与FTP服务器的21端口建立TCP连接。
- 认证:客户端向服务器发送用户名和密码进行身份验证。
- 切换模式:根据需要,客户端可以请求切换到主动或被动模式。
- 数据传输:一旦认证成功,客户端可通过发送相应的命令来请求文件的上传或下载。在数据传输请求后,根据所选模式建立数据连接,然后进行文件传输。
- 断开连接:数据传输完成后,客户端可以发送QUIT命令关闭控制连接,从而结束FTP会话。
FTP因其历史悠久和广泛兼容性,在很多场景下仍然是文件传输的重要工具,尽管近年来因安全考虑,越来越多地被更安全的协议如SFTP或FTPS所替代。

FTP工作原理
FTP(文件传输协议)的工作原理基于客户端-服务器(C/S)模型,主要通过以下步骤和机制实现文件的传输和管理:
- 建立连接:
- 客户端初始化与FTP服务器的连接,通过TCP/IP协议,连接到服务器的21端口,建立控制连接。控制连接在整个FTP会话期间保持活跃,用于传递控制命令和服务器响应。
- 认证与授权:
- 客户端向服务器发送用户名和密码进行身份验证。认证成功后,客户端才能进行后续的文件操作。
- 选择传输模式:
- 客户端可以选择使用主动模式(Active mode)或被动模式(Passive mode)。在主动模式下,客户端告诉服务器自己的IP地址和一个空闲端口,服务器随后使用该信息建立数据连接到客户端。被动模式下,服务器告诉客户端一个它将在其上监听的端口,客户端随后建立数据连接到该端口。
- 数据传输:
- 一旦认证完成并且传输模式确定,当客户端请求上传或下载文件时,将根据所选模式建立数据连接(通常使用端口20在主动模式下,或一个临时端口在被动模式下)。数据连接仅在实际传输文件时开启,并在操作完成后关闭,而控制连接仍然保持。
- 命令与响应:
- 所有文件操作(如LIST、GET、PUT、DELETE等)都是通过控制连接以命令的形式发送到服务器,服务器则通过相同的连接返回响应,指示命令的成功或失败及相关的状态信息。
- 传输模式:
- FTP支持ASCII模式(适合文本文件,进行字符集转换以适应不同系统)和二进制模式(用于图像、音频、视频或程序文件等,不做任何转换,直接传输字节流)。
- 断开连接:
- 完成所有文件操作后,客户端可以通过发送QUIT命令来断开与服务器的控制连接,结束FTP会话。
通过这样的机制,FTP提供了在不同计算机之间高效、灵活地传输文件的能力,同时也允许用户进行基本的文件管理操作,如查看目录内容、创建、删除或重命名文件及目录等。
主动模式
FTP的主动模式(Active Mode)工作流程如下:
- 建立控制连接:客户端首先通过TCP连接到FTP服务器的21端口,建立起控制连接。在这个连接上,客户端和服务器之间交换命令和响应。
- 认证:客户端向服务器发送用户名和密码进行身份验证。
- 请求数据连接:当客户端需要下载或上传文件时,它会向服务器发送一个PORT命令。PORT命令中包含了客户端为即将接收数据而打开的端口号信息。这个端口号是客户端随机选择的一个大于1023的端口(N),通常N+1端口会被客户端用来监听来自服务器的数据连接。
- 服务器建立数据连接:FTP服务器收到PORT命令后,使用其固定的20号端口主动发起一个TCP连接到客户端指定的端口N(在主动模式下)。
- 数据传输:一旦数据连接建立,服务器就可以开始通过这个数据连接向客户端发送文件数据(下载)或从客户端接收文件数据(上传)。
- 数据连接关闭:数据传输完成后,数据连接会被关闭,但控制连接仍然保持,以便客户端可以继续发送其他命令,如请求更多文件传输或其他FTP操作。
主动模式的局限性在于,由于服务器主动向客户端发起连接,如果客户端位于防火墙或NAT(网络地址转换)后面,这个从服务器到客户端的数据连接可能无法建立,因为大多数个人或公司网络的防火墙策略通常不允许未经请求的外部连接。因此,在现代网络环境中,被动模式(Passive Mode)更为常见,因为它解决了这个问题,允许客户端在防火墙后也能可靠地建立数据连接。

被动模式
FTP的被动模式(Passive Mode)设计用来解决主动模式中遇到的防火墙和NAT穿越问题。被动模式的工作流程如下:
- 建立控制连接:与主动模式相同,客户端首先通过TCP连接到FTP服务器的21端口,建立控制连接。
- 认证:客户端依然需要向服务器发送用户名和密码进行身份验证。
- 请求被动连接:当客户端准备进行文件传输时,它会发送一个PASV命令给服务器,请求进入被动模式。服务器收到PASV命令后,会在本地打开一个临时的、未使用的端口(通常大于1024的端口),并告知客户端这个端口号以及服务器的IP地址。
- 客户端建立数据连接:客户端收到服务器的响应后,知道服务器用于数据传输的IP地址和端口号。接着,客户端主动发起一个从自己到服务器指定端口的数据连接请求。
- 数据传输:数据连接建立后,服务器开始通过这个连接向客户端发送文件数据(下载)或从客户端接收文件数据(上传)。
- 数据连接关闭:数据传输完成后,数据连接会被关闭,控制连接继续保持,以便客户端可以继续发送其他FTP命令。
被动模式的优势在于,所有连接都是由客户端发起的,即使客户端位于防火墙或NAT后面,也能够成功建立数据连接,因为外部网络的防火墙通常允许由内部网络向外的连接。这使得FTP被动模式在现代网络环境中,尤其是需要穿越复杂的网络拓扑结构时,更加通用和可靠。然而,被动模式也可能面临一些挑战,比如需要额外的防火墙配置以允许客户端到服务器的广泛端口范围内的连接。

我门来看两道题:


相关文章:
计算机网络 —— 应用层(FTP)
计算机网络 —— 应用层(FTP) FTP核心特性:运作流程: FTP工作原理主动模式被动模式 我门今天来看应用层的FTP(文件传输协议) FTP FTP(File Transfer Protocol,文件传输协议&#x…...
zookeeper + kafka消息队列
zookeeper kafka 消息队列 一、消息队列简介 1、什么是消息队列 消息队列(Message Queue)是一种用于跨进程或分布式系统中传递消息的通信机制。消息队列在异步通信、系统解耦、负载均衡和容错方面具有重要作用。 (1)特性 异步…...
Python高级编程:深度学习基础
Python高级编程:深度学习基础 在前几篇文章中,我们探讨了Python的基础语法、面向对象编程、标准库、第三方库、并发编程、异步编程、网络编程与网络爬虫、数据库操作与ORM、数据分析与数据可视化以及机器学习基础。在这篇文章中,我们将深入探讨Python在深度学习领域的应用。…...
如何从magento1迁移到magento2
m2相较m1 变化可以说非常大,相当于从头到位都改写一遍,更现代化,更优雅。除了数据库表变化不是很大。 主要迁移的内容有: 1,主题 2,插件(自己开发的或者第三方插件) 3,数据库 主题 不能迁移到m…...
【Nginx】Nginx安装及简单使用
https://www.bilibili.com/video/BV1F5411J7vK https://www.kuangstudy.com/bbs/1353634800149213186 https://stonecoding.net/system/nginx/nginx.html https://blog.csdn.net/qq_40492693/article/details/124453090 Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器。其特…...
【Linux系列】find命令使用与用法详解
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
Apple - DNS Service Discovery Programming Guide
本文翻译整理自:DNS Service Discovery Programming Guide(更新日期:2013-08-08 https://developer.apple.com/library/archive/documentation/Networking/Conceptual/dns_discovery_api/Introduction.html#//apple_ref/doc/uid/TP30000964 文…...
如何高效地为pip换源:详细操作指南
在Python开发中,pip是我们不可或缺的包管理工具。然而,默认的官方源下载速度较慢,尤其是在国内使用时可能会遇到网络问题。为了提高下载速度,我们可以通过更换国内的镜像源来解决这一问题。本文将详细介绍如何高效地为pip换源&…...
免费ddns工具,快解析DNS解析使用教程
DDNS(Dynamic Domain Name Server),中文叫动态域名解析,主要用于没有固定公网ip的网络环境下,使用一个固定的域名,解析动态变化的ip地址,达到远程访问的目的。 众所周知,目前公网ip资源非常紧缺…...
【Vite】控制打包结构
配置 vite.config.json 文件: import { defineConfig } from "vite";export default defineConfig({// ...build: {rollupOptions: {output: {entryFileNames: "js/[name]-[hash].js",chunkFileNames: "js/[name]-[hash].js",assetF…...
Debian Linux安装minikubekubectl
minikube&kubectl minkube用于在本地开发环境中快速搭建一个单节点的Kubernetes集群,还有k3s,k3d,kind都是轻量级的k8skubectl是使用K8s API 与K8s集群的控制面进行通信的命令行工具 这里使用Debian Linux演示,其他系统安装见官网,首先…...
Discuz动漫二次元风格网站模板
1、本模板为门户论坛个人空间形式,其中个人空间模板需要单独购买,点击购买,美化N多默认模板页面 2、全新设计的标签页,标签页帖子图文调用 3、论坛首页,分区下版块帖子论坛首页自动调用,自带分区图片模式与…...
RIP、OSPF、IS-IS学习
文章目录 前言RIP路由信息协议OSPF开放最短路径优先IS-IS 中间系统到中间系统总结 前言 路由协议的种类繁多,每种协议都有其独特的特性、工作原理和适用场景。本文将重点介绍:RIP(路由信息协议)、OSPF(开放最短路径优…...
移植案例与原理 - build lite源码分析 之 hb命令__main__.py
hb命令可以通过python pip包管理器进行安装,应该是OpenHarmony Build的缩写,在python包名称是ohos-build。hb作为编译构建子系统提供的命令行,用于编译构建产品、芯片厂商组件或者单个组件。本文,我们来学习hb的源码。 1、hb的安…...
Leo赠书活动-26期 不同数据库背后的数据存储方案
✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 赠书活动专栏 ✨特色专栏:…...
在Windows10中使用Vim
服务器没有图形界面,但是numpy包又需要调用图形界面接口,这样就导致了错误,搞得我只好先回windows开发。看来当年 Ubuntu桌面版也不算是多此一举啊。 这么多ide我还是喜欢vim,因为它真的太简单了。咱们这个老年机启动的也非常快&…...
【Python机器学习实战】 | 基于PCA主成分分析技术读入空气质量监测数据进行数据预处理并计算空气质量综合评测结果
🎩 欢迎来到技术探索的奇幻世界👨💻 📜 个人主页:一伦明悦-CSDN博客 ✍🏻 作者简介: C软件开发、Python机器学习爱好者 🗣️ 互动与支持:💬评论 &…...
学习java第一百零八天
Spring的AOP理解: OOP面向对象,允许开发者定义纵向的关系,但并不适用于定义横向的关系,会导致大量代码的重复,而不利于各个模块的重用。 AOP,一般称为面向切面,作为面向对象的一种补充ÿ…...
Linux通配符总结
Linux通配符总结 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在Linux系统中,通配符是一种用于匹配文件名或路径名的特殊字符。通过使用通配符&a…...
ffmpeg的安装教程
1.官网下载ffmpeg 进入Download FFmpeg网址,点击下载windows版ffmpeg(点击左下第一个绿色的行) 在release builds第一个绿框里面选择一个版本下载。 2.配置 下载完成后解压该压缩包单击进入ffmpeg\bin,会出现如下界面࿱…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
如何配置一个sql server使得其它用户可以通过excel odbc获取数据
要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据,你需要完成以下配置步骤: ✅ 一、在 SQL Server 端配置(服务器设置) 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到:SQL Server 网络配…...
LangChain【6】之输出解析器:结构化LLM响应的关键工具
文章目录 一 LangChain输出解析器概述1.1 什么是输出解析器?1.2 主要功能与工作原理1.3 常用解析器类型 二 主要输出解析器类型2.1 Pydantic/Json输出解析器2.2 结构化输出解析器2.3 列表解析器2.4 日期解析器2.5 Json输出解析器2.6 xml输出解析器 三 高级使用技巧3…...
