为什么 Telnet 协议在服务器上仅使用 1 个端口,而 FTP 使用 2 个端口

为什么 Telnet 协议在服务器上仅使用 1 个端口,而 FTP 使用 2 个端口

我在一次求职面试中遇到了这个问题,但我不知道该如何回答。有人能帮我理解一下吗?

为什么telnet协议只使用1个端口,而FTP协议在服务器上使用2个端口?

答案1

如前所述,telnet 仅使用 1 个端口作为其交互/终端用途。Ftp 设置了两个通信通道 - 控制和数据。这意味着数据通道独立于控制 [交互式] 通信。此外,控制通道使用 Telnet 协议 (请求函数):

The Relationship between FTP and Telnet:

         The FTP uses the Telnet protocol on the control connection.

这是一个很好的例子,说明了如何使用界外信令(单独通道)来优化通信路径(也来自请求函数)):

在另一种情况下,用户可能希望在两台主机之间传输文件,这两台主机都不是本地主机。用户与两台服务器建立控制连接,然后安排它们之间的数据连接。通过这种方式,控制信息被传递给用户 PI,但数据在服务器数据传输过程之间传输。以下是这种服务器-服务器交互的模型。

                Control     ------------   Control
                ---------->| User-FTP |<-----------
                |          | User-PI  |           |
                |          |   "C"    |           |
                V          ------------           V
        --------------                        --------------
        | Server-FTP |   Data Connection      | Server-FTP |
        |    "A"     |<---------------------->|    "B"     |
        -------------- Port (A)      Port (B) --------------

答案2

FTP 使用命令通道和数据通道,因此需要两个连接。Telnet 只连接到一个端口 - 您指定的端口。

本节在 Wikipedia 页面上了解更多信息

答案3

Telnet 只使用一个端口,因为它只在客户端和服务器之间建立了一个双向数据流:从客户端键盘(或标准输入)到服务器的数据,以及从服务器到客户端屏幕(或标准输出)的数据。它无需发送任何“控制”或“状态”信息。您的客户端连接到 telnet 服务器,从那时起,telnet 模拟计算机串行端口和串行终端之间的三线(Tx 数据、Rx 数据和地线)电缆。此后,您的客户端无法向 telnet 服务器发送任何命令或其他“带外”信息,也无需这样做 - 因此不需要单独的通信通道,这是第二个端口所提供的。唯一传递的“控制信息”是客户端断开连接时 - 断开连接通知由 TCP 自动处理。

FTP 需要在客户端和服务器之间交换数据和命令与响应协议。设计人员选择使用不同的端口来实现这两个功能。这使得编程的某些方面变得更容易,特别是在不支持多线程或异步 I/O 的旧操作系统中。例如,您可以在接收或发送文件数据的同时发送或接收控制和状态信息,从程序的角度来看,“控制”流不必等待“数据”流上的缓冲区完成即可发送或接收自己的缓冲区。

然而!ftp 的设计者本可以采用不同的方法。他们本可以使用单个端口。他们可以在每个文件数据块、命令或响应的前面添加一个字节左右,告诉另一端“这是一个数据块”或“这将转到命令/响应路径”。这确实使编程变得更加困难,并且确实妨碍了对两个流的独立读写。但是 ftp 的基本功能可以仅使用一个端口即可完成。

而且 telnet 可以使用第二个端口 - 尽管 telnet 的功能有限,我想象不出它有什么用处。也许每个方向一个端口...或者也许可以干净利落地实现发送“中断”。

因此,一个最终有效但可能无益的答案是:“因为编写它们的人就是这样实现的。”

答案4

FTP协议使用 2 个端口 20 和 21,端口 20 用于控制,端口 21 用于数据,并且远程登录仅使用端口23与终端进行交互。

相关内容