【问题标题】:What port byte order is used in URL?URL 中使用什么端口字节顺序?
【发布时间】:2020-03-22 12:26:46
【问题描述】:

当你想绑定到 C 中的端口时,你必须使用htons(port) 将端口从主机字节顺序转换为网络字节顺序。发生这种情况是因为端口号直接复制到 TCP 数据包中,因此它们必须在 little-endian 和 big-endian 机器上匹配。

考虑以下 C 语言示例:

int port = 5000;
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl(INADDR_ANY);
addr.sin_port = htons(port);

注意htons 的使用。现在,如果您运行netstat -anp --tcp(在Linux 上),您将看到0.0.0.0:5000 正在被监听。看起来端口号使用了主机字节序。

现在,问题来了:如果端口号在 URL 中是 host-endian,这是否意味着 big-endian 客户端不能使用 http://a.b.c.d:5000 URL 连接到监听 0.0.0.0:5000 的 little-endian 服务器?

【问题讨论】:

    标签: url networking port endianness


    【解决方案1】:

    不,您几乎可以肯定在错误的抽象级别上误用了规则。

    本地浏览器很可能会从 URL 的末尾获取 :5000 字符串,并使用它在 host 中创建整数 5000格式。然后它会将其传递给htons,作为构建会话的一部分,与您的代码 sn-p 的方式完全相同。

    而且,瞧,这些结构包含正确的网络顺序。

    【讨论】:

      猜你喜欢
      • 2010-11-27
      • 2013-10-06
      • 1970-01-01
      • 2011-01-13
      • 1970-01-01
      • 2012-11-10
      • 1970-01-01
      • 2010-11-05
      • 2010-10-26
      相关资源
      最近更新 更多