FTP使用的两个端口
- 数据端口(通常为20)
- 命令端口(通常为21,也叫控制端口
一、主动模式
客户端从一个任意的非授权端口N(N>1024)连接到FTP服务器命令端口(也就是21端口),然后客户端开始监听端口 M+1 ,并发送FTP命令“PORT M”到FTP服务器。接着服务器会从它自己的数据端口(20)联接到客户端指定的数据端口(M)。
针对FTP服务器前面的防火墙来说,必须允许以下通讯,才能支持主动模式FTP:
- 客户端大于1024的端口到FTP服务器的21端口(客户端初始化的连接)
- FTP服务器的21端口到客户端大于1024的端口(服务器响应客户端的控制端口)
- FTP服务器的20端口到客户端大于1024的端口(服务器初始化数据连接到客户端的数据端口)
- 客户端大于1024端口到FTP服务器的20端口(客户端发送ack响应到服务器的数据端口)
建立控制连接
客户端随机选择一个端口(如1025)连接到服务器的21端口,完成三次握手。
SYN → 1025: 客户端端口 → 21: 服务器端口
SYN-ACK ← 21: 服务器端口 → 1025: 客户端端口
ACK → 1025: 客户端端口 → 21: 服务器端口
发送PORT命令
客户端发送PORT命令,告知服务器数据连接的监听端口(如1026)。
PORT 192,168,1,1,4,10 # 表示1026端口(4*256+10)
建立数据连接
服务器通过20端口连接到客户端的1026端口,完成数据传输。
# 服务器发起数据连接
SYN → 20: 服务器端口 → 1026: 客户端端口
SYN-ACK ← 1026: 客户端端口 → 20: 服务器端口
ACK → 20: 服务器端口 → 1026: 客户端端口
二、被动模式
被动FTP(PASV),当客户端通知服务器它处在被动模式时才启用。
在被动FTP中,命令连接和数据连接都由客户端发起,这样就可以解决从服务器到客户端的数据端口方的连接被防火墙过滤掉的问题。
当开启一个FTP连接时,本地端口(N>1024和M>1024)。第一个端口连接服务器的21端口,但与主动模式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交PASV命令。这样做的结果是,服务器开启一个任意的非特权端口(P>1024),并发送PORT P命令给客户端,然后客户端发起从本地端口M到的端口P的连接来传送数据。
对应服务器端的防火墙来说,必须允许下面的通讯才能支持被动方式的FTP:
- 客户端大于1024的端口到服务器的21端口(客户端初始化连接)
- 服务器的21端口到任何客户端大于1024的端口(服务器响应到客户端的控制端口的连接)
- 从客户端任意大于1024端口到服务器的任意大于1024端口(客户端初始化数据连接到服务器指定的任意端口)
- 服务器大于1024端口到客户端大于1024的端口(服务器发送ACK响应和数据到客户端的数据端口)
建立控制连接
客户端随机选择一个端口(如1025)连接到服务器的21端口,完成三次握手。
# 客户端发起控制连接
SYN → 1025: 客户端端口 → 21: 服务器端口
SYN-ACK ← 21: 服务器端口 → 1025: 客户端端口
ACK → 1025: 客户端端口 → 21: 服务器端口
发送PASV命令
客户端发送PASV命令,服务器返回一个随机端口(如1029)供客户端连接。
PASV
227 Entering Passive Mode (192,168,1,1,4,5) # 表示1029端口(4*256+5)
建立数据连接
客户端通过随机端口(如1026)连接到服务器的1029端口,完成数据传输。
# 客户端发起数据连接
SYN → 1026: 客户端端口 → 1029: 服务器端口
SYN-ACK ← 1029: 服务器端口 → 1026: 客户端端口
ACK → 1026: 客户端端口 → 1029: 服务器端口
三、FTP主被动模式优缺点
主动FTP对FTP服务器的管理有利,但对客户端的管理不利,因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。
被动FTP对FTP客户端的管理有利,但对服务端的管理不利,因为客户端要与服务器端建立两个连接,其中一个连接到高位随机端口,而这个端口可能被服务端的防火墙阻塞掉。