接受套接字仍然有效,可以在该端口上接受更多客户端。
为什么最初的FTP规范RFC 959决定创建控制端口和数据端口?
在类似的自定义协议中这样做是否有任何原因?
在我看来,这可以很容易地在单个端口上指定。
考虑到FTP与防火墙和NAT的所有问题,使用单个端口将更好。
对于通用协议实现,我能想到的唯一原因是您希望从不同的主机提供文件而不是命令。
确实,他们本可以通过指定一个复杂的多路复用协议来实现相同的结果,并将其集成到FTP协议中,但当时NAT不是问题,所以他们选择使用已经存在的TCP端口。
以下是一个例子:
Alice想从Bob那里获取两个文件。Alice连接到Bob的21号端口并请求这些文件。当Bob准备好时,会向Alice的20号端口打开连接并将文件发送到那里。与此同时,Charles需要获取Alice服务器上的一个文件。Charles在Alice的21号端口连接并请求该文件。当Alice准备好时,会连接到Charles的20号端口并将文件发送过去。
可以看到,端口21适用于客户端连接服务器,而端口20适用于服务器连接客户端,但这些客户端仍然可以在21号端口上提供文件。
这两个端口具有完全不同的作用,为了简单起见,他们选择使用两个不同的端口而不是实现协商协议。
FTP允许控制和数据分离。据我所知,最初设计时,您可以拥有3个主机:主机A可以请求主机B向主机C发送数据。
FTP 最初设计时,防火墙的愚蠢是无法想象的。TCP端口用于此功能;在单个IP上多路复用多个连接。它们不是访问控制列表(ACL)的替代品。也不是用于将IPv4扩展到48位地址。
任何新的非IPv6协议都必须处理当前的混乱,因此它应该使用一小段连续的端口。
与许多旧的线路协议一样,FTP适合人类使用。也就是说,通过终端会话使用FTP非常容易。FTP的设计者预见到用户可能希望在数据传输时继续与远程主机工作。如果命令和数据在同一个通道上传输,这将是困难的。
IETF已禁止为新协议分配多个端口的做法,因此我们将来可能不会再看到这种情况。
新的IP协议(例如SCTP)旨在解决TCP的一些缺点,这些缺点可能导致使用多个端口。 TCP的“头部阻塞”会阻止您同时处理多个独立的请求/流,这对于某些实时应用程序可能是一个问题。
In another situation a user might wish to transfer files between
two hosts, neither of which is a local host. The user sets up
control connections to the two servers and then arranges for a
data connection between them. In this manner, control information
is passed to the user-PI but data is transferred between the
server data transfer processes. Following is a model of this
server-server interaction.
Control ------------ Control
---------->| User-FTP |<-----------
| | User-PI | |
| | "C" | |
V ------------ V
-------------- --------------
| Server-FTP | Data Connection | Server-FTP |
| "A" |<---------------------->| "B" |
-------------- Port (A) Port (B) --------------
Figure 2
The protocol requires that the control connections be open while
data transfer is in progress. It is the responsibility of the
user to request the closing of the control connections when
finished using the FTP service, while it is the server who takes
the action. The server may abort data transfer if the control
connections are closed without command.
FTP是一种旧的协议,这就是唯一的原因。设计者们认为数据端口上流动的数据量会使得他们无法及时发送控制命令,所以将它分为两个端口。防火墙,尤其是NAT,出现得要晚得多。