为什么在进行 DNS 查找时给出端口号?

问题描述 投票:0回答:1
在 ASIO C++ 网络库中,您可以通过创建查询对象来解析地址,该对象的构造函数接受(可选是 ip4 或 ip6)、“主机”参数和“服务”参数。 “主机”是您想要解析为 IP 号的站点的名称,“服务”(我猜)是端口号。所以这会执行 DNS 查找/请求,但我的理解是 DNS 查询是为了查找名称和 IP 号码之间的关联,我根本不明白端口是如何参与其中的。

asio::ip::tcp::resolver::query query{"www.google.com", "80"};
让我更加困惑的是,有一个“查询”构造函数只接受“服务”。评论给出了一点解释:

此构造函数通常用于执行名称解析 本地服务绑定

我不明白,我认为 DNS 查找严格用于(名称 -> IP 号码)映射。如果我解析端口 109 的名称,然后解析端口 400 的相同名称,我会得到相同的 IP 号码吗?

c++ networking
1个回答
0
投票
端口对名称查找不做任何事情;它就在那里,因此成功查找的结果是一个随时可用的端点,您可以连接到该端点,因为它已经具有端口号。

此外,系统可能有一个类似

/etc/services

 的文件,它为端口分配名称。解析器很可能(尽管我从未尝试过)使用它,因此您可以将 
https
 作为“服务”而不是 443。不过,我认为依赖它风险太大。

tcp::resolver

udp::resolver
之间毫无意义的区别发挥了相同的作用:它允许解析器返回
tcp::endpoint
udp::endpoint
(即使它们包含完全相同的数据......),并且还有助于“服务”文件查找。

© www.soinside.com 2019 - 2024. All rights reserved.