计算机网络 —— 应用层(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被动模式在现代网络环境中,尤其是需要穿越复杂的网络拓扑结构时,更加通用和可靠。然而,被动模式也可能面临一些挑战,比如需要额外的防火墙配置以允许客户端到服务器的广泛端口范围内的连接。

在这里插入图片描述
我门来看两道题:
在这里插入图片描述在这里插入图片描述

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

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

相关文章

qt基本窗口类(QWidget,QDialog,QMainWindow)

1.三个基本窗口类 1.1QWidget 所有窗口的基类 可以内嵌到其他窗口的内部,无边框 也可以作为独立窗口显示,有边框 1.2QDialog 继承于QWidget 对话框窗口类 不可以内嵌到其他窗口 有模态和非模态两种显示方式 1.3QMainWind 继承于QWidget 主窗口类 不可以…

【服务器07】之【GitHub项目管理】及【Unity异步加载场景】

登录GitHub官网 GitHub: Let’s build from here GitHub 注册账号 登录账号 输入一个自定义名字,点击创建存储库就可以了 现在我们下载Fork Fork - a fast and friendly git client for Mac and Windows (git-fork.com) 免费的 下载完成之后点击File下的Clone …

IPython使用技巧整理

以下是一些常见且有用的IPython使用技巧,整理如下: 一、基本功能 1. 启动IPython:在终端输入ipython命令即可启动IPython环境。 2. 自动补全:使用Tab键进行变量和函数名的自动补全。例如,输入pri后按Tab键&#xff0c…

Docker 多阶段构建

多阶段构建 目录 尝试创建 Dockerfile构建容器镜像运行 Spring Boot 应用程序使用多阶段构建额外资源 在传统构建中,所有构建指令都在一个构建容器中顺序执行:下载依赖项、编译代码、打包应用程序。所有这些层最终都在你的最终镜像中。这种方法虽然可行…

TLS握手中的RTT

文章目录 TLS 1.2 握手过程中的 RTT 次数TLS 1.3 1-RTT 初次TLS1.3 0-RTT 握手过程总结 TLS 1.2 握手过程中的 RTT 次数 TLS 1.2 握手通常需要2 RTT 才能完成。具体步骤如下: 第一次 RTT: 客户端发送 ClientHello:客户端生成一个随机数&…

怎么描述shareed_ptr与unique_ptr的共享与独占

std::shared_ptr 和 std::unique_ptr 是 C11 引入的智能指针类型,它们用于自动管理动态分配的内存,防止内存泄漏。这两种智能指针在内存所有权和生命周期管理方面有着明显的区别。 std::shared_ptr(共享所有权) std::shared_ptr …

深度神经网络简介

深度神经网络(Deep Neural Networks, DNNs)是机器学习领域中一种重要的技术,特别是在处理复杂和大规模数据方面表现出色。以下是关于深度神经网络的详细介绍: 一、定义与原理 深度神经网络是由多层神经元组成的人工神经网络&…

分别使用autofs和修改/etc/fstab文件挂载其他ip地址路径的示例

题目: 按照以下要求,通过 autofs 自动挂载远程用户的主目录: server1.lab0.example.com(172.25.0.254)通过 NFS 共享目录/rhome 到你的系统, 此文件系统中包含为用户 ldapuser0 预配置分别使用autofs和修改/etc/fstab文件挂载其他…

ServletRequest类及其使用方法介绍

在Java的Servlet技术中,ServletRequest是一个接口,它定义了客户端发送到服务器的请求的API。这个接口提供了获取请求信息的方法,包括参数、头信息、属性等。以下是对ServletRequest接口中一些重要方法的介绍以及它们的使用示例。 ServletReq…

【退役之重学 AI】Ubuntu 安装 Anaconda

一. 下载 安装文件 https://www.anaconda.com/download/success 二. 安装 bash anaconda****.bash 一路 enter,yes 最后一个问你 要不要 conda init,这里得输入yes(默认是no,所以不要直接 enter),否则你…

Pytest和Unitest框架对比

在学到自动化的时候,很多同学都遇到了Pytest和Unitest框架,有的人是两个都学,但是学的不精只是知道分别怎么用.不了解两个区别是什么.有的是犹豫到底要学习那个框架.其实要做好自动化测试,是有必要了解不同框架之间的差异化的. Pytest 特点: Pytest采用了更简洁、更灵活的语法…

Linux - 探秘 Linux 的 /proc/sys/vm 常见核心配置

文章目录 PreLinux 的 /proc/sys/vm 简述什么是 /proc/sys/vm?主要的配置文件及其用途参数调整对系统的影响dirty_background_ratio 和 dirty_ratioswappinessovercommit_memory 和 overcommit_ratiomin_free_kbytes 实例与使用建议调整 swappiness设置 min_free_kb…

移动展厅:便捷高效的展示新模式—轻空间

在现代社会,移动展厅作为一种创新的展示模式,逐渐成为各行业的重要工具。凭借其便捷高效的特点,移动展厅为企业和组织提供了全新的展示解决方案。 快速部署与灵活性 移动展厅采用气膜结构,能够在短时间内快速部署。这种高效的搭建…

【非常实验】如何在移动设备上运行 Docker?

本章就从在 DevOps 中最基本但也是最强大的工具 Docker 开始。最近,我在尝试更多Termux的可能性,于是就想着试试Docker适不适合arm架构。 我用的是天玑9000芯片,而不是高通,所以显示不出来 Qualcomm。所以我决定从在手机上运行 docker 开始,但这可能吗?让我们一起来看看吧…

什么是超级智能?

“超级智能”可以理解为将多个人的智能、机器智能以及环境智能融合在一起。这个定义强调了跨越不同领域和系统的综合与协同,以实现更强大和高效的智能能力。 多个人的智能融合指的是将多个个体的知识、经验和创造力结合起来。通过协作和信息共享,能够集思…

论文阅读--Cross-view Transformers for real-time Map-view Semantic Segmentation

一种新的2D维度的bev特征提取方案,其通过引入相机先验信息(相机内参和外参)构建了一个多视图交叉注意力机制,能够将多视图特征映射为BEV特征。 cross view attention:BEV位置编码由根据相机标定结果(内参和…

ChatGPT原理和训练【 ChatGPT是由OpenAI开发】

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…

oracle 外连接(+)和left join用法

案例1: select count(1) FROM TFUNDINFO A, TFUNDTYPE B WHERE A.VC_FUNDCODEB.VC_FUNDCODE() select count(1) FROM TFUNDINFO A, TFUNDTYPE B WHERE A.VC_FUNDCODEB.VC_FUNDCODE SELECT count(1): 这表示查询将返回一个计数,count(1)是一种常见的计数…

ArcGIS Pro SDK (五)内容 2 工程项

ArcGIS Pro SDK (五)内容 2 地图工程 目录 ArcGIS Pro SDK (五)内容 2 地图工程1 将文件夹连接项添加到当前工程2.2 获取所有工程项2.3 获取工程的所有“MapProjectItems”2.4 获取特定的“MapProjectItem”2.5 获取所有“样式工程…

ANR灵魂拷问:四大组件中的onCreate-onReceive方法中Thread-sleep(),会产生几个ANR-

findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() { Override public void onClick(View v) { sleepTest(); } }); sleepTest方法详情 public void sleepTest(){ new Handler().postDelayed(new Runnable() { Override public void run() { Button but…