18143453325 在线咨询 在线咨询
18143453325 在线咨询
所在位置: 首页 > 营销资讯 > 建站知识 > Domain Name System(DNS)域名服务器

Domain Name System(DNS)域名服务器

时间:2023-02-13 04:57:01 | 来源:建站知识

时间:2023-02-13 04:57:01 来源:建站知识

域名查询

在Internet中,DNS(Domain Name System)就好比一个电话本,记录了域名和IP的对应关系。当我们在浏览器中输入域名http://google.com会发生什么呢?大概流程如下图所示,首先在本地电脑上查看是否有缓存,缓存没命中就访问ISP的Local DNS Resolver或者所在网络的Local name server,如果还没命中,就访问DNS服务获取域名对应的IP地址。

DNS中存储了域名到IP地址的映射关系,我们将这类存储有映射关系的数据叫做Resource records(RR)。为了降低查询域名IP地址的响应速度,通常在浏览器、操作系统、Local DNS resolver、Local name server(或者叫Local server)都会实现对数据的缓存。在OS中提供了一个local resolver library的entity来管理loacal DNS cache,应用可以通过API访问该库。如果OS的cache失效,将访问Local DNS resolver。

默认情况下,我们使用的Local DNS Resolver是ISPs的Local DNS Resolver。ISP记录着分配给每个用户的IP地址,甚至他们的DNS服务记录了哪些用户访问过哪些IP地址,以及哪些用户访问过那些域名。因此ISP从技术上是可以记录你访问过的网站。当然,你可以把你访问的Local DNS resolver替换成一些公共的DNS resolver,如 Google, Cloudflare, OpenDNS。

Local name server

当一台主机发出 DNS 查询请求时,这个查询请求报文就会发送给本地域名服务器。每一个互联网提供者,或者一个大学,或者一个公司,都可以拥有一台本地域名服务器,这种域名服务器也被称为默认域名服务器。

Local DNS Resolver

Local DNS resolver可以简单理解为DNS的客户端Local DNS resolver会嵌入在Local name server中,通常。我们是如何通过Local DNS resolver知道域名的IP地址的呢?我们又是如何知道Local DNS resolver的IP地址的呢?Local DNS resolver可以通过DHCP协议动态配置,也可以通过自定义静态配置。

在OS中,有个配置文件记录Local DNS resolver的IP地址(Linux中的/etc/resolv.conf,Mac中也是这个文件)。终端请求Local DNS resolver进行域名查询,Local DNS resolver安装了特殊的软件,可以通过DNS基础设施查询域名,通常一个名叫Berkeley Internet Name Domain (BIND)的软件嵌入在Local DNS resolver中,这个软件中记录了根服务器的IP地址。最新的根服务器地址可通过InterNIC查询,总共有13个。

我们在不同网络下,查看Mac中的resolv.conf文件,其内容如下:

链接WIFI时:

## macOS Notice## This file is not consulted for DNS hostname resolution, address# resolution, or the DNS query routing mechanism used by most# processes on this system.## To view the DNS configuration used by this system, use:# scutil --dns## SEE ALSO# dns-sd(1), scutil(8)## This file is automatically generated.#nameserver fe80::1%en0nameserver 192.168.1.1链接手机的热点时:

## macOS Notice## This file is not consulted for DNS hostname resolution, address# resolution, or the DNS query routing mechanism used by most# processes on this system.## To view the DNS configuration used by this system, use:# scutil --dns## SEE ALSO# dns-sd(1), scutil(8)## This file is automatically generated.#nameserver fe80::f810:93ff:fe9b:164%en0nameserver 172.20.10.1使用代理时:

## macOS Notice## This file is not consulted for DNS hostname resolution, address# resolution, or the DNS query routing mechanism used by most# processes on this system.## To view the DNS configuration used by this system, use:# scutil --dns## SEE ALSO# dns-sd(1), scutil(8)## This file is automatically generated.#nameserver 10.12.2.3nameserver 10.12.2.4

DNS分层结构

DNS为了保证服务的高可用,所以采用了分层级的应用架构。主要分为四部分:

  1. DNS resolver:可以简单理解为域名服务器的客户端。
  2. Root-leve name servers:负责处理来自local servers的请求,根域名服务器维护了最顶级的域名信息,root name servers从逻辑上分为13个,命名从A到M,但服务实例到目前为止有1000多个,可以在root-servers.org进行查看。这些服务分别由12个组织进行管理。
  3. Top-level domain(TLD) name servers:这些服务拥有权威域名服务的IP地址。通过他们可以拿二级/权威域名服务器IP列表。目前TLD由Internet Corporation for Assigned Names and Numbers (ICANN)进行管理。
  4. Authoritative name servers:这是被访问组织的域名服务,他们提供了被访问的网站或应用的IP地址。
域名结构如下:

域名服务器如何查询域名?

在域名服务器中有两种方式查询域名的IP地址:

  1. 迭代式(Iterative):local server 分别请求root、TLD和权威服务器来获得IP地址。
  2. 递归式(Recursive):local server请求root,root请求TLD,TLD请求权威服务器,最后逐层返回IP地址。

Resource records(RR)

前面提到过RR包含了域名与IP的信息。RR是从域名服务器获得数据的最小信息单元,将其分为四类。RR中主要由三部分组成:type,name和value。

TypeDescriptionNameValueExample (Type, Name, Value)
AProvides the hostname to IP address mappingHostnameIP address(A, relay1.main.educative.io,104.18.2.119)
NSProvides the hostname that is the authoritative DNS for a domain nameDomain nameHostname(NS, educative.io, http://dns.educative.io)
CNAMEProvides the mapping from alias to canonical hostnameHostnameCanonical name(CNAME, educative.io, http://server1.primary.educative.io)
MXProvides the mapping of mail server from alias to canonical hostnameHostnameCanonical name(MX, mail.educative.io, http://mailserver1.backup.educative.io)

分布式问题

DNS作为一个分布式基础服务是如何解决扩展性、可靠性和一致性的呢?

由于DNS的分层结构,很容易解决应用的扩展性问题。对于可靠性,主要通过一下三个手段实现:

  1. Caching:浏览器、操作系统、local name srver和Local DNS resolver会维护经常访问的域名的缓存。在chrome中可通过chrome://net-internals/#dns查看缓存情况。如果DNS 服务挂掉,缓存还能起作用。
  2. 服务多副本:DNS有每个逻辑服务器的副本,系统地分布在全球各地,以低延迟的方式满足用户请求。冗余的服务器提高了整个系统的可靠性。
  3. 使用UPD协议:UDP的速度更快,因此提高了DNS的性能。此外,互联网服务的可靠性自成立以来已得到改善,因此UDP通常比TCP更受青睐。如果DNS解析器没有收到对先前请求的答复,它可以重新发送UDP请求。这种请求-回复只需要一次往返,与TCP相比,延迟更短,因为TCP在数据交换前需要进行三次握手。虽然在通常情况下,DNS使用UDP协议。然而,当DNS的信息大小超过原始数据包大小512字节时,可以使用TCP。这是因为大尺寸的数据包在拥挤的网络中更容易被损坏。DNS总是使用TCP进行区域传输。除此之外,一些客户出于隐私的考虑,更喜欢在TCP上使用DNS,以采用传输层安全协议。
DNS为了保证服务的高可用,所以牺牲强一致性而采用最终一致性。我们可以更改cache的TTL来减少达到最终一致所花费的时间。

简单实验

我们来简单看下几个常用的命令。

nslookup

$ nslookup www.google.comServer:10.12.2.3Address:10.12.2.3#53​Non-authoritative answer:Name:www.google.comAddress: 142.251.12.103Name:www.google.comAddress: 142.251.12.104Name:www.google.comAddress: 142.251.12.105Name:www.google.comAddress: 142.251.12.147Name:www.google.comAddress: 142.251.12.99Name:www.google.comAddress: 142.251.12.106Non-authoritative answer表示缓存响应。

$ dig www.google.com​; <<>> DiG 9.10.6 <<>> www.google.com;; global options: +cmd;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18750;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 1;; OPT PSEUDOSECTION:; EDNS: version: 0, flags:; udp: 4000;; QUESTION SECTION:;www.google.com.INA​;; ANSWER SECTION:www.google.com.195INA142.251.12.103www.google.com.195INA142.251.12.106www.google.com.195INA142.251.12.104www.google.com.195INA142.251.12.147www.google.com.195INA142.251.12.105www.google.com.195INA142.251.12.99​;; Query time: 43 msec;; SERVER: 10.12.2.3#53(10.12.2.3);; WHEN: Mon Aug 15 00:57:16 CST 2022;; MSG SIZE rcvd: 139195表示TTL,单位为秒。如果想追踪 www.google.com 域名对应 IP 地址是如何被解析出来的,可以使用命令dig +trace www.google.com

host

host命令是dig的简化版。

host github.comhost facebook.github.comhost 172.253.118.100 # 逆向



关键词:服务

74
73
25
news

版权所有© 亿企邦 1997-2025 保留一切法律许可权利。

为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
关闭