【问题标题】:Why does FTP require port number to be split?为什么 FTP 需要拆分端口号?
【发布时间】:2018-12-27 15:03:18
【问题描述】:

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

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

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

【问题讨论】:

  • “这些数字应以二进制编码数字发送” - 数字以纯文本形式发送。不像“二进制编码数字”。 - 无论如何,我认为您的问题在这里不是主题。我也怀疑这里的任何人都知道,为什么 RFC 959 的作者在 30 年前选择这种编码 - 编码实际上相当简单:(port/256) + "," + (port%256)
  • @MartinPrikryl 我知道这个实现,使用port 而不是应用一些数学会更有意义。

标签: ftp rfc


【解决方案1】:

标准选择这种方法有什么原因吗?

这很可能已被历史遗忘。但目前可能没有建立今天使用的 IP:Port 的典型格式(这是在 HTTP 和 URL 语法之前的方式),因此将 sockaddr_in 及其 4 字节 IP 和 2 字节端口编码为由 6 个数字分隔的序列用逗号可能有点意思。

从效率和易于调试的角度来看,这似乎很奇怪。

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

【讨论】:

    猜你喜欢
    • 2017-10-27
    • 2010-12-15
    • 2017-03-20
    • 1970-01-01
    • 2016-02-09
    • 1970-01-01
    • 2017-06-13
    相关资源
    最近更新 更多