计算机网络 —— 应用层(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,会出现如下界面࿱…...
ESXi 重置密码详细攻略(全场景覆盖)
本文详细覆盖 ESXi 所有常见场景的密码重置方法,包括「知道原密码改新密码」「忘记root密码(无vCenter)」「有vCenter管理(企业版)」,步骤拆解到每一步点击和命令输入,适配 ESXi 5.x/6.x/7.x/8.x 全版本,兼顾官方支持方法和实用非…...
2026 Global Ion Exchange Resin Systems Market Trends:关税扰动下的工程水处理系统重构与产业链迁移逻辑
观点 离子交换树脂系统的竞争核心,已经不再是“树脂材料”,而是“系统工程能力 供应链组织能力”。 2026年关税变量的加入,本质上正在把这个行业从“化工材料赛道”,推向“工程系统全球制造网络”的复合竞争阶段。一、这不是树脂…...
SEO优化建站费用是多少_SEO建站平台有哪些_哪个比较好
SEO优化建站费用是多少?SEO建站平台有哪些?哪个比较好? 在当今数字化时代,建立一个成功的网站不仅仅是创建一个静态的信息展示平台,更是要通过SEO优化提升网站的可见性和流量。SEO优化建站费用是多少呢?SEO…...
git clone git@github.com: Permission denied (publickey)权限拒绝问题
一、前言最近在部署detectron2(Facebook开源的目标检测框架)时,执行克隆命令:git clone gitgithub.com:facebookresearch/detectron2.git终端直接抛出如下错误:Cloning into detectron2... gitgithub.com: Permission …...
Graphormer在计算毒理学中的应用:预测hERG通道抑制活性的完整建模流程
Graphormer在计算毒理学中的应用:预测hERG通道抑制活性的完整建模流程 1. 项目概述 Graphormer是一种基于纯Transformer架构的图神经网络,专门为分子图(原子-键结构)的全局结构建模与属性预测而设计。该模型在OGB、PCQM4M等分子…...
Java全栈工程师面试实录:从基础到实战的深度技术探讨
Java全栈工程师面试实录:从基础到实战的深度技术探讨 一、面试开场 面试官(李工):你好,欢迎来到我们公司。我是李工,负责技术面试。今天我们会围绕你的技术栈进行一些深入交流。 应聘者(张明&am…...
SGMICRO圣邦微 SGM8740YC5G/TR SC70-5 比较器
特性 快速,45纳秒传播延迟(10毫伏过驱动)低功耗:在Vs3V时为155pA(典型值) 宽电源电压范围:2.7V至5.5V优化适用于3V和5V应用轨到轨输入电压范围低偏置电压:0.9mV(典型值)内部迟滞以实现干净开关 输出摆幅:在4mA输出电流下,从轨距内.200mV范围内 与CMOS/TT…...
矩阵分解(1)-- 从高斯消元到对称正定:LU、LDLT与Cholesky分解的算法演进与应用场景
1. 矩阵分解:为什么我们需要它? 想象一下你面前有一堆积木,乱七八糟地堆在一起。如果你想快速找到其中某一块积木,可能需要翻找很久。但如果有人帮你把这些积木按照颜色、形状分类摆放整齐,找起来就会容易得多。矩阵分…...
Arduino_Threads:Mbed OS平台的嵌入式多线程实践框架
1. Arduino_Threads 库深度解析:面向 Mbed OS 的嵌入式多线程实践框架1.1 库定位与工程价值Arduino_Threads 是 Arduino 官方为基于 Mbed OS 核心的 Arduino 开发板(如 Nano RP2040 Connect、Portenta H7、Nicla Sense ME 等)设计的轻量级多线…...
从《阵列天线分析与综合》到HFSS实战:手把手教你仿真4x1微带天线阵(含相位扫描设置)
从理论到实践:HFSS中4x1微带天线阵的建模与相位扫描全解析 微带天线阵列因其低剖面、易集成和成本优势,在现代通信系统中扮演着重要角色。对于刚接触天线设计的工程师和学生而言,如何将《阵列天线分析与综合》等经典教材中的理论概念转化为可…...
