FTP协议详解

一:概述

        FTP协议是一个用于在计算机网络上在客户端和服务器之间进行文件传输的应用层协议,其英文全称是File Transfer Protocol。是TCP/IP协议簇中的重要一员。客户端和服务器按照FTP的协议规范进行通讯来实现文件传输。

        对于FTP服务器好理解,是对外提供FTP服务的机器。对于客户端怎么去连接服务器呢,在windows上可以通过ftp命令来进行连接,也可以通过第三方的FTP的客户端程序来连接服务器,场景的FTP客户端程序有FileZilla。

        FTP的出现极大方便了早期在互联网中的文件传输,时至今日也是文件传输不可或缺的一员。FTP协议的诞生实现了如下目标:

  1. 促进文件的共享(计算机程序或数据);
  2. 鼓励间接或者隐式的使用远程计算机;
  3. 向用户屏蔽不同主机中各种文件存储系统(File system)的细节;
  4. 可靠和高效的传输数据。

 

二:FTP工作模式

        谈FTP的工作模式之前,需简单了解一下FTP建立连接的过程。 我们知道HTTP传输数据前需要进行TCP的三次握手。同样FTP也是工作上TCP之上,但是与HTTP连接不同的是,FTP需要建立两次连接才能完成一次完整的文件传输服务。第一次连接我们称之为控制连接,第二次连接称为数据连接。两次连接缺一不可,这也是FTP和其他应用层协议的独特之处。       

        FTP也有其专属的知名端口,默认情况下,FTP使用2021这两个端口,其中20用于数据连接(传递数据),21用于控制连接(传递控制信息)。但是,是否使用20作为传输数据的端口与FTP使用的传输模式有关,如果采用主动模式,那么数据传输端口就是20;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定。

1,主动方式

        主动方式也称为PORT方式,是FTP协议最初定义的数据传输连接方式,主要特点是:

        FTP客户端通过向FTP服务器发送PORT命令,告诉服务器该客户端用于传输数据的临时端口号当需要传送数据时,服务器通过TCP端口号20与客户端的临时端口建立数据传输通道,完成数据传输。在建立数据连接的过程中,由服务器主动发起连接,因此被称为主动方式。

我们来通过FTP主动连接模式的报文来具体了解一下连接的过程

首先FTP在进行控制连发起前,需要先进行基本用户登录认证以及文件列表获取等操作;

1.由客户端发起FTP连接请求,FTP协议基于TCP,于是先进行TCP三次握手连接,连接服务器21端口;

2,TCP三次握手建立成功后,服务器也知道了客户端需要请求FTP服务,于是要求客户端提供相应的用户名(客户端在进行FTP连接时需要发送用户名和密码信息);

3,客户端收到服务器的验证需求后,接下来就是连接的验证工作了,发送用户名 user = zte

4.服务器收到后,确认用户名OK,此时需要客户端提供连接的密码password; 

5.客户端发送password; 

6,服务器端用户名密码验证成功允许用户登录;

7,由客户端发送PORT命令,同时自己随机生成一个数据端口,并将该端口信息通过控制链路发送给服务器;服务器收到PORT命令之后,此时就知道自己是处于主动模式

8,服务器开始与客户端建立数据链接,服务器主动发起连接请求,还是先进行三次握手,可以看到用到的端口号就是上面协商的5001

 9,连接建立好后传输数据

10,数据传输完由服务器断开链接

2,被动模式

被动方式也称为PASV方式,被动方式的主要特点是:

        FTP客户端通过向FTP服务器发送PASV命令,告诉服务器进入被动方式。服务器选择临时端口号并告知客户端当需要传送数据时,客户端主动与服务器的临时端口号建立数据传输通道,完成数据传输。在整个过程中,由于服务器总是被动接收客户端的数据连接,因此被称为被动方式。

同样我们通过具体的报文来展示FTP被动连接的精彩过程

1.由客户端发起FTP连接请求,和主动连接一样还是先进行TCP三次握手连接,连接服务器21端口;

2,TCP三次握手建立成功后,服务器也知道了客户端需要请求FTP服务,于是要求客户端提供相应的用户名(客户端在进行FTP连接时需要发送用户名和密码信息),在此就不一一展示报文仅在报文上展示(这部分与上面的主动连接一致,具体可以查看上边的报文)

3,客户端发送“PASV”命令

4,服务器收到PASV命令后,知道自己此时为被动方式,则开始生成随机的数据端口,以提供给客户端进行数据连接的时候使用,服务器开放自己的1443端口供客户端连接

5,接下来就是FTP的操作命令了,然后建立数据连接,首先还是三次握手,由客户端主动发起,目的端口号就是上面协商的1443

 6,然后传输数据,可以看到数据是一个目录

三:两种工作模式的应用场景

        当FTP服务器与FTP客户端均处于同一局域网内,即两者之间互访不存在防火墙或其他安全设备时,主动方式、被动方式均可实现FTP文件分发共享。

        如果FTP服务器处于路由器,防火墙或其他NAT设备之后,建议使用被动模式(passive mode)。因为在主动模式下传输数据时,由FTP发起的数据传输一般会被客户端网关的防火墙阻断。

关于主动与被动FTP优缺点的简要总结:

        主动FTP对FTP服务器的管理有利,但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。

        被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。

        针对上述防火墙带来的问题,有折衷的办法。既然FTP服务器的管理员需要他们的服务器有最多的客户连接,那么必须得支持被动FTP。我们可以通过为FTP服务器指定一个有限的端口范围来减小服务器高位端口的暴露。这样,不在这个范围的任何端口会被服务器的防火墙阻塞。虽然这没有消除所有针对服务器的危险,但它大大减少了危险。

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

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

相关文章

B.牛牛排队伍——模拟双链表

当前位置: 首页 > news >正文 B.牛牛排队伍——模拟双链表 news 2023/12/1 15:14:37 分析 题目其实很简单,就是双链表的增删查,但是刚开始,直接vis标记删除元素,查找一个位置的前一个用的while不断向前找,但是TLE;毕竟O(n*k)的复杂度,一开始没有考虑时间复杂度…

2023第十二届“认证杯”数学中国数学建模国际赛赛题A完整解析

A题完整题解 写在前面假设数据预处理 问题一1 基于自适应ARIMA-BP神经网络模型的影响因素预测1.1 ARIMA模型的建立1.2 BP神经网络模型的建立1.3 基于GABP神经网络的预测模型构建1.4 自适应混合ARIMA-BP神经网络模型的建立1.5 模型求解 代码Q1_1.mQ1_2.m 完整代码与论文获取 写在…

如何快速选出一支好股票?

俗话说得好:股票选得好,收益少不了!不用多说,相信大伙儿都知道选一支好股票究竟有多重要。 但是选股可不像咱们去菜市场买菜一样,看着顺眼就成。选股,其实是一个专业性特别强的技术活儿。 目前最常用的选股…

CoreDns在K8S中的作用原理概述

在Kubernetes中,CoreDNS是一款用于DNS解析的开源软件,它被广泛用于实现Kubernetes集群内部的服务发现和域名解析功能。CoreDNS提供了灵活的插件体系,可以通过插件来实现各种功能,包括内部Service域名解析。 在Kubernetes集群中&a…

xcode swiftui项目添加依赖

打开项目targets——Build Phases 点击“” 属于Apple SDKs的依赖可以直接添加 其他依赖需要在 Add Other中添加,在右上角用名字搜索或者URL地址(如GitHub上插件的地址)搜索,然后添加,也可添加本地文件

HarmonyOS通过OpenGL渲染显示yuv数据

一、UI页面render_page.ets Column() {XComponent({id: "XComponent88",type: XCompentConstants.XCOMPONENT_TYPE,libraryname: XCompentConstants.XCOMPONENT_LIBRARY_NAME}).width(640).height(360).onLoad((xComponentContext?: object | Record<string, () …

【RPC】基础

RPC 基本概念组成存在的问题python实现 基本概念 RPC是一个计算机通信协议&#xff0c;允许运行在一台计算机的程序调用另一台计算机的子程序&#xff0c;允许调用远程服务&#xff0c;是一个C/S模式。下图是百度百科的信息&#xff0c;可以看到&#xff0c;它的作用就是我想用…

history和hash两种路由模式原理,和优缺点

Hash Hash 模式是在 URL 中使用井号&#xff08;#&#xff09;来作为路由的模式。在 Hash 模式下&#xff0c;即使页面刷新&#xff0c;浏览器仍然只会请求页面的初始 HTML 文件&#xff0c;所有的路由变化都会在 URL 前面添加 “#/” 符号。 原理 在 Hash 模式下&#xff0c;路…

gitlab高级功能之CI/CD组件 - 实践(二)

上一篇主要讲解了CI/CD组件的原理&#xff0c;看起来稍微有一点枯燥&#xff0c;那么接下来给大家演示下如何使用。 案例 创建一个项目&#xff08;README.md&#xff0c;template目录&#xff09; 案例1 step1: 在template中新建yml文件&#xff0c;cat templates/test-st…

Verilog 入门(六)行为建模

文章目录 过程结构initial 语句always 语句 事件控制语句块顺序语句块并行语句块 过程性赋值阻塞性过程赋值非阻塞性过程赋值 过程结构 下述两种语句是为一个设计的行为建模的主要机制&#xff1a; initial 语句always 语句 一个模块中可以包含任意多个 initial 或 always 语…

C/C++11 语法/概念易错总结(1)

文章目录 缺省参数函数重载引用引用和指针内联宏的优缺点auto范围forNULL和nullptr 缺省参数 半缺省参数必须从右往左依次来给出&#xff0c;不能间隔着给 void Func(int a, int b 10, int c 20){cout<<"a "<<a<<endl;cout<<"b &…

一些ab命令

1.ab简介 ab是apache自带的压力测试工具&#xff0c;是apachebench命令的缩写。ab非常实用&#xff0c;它不仅可以对apache服务器进行网站访问压力测试&#xff0c;也可以对或其它类型的服务器如nginx、tomcat、IIS等进行压力测试。 ab的原理&#xff1a;ab命令会创建多个并发…

在编程中遇到的问题总结

IDEA空包粘黏问题 创建好目录以后会发现idea自动将空包合并在一起了&#xff0c;而且点击设置里面也没有Compact Middle Package Compact Middle Package如果不在设置的主面板上&#xff0c;则点击Tree Appearance&#xff0c;会发现Compact Middle Package在Tree Appearance里…

elupload base64

创作灵感也许就是这会儿还没有入睡吧&#xff0c;对接百度图片OCR功能&#xff0c;需要将图片转为BASE64上传调用百度的接口api&#xff0c;进行研究实现。页面如下&#xff0c;点击后选择图片文件后不是直接上传&#xff0c;而是获取图片的bytes数据&#xff01; <el-uploa…

516. 最长回文子序列

给你一个字符串 s &#xff0c;找出其中最长的回文子序列&#xff0c;并返回该序列的长度。 子序列定义为&#xff1a;不改变剩余字符顺序的情况下&#xff0c;删除某些字符或者不删除任何字符形成的一个序列。 示例 1&#xff1a; 输入&#xff1a;s "bbbab" 输出…

力扣117. 填充每个节点的下一个右侧节点指针 II

“递归” 思路&#xff1a; 基于节点&#xff0c;创建下一层&#xff08;L 1&#xff09;节点的 next 指针&#xff1a; 确定当前节点下一层节点 next 链表的起始节点&#xff0c;迭代到需要找非孩子的 next 节点时&#xff0c;根据其当层&#xff08;L&#xff09; next 链表…

IO / day01 作业。

1.使用fgets统计一个文件的行号 //使用fgets统计一个文件的行号#include <string.h> #include <stdlib.h> #include <stdio.h>int main(int argc, const char *argv[]) {if(argc<2) //获取文件名{printf("input error\n!");printf("usage…

将不同时间点的登录状态记录转化为不同时间段的相同登录状态SQL求解

题目 有不同时间点的登录状态记录表state_log如下 请使用sql将其转化为如下表的不同时间段的相同登录状态记录 思路分析&#xff1a; 此类问题需要用到lag或lead函数取上下行对应的数据&#xff0c;然后对前后结果做比较打标签&#xff08;0或1&#xff09;&#xff0c;再…

pycharm中绘制一个3D曲线

import numpy as np import matplotlib.pyplot as plt # 中文的设置 import matplotlib as mp1 from mpl_toolkits.mplot3d import Axes3D mp1.rcParams["font.sans-serif"] ["kaiti"] mp1.rcParams["axes.unicode_minus"] False # 数据创建 X…

基于SSM的经典电影推荐网站设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…