互聯網是一個很大的地方。大量的協議和物理基礎結構已經到位,使咱們可以輕鬆使用它。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的基本工做原理。