文章目录
前言
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连接:一个是用于发送控制命令的控制连接,另一个是用于实际数据传输的数据连接。
多通道协议的特点:
- 控制连接:用于发送和接收命令及响应,如登录认证、文件列表请求等。
- 数据连接:用于传输文件数据本身,可以是双向的或单向的,取决于具体的操作(如上传或下载)。
- 灵活的连接管理:根据需要建立和断开数据连接,以便高效地传输数据。
多通道协议的优势:
- 灵活性:可以根据需要动态建立和断开数据连接。
- 效率:通过并行传输数据来提高传输速度。
- 安全性:控制连接和数据连接可以分别使用不同的安全措施,如加密。
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)
Client1
pingServer1
。
-
(2)
Server1
pingClient1
。
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 | 目的IP | Response: 220 FtpServerTry FtpD for free |
---|---|---|
192.168.2.1 | 192.168.1.1 | 服务器向客户端发送220响应码,表示FTP服务器已准备好,并且提供了一个欢迎信息。 |
step5:Client1客户端--->
Server1服务器发送数据包。
源IP | 目的IP | Request: USER anonymous |
---|---|---|
192.168.1.1 | 192.168.2.1 | 客户端尝试使用"anonymous"作为用户名登录FTP服务器。 |
step6:Server1服务器--->
Client1客户端发送数据包。
源IP | 目的IP | Response: 331 Password required for anonymous |
---|---|---|
192.168.2.1 | 192.168.1.1 | 服务器响应客户端的用户名请求,指示需要密码。 |
step7:Client1客户端--->
Server1服务器发送数据包。
源IP | 目的IP | Request: PASS |
---|---|---|
192.168.1.1 | 192.168.2.1 | 客户端发送密码请求,但这里没有显示密码内容。 |
因为我们本身,就没有设置用户名和密码,所以没有显示
step8:Server1服务器--->
Client1客户端发送数据包。
源IP | 目的IP | Response: 230 User anonymous logged in, proceed |
---|---|---|
192.168.2.1 | 192.168.1.1 | 服务器确认客户端使用匿名登录成功,并指示可以继续进行操作。 |
step9:Client1客户端--->
Server1服务器发送数据包。
源IP | 目的IP | Request: PWD |
---|---|---|
192.168.1.1 | 192.168.2.1 | 客户端请求当前工作目录的信息。 |
step10:Server1服务器--->
Client1客户端发送数据包。
源IP | 目的IP | Response: 257 “/” is current directory |
---|---|---|
192.168.2.1 | 192.168.1.1 | 服务器响应客户端的PWD请求,显示当前目录是根目录(“/”)。 |
step11:Client1客户端--->
Server1服务器发送数据包。
源IP | 目的IP | Request: TYPE A |
---|---|---|
192.168.1.1 | 192.168.2.1 | 客户端请求设置传输类型为ASCII模式。 |
step12:Server1服务器--->
Client1客户端发送数据包。
源IP | 目的IP | Response: 257 “/” is current directory |
---|---|---|
192.168.2.1 | 192.168.1.1 | 服务器响应客户端的PWD请求,显示当前目录是根目录(“/”)。 |
step13:Client1客户端--->
Server1服务器发送数据包。
源IP | 目的IP | Request: PORT 192,168,1,1,8,10 |
---|---|---|
192.168.1.1 | 192.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 | 目的IP | Response: 200 Port command okay. |
---|---|---|
192.168.2.1 | 192.168.1.1 | 服务器确认客户端的PORT命令,表示数据连接的端口已成功设置。 |
step18:Client1客户端--->
Server1服务器发送数据包。
源IP | 目的IP | Request: LIST |
---|---|---|
192.168.1.1 | 192.168.2.1 | 客户端请求列出当前目录下的文件和目录。 |
step19:Server1服务器--->
Client1客户端发送数据包。
源IP | 目的IP | Response: 150 Opening ASCII NO-PRINT mode data connection for ls -l. |
---|---|---|
192.168.2.1 | 192.168.1.1 | 服务器准备在数据连接上发送ls -l命令的结果。 |
step20:Client1客户端--->
Server1服务器发送数据包。
协议:FTP-DATA
源IP | 目的IP | FTP Data: 87 bytes (PORT) (LIST) |
---|---|---|
192.168.1.1 | 192.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.1 | 192.168.2.1 | 这是对之前某个FTP响应的确认。 |
step26:Server1服务器--->
Client1客户端发送数据包。
源IP | 目的IP | Response: 226 Transfer finished successfully. Data connection closed. |
---|---|---|
192.168.2.1 | 192.168.1.1 | 服务器通知客户端数据传输成功完成,并且数据连接已经关闭。 |
step27:Client1客户端--->
Server1服务器发送数据包。
源IP | 目的IP | [ACK] Seq=67 Ack=312 Win=7881 Len=0 |
---|---|---|
192.168.1.1 | 192.168.2.1 | 客户端确认服务器的226响应,这是控制连接上的最后一个交互。 |
至此,展示了一个完整的FPT主动模式会话,包括用户登录、目录列表请求、数据传输,以及连接的关闭。
FTP协议-被动模式
1.手动设置文件传输模式:
- Client1访问Server1的FTP服务,并且选择文件传输模式为
PASV
-被动模式。
2.查看并分析抓包结果:
-
(1)Wireshark捕获的数据包结果图。
-
(2)分析FTP数据包。
由于在FTP-主动模式中,我们已经分析了完整的过程。这里就主要分析跟FTP-被动模式相关的数据包了。
step13:Client1客户端--->
Server1服务器发送数据包。
源IP | 目的IP | Request: PASV |
---|---|---|
192.168.1.1 | 192.168.2.1 | 客户端发送PASV命令,请求服务器进入被动模式,并告知客户端可以连接到服务器的哪个端口进行数据传输。 |
step14:Server1服务器--->
Client1客户端发送数据包。
源IP | 目的IP | Response: 227 Entering Passive Mode (192,168,2,1,8,2) |
---|---|---|
192.168.2.1 | 192.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.1 | 192.168.1.1 | 服务器在数据连接上发送FIN和ACK标志,请求关闭数据连接。 |
step22:Client1客户端--->
Server1服务器发送数据包。
源IP | 目的IP | [ACK] Seq=1 Ack=89 Win=8104 Len=0 |
---|---|---|
192.168.1.1 | 192.168.2.1 | 客户端确认服务器的FIN请求,继续关闭数据连接的过程。 |
step23:Client1客户端--->
Server1服务器发送数据包。
源IP | 目的IP | [FIN, ACK] Seq=1 Ack=89 Win=8104 Len=0 |
---|---|---|
192.168.2、1.1 | 192.168.2.1 | 客户端也发送FIN和ACK标志,请求关闭数据连接。 |
step24:Server1服务器--->
Client1客户端发送数据包。
源IP | 目的IP | [ACK] Seq=89 Ack=2 Win=8191 Len=0 |
---|---|---|
192.168.2.1 | 192.168.1.1 | 服务器确认客户端的FIN请求,完成数据连接的关闭。 |
3.总结
FTP协议中的被动模式(Passive Mode)和主动模式(Active Mode)是两种不同的数据传输模式,它们主要区别在于数据连接的建立方式。
工作原理总结
带入上面的实验例子总结更容易理解。
主动模式(Active Mode)
- 控制连接: 客户端
192.168.1.1
首先与服务器(IP192.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)或二进制。
不同点
- 数据连接的方向:
- 主动模式:服务器使用端口20主动连接到客户端的数据端口。
- 被动模式:客户端主动连接到服务器提供的一个随机数据端口。
- 数据端口的选择:
- 主动模式:客户端通过
PORT
命令告诉服务器自己的数据端口。 - 被动模式:客户端通过
PASV
命令请求服务器监听一个临时端口,并通过服务器的响应来获取这个端口。
- 主动模式:客户端通过
- 适用场景:
- 主动模式:适用于客户端和服务器之间没有NAT或防火墙的情况。
- 被动模式:适用于客户端位于NAT或防火墙后面的情况,因为客户端可以主动发起连接。
- 配置要求:
- 主动模式:客户端可能需要配置防火墙以允许来自服务器的数据端口连接。
- 被动模式:服务器可能需要配置防火墙以允许客户端连接到服务器的临时数据端口。
- 安全性:
- 主动模式:由于服务器主动连接到客户端,因此可能更容易受到中间人攻击。
- 被动模式:客户端主动连接到服务器,这通常被认为更安全一些。
主动模式通常用于较旧的网络配置,而被动模式则更适合现代网络环境,特别是当客户端位于NAT或防火墙后面时。