在协议设计中,为什么会使用两个端口?

30
当TCP服务器在端口上执行套接字接受时,它会获得一个新的套接字来处理该客户端。
接受套接字仍然有效,可以在该端口上接受更多客户端。
为什么最初的FTP规范RFC 959决定创建控制端口和数据端口?
在类似的自定义协议中这样做是否有任何原因?
在我看来,这可以很容易地在单个端口上指定。
考虑到FTP与防火墙和NAT的所有问题,使用单个端口将更好。
对于通用协议实现,我能想到的唯一原因是您希望从不同的主机提供文件而不是命令。

2
你必须记住,FTP 是在 NAT 和防火墙普及之前指定的。 - grieve
问题仍然是一样的,为什么他们选择了2个端口? - Brian R. Bondy
请查看第2.3节,其中有一个漂亮的ASCII图示,显示了一个本地主机和两个远程主机之间的FTP交互过程。 - grieve
13个回答

1

我认为他们这样做是为了在传输过程中,您可以继续与服务器工作并轻松启动新的传输(如果您的客户端支持此功能)。

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


0

see this image

当用户与远程主机开始FTP会话时,FTP首先在服务器端口号21上设置控制TCP连接。FTP的客户端通过此控制连接发送用户标识和密码。FTP的客户端还通过控制连接发送命令以更改远程目录。

当用户请求文件传输(无论是到还是从远程主机),FTP在服务器端口号20上打开TCP数据连接。FTP通过数据连接发送一个文件,然后关闭数据连接。如果在同一会话期间,用户想要传输另一个文件,则FTP将打开另一个数据TCP连接。因此,在FTP中,控制连接在用户会话期间始终保持打开状态,但每个会话中传输的每个文件都创建了一个新的数据连接(即数据连接不是持久的)。


0
在我看来,这只是最初一个糟糕的设计选择。在它被发明的古老年代,防火墙和NAT并不存在...如今,真正的问题更多地是“为什么人们还想使用FTP”?FTP所做的一切都可以用HTTP以更好的方式完成。

除了 DIR 方法之外。HTTP 已经将其排除在外,尽管大多数服务器可以以非标准的方式提供它。 - SingleNegationElimination
@tokenmacguy:没错,但可以使用WebDAV完成。 - MatthieuP
@grieve:HTTP 更容易保护安全。 - MatthieuP
@MatthieuP 不是很难。使用TLS可以轻松保护它们两个。HTTP和FTP都没有考虑安全性。同样的情况也适用于TCP和IPv4。在所有这些协议中,安全性都是事后才考虑的,并且通常通过完全不同的协议来实现,例如TLS和IPsec。 - reirab

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接