我在一次求职面试中遇到了这个问题,但我不知道该如何回答。有人能帮我理解一下吗?
为什么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 的功能有限,我想象不出它有什么用处。也许每个方向一个端口...或者也许可以干净利落地实现发送“中断”。
因此,一个最终有效但可能无益的答案是:“因为编写它们的人就是这样实现的。”