互联网是一个很大的地方。大量的协议和物理基础结构已经到位,使咱们可以轻松使用它。DNS是一个巨大的话题。在本文中,我将介绍有关DNS及其组成部分的基本知识,并探讨DNS解析的实际应用。git
链接到互联网的每一个设备都有一个分配给它的IP地址。该设备能够托管大量服务,互联网上的任何人均可以经过使用其IP地址链接到该设备来访问。例如,Wikipedia已使其网站可访问IP地址103.102.166.224(该IP地址可能与您不一样),可是记住一长串数字以方便我联系它并不方便。Pffff。github
这将当即限制访问Internet上全部很酷的内容。wikipedia.org
代替IP地址将更容易使用。咱们宁愿有某种机制能够为咱们记住这些映射。所以,就像电话中的联系人列表同样,DNS(域名系统的缩写)维护着一堆有关服务器名称(或更确切地说是域名)的信息,每当您打开任何网站时,Web浏览器都会无提示地查询这些信息。shell
从技术上讲,DNS是一个 分布式的分层数据库经过与该数据库进行交互(插入和检索信息)的机制在互联网上传播。DNS中的信息存储为资源记录(RR),这其实是域名和某些数据之间的映射。一些资源记录类型为:数据库
A
:将域名映射到IPv4地址。AAAA
:映射到IPv6地址。CNAME
:映射到域名的别名。NS
:使用受权的域名服务器映射域名。SOA
:指定域的区域的开始。对于IP而言,拥有更多资源的资源记录对于将层次结构引入DNS并简化域名管理很是重要。在服务器的IP地址被更改的状况下,DNS还经过保持相同的服务器名称来带来可访问性的一致性。浏览器
DNS是互联网的关键结构,众所周知,若是没有DNS,DNS将会崩溃。缓存
在开始以前,让咱们先了解一个URL并弄清楚DNS解析URL的哪一部分。考虑如下URLbash
https://www.youtube.com/watch?v=dQw4w9WgXcQ
FQDN字符串由用单点分隔的标签组成。传统上,FQDN以表明根域的点结束。“ www.youtube.com ”和“ www.youtube.com”。'是同样的。末尾的点在表示中能够省略,但内部全部分辨率都在末尾点就位的状况下发生。服务器
域名是互联网中的一个领域,拥有域名的实体对其拥有管理权-在DNS中为相应域名建立或更新资源记录。层次结构能够在域名中看到,而且能够可视化为树。wikipedia.org.
是域名的示例。这等级制度域的数量从FQDN中的右标签到左标签降序。左侧的每一个标签都指定了右侧域的一个子域。层次结构中的第一个域是根域(由点表示)。网络
com
,org
,in
,io
是根域下的一些子域。根域下的第一级域称为顶级域(TLD),而且独立于根域进行操做。TLD的子域可供互联网用户购买。例如wikipedia
,TLD的子域org.
必须在某个时间点已购买。app
com
,org
,in
是根域的子域。youtube
,duckduckgo
是com
或com.
域的子域。www
,music
是youtube.com
或youtube.com.
域的子域。拥有域名权限能够将其映射到某些网络设备(可能正在运行某些网络服务)的IP地址或建立子域。域全部者甚至能够选择将子域的权限委派给其余实体。例如,若是Google以为能够,那么它能够出售域名music.youtube.com
并将域名的所有权限委派给买方。这是顶级域名(TLD)在出售子域名时一般会作的事情。
区域是一组子域,其中包括域全部者对域进行彻底控制的域自己。根区域仅具备根域。管理根区域的ICANN组织有权建立更多的TLD(多是子域),就像过去同样。
根域的子域com
,org
是从在权威方面根域彻底独立的。这意味着,若是在com
域下添加任何新的子域,则根域不会受到任何影响,由于该com
域不在其管辖范围以内。facebook.com
在单独的区域中。域apps.facebook.com
和与developers.facebook.com
处于同一区域facebook.com
。若是facebook.com
要添加新服务(例如直播电视),他们能够tv.facebook.com
在同一区域中进行设置,而无需打扰父域com
。
一个域可能在其区域下仅包含几个子域,并为其余子域委派权限。
每一个域都有至少2个(用于冗余)与它们相关联的专用权威名称服务器。这些名称服务器维护并提供域及其子域的资源记录。若是查询域名,则最终将由其权威的名称服务器提供服务。
权威名称服务器是DNS的重要组成部分,由于它们造成了要查询域名解析的分布式层次数据库的节点。它们使DNS得以分发,由于每一个域名能够具备本身的名称服务器,而且不绑定到单个中央数据库。
管理员能够根据本身的选择配置名称服务器。大型组织能够维护本身的权威名称服务器,以管理其域专有的资源记录。可是,在其余域之间共享其权威名称服务器的域名是很常见的。换句话说,许多单独的,不相关的域名可能正在使用共享名称服务器。
DNS解析由DNS客户端启动,以寻求域名的某些信息(例如IP地址)。它建立一个DNS查询,并将其发送到DNS服务器,而后DNS服务器为DNS客户端解析该查询。当咱们链接到Internet时,咱们的网络配置将保留由咱们的ISP提供的默认DNS服务器。咱们甚至可使用咱们选择的DNS服务器。8.8.8.8
是Google提供的一种很是流行,易于记忆的DNS服务器。
下图演示了DNS解析中查询和响应的流程。
A
为域en.wikipedia.org寻找具备IP地址的Type资源记录,该客户端建立DNS查询并将其发送到配置的DNS服务器。en.wikipedia.org
DNS服务器的IP地址,必须首先找到该域的名称服务器。为了找到该名称服务器,DNS服务器从其域名服务器首先与DNS服务器一块儿存储的根域开始,开始从右向左一次解析一个标签的域名。接下来的一行将是org.
它查询根域的权威名称服务器之一,以询问的名称服务器。org.
请注意,它首先搜索名称服务器,由于它们拥有该域的全部信息。org.
域,以请求如下域名服务器的域名服务器:wikipedia.org
wikipedia.org
名称服务器,询问如下内容的类型A
记录:en.wikipedia.org
A
资源记录来响应DNS服务器。为了使名称服务器免于重复查询的负担,DNS服务器实现了高速缓存机制,而且仅在名称服务器中按层次结构查询名称服务器(若是它们在其高速缓存中没有客户端请求的资源记录)。为了解释DNS解析及其全部组成部分,以上插图未考虑缓存。若是DNS服务器和Namerserver没有所需的信息,它们将以适当的答案进行答复。
在阅读完全部内容后,这是一段有趣的时光,您能够看到这一切并进行验证。我已经将DNS服务器设置为,208.67.222.222
而且将使用dig
实用程序在bash shell中执行几个DNS查询。
dig
指望将域名做为参数,而且默认状况下将查询A类资源记录。下面是命令dig www.reddit.com
及其输出。
neeraj@mrm:~$ dig www.reddit.com ; <<>> DiG 9.16.1-Ubuntu <<>> www.reddit.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16713 ;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;www.reddit.com. IN A ;; ANSWER SECTION: www.reddit.com. 254 IN CNAME reddit.map.fastly.net. reddit.map.fastly.net. 30 IN A 151.101.65.140 reddit.map.fastly.net. 30 IN A 151.101.129.140 reddit.map.fastly.net. 30 IN A 151.101.193.140 reddit.map.fastly.net. 30 IN A 151.101.1.140 ;; Query time: 84 msec ;; SERVER: 208.67.222.222#53(208.67.222.222) ;; WHEN: Tue Sep 01 00:16:04 IST 2020 ;; MSG SIZE rcvd: 142
输出说明:
上面输出的如下片断列出了DiG版本,发出的查询以及传递给dig的一些命令行选项。
; <<>> DiG 9.16.1-Ubuntu <<>> www.reddit.com ;; global options: +cmd
接下来是有关DNS标头的一些信息,例如标志,部分。
;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16713 ;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1
而后将查询发给DNS服务器。问题部分下的列格式为域名,DNS类,资源记录的类型。这里IN
是指DNS类“ Internet”。
;; QUESTION SECTION: ;www.reddit.com. IN A
在“问题”部分以后是“答案”,“权限”和“其余”部分形式的响应。在此示例中,咱们仅具备“答案”部分,在该部分中,咱们接收CNAME
到所查询域的Type资源记录而不是Type A
,这多是由于A
该域的Type资源记录不存在,而这是DNS服务器相对于查询所找到的。 CNAME
基本上这样指定别名,www.reddit.com.
而且reddit.map.fastly.net.
是同一事物的两个不一样名称。域名后的数字是主机能够缓存资源记录的秒数。在CNAME
咱们拥有“类型”A
资源记录以后,reddit.map.fastly.net.
这给了咱们4个IP地址,咱们可使用这些IP地址进行访问www.reddit.com.
;; ANSWER SECTION: www.reddit.com. 254 IN CNAME reddit.map.fastly.net. reddit.map.fastly.net. 30 IN A 151.101.65.140 reddit.map.fastly.net. 30 IN A 151.101.129.140 reddit.map.fastly.net. 30 IN A 151.101.193.140 reddit.map.fastly.net. 30 IN A 151.101.1.140
最后,咱们对整个操做有一些统计。操做所需的时间,查询的DNS服务器等。
;; Query time: 84 msec ;; SERVER: 208.67.222.222#53(208.67.222.222) ;; WHEN: Tue Sep 01 00:16:04 IST 2020 ;; MSG SIZE rcvd: 142
CNAME
#您可能知道甚至能够从打开Facebook www.fb.com
。让咱们看看发生了什么事。我鼓励您仔细阅读输出内容。
neeraj@mrm:~$ dig www.fb.com ; <<>> DiG 9.16.1-Ubuntu <<>> www.fb.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29969 ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;www.fb.com. IN A ;; ANSWER SECTION: www.fb.com. 6569 IN CNAME www.facebook.com. www.facebook.com. 668 IN CNAME star-mini.c10r.facebook.com. star-mini.c10r.facebook.com. 60 IN A 157.240.198.35 ;; Query time: 112 msec ;; SERVER: 208.67.222.222#53(208.67.222.222) ;; WHEN: Sun Sep 06 23:47:27 IST 2020 ;; MSG SIZE rcvd: 111
啊! 所以,在“答案”部分中,咱们能够看到它 www.facebook.com
只是的别名www.fb.com
。
咱们甚至能够经过在域名以后放置“类型”来直接查询特定的资源记录。
neeraj@mrm:~$ dig www.fb.com CNAME ; <<>> DiG 9.16.1-Ubuntu <<>> www.fb.com CNAME ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37259 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;www.fb.com. IN CNAME ;; ANSWER SECTION: www.fb.com. 570 IN CNAME www.facebook.com. ;; Query time: 68 msec ;; SERVER: 208.67.222.222#53(208.67.222.222) ;; WHEN: Sun Sep 06 23:48:17 IST 2020 ;; MSG SIZE rcvd: 66
Dig实用程序具备一个有趣的标志+trace
,它能够模拟DNS服务器如何解析查询。Dig会从根域开始迭代解析查询中的域名。您甚至能够将其与上图进行比较。最后,咱们获得告终果-的别名www.duckduckgo.com.
以及与别名相关联的Type A资源记录。要求您检查输出。使用该+trace
标志时,输出仅包含响应,而且在响应的每一个部分的底部都有已答复或被查询的DNS服务器的FQDN。
如今忽略NSEC3
和RRSIG
资源记录。
neeraj@mrm:~$ dig www.duckduckgo.com +trace ; <<>> DiG 9.16.1-Ubuntu <<>> www.duckduckgo.com +trace ;; global options: +cmd . 518400 IN NS a.root-servers.net. . 518400 IN NS b.root-servers.net. . 518400 IN NS c.root-servers.net. . 518400 IN NS d.root-servers.net. . 518400 IN NS e.root-servers.net. . 518400 IN NS f.root-servers.net. . 518400 IN NS g.root-servers.net. . 518400 IN NS h.root-servers.net. . 518400 IN NS i.root-servers.net. . 518400 IN NS j.root-servers.net. . 518400 IN NS k.root-servers.net. . 518400 IN NS l.root-servers.net. . 518400 IN NS m.root-servers.net. . 518400 IN RRSIG NS 8 0 518400 20200919050000 20200906040000 46594 . shcVsOdL/w+sH9xm8cdCgjCgu2feO/b5J7HAg8SdyHa1pzh/VSO+PL6N kLac2uYQZ//3bkPjPa1lRdBUTQvFfYWKRKz385NldCl1CSBMc5rpjyx3 qPgz21JVmV7BWzfehqduOhAQ0tk0+wahbcjEW3IfDydfpR+NXBh+DQg/ GSTZoXlfQ3UubGPdzIX9ihyRVwWe/dM5xc3ooLi/exPcNSm2exdpgHHY VsIWarQapYGFIbdrsNstevhrRp91ClfLm88ZwPEtjVjPoW3T7yffsC/O 7YNRc9q7g59srKAKaUHhjXx01HaXG/3SGKrsnQRgfTP6t8Tmdu/0fFGI erH7AQ== ;; Received 525 bytes from 208.67.222.222#53(208.67.222.222) in 59 ms com. 172800 IN NS a.gtld-servers.net. com. 172800 IN NS b.gtld-servers.net. com. 172800 IN NS c.gtld-servers.net. com. 172800 IN NS d.gtld-servers.net. com. 172800 IN NS e.gtld-servers.net. com. 172800 IN NS f.gtld-servers.net. com. 172800 IN NS g.gtld-servers.net. com. 172800 IN NS h.gtld-servers.net. com. 172800 IN NS i.gtld-servers.net. com. 172800 IN NS j.gtld-servers.net. com. 172800 IN NS k.gtld-servers.net. com. 172800 IN NS l.gtld-servers.net. com. 172800 IN NS m.gtld-servers.net. com. 86400 IN DS 30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766 com. 86400 IN RRSIG DS 8 1 86400 20200919050000 20200906040000 46594 . RQNHtH2zX1hOpuchqw/ZFwRgDQU6oIvSNtUIWq2vnKKKmi0GL1eOJSPX zkEVq2vhSAjpfwqruMzSEL+fa4el1lA9ufC7lfOzONAIsvasPEyMxqDB qA8KxfdJNbBClA6iDiFvqP5zzNlgD2npNDIy4moxfhoM6bHqRYvBNqFC Sthsd3lA2rGcGJ0sbXYUaSSkqTABb+d8MqUifls5UHkGboWIs9hgTySZ oMnygnwolMJjE74xipQTD+FinBiUcfyRhe6BD/bO2JOkC6HyKRqfacBE 1xvGp7GGXJJ4DF8RY+rNuhWZrzx/U4yBThKHTZipaAwnLx1/MAy7wPLo 78bgug== ;; Received 1178 bytes from 198.97.190.53#53(h.root-servers.net) in 63 ms duckduckgo.com. 172800 IN NS dns1.p05.nsone.net. duckduckgo.com. 172800 IN NS dns2.p05.nsone.net. duckduckgo.com. 172800 IN NS dns3.p05.nsone.net. duckduckgo.com. 172800 IN NS dns4.p05.nsone.net. duckduckgo.com. 172800 IN NS ns04.quack-dns.com. duckduckgo.com. 172800 IN NS ns03.quack-dns.com. duckduckgo.com. 172800 IN NS ns02.quack-dns.com. duckduckgo.com. 172800 IN NS ns01.quack-dns.com. CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q1GIN43N1ARRC9OSM6QPQR81H5M9A NS SOA RRSIG DNSKEY NSEC3PARAM CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20200910044132 20200903033132 24966 com. K6VW6C0oC+auVPTbHxy4vSc4em0hAvhlzBiLRTqiO+axNGK71dwVKNVP Kzp7ltUjiuPvNtA0FxvwR8OwN57WXO7tR7tQWaWeE7+VhqPQMYuYa6dT 3HMFHa9udTCFyG5qdOZeYCPmfOon6un4IijrJ+yyDV817BGOvRfPsmUj fpENyGNckI0m/gNJ5ZfxECSTtxEJkMOjuHlIm7ETJ+qmow== BN1FJS0UO0RMBT477B345GNU6A9CFODA.com. 86400 IN NSEC3 1 1 0 - BN1FSPPU7UST4HCP0ADMG9U117OMTH0V NS DS RRSIG BN1FJS0UO0RMBT477B345GNU6A9CFODA.com. 86400 IN RRSIG NSEC3 8 2 86400 20200911053325 20200904042325 24966 com. Ec2/Sko4MmcDqenrDWRbHPk1NBc2fvkqPUmjTw2YZCgUI/Okj1QBytgt TgHK3zrpMUW6hBwyCdn3ewa6lt3FgOvCSY33/t9SgQDLz5cbqaOk+kYV ZYXtv5H3OdyK22vbO5SPvXMssMHhYbKqU+2M3IM7WN8PuQJ/BdpOQ4qG sbYgG19C3KDoYM0U5oMsvFmBIMzEPJR+BJ/f+1lqYvZ9qQ== ;; Received 947 bytes from 192.48.79.30#53(j.gtld-servers.net) in 199 ms www.duckduckgo.com. 86400 IN CNAME duckduckgo.com. duckduckgo.com. 200 IN A 40.81.94.43 ;; Received 77 bytes from 148.163.196.65#53(ns02.quack-dns.com) in 187 ms
输出说明:
h.root-servers.net
而后,查询根domain()的名称服务器之一以获取com.
名称服务器。com.
域名服务器h.root-servers.net
中查询的域名服务器duckduckgo.com.
和挖掘获得所要求的响应。ns02.quack-dns.com
名称服务器用CNAME
和A
键入资源记录进行回复。若是您在CNAME
此处注意到资源记录,则无需www.
在前面添加duckduckgo.com
访问网站。瞧!我但愿本文能帮助您了解DNS的基本工做原理。