URL 中使用的端口字节顺序是什么?

What port byte order is used in URL?

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

考虑以下 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?

的小端服务器

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

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

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