【网络协议详解】——FTP系统协议(学习笔记)

news2024/12/22 19:35:45

目录

  • 🕒 1. 概述
  • 🕒 2. 工作原理
    • 🕘 2.1 两个连接
  • 🕒 3. 相关命令与处理
    • 🕘 3.1 接入命令
    • 🕘 3.2 文件管理命令
    • 🕘 3.3 数据格式化命令
    • 🕘 3.4 端口定义命令
    • 🕘 3.5 文件传输命令
    • 🕘 3.6 杂项命令
    • 🕘 3.7 命令处理——响应
  • 🕒 4. 文件传输
    • 🕘 4.1 例子

🕒 1. 概述

  • 将某台计算机中的文件通过网络传送到可能相距很远的另一台计算机中,是一项基本的网络应用,即文件传送
  • 文件传送协议FTP (File Transfer Protocol)是因特网上使用得最广泛的文件传送协议。
    • FTP提供交互式的访问,允许客户指明文件的类型与格式(如指明是否使用ASCII码),并允许文件具有存取权限(如访问文件的用户必须经过授权,并输入有效的口令)。
    • FTP屏蔽了各计算机系统的细节,因而适合于在异构网络中任意计算机之间传送文件
    • RFC 959 很早就成为了因特网的正式标准。
  • 在因特网发展的早期阶段,用FTP传送文件约占整个因特网的通信量的三分之一,而由电子邮件和域名系统所产生的通信量还要小于FTP所产生的通信量。只是到了1995年,万维网WWW的通信量才首次超过了FTP。

FTP的常见用途:

  • FTP的常见用途是在计算机之间传输文件,尤其是用于批量传输文件。
  • FTP的另一个常见用途是让网站设计者将构成网站内容的大量文件批量上传到他们的Web服务器。

在这里插入图片描述

🕒 2. 工作原理

在这里插入图片描述

🕘 2.1 两个连接

FTP客户和服务器之间要建立以下两个并行的TCP连接:

  • 控制连接,在整个会话期间一直保持打开,用于传送FTP相关控制命令。
  • 数据连接,用于文件传输,在每次文件传输时才建立,传输结束就关闭。

默认情况下,FTP使用TCP 21端口进行控制连接,TCP 20端口进行数据连接。但是,是否使用TCP 20端口建立数据连接与传输模式有关,主动方式使用TCP 20端口,被动方式由服务器和客户端自行协商决定。

在这里插入图片描述

🕒 3. 相关命令与处理

FTP的命令分为6组:

🕘 3.1 接入命令

接入命令使用户能够访问远程系统。

命令参数说明
USER用户标识符用户信息
PASS用户口令口令
ACCT应付费的服务财务信息
REIN重新初始化
QUIT从系统注销
ABOR命令异常终止

🕘 3.2 文件管理命令

文件管理命令使用户能访问到远程计算机的文件系统。

命令参数说明
CWD目录名改变到另一个目录
CDUP改变到父目录
DELE文件名删除文件
LIST目录名列出子目录或文件
NLIST目录名列出子目录或无其它属性的文件
MKD目录名创建新目录
PWD显示当前目录
RMD目录名删除目录
RNFR文件名(旧文件名)标志要重新命名的文件
RNTO文件名(新文件名)重新命名文件
SWNT文件系统名安装文件系统

🕘 3.3 数据格式化命令

数据格式化命令让用户定义数据结构、文件类型以及传输方式。

命令参数说明
TYPEA(ASCII),E(EBCDIC),I(图像),N(非打印),或T(TELNET)定义文件类型
STRUF(文件),R(记录),P(页面)定义数据的组织
MODES(流),B(块),C(压缩)定义传输方式
RMD目录名删除目录
RNFR文件名(旧文件名)标志要重新命名的文件
RNTO文件名(新文件名)重新命名文件
SWNT文件系统名安装文件系统

🕘 3.4 端口定义命令

端口定义命令定义客户端的数据连接使用的端口号。

命令参数说明
PORT6个数字的标识符客户选择端口
PASV服务器选择端口

🕘 3.5 文件传输命令

文件传输命令用于控制传输文件。

命令参数说明
RETR文件名读取文件:文件从服务器传送到客户
STOR文件名存储文件:文件从客户传送到服务器
APPE文件名与STOR类似,但是若文件存在,将数据添加到文件尾部
STOU文件名与STOR相同,但是文件名在目录中必须唯一
ALLO文件名在服务器为文件分配存储空间
REST文件名在指明的数据点给文件标记确定位置
STAT文件名返回文件的状态

🕘 3.6 杂项命令

杂项命令用于将用户要求的信息返回客户端。

命令参数说明
HELP询问关于服务器的信息
NOOP检查服务器是否工作
SITE文件名指明特定场所的命令
SYST询问服务器使用的操作系统

🕘 3.7 命令处理——响应

响应分为两个部分:

  • 3位数字的代码:定义代码
  • 跟随在代码后的文本:定义所需的参数或额外的解释说明

将3位数字记为xyz,下面展示每一个数字的意义。

第一个数字定义命令的状态。该位置上可以使用下列5个数字:

  • 1yz(正面初步回答) 表示动作已经开始。服务器在接受命令之前将发送回答。
  • 2yz(正面完成回答) 表示动作己经完成。服务器将接受命令。
  • 3yz(正面中间回答) 表示命令已经接受,但需要进一步的信息。
  • 4yz(过渡负面完成回答) 表示动作没有发生,但差错是暂时的。同样的命令其后可继续发送。
  • 5yz(永久负面完成回答) 表示命令没有接受,不能再次发送。

第二个数字定义命令的状态。该位置上可以使用下列6个数字:

  • x0z(语法)
  • x1z(信息)
  • x2z(连接)
  • x3z(鉴别和账号)
  • x4z(未指明)
  • x5z(文件系统)

第三个数字提供附加信息,下表给出了可能出现的响应简短列表:

代码说明
——正面初步回答
120服务不久即将就绪
125数据连接打开;数据传输不久即将开始
150文件状态是OK
——正面完成回答
200命令OK
211系统状态或求助回答
212目录状态
213文件状态
214求助报文
215命名系统类型(操作系统)
220服务就绪
221服务关闭
225数据连接打开
226关闭数据连接
227进入被动方式,服务器发送IP地址和端口号
230用户登录OK
250请求文件动作OK
——正面中间回答
331用户名OK:需要口令
332需要登录账号
350文件动作在进行中:需要更多的信息
——过渡负面完成回答
425不能打开数据连接
426连接关闭:不能识别的命令
450未采取文件动作:文件不可用
451动作异常终止:本地差错
452动作异常终止:存储器不足
——永久负面完成回答
500语法差错:不能识别的命令
501参数或变量的语法差错
502命令未实现
503不良命令序列
504命令参数未实现
530用户未登录
532存储文件需要账号
550动作未完成:文件不可用
552请求的动作异常终止:超过分配的存储器空间
553未采取请求动作:文件名不允许

🕒 4. 文件传输

FTP的文件传输仅表示下列三件事件之一:

  • 从服务器把文件复制到客户(下载),称为读取文件。在RETR命令的监督下完成。
  • 从客户把文件复制到服务器(上传),称为存储文件。在STOR命令的监督下完成。
  • 从服务器向客户发送目录列表或文件名。在LIST命令的监督下完成。应注意,FTP把目录或文件名列表当作文件,在数据连接上发送。

🕘 4.1 例子

🔎 在 VMware 虚拟机中搭建 FTP 服务器 (详细)

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注:PORT 192,168,26,1,36,123,该命令是客户端告知服务器,客户端的数据连接端口号为36*256+123=9339
由于虚拟机服务器网络配置为NAT,可能导致显示临时端口号与计算值不一致的情况。


❗ 转载请注明出处
作者:HinsCoder
博客链接:🔎 作者博客主页

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

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

相关文章

计算机组成原理 期末复习笔记

🌱博客主页:大寄一场. 😘博客制作不易欢迎各位👍点赞⭐收藏➕关注 目录 前言 第一章 计算机系统概论计算机软件的发展 计算机硬件的基本组成 计算机系统的层次结构 计算机的性能指标 第二章 数据表示 与 第三章 数据运算与运…

Go语言实现JDBC

Go语言操作数据库 Go语言提供了关于数据库的操作,包下有sql/driver 该包用来定义操作数据库的接口,这保证了无论使用哪种数据库,操作方式都是相同的; 准备工作: 下载驱动 需要在代码所在文件夹下执行相应的命令 go get github.com/go-sql-driver/mys…

DAY 69 rsync远程同步

rsync介绍 rsync简介 rsync(Remote Sync,远程同步)是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份,并保持链接和权限,且采用优化的同步算法,传输前…

超超超级详细的画图以及代码分析各种排序的实现!

各种排序的实现 排序的概念直接插入排序基本思想实现直接插入排序的特性总结 希尔排序基本思想实现希尔排序的特性总结 简单选择排序基本思想实现直接选择排序的特性总结 堆排序实现堆排序的特性总结 冒泡排序基本思想实现冒泡排序的特性总结 快速排序基本思想hoare版本挖坑法前…

JDBC测试

JDBC是什么? JDBC是一套接口,各大厂商来实现这套接口,进行数据库连接操作 比如Mysql驱动,Oracle驱动,sqlServer驱动,高斯驱动 以Mysql为例: JDBC编程六步 第一步:注册驱动 第二步:获取连接 第三步:获取数据库操作对象 第…

为什么不用Go开发操作系统?

操作系统 (OS) 是计算机系统的心脏和灵魂,它管理着计算机的硬件和软件资源,并为用户提供与计算机交互的方式。传统上,C 和 Assembly 等语言因其低开销和 “接近机器码” 的特性而被用于开发操作系统。 但诸如 Go 等高级语言的兴起引入了一些…

黑客为什么不攻击赌博网站?

攻击了,只是你不知道而已! 同样,对方也不会通知你,告诉你他黑了赌博网站。 攻击赌博网站的不一定是正义的黑客,也可能是因赌博输钱而误入歧途的法外狂徒。之前看过一个警方破获的真实案件:28岁小伙因赌博…

Xubuntu22.04之替换blueman-manager连接蓝牙设备(一百七十五)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

【C++】static在类中修饰成员变量成员函数

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、定义:二、特性:1. 静态成员为所有类对象所共享,不属于某个具体的对象,存放在静态区2. 静态成员变量必须在类外定…

C++学习笔记3:sort和priority_queue的比较器重载

1 sort 三种方法 1. 直接重载函数 #include <vector> #include <memory> #include <vector> #include <queue> #include <iostream> #include <algorithm>using namespace std;class Node{ public:int value;Node(){value 0;};explici…

【解决】sklearn-LabelEncoder遇到没在编码规则里的新值

文章目录 一、问题描述二、解决方法Reference 一、问题描述 问题&#xff1a;sklearn-LabelEncoder 遇到没在编码规则里的新值 二、解决方法 方法一&#xff1a;直接保存old_data和encoder_data和之间的映射关系&#xff0c;字典或者下面的csv格式里都可以。 for col in be…

UDS诊断实战系列-再谈19 04读取冻结帧子服务

本文框架 1. 前言2. 19 04 子服务2.1 请求某DTC快照信息2.1.1 请求报文格式及说明2.1.2 响应报文格式及说明 3. 开发注意事项3.1 快照高低字节顺序3.2 快照DID 1. 前言 19服务在整个UDS服务中非常重要&#xff0c;而19 04读取DTC冻结帧数据子服务又在0x19服务中非常重要&#…

<Linux开发>驱动开发 -之-资源的并发与竞争处理

&#xff1c;Linux开发&#xff1e;驱动开发 -之-资源的并发与竞争处理 交叉编译环境搭建&#xff1a; &#xff1c;Linux开发&#xff1e; linux开发工具-之-交叉编译环境搭建 uboot移植可参考以下&#xff1a; &#xff1c;Linux开发&#xff1e; -之-系统移植 uboot移植过…

K8s之Pod生命周期、启动停止钩子详解

文章目录 一、Pod生命周期流程二、初始化容器-initContainers三、主容器操作-containers1、启动钩子-lifecycle.postStart2、停止钩子-lifecycle.preStop 一、Pod生命周期流程 Pod生命周期整个过程 如下图&#xff1a; 1、在启动任何容器之前&#xff0c;前创建 pause 容器&am…

网络通信IO模型上

计算机组成 计算机由软件和硬件组成&#xff0c;软件包括CPU、内存等&#xff0c;硬件包括主板&#xff0c;磁盘&#xff0c;IO设备&#xff08;网卡、鼠标、键盘等&#xff09;、电源按钮。 内核程序加载过程 当接通电源的时候1、BIOS就会把它的一段代码放入了内存当中&#…

ORB SLAM3 构建Frame

1.构造Frame 为了构建一帧Frame&#xff0c;主要的步骤如下&#xff1a; 提取ORB特征点(ExtractORB)对提取的特征点进行矫正(cv::undistortPoints)计算去畸变后的图像边界(ComputeImageBounds)将特征点分配到网格中(AssignFeaturesToGrid) A.提取ORB特征点 首先需要对当前帧…

某程序员哀叹:月薪四五万,却每天极度焦虑痛苦,已有生理性不适,又不敢裸辞,该怎么办?

高薪能买来快乐吗&#xff1f; 来看看这位程序员的哀叹&#xff1a; 实在是扛不住了&#xff0c;每天都在极度焦虑和痛苦中度过&#xff0c;早上起来要挣扎着做心理建设去上班&#xff0c;已经产生生理性的头晕恶心食欲不振。有工作本身的原因&#xff0c;更多是自己心态的问…

如何在CSDN获得铁粉

文章目录 前言关于铁粉方法总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 铁粉512位即可参加此活动 完成一篇如何获得铁粉&#xff0c;或者相关的文章且质量分达到80分以上即可 关于铁粉 简单地说&#xff0c;就是在过去 N 个月内&#xff0c;一…

vscode配置flutter开发环境,不需要安装第三方安卓模拟器

1.获取Flutter SDK 点击下方的安装包&#xff0c;获取 stable 发行通道的 Flutter SDK 最新版本&#xff1a;Flutter SDK 将压缩包解压&#xff0c;然后把其中的 flutter 目录整个放在你想放置 Flutter SDK 的路径中**&#xff08;注意不要出现中文目录&#xff09;** 配置Wi…

Spring Boot配置文件(5/27)

1.Spring Boot 配置文件的分类和作用 整个项目所有重要的数据都是在配置文件中配置的 1.数据库连接信息&#xff08;包含用户名和密码的设置&#xff09; 2.项目的启动窗口&#xff1b; 3.第三方系统调用密匙等信息 4.用于发现和定位问题的普通日志和异常日志等等 大体上可以分…