在Linux中,我们都知道FTP协议有两种工作模式,它们的大概的⼀个工作流程是怎样的?

简介: 在Linux中,我们都知道FTP协议有两种工作模式,它们的大概的⼀个工作流程是怎样的?

在Linux中,FTP(File Transfer Protocol,文件传输协议)协议支持两种工作模式:主动模式(Active Mode)和被动模式(Passive Mode)。这两种模式在数据传输的发起和连接建立的方式上存在显著差异。以下分别详细说明这两种模式的工作流程:

一、主动模式(Active Mode)
  1. 建立控制连接:
  • 客户端首先通过TCP协议连接到FTP服务器的21端口,建立起控制连接。这个连接用于传输控制信息,如登录认证、命令和响应等。
  1. 认证:
  • 客户端向服务器发送用户名和密码进行身份验证。只有认证成功后,客户端才能进行后续的文件操作。
  1. 请求数据连接:
  • 当客户端需要下载或上传文件时,它会向服务器发送一个PORT命令。PORT命令中包含了客户端为即将接收数据而打开的端口号信息(通常是一个大于1023的随机端口号N)。此外,客户端通常会在N+1端口上进行监听,等待来自服务器的连接。
  1. 服务器建立数据连接:
  • FTP服务器收到PORT命令后,使用其固定的20号端口主动发起一个TCP连接到客户端指定的端口N。这个连接就是用于数据传输的数据连接。
  1. 数据传输:
  • 一旦数据连接建立,服务器就可以开始通过这个连接向客户端发送文件数据(下载)或从客户端接收文件数据(上传)。
  1. 数据连接关闭:
  • 数据传输完成后,数据连接会被关闭,但控制连接仍然保持,以便客户端可以继续发送其他命令,如请求更多文件传输或其他FTP操作。
二、被动模式(Passive Mode)
  1. 建立控制连接:
  • 与主动模式相同,客户端首先通过TCP连接到FTP服务器的21端口,建立起控制连接。
  1. 认证:
  • 客户端向服务器发送用户名和密码进行身份验证。
  1. 请求被动连接:
  • 当客户端准备进行文件传输时,它会发送一个PASV命令给服务器,请求进入被动模式。
  1. 服务器开放端口并通知客户端:
  • 服务器收到PASV命令后,会在本地打开一个临时的、未使用的端口(通常大于1024的端口Y),并通过控制连接告知客户端这个端口号以及服务器的IP地址。
  1. 客户端建立数据连接:
  • 客户端收到服务器的响应后,通过控制连接之外的另一个TCP连接(如使用随机端口X+1)主动发起一个连接到服务器指定的端口Y。这个连接就是用于数据传输的数据连接。
  1. 数据传输:
  • 数据连接建立后,服务器开始通过这个连接向客户端发送文件数据(下载)或从客户端接收文件数据(上传)。
  1. 数据连接关闭:
  • 数据传输完成后,数据连接会被关闭,控制连接继续保持,以便客户端可以继续发送其他FTP命令。
三、总结
  • 主动模式下,服务器主动发起数据连接到客户端的指定端口,这可能导致在客户端位于防火墙或NAT后面时连接失败。
  • 被动模式下,所有连接都是由客户端发起的,因此更适合穿越防火墙和NAT的场景,是现代网络环境中更常用的模式。

综上所述,以上信息基于FTP协议的工作原理和广泛使用的实践,确保了准确性和可靠性。

相关文章
|
21天前
|
存储 Linux 网络安全
【Azure 存储服务】如何把开启NFS 3.0协议的Azure Blob挂载在Linux VM中呢?(NFS: Network File System 网络文件系统)
【Azure 存储服务】如何把开启NFS 3.0协议的Azure Blob挂载在Linux VM中呢?(NFS: Network File System 网络文件系统)
|
22天前
|
负载均衡 网络协议 Linux
在Linux中,如何理解VRRP协议?
在Linux中,如何理解VRRP协议?
|
22天前
|
域名解析 网络协议 Linux
在Linux中,我们都知道,dns采用了tcp协议,又采用了udp协议,什么时候采用tcp协议?什么 时候采用udp协议?为什么要这么设计?
在Linux中,我们都知道,dns采用了tcp协议,又采用了udp协议,什么时候采用tcp协议?什么 时候采用udp协议?为什么要这么设计?
|
22天前
|
缓存 网络协议 Linux
在Linux中,当用户在浏览器当中输入⼀个网站,计算机对dns解释经过那些流程?
在Linux中,当用户在浏览器当中输入⼀个网站,计算机对dns解释经过那些流程?
|
22天前
|
Linux 网络安全 数据安全/隐私保护
在Linux中,FTP 的主动模式和被动模式是什么?有何区别?
在Linux中,FTP 的主动模式和被动模式是什么?有何区别?
|
16天前
|
Ubuntu Linux
查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号
查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号
130 3
|
12天前
|
机器学习/深度学习 安全 网络协议
Linux防火墙iptables命令管理入门
本文介绍了关于Linux防火墙iptables命令管理入门的教程,涵盖了iptables的基本概念、语法格式、常用参数、基础查询操作以及链和规则管理等内容。
173 73
|
5天前
|
Linux Shell
Linux 中 Tail 命令的 9 个实用示例
Linux 中 Tail 命令的 9 个实用示例
27 6
Linux 中 Tail 命令的 9 个实用示例
|
10天前
|
Linux 应用服务中间件 nginx