一、概念
FTP文件传输协议,使用两个端口,21端口为控制端口,20端口为数据连接端口,客户端连接FTP服务器首先会和服务器的21端口发起控制连接,控制连接在整个过程中是一直保持的;当有数据传输是会进行数据连接,数据传输完毕之后会断开数据连接。数据连接又分为主动模式PORT和被动模式PASV。

二、两种模式
1、主动模式
主动模式简单来说就是控制连接成功之后,客户端告诉服务器使用PORT模式进行数据传输,并且把自己用于数据传输的随机端口发送给服务器,等待服务器使用20端口随时来访。

首先客户端和服务器的21端口进行三次握手建立控制连接;输入账号密码登录FTP。

客户端发送PORT命令带上自己的IP和用于数据连接的端口,当有数据传输时,服务器使用20端口和客户端进行三次握手建立数据连接。

2、被动模式
被动模式简单来说就是控制连接成功之后,客户端告诉服务器数据传输需要使用PASV模式,随后服务器发送自己用于数据传输的端口,等待客户端随时来访。

下图为控制连接和账号密码等数据包交互过程,首先客户端和服务器的21端口进行三次握手建立控制连接;然后客户端输入账号密码等信息。

响应代码:

220表示服务器准备就绪

331表示需要输入密码才可登录

230表示登陆成功,并且是登录因特网的,不是使用的代理

SYST报文表示返回服务器使用的操作系统表示返回服务器使用的操作系统。

CWD指令为更改访问目录,比如说点进去一个文件等

250表示已成功进入到切换目录。CWD指令完成

PWD请求包,表示请求返回当前路径,返回码257表示已返回当前路径信息

其他:

RETR: 下载文件。“RETR test.txt \r\n”:下载文件test.txt。

STOR: 上传文件。“STOR test.txt\r\n”:上传文件 test.txt。

QUIT: 关闭与服务器的连接。

从以上数据包可以看出FTP是明文传输。

需要进行数据读取或者传输的时候客户端会给服务器发送数据传输模式。下图为客户端给服务器发送请求包,数据包里显示客户端希望数据传输使用PASV模式,服务器收到之后将自己用于数据传输的端口发送给客户端,客户端的随机端口和服务器的数据传输端口进行三次握手后就可以进行数据交互了。

还有一些其他的,可根据数据包里的内容显示就可以看出来了。每操作完成一次都会进行四次挥手断开数据连接。

3、主动模式和被动模式的区别
主动模式是客户端发送用于数据连接的随机端口给服务器,服务器主动去建立数据连接;被动模式是服务器发送用于数据连接的随机端口给客户端,客户端去建立数据连接。

三、NAT的环境
NAT是针对于TCP和UDP报文中的IP和端口的转换,NAT并不能转换应用层数据里边的字段。而FTP协议是由控制连接和数据连接组成的,在数据连接是建立成功与否是由控制连接中的的应用层载荷字段决定的。比如客户端向服务器发送PORT命令时会在应用层协议字段中带有自己的IP和端口,如果经过NAT,报文中的IP和端口是改变了,但是应用层字段里边的IP和端口不会改变,这时,服务器看到的IP和端口还是NAT前的地址,服务器会向这个NAT前的地址和端口发送三次握手请求,会导致数据连接失败,所以这个时候就需要ALG来改变应用层字段来解决。

ALG是什么?
ALG是应用层网关,开启ALG可以修改数据包中应用层的数据进行解析和做地址转换。

可支持多种应用层协议:FTP、H.323(包括RAS、H.225、H.245)、SIP、DNS、ILS、MSN/QQ、NBT、RTSP、SQLNET、TFTP等。

以FTP为例:

FTP客户端配置

AR1配置

AR1

AR1
 
<Huawei>system-view
 
[Huawei]nat alg ftp enable
 
 
[Huawei]interface GigabitEthernet 0/0/0
 
[Huawei-GigabitEthernet0/0/0]ip address 192.168.1.1 255.255.255.0
 
[Huawei-GigabitEthernet0/0/0]nat static global 10.1.1.3 inside 192.168.1.0 netmask 255.255.255.0
 
[Huawei-GigabitEthernet0/0/0]nat static enable
 
 
[Huawei]interface GigabitEthernet 0/0/1
 
[Huawei-GigabitEthernet0/0/1]ip address 10.1.1.1 255.255.255.0
 
 
[Huawei]ip route-static 0.0.0.0 0.0.0.0 10.1.1.2
 
 
<Huawei>save all

AR2配置

AR2

AR2
 
 
<Huawei>system-view
 
 
[Huawei]interface GigabitEthernet 0/0/0
 
[Huawei-GigabitEthernet0/0/0]ip address 10.1.1.2 255.255.255.0
 
 
[Huawei]interface GigabitEthernet 0/0/1
 
[Huawei-GigabitEthernet0/0/1]ip address 10.1.2.1 255.255.255.0

没有配置ALG的情况

1、源地址转换SNAT

1、PORT模式无法建立数据连接,应用层数据未转换。数据连接依赖于控制连接应用层载荷字段中的IP和端口,因为PORT模式应用层载荷时客户端的内网IP和端口,没有做转换,所以导致服务器无法直接连接到客户端。

2、PASV模式可以正常访问,PASV模式需要服务器提供数据连接端口,只需要客户端去连接这个端口即可。

 

开启ALG

[Huawei]nat alg ftp enable
PORT模式,可以成功传输文件,因为开启了ALG可针对应用层数据载荷进行转换,所以应用层数据载荷中的IP和端口都转换为了SNAT转换后的IP和端口,服务器可正常建立数据连接。

2、目的地址映射DNAT

[Huawei-GigabitEthernet0/0/1]nat static protocol tcp global current-interface 20
inside 192.168.1.1 20

[Huawei-GigabitEthernet0/0/1]nat static protocol tcp global current-interface 21
inside 192.168.1.1 21
DNAT且未开启ALG(PORT模式可以正常上传下载)

PASV模式无法进行数据连接,应用层数据载荷字段没有转换。

 

开启ALG

PASV模式可正常进行数据连接

四、综上所述
当FTP服务器在NAT设备后边的时候,需要使用主动PORT模式,如果需要使用被动PASV模式的话就需要开启ALG功能。

当FTP服务器在外网时,FTP客户端经过SNAT,需要使用被动PASV模式,如果需要使用主动PORT模式的话就需要开启ALG功能。
转自:FTP工作原理及过程_ftp交互流程_2g网速的博客-CSDN博客

          FTP应答码和响应码_xxno的博客-CSDN博客_ftp 响应码

posted on 2023-02-23 10:34  Malphite  阅读(1182)  评论(0编辑  收藏  举报