Ftp 在协议设计中,为什么要使用2个端口?

Ftp 在协议设计中,为什么要使用2个端口?,ftp,protocols,network-protocols,Ftp,Protocols,Network Protocols,当TCP服务器在端口上接受套接字时,它将获得一个新的套接字以与该客户端一起工作。 接受套接字对于该端口仍然有效,并且可以接受该端口上的其他客户端 为什么最初的FTP规范决定同时创建控制端口和数据端口 在类似的定制协议中是否有这样做的理由? 在我看来,这可以很容易地在单个端口上指定 考虑到FTP防火墙和NAT的所有问题,单端口似乎会更好 对于一般的协议实现,我认为您希望这样做的唯一原因是,您可以从不同的主机提供文件,而不是命令 FTP是一种旧协议。这是唯一的原因。设计人员认为,通过数据端口的数据量

当TCP服务器在端口上接受套接字时,它将获得一个新的套接字以与该客户端一起工作。
接受套接字对于该端口仍然有效,并且可以接受该端口上的其他客户端

为什么最初的FTP规范决定同时创建控制端口和数据端口

在类似的定制协议中是否有这样做的理由?

在我看来,这可以很容易地在单个端口上指定

考虑到FTP防火墙和NAT的所有问题,单端口似乎会更好


对于一般的协议实现,我认为您希望这样做的唯一原因是,您可以从不同的主机提供文件,而不是命令

FTP是一种旧协议。这是唯一的原因。设计人员认为,通过数据端口的数据量会使其无法及时发送控制命令,因此他们将其作为两个端口进行。防火墙,尤其是NAT,出现的时间要晚得多。

在我看来,这只是一个糟糕的设计选择。在发明防火墙的旧时代,防火墙和NAT是不存在的。。。如今,真正的问题更多的是“为什么人们仍然想使用FTP”?FTP所做的一切都可以使用HTTP以更好的方式完成。

这背后的基本原理是,您可以:

  • 传输数据时,继续在控制连接上发送和接收控制指令
  • 同时激活多个数据连接
  • 服务器决定何时准备好向您发送数据
诚然,他们可以通过指定一个集成到FTP协议中的复杂多路复用协议来实现相同的结果,但由于当时NAT不是问题,他们选择使用已经存在的TCP端口

以下是一个例子:

爱丽丝想从鲍勃那里得到两份文件。Alice连接到Bob端口21并请求文件。Bob在Alice端口20就绪时打开连接,并将文件发送到该端口。与此同时,Charles需要Alice服务器上的文件。Charles接通了Alice上的21,要求提供文件。准备好后,Alice连接到Charles上的端口20,并发送文件

如您所见,端口21用于客户端连接到服务器,端口20用于服务器连接到客户端,但这些客户端仍然可以在端口21上提供文件


这两个端口的用途完全不同,同样为了简单起见,它们选择使用两个不同的端口,而不是实施协商协议。

FTP有着非常悠久的历史,早在70年代初,它就是第一个ARPANET协议之一(例如,请参阅)。现在看起来很奇怪的设计决策当时更有意义。连接速度要慢得多,使用可用的网络技术执行“带外”连接控制可能是一个不错的选择


当前包含了一个关于历史的很好的部分,链接到早期的RFC,如果你想做一点考古…

我认为他们这样做是为了在传输发生时,你可以继续使用服务器并轻松地开始新的传输(如果你的客户端可以支持的话)


请注意,被动模式几乎解决了所有防火墙/NAT问题。

因为FTP允许单独的控制和数据。IIRC,按照最初的设计,您可以有3台主机:主机A可以要求主机B向主机C发送数据。

与许多较旧的有线协议一样,FTP适合人类使用。也就是说,从终端会话使用FTP非常容易。FTP的设计者预计,在传输数据时,用户可能希望继续使用远程主机。如果命令和数据通过同一通道传输,这将很困难。

FTP是在现代防火墙的愚蠢难以想象的时候设计的。TCP端口用于此功能;在单个IP上多路复用多个连接。它们不能替代访问控制列表。它们也不打算将IPv4扩展到48位地址


任何新的非IPv6协议都必须处理当前的混乱局面,因此它应该坚持使用小范围的连续端口。

您应该看看RTSP+RTP协议。这是一个类似的设计:每个流都可以在不同的端口上发送,并统计抖动、重新排序等信息。。。通过另一个端口发送

另外,由于它是UDP,所以没有连接。然而,它是在防火墙已经过时的情况下开发的(对不起,我的英语),所以开发了一种模式,所有这些连接都可以嵌入到一个具有HTTP语法的TCP连接中


你猜怎么着?多端口协议比http多路复用协议更容易实现(IMO),并且它具有更多的特性。如果您不关心防火墙问题,为什么要在已有一个(TCP端口)的情况下选择复杂的多路复用方案呢?

IETF已经禁止为新协议分配多个端口的做法,因此我们将来可能不会看到这种情况


较新的IP协议(如SCTP)旨在解决TCP的一些缺点,这些缺点可能导致一个人使用多个端口。TCPs的“行首”阻塞可防止多个单独的请求/流在传输中,这对于某些实时应用程序来说可能是一个问题。

IIRC,问题不是FTP使用两个(即多个)端口。问题在于,控制连接是由客户端启动的,而数据通道是由服务器启动的。FTP和HTTP之间最大的区别在于,在HTTP中,客户端提取数据,而在FTP中,服务器推送数据。NAT问题与服务器通过防火墙推送数据有关,该防火墙不知道需要连接

FTP使用单独的端口进行控制和数据传输
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.