DNS 在请求过程的哪个阶段开始发挥作用?下面的逻辑流程正确吗?如果正确,那么 DNS 服务器在请求过程中的哪个阶段被调用来转换google.com
?216.68.248.42
(或者我完全误解了,每个路由器都有一个 domain_name/IP 键值对列表或其他东西)
- 计算机发出带有“google.com”地址的数据包。
- 数据包传输到本地路由器并转发到 ISP。
- 数据包通过 ISP 路由器转发到 ISP 网络(如何转发?似乎还没有 IP,只有“google.com”)。
- 数据包在 ISP 的网络中移动,并可能移动到另一个 IPS。
- 数据包到达目的地。
- 响应数据包发送回发行者的IP地址。
在这些步骤中,我看不到“DNS 服务器请求‘google.com’的 IP 地址”(是什么提出这个问题/进行调用?)。此外,如果我tracert
访问 google.com,我看不到 DNS 被命中。
那么,在哪一步,“google.com”变成216.68.248.42?
答案1
DNS 的工作原理与电话簿非常相似 - 您可以查找号码前调用;同样,操作系统google.com
在发送任何数据包之前会查找地址,并且在 IP 数据包“发出”并到达第一个路由器的那一刻,它的报头中已经有原始 IP 地址。
这样,路由器根本不必处理域名——路由与“域名”完全分开,并且可以改进或替换一个而不会影响另一个。
DNS 查询他们自己也是常规 IP 数据包(具体来说是 UDP 端口 53),并受相同的 IP 路由约束。整个过程看起来有点像下面这样:
- 程序想要
www.google.com:80
通过 TCP 连接。 - 程序要求操作系统的 DNS 库解析
www.google.com
IP 地址列表。 - DNS 库使用 OS 功能向预配置的 DNS 服务器发送 UDP“DNS 查询”数据包。
- DNS 查询数据包的路由与步骤 2-6 相同。
- DNS库收到响应包。
- 程序接收 IP 地址列表。
- 程序使用 OS 功能与接收到的地址之一建立 TCP 连接。
- TCP 数据包也按照步骤 2-6 进行路由。
至于如何获取初始DNS服务器地址(用于步骤3):
您的操作系统内置的“存根”解析器仅使用一台服务器(例如您的 ISP 或公共服务器,如 Google 的“8.8.8.8”)并让它执行所有工作 - 此服务器地址可以手动配置,也可以通过路由器的 DHCP 接收。在 Windows 上,相同的“IP 配置”屏幕有一个用于 DNS 服务器的字段。在 Linux 上,它是
/etc/resolv.conf
。您的 ISP 的“递归”解析器会自行执行完整的查找过程,因此它们会从互联网的内置列表开始根名称服务器并追踪代表团(root→com→google.com)。
答案2
在步骤 1 之前 - 人类可读的地址通过远程 DNS 上的 DNS 查找(通过递归询问预定义的 DNS 服务器集并询问“谁负责google.com
”)或通过查询本地缓存转换为 IP。然后数据包被发送到带有几个标记的 IP(取决于您到底想从 获得什么google.com
)
答案3
这域名系统(DNS)是一个分布式系统,用于将人类可读的域名(例如 )转换为可用于连接到实际服务器的example.com
IP 地址(例如)。本质上,192.0.2.1
互联网电话簿并且是互联网基础设施的重要组成部分。
互联网包含大量 DNS 服务器。大多数人使用其 ISP 提供的服务器,但人们可以轻松配置其系统和家庭网络以使用其他 DNS 服务,例如Google 公共 DNS(8.8.8.8
和8.8.4.4
)。使用适当的服务器软件,人们还可以托管自己的 DNS 服务器。
当你访问某个网站时,你的浏览器(通常通过设备的操作系统)将询问DNS 服务器获取域名对应的 IP 地址,然后使用该 IP 地址连接到服务器。如果域名未注册,则设计良好的 DNS 服务器应返回NXDOMAIN
(不存在的域名),许多 ISP 运行的 DNS 服务器默认返回广告赞助的搜索页面大多数系统都会缓存 DNS 查找结果,这样就不需要重复向服务器查询同一个网站的地址。
由于 DNS 对于访问互联网上的网站至关重要,攻击者一直试图通过 DDoS 攻击来禁用系统。为了说明 DNS 的重要性,以下是一个例子:2016 年 10 月 21 日,主要 DNS 提供商 Dyn 遭受 TB 级 DDOS 攻击导致亚马逊、Yelp 等大量主流网站无法供美国相当一部分人口访问。