多通道协议-FTP详解

2024-08-23 10:12
文章标签 详解 协议 ftp 多通道

本文主要是介绍多通道协议-FTP详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 1. 理论知识
    • 多通道协议
      • 多通道协议的特点:
      • 多通道协议的优势:
    • FTP定义
      • FTP的工作流程概述
      • FTP的特点
  • 2. 实战
      • 实验设计
      • FTP协议-主动模式
      • FTP协议-被动模式
  • 3.总结
    • 工作原理总结
      • 主动模式(Active Mode)
      • 被动模式(Passive Mode)
    • 比较
      • 相同点
      • 不同点

前言

who:本文主要写给入门多通道协议的技术爱好者。

what:本文介绍了多通道协议、FTP协议的理论基础,用eNSP模拟器设计了FTP协议的相关实验,并抓包分析整个过程。最后,总结了FTP协议-主动模式、FTP协议-被动模式的相同点和不同点。

when:文档创建时间-2024年8月22日

where:作者-松鼠会吃榛子 版本-v1

why:期望读者了解多通道协议,理解FTP主动模式和被动模式的工作流程,掌握FTP被动模式使用场景。

建议,可以先阅读理论知识—>总结—>实战—>







1. 理论知识

单通道协议:通信过程中只需要占用一个端口的协议,例如:www只需要占用80端口或者443端口。

多通道协议:通信过程中需要占用两个或两个以下端口的协议。如FTP被动模式下需占用21号端口以及一个随机端口。



多通道协议

多通道协议是指在网络通信中使用多个独立的通道或连接来完成特定任务的协议。这些协议通常在一个控制连接的基础上,根据需要建立额外的数据连接或其他类型的连接。

FTP(File Transfer Protocol)就是一个典型的多通道协议的例子,它使用了两个独立的TCP连接:一个是用于发送控制命令的控制连接,另一个是用于实际数据传输的数据连接。



多通道协议的特点:

  1. 控制连接:用于发送和接收命令及响应,如登录认证、文件列表请求等。
  2. 数据连接:用于传输文件数据本身,可以是双向的或单向的,取决于具体的操作(如上传或下载)。
  3. 灵活的连接管理:根据需要建立和断开数据连接,以便高效地传输数据。


多通道协议的优势:

  • 灵活性:可以根据需要动态建立和断开数据连接。
  • 效率:通过并行传输数据来提高传输速度。
  • 安全性:控制连接和数据连接可以分别使用不同的安全措施,如加密。




FTP定义

FTP(File Transfer Protocol,文件传输协议)是一种多通道协议。FTP的工作方式涉及两个独立的TCP连接:一个是用于控制命令的控制连接,另一个是用于实际数据传输的数据连接。



FTP的工作流程概述

1.控制连接

  • 客户端连接到FTP服务器的默认控制端口21。

  • 所有的命令(如登录、列出目录内容等)都通过这个控制连接发送。

2.数据连接

  • 当需要传输数据时(例如,上传或下载文件),会建立一个新的TCP连接。

  • 数据连接的端口取决于使用的模式:

    • 主动模式(Active Mode):服务器使用端口20发起数据连接到客户端的一个临时端口。这种模式在客户端位于NAT(Network Address Translation)环境时可能会有问题,因为NAT设备通常不允许外部主机直接发起连接。
    • 被动模式(Passive Mode):服务器监听一个临时端口,并等待客户端连接到这个端口进行数据传输。这种模式在客户端位于NAT环境时更为常用,因为它避免了外部服务器直接连接到内部网络的问题。


FTP的特点

  • 多通道:FTP使用两个独立的TCP连接来进行控制和数据传输。
  • 灵活性:FTP支持两种不同的数据传输模式(主动模式和被动模式),以适应不同的网络环境。
  • 兼容性:大多数FTP客户端和服务器都支持这两种模式,以确保广泛的兼容性和可用性。






2. 实战

下面是一个使用华为eNSP模拟器设计的FTP多通道协议实验方案,以帮助我们理解FTP的主动模式和被动模式的工作原理。



实验设计

1.网络拓扑规划

  • 添加一台Client1客户端,一台路由器R1,一台服务器Server1设备。

  • 子网规划拓扑如下图。

在这里插入图片描述

2.配置网络设备

  • (1)配置Client1

    • IP:192.168.1.1
    • 子网掩码:255.255.255.0
    • 网关:192.168.1.254

    在这里插入图片描述

  • (2)配置Server1

    • IP:192.168.2.1
    • 子网掩码:255.255.255.0
    • 网关:192.168.2.254

在这里插入图片描述

  • (3)配置路由器R1

    • 改名
    • 接口GE 0/0/0:IP 192.168.1.254 子网掩码 255.255.255.0
    • 接口GE 0/0/1:IP 192.168.2.254 子网掩码 255.255.255.0
    system-view
    sysname R1
    interface GigabitEthernet 0/0/0
    ip address 192.168.1.254 24
    quit
    interface GigabitEthernet 0/0/1
    ip address 192.168.2.254 24
    

    在这里插入图片描述

3.测试连通性

  • (1)Client1ping Server1
    在这里插入图片描述

  • (2)Server1ping Client1

在这里插入图片描述

4.测试FTP多通道功能

  • (1)Server1开启FTP功能。
    在这里插入图片描述

  • (2)在路由器R1的GE 0/0/0接口抓包。

    • 使用Wireshark来捕获和分析FTP多通道协议的数据包。

  • (3)在Client1客户端上选择不同的FTP协议模式。



FTP协议-主动模式

1.手动设置文件传输模式

  • Client1访问Server1的FTP服务,并且选择文件传输模式为PORT-主动模式。

在这里插入图片描述

2.查看并分析抓包结果

  • (1)Wireshark捕获的数据包结果图。
    在这里插入图片描述

再看这个之前,如果不理解TCP三次握手,建议参考下TCP连接过程这篇文章。

  • (2)分析FTP数据包。
    在这里插入图片描述

step4:Server1服务器--->Client1客户端发送数据包。

源IP目的IPResponse: 220 FtpServerTry FtpD for free
192.168.2.1192.168.1.1服务器向客户端发送220响应码,表示FTP服务器已准备好,并且提供了一个欢迎信息。

step5:Client1客户端--->Server1服务器发送数据包。

源IP目的IPRequest: USER anonymous
192.168.1.1192.168.2.1客户端尝试使用"anonymous"作为用户名登录FTP服务器。

step6:Server1服务器--->Client1客户端发送数据包。

源IP目的IPResponse: 331 Password required for anonymous
192.168.2.1192.168.1.1服务器响应客户端的用户名请求,指示需要密码。

step7:Client1客户端--->Server1服务器发送数据包。

源IP目的IPRequest: PASS
192.168.1.1192.168.2.1客户端发送密码请求,但这里没有显示密码内容。

因为我们本身,就没有设置用户名和密码,所以没有显示

step8:Server1服务器--->Client1客户端发送数据包。

源IP目的IPResponse: 230 User anonymous logged in, proceed
192.168.2.1192.168.1.1服务器确认客户端使用匿名登录成功,并指示可以继续进行操作。

step9:Client1客户端--->Server1服务器发送数据包。

源IP目的IPRequest: PWD
192.168.1.1192.168.2.1客户端请求当前工作目录的信息。

step10:Server1服务器--->Client1客户端发送数据包。

源IP目的IPResponse: 257 “/” is current directory
192.168.2.1192.168.1.1服务器响应客户端的PWD请求,显示当前目录是根目录(“/”)。

step11:Client1客户端--->Server1服务器发送数据包。

源IP目的IPRequest: TYPE A
192.168.1.1192.168.2.1客户端请求设置传输类型为ASCII模式。

step12:Server1服务器--->Client1客户端发送数据包。

源IP目的IPResponse: 257 “/” is current directory
192.168.2.1192.168.1.1服务器响应客户端的PWD请求,显示当前目录是根目录(“/”)。

step13:Client1客户端--->Server1服务器发送数据包。

源IP目的IPRequest: PORT 192,168,1,1,8,10
192.168.1.1192.168.2.1客户端请求建立数据连接,并使用主动模式,指定了客户端的数据端口号(192.168.1.1的2058端口)

展开这个数据包,可以看到如下结果。
在这里插入图片描述

参数 192,168,1,1,8,10 \r\n表示以下内容

  • 第一个数字 8 代表端口号的高8位。
  • 第二个数字 10(实际上是十六进制的0A)代表端口号的低8位。

要将这两个数字转换成一个标准的端口号,你需要将第一个数字乘以 256(即2的8次方),然后加上第二个数字。

  • 端口号=(8×256)+10=2048+10=2058

step14-16:建立数据连接的TCP三次握手过程。

step17:Server1服务器--->Client1客户端发送数据包。

源IP目的IPResponse: 200 Port command okay.
192.168.2.1192.168.1.1服务器确认客户端的PORT命令,表示数据连接的端口已成功设置。

step18:Client1客户端--->Server1服务器发送数据包。

源IP目的IPRequest: LIST
192.168.1.1192.168.2.1客户端请求列出当前目录下的文件和目录。

step19:Server1服务器--->Client1客户端发送数据包。

源IP目的IPResponse: 150 Opening ASCII NO-PRINT mode data connection for ls -l.
192.168.2.1192.168.1.1服务器准备在数据连接上发送ls -l命令的结果。

step20:Client1客户端--->Server1服务器发送数据包。

协议:FTP-DATA

源IP目的IPFTP Data: 87 bytes (PORT) (LIST)
192.168.1.1192.168.2.1数据连接上传输了87字节的数据,这是目录列表的一部分。

step21-24:这些步骤涉及关闭数据连接的过程,包括发送FIN报文来请求关闭连接,以及接收ACK报文来确认关闭。

step25:Client1客户端--->Server1服务器发送数据包。

源IP目的IP[ACK] Seq=67 Ack=251 Win=7942 Len=0
192.168.1.1192.168.2.1这是对之前某个FTP响应的确认。

step26:Server1服务器--->Client1客户端发送数据包。

源IP目的IPResponse: 226 Transfer finished successfully. Data connection closed.
192.168.2.1192.168.1.1服务器通知客户端数据传输成功完成,并且数据连接已经关闭。

step27:Client1客户端--->Server1服务器发送数据包。

源IP目的IP[ACK] Seq=67 Ack=312 Win=7881 Len=0
192.168.1.1192.168.2.1客户端确认服务器的226响应,这是控制连接上的最后一个交互。

至此,展示了一个完整的FPT主动模式会话,包括用户登录、目录列表请求、数据传输,以及连接的关闭。




FTP协议-被动模式

1.手动设置文件传输模式

  • Client1访问Server1的FTP服务,并且选择文件传输模式为PASV-被动模式。
    在这里插入图片描述

2.查看并分析抓包结果

  • (1)Wireshark捕获的数据包结果图。
    在这里插入图片描述

  • (2)分析FTP数据包。
    在这里插入图片描述

由于在FTP-主动模式中,我们已经分析了完整的过程。这里就主要分析跟FTP-被动模式相关的数据包了。

step13:Client1客户端--->Server1服务器发送数据包。

源IP目的IPRequest: PASV
192.168.1.1192.168.2.1客户端发送PASV命令,请求服务器进入被动模式,并告知客户端可以连接到服务器的哪个端口进行数据传输。

step14:Server1服务器--->Client1客户端发送数据包。

源IP目的IPResponse: 227 Entering Passive Mode (192,168,2,1,8,2)
192.168.2.1192.168.1.1服务器响应客户端的PASV请求,告知客户端已进入被动模式,并提供了服务器上用于数据连接的IP地址和端口号(192.168.2.1的802端口)。

在这里插入图片描述

端口号=8*256+2=2050

step21:Server1服务器--->Client1客户端发送数据包。

源IP目的IP[FIN, ACK] Seq=88 Ack=1 Win=8192 Len=0
192.168.2.1192.168.1.1服务器在数据连接上发送FIN和ACK标志,请求关闭数据连接。

step22:Client1客户端--->Server1服务器发送数据包。

源IP目的IP[ACK] Seq=1 Ack=89 Win=8104 Len=0
192.168.1.1192.168.2.1客户端确认服务器的FIN请求,继续关闭数据连接的过程。

step23:Client1客户端--->Server1服务器发送数据包。

源IP目的IP[FIN, ACK] Seq=1 Ack=89 Win=8104 Len=0
192.168.2、1.1192.168.2.1客户端也发送FIN和ACK标志,请求关闭数据连接。

step24:Server1服务器--->Client1客户端发送数据包。

源IP目的IP[ACK] Seq=89 Ack=2 Win=8191 Len=0
192.168.2.1192.168.1.1服务器确认客户端的FIN请求,完成数据连接的关闭。






3.总结

FTP协议中的被动模式(Passive Mode)和主动模式(Active Mode)是两种不同的数据传输模式,它们主要区别在于数据连接的建立方式。

工作原理总结

带入上面的实验例子总结更容易理解。

主动模式(Active Mode)

  1. 控制连接: 客户端192.168.1.1首先与服务器(IP 192.168.2.1,FTP默认端口21)建立一个TCP控制连接。

在这里插入图片描述

2.端口通知: 客户端192.168.1.1发送PORT命令,通知服务器客户端将使用的IP地址192.168.1.1和端口号2058

在这里插入图片描述

3.服务器连接: 服务器192.168.2.1收到PORT命令后,会尝试连接到客户端的IP地址 192.168.1.1 和端口 2058 以发送数据。

在这里插入图片描述

4.数据传输: 一旦数据连接建立,数据就可以在客户端192.168.1.1和服务器192.168.2.1之间传输。

在这里插入图片描述



被动模式(Passive Mode)

1.控制连接: 客户端192.168.1.1与服务器(IP192.168.2.1,FTP默认端口号21)建立一个TCP控制连接。

在这里插入图片描述

2.请求被动模式: 客户端192.168.1.1发送PASV命令给服务器192.168.2.1,请求进入被动模式。

在这里插入图片描述

3.服务器响应: 服务器192.168.2.1响应PASV命令,提供一个IP地址192.168.2.1和端口号2050,客户端192.168.1.1将使用这些信息来连接服务器192.168.2.1

在这里插入图片描述

4.数据连接: 客户端192.168.1.1主动连接到服务器的IP地址 192.168.2.1 和端口 2050 以接收数据。

在这里插入图片描述





比较

相同点

1.都需要控制连接:无论哪种模式,FTP客户端都需要先与服务器建立一个控制连接(使用端口21)来发送命令和接收响应。

2.都支持文件上传和下载:两种模式都可以用于上传文件到服务器或从服务器下载文件。

3.都需要数据连接:除了控制连接之外,还需要建立一个单独的数据连接来传输文件数据。

4.都支持ASCII和二进制传输模式:可以指定传输文件的格式为文本(ASCII)或二进制。



不同点

  1. 数据连接的方向
    • 主动模式:服务器使用端口20主动连接到客户端的数据端口。
    • 被动模式:客户端主动连接到服务器提供的一个随机数据端口。
  2. 数据端口的选择
    • 主动模式:客户端通过PORT命令告诉服务器自己的数据端口。
    • 被动模式:客户端通过PASV命令请求服务器监听一个临时端口,并通过服务器的响应来获取这个端口。
  3. 适用场景
    • 主动模式:适用于客户端和服务器之间没有NAT或防火墙的情况。
    • 被动模式:适用于客户端位于NAT或防火墙后面的情况,因为客户端可以主动发起连接。
  4. 配置要求
    • 主动模式:客户端可能需要配置防火墙以允许来自服务器的数据端口连接。
    • 被动模式:服务器可能需要配置防火墙以允许客户端连接到服务器的临时数据端口。
  5. 安全性
    • 主动模式:由于服务器主动连接到客户端,因此可能更容易受到中间人攻击。
    • 被动模式:客户端主动连接到服务器,这通常被认为更安全一些。

主动模式通常用于较旧的网络配置,而被动模式则更适合现代网络环境,特别是当客户端位于NAT或防火墙后面时。

这篇关于多通道协议-FTP详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1099088

相关文章

MySQL 中的 CAST 函数详解及常见用法

《MySQL中的CAST函数详解及常见用法》CAST函数是MySQL中用于数据类型转换的重要函数,它允许你将一个值从一种数据类型转换为另一种数据类型,本文给大家介绍MySQL中的CAST... 目录mysql 中的 CAST 函数详解一、基本语法二、支持的数据类型三、常见用法示例1. 字符串转数字2. 数字

SpringBoot中SM2公钥加密、私钥解密的实现示例详解

《SpringBoot中SM2公钥加密、私钥解密的实现示例详解》本文介绍了如何在SpringBoot项目中实现SM2公钥加密和私钥解密的功能,通过使用Hutool库和BouncyCastle依赖,简化... 目录一、前言1、加密信息(示例)2、加密结果(示例)二、实现代码1、yml文件配置2、创建SM2工具

MyBatis-Plus 中 nested() 与 and() 方法详解(最佳实践场景)

《MyBatis-Plus中nested()与and()方法详解(最佳实践场景)》在MyBatis-Plus的条件构造器中,nested()和and()都是用于构建复杂查询条件的关键方法,但... 目录MyBATis-Plus 中nested()与and()方法详解一、核心区别对比二、方法详解1.and()

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

MySQL 删除数据详解(最新整理)

《MySQL删除数据详解(最新整理)》:本文主要介绍MySQL删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、前言二、mysql 中的三种删除方式1.DELETE语句✅ 基本语法: 示例:2.TRUNCATE语句✅ 基本语

Python内置函数之classmethod函数使用详解

《Python内置函数之classmethod函数使用详解》:本文主要介绍Python内置函数之classmethod函数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 类方法定义与基本语法2. 类方法 vs 实例方法 vs 静态方法3. 核心特性与用法(1编程客

Python函数作用域示例详解

《Python函数作用域示例详解》本文介绍了Python中的LEGB作用域规则,详细解析了变量查找的四个层级,通过具体代码示例,展示了各层级的变量访问规则和特性,对python函数作用域相关知识感兴趣... 目录一、LEGB 规则二、作用域实例2.1 局部作用域(Local)2.2 闭包作用域(Enclos

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四