为什么FTP需要拆分端口号?

Why does FTP require port number to be split?

我最近不得不实现一个 FTP 客户端(在主动模式下)。我在 RFC 959 中发现的一个值得注意的事实是,对于 PORT 命令,端口号应该被​​分成 8 位。

举个例子:在客户端使用20000端口时,应该二进制拆分。 20000 base 10 = 0100111000100000 base 2。这应该分为01001110和00100000,分别是。 78 和 32。这些号码应作为明文数字发送。

标准选择这种方法有什么原因吗?从效率和易于调试的角度来看,这似乎很奇怪。

Is there any reason why the standard chose this approach?

这很可能在历史上消失了。但是可能现在使用的 IP:Port 的典型格式此时还没有建立(这是在 HTTP 和 URL 语法之前的方式)所以编码 sockaddr_in 与它的 4 字节 IP 和 2 字节端口作为由逗号分隔的 6 个数字序列可能有一定意义。

It seems weird both from an efficiency and an easy to debug standpoint.

FTP 是一个基于文本的协议。效率显然不是设计标准 - 否则它会完全二进制化。如果完成调试的层是 C 代码并且您正在有效地处理表单中的 6 字节寻址(4 字节 IP,2 字节端口),则使用 6 字节序列而不是 IP:port 可以很好地进行调试sockaddr_in 结构。