当前位置: 首页 > news >正文

计算机网络 —— 应用层(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)等。

运作流程:

  1. 建立控制连接:客户端首先与FTP服务器的21端口建立TCP连接。
  2. 认证:客户端向服务器发送用户名和密码进行身份验证。
  3. 切换模式:根据需要,客户端可以请求切换到主动或被动模式。
  4. 数据传输:一旦认证成功,客户端可通过发送相应的命令来请求文件的上传或下载。在数据传输请求后,根据所选模式建立数据连接,然后进行文件传输。
  5. 断开连接:数据传输完成后,客户端可以发送QUIT命令关闭控制连接,从而结束FTP会话。

FTP因其历史悠久和广泛兼容性,在很多场景下仍然是文件传输的重要工具,尽管近年来因安全考虑,越来越多地被更安全的协议如SFTP或FTPS所替代。

在这里插入图片描述

FTP工作原理

FTP(文件传输协议)的工作原理基于客户端-服务器(C/S)模型,主要通过以下步骤和机制实现文件的传输和管理:

  1. 建立连接
  • 客户端初始化与FTP服务器的连接,通过TCP/IP协议,连接到服务器的21端口,建立控制连接。控制连接在整个FTP会话期间保持活跃,用于传递控制命令和服务器响应。
  1. 认证与授权
  • 客户端向服务器发送用户名和密码进行身份验证。认证成功后,客户端才能进行后续的文件操作。
  1. 选择传输模式
  • 客户端可以选择使用主动模式(Active mode)或被动模式(Passive mode)。在主动模式下,客户端告诉服务器自己的IP地址和一个空闲端口,服务器随后使用该信息建立数据连接到客户端。被动模式下,服务器告诉客户端一个它将在其上监听的端口,客户端随后建立数据连接到该端口。
  1. 数据传输
  • 一旦认证完成并且传输模式确定,当客户端请求上传或下载文件时,将根据所选模式建立数据连接(通常使用端口20在主动模式下,或一个临时端口在被动模式下)。数据连接仅在实际传输文件时开启,并在操作完成后关闭,而控制连接仍然保持。
  1. 命令与响应
  • 所有文件操作(如LIST、GET、PUT、DELETE等)都是通过控制连接以命令的形式发送到服务器,服务器则通过相同的连接返回响应,指示命令的成功或失败及相关的状态信息。
  1. 传输模式
  • FTP支持ASCII模式(适合文本文件,进行字符集转换以适应不同系统)和二进制模式(用于图像、音频、视频或程序文件等,不做任何转换,直接传输字节流)。
  1. 断开连接
  • 完成所有文件操作后,客户端可以通过发送QUIT命令来断开与服务器的控制连接,结束FTP会话。

通过这样的机制,FTP提供了在不同计算机之间高效、灵活地传输文件的能力,同时也允许用户进行基本的文件管理操作,如查看目录内容、创建、删除或重命名文件及目录等。

主动模式

FTP的主动模式(Active Mode)工作流程如下:

  1. 建立控制连接:客户端首先通过TCP连接到FTP服务器的21端口,建立起控制连接。在这个连接上,客户端和服务器之间交换命令和响应。
  1. 认证:客户端向服务器发送用户名和密码进行身份验证。
  1. 请求数据连接:当客户端需要下载或上传文件时,它会向服务器发送一个PORT命令。PORT命令中包含了客户端为即将接收数据而打开的端口号信息。这个端口号是客户端随机选择的一个大于1023的端口(N),通常N+1端口会被客户端用来监听来自服务器的数据连接。
  1. 服务器建立数据连接:FTP服务器收到PORT命令后,使用其固定的20号端口主动发起一个TCP连接到客户端指定的端口N(在主动模式下)。
  1. 数据传输:一旦数据连接建立,服务器就可以开始通过这个数据连接向客户端发送文件数据(下载)或从客户端接收文件数据(上传)。
  1. 数据连接关闭:数据传输完成后,数据连接会被关闭,但控制连接仍然保持,以便客户端可以继续发送其他命令,如请求更多文件传输或其他FTP操作。

主动模式的局限性在于,由于服务器主动向客户端发起连接,如果客户端位于防火墙或NAT(网络地址转换)后面,这个从服务器到客户端的数据连接可能无法建立,因为大多数个人或公司网络的防火墙策略通常不允许未经请求的外部连接。因此,在现代网络环境中,被动模式(Passive Mode)更为常见,因为它解决了这个问题,允许客户端在防火墙后也能可靠地建立数据连接。

在这里插入图片描述

被动模式

FTP的被动模式(Passive Mode)设计用来解决主动模式中遇到的防火墙和NAT穿越问题。被动模式的工作流程如下:

  1. 建立控制连接:与主动模式相同,客户端首先通过TCP连接到FTP服务器的21端口,建立控制连接。
  1. 认证:客户端依然需要向服务器发送用户名和密码进行身份验证。
  1. 请求被动连接:当客户端准备进行文件传输时,它会发送一个PASV命令给服务器,请求进入被动模式。服务器收到PASV命令后,会在本地打开一个临时的、未使用的端口(通常大于1024的端口),并告知客户端这个端口号以及服务器的IP地址。
  1. 客户端建立数据连接:客户端收到服务器的响应后,知道服务器用于数据传输的IP地址和端口号。接着,客户端主动发起一个从自己到服务器指定端口的数据连接请求。
  1. 数据传输:数据连接建立后,服务器开始通过这个连接向客户端发送文件数据(下载)或从客户端接收文件数据(上传)。
  1. 数据连接关闭:数据传输完成后,数据连接会被关闭,控制连接继续保持,以便客户端可以继续发送其他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,一般称为面向切面,作为面向对象的一种补充&#xff…...

Linux通配符总结

Linux通配符总结 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在Linux系统中,通配符是一种用于匹配文件名或路径名的特殊字符。通过使用通配符&a…...

ffmpeg的安装教程

1.官网下载ffmpeg 进入Download FFmpeg网址,点击下载windows版ffmpeg(点击左下第一个绿色的行) 在release builds第一个绿框里面选择一个版本下载。 2.配置 下载完成后解压该压缩包单击进入ffmpeg\bin,会出现如下界面&#xff1…...

synchronized 学习

学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

Java入门学习详细版(一)

大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...

ios苹果系统,js 滑动屏幕、锚定无效

现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...