dns解析过程_DNS原理总结及其解析过程
點擊上方藍色字體,關注我們
前言
域名系統(英語:Domain Name System,縮寫:DNS)是互聯網的一項服務。它作為將域名和IP地址相互映射的一個分布式數據庫,使人更方便地訪問互聯網。DNS使用TCP和UDP端口53。當前,對于每一級域名長度的限制是63個字符,域名總長度則不能超過253個字符。
體系結構
DNS 是一個分布式數據庫。它允許對整個數據庫的各個部分進行本地控制;同時整個網絡也能通過?客戶-服務器?方式訪問每個部分的數據,借助備份和緩存機制,DNS 將更強壯和足夠的性能。DNS 數據庫的結構如圖1所示,就像一棵倒掛著的樹。
根域名服務器
根域名服務器(英語:root name server)是互聯網域名解析系統(DNS)中最高級別的域名服務器,負責返回頂級域的權威域名服務器地址。它們是互聯網基礎設施中的重要部分,因為所有域名解析操作均離不開它們。由于DNS和某些協議(未分片的用戶數據報協議(UDP)數據包在IPv4內的最大有效大小為512字節)的共同限制,根域名服務器地址的數量被限制為13個。幸運的是,采用任播技術架設鏡像服務器可解決該問題,并使得實際運行的根域名服務器數量大大增加。截至2017年11月,全球共有800臺根域名服務器在運行。| 12 | DNS 根域名服務器并不真的只有 13 臺,而是 13 個 IP,對應了 A-M 13 個編號,借由任播(Anycast)技術,編號相同的根服務器使用同一個IP(類似一個集群)。 |
頂級域
頂級域(或頂級域名;英語:Top-level Domain;英文縮寫:TLD)是互聯網DNS等級之中的最高級的域,它保存于DNS根域的名字空間中。頂級域名是域名的最后一個部分,即域名最后一點之后的字母,例如在example.com這個域名中,頂級域是.com(或.COM),大小寫視為相同。頂級域主要分4類:- 國家頂級域國家和地區頂級域名(Country code top-level domain,英語:ccTLD),簡稱國家頂級域,又譯國碼域名、頂級國碼域名、國碼頂級域名,或頂級國碼域名,是用兩字母的國家或地區名縮寫代稱的頂級域,其域名的指定及分配,政治因素考量凌駕在技術和商業因素之上。這些頂級域均由兩個字母組成,大部分使用?ISO 3166-1標準。
- 通用頂級域通用頂級域主要由.com、.info、.net及.org等域名組成。同時 .biz、.name及.pro亦可視作“通用”性質,但這些域名指定為“限制”級別,規定申請者須提供資格證明。
- 基礎建設頂級域.arpa,過去曾包括在“通用頂級域”內.arpa是互聯網域名系統上一個專門用于互聯網基礎設施配置的頂級域。其名稱最初是縮寫自高級研究計劃局(Advanced Research Projects Agency,ARPA),也就是現在互聯網的雛形網絡ARPANET的主管部門。現在其標準名稱對應為“地址路由參數域(Address and Routing Parameter Area)”。直到2015年,它是IANA頂級域分類中的一個分類,基礎設施頂級域(infrastructure top-level domain)內的唯一頂級域。現在其有兩個二級域名,“in-addr.arpa”和“ip6.arpa”,用于對應IPv4和IPv6的DNS反向查詢功能。
- 測試頂級域例如繁體中文的http://例子.測試/及簡體的http://例子.測試/
區和域的不同
整個的域名空間可以根據組織劃分或管理分類,組織成一個樹狀結構。樹上的每個節點叫做?domain(域),就是一個標示。一個 domain 的名字就是從 root 開始,到當前節點的所有 domain 標志的集合。從書寫的結構上看,就是從右到左依次用”.”來區分開。這樣域名的標志才能夠唯一。而整個的域名空間被分成的多個區域,叫?zone。它開始于一個頂級 domain,一直到一個子 domain 或是其它 domain 的開始。zone 通常表示管理界限的劃分。實際上,zone 就是DNS 樹狀結構上的一個標識的點。一個 zone 包含了那些相鄰的域名樹結構的部分,并具有此部分的全部信息,并且它是真正授權的。它包含了這個節點下的所有域名,但不包括其它域里已經制定的。每個樹狀結構里的節點,在上級域中都有一個或多個 NS 記錄。它們是和這個域中的 NS 記錄相同的。例如,有一個 domain 叫 example.com,它可以包含 host.aaa.example.com 和host.bbb.example.com 這些名字,但是它的 zone 文件中卻只有 2 個 zone 的記錄aaa.example.com 和 bbb.example.com。zone 就是一個一級的 domain,也可以是一個多級domain 的一部分。這個 domain 中的其它 zone,可以指向其它的域名服務器。DNS 樹型結構中的每個名字都是一個 domain,當然它也可以是一個沒有子域的、最末端的節點。每個子域(subdomain)也是一個 domain,每個 domain 其實也是一個子域(subdomain),當然最上面的 root 節點除外。域名服務器的類型
一個 DNS 服務器可以同時作為多個域的主域名服務器和輔域名服務器,也可以只作為主,或只作為輔,或者做任何域的授權服務器而只使用自己的 cache 來提供查詢解析。Master服務器也經常叫做 primary,slave 服務器也經常叫做 secondary。所有的服務器都會將數據保存在緩存(cache)中,直到針對這些數據的 TTL(Time To Live)值過期。主域名服務器
primary master server 是一個 domain 信息的最根本的來源。它是所有輔域名服務器進行域傳輸的源。主域名服務器是從本地硬盤文件中讀取域的數據的。輔域名服務器(次級域名服務器)
次級服務器(slave server或secondary server)使用一個叫做域轉輸的復制過程,調入其它服務器中域的內容。通常情況下,數據是直接從主服務器上傳輸過來的,但也可能是從本地磁盤上的 cache 中讀到的。輔域名服務器可以提供必需的冗余服務。所有的輔域名服務器都應該寫在這個域的 NS 記錄中。隱藏服務器(stealth server)
stealth server 可以針對一個域的查詢返回授權的記錄,但是它并沒有列在這個域的 NS記錄里。Stealth 服務器可以用來針對一個域進行集中分發,這樣可以不用在遠程服務器上手工編輯這個域的信息了。在這種方式中,一個域的 master 文件在 stealth server 上存儲的位置,經常叫做“hidden primary”配置。Stealth 服務器也可以將域文件在本地做一個拷貝,從而可以在所有官方的域名服務器都不能訪問的情況下,也能更快地讀取域的記錄。高速緩存域名服務器(caching only server)
緩存服務器可以將它收到的信息存儲下來,并再將其提供給其它的用戶進行查詢,直到這些信息過期。它的配置中沒有任何本地的授權域的配置信息。它可以響應用戶的請求,并詢問其它授權的域名服務器,從而得到回答用戶請求的信息。轉發服務器(forwarding server)
一臺緩存名服務器本身不能進行完全的遞歸查詢。相反,它能從緩存向其它的緩存服務器轉發一部分或是所有不能滿足的查詢,一般被稱作轉發服務器。可能會有一個或多個轉發服務器,它們會按照順序進行請求,直到全部窮盡或者請求得到回答為止。轉發服務器一般用于用戶不希望站點內的服務器直接和外部服務器通訊的情況下。一個特定的情形是許多 DNS 服務器和一個網絡防火墻。服務器不能透過防火墻傳送信息,它就會轉發給可以傳送信息的服務器,那臺服務器就會代表內部服務器詢問因特網 DNS 服務器。使用轉發功能的另一個好處是中心服務器得到了所有用戶都可以利用的更加完全的信息緩沖。解析過程
域名解析總體可分為兩大步驟:- 遞歸查詢:本機向本地域名服務器發出一次查詢請求,就靜待最終的結果。如果本地域名服務器無法解析,自己會以DNS客戶機的身份向其它域名服務器查詢,直到得到最終的IP地址告訴本機。
- 迭代查詢:本地域名服務器向根域名服務器查詢,根域名服務器告訴它下一步到哪里去查詢,然后它再去查,每次它都是以客戶機的身份去各個服務器查詢。
| 1 | $ dig alibaba.com |
- 第一行為dig的版本信息和需要解析的域名。
- 第二行為dig設置的全局選項。前兩行輸出可以通過使用+nocmd選項來消除,但前提是它是命令行上的第一個參數(甚至在您查詢的主機之前)。
- 第三行表示已經獲取到結果(無論是否解析到)。
- 第四行和第五行為獲取結果中的簡略信息
- opcode ,status 和 會話標識
- flags、query數、answer數、authority數、additional數
DNS報文格式
報文頭
會話標識:DNS報文的ID標識,對于請求報文和其對應的應答報文,這個字段是相同的,通過它可以區分DNS應答報文是哪個請求的響應標志:標志位總長 16 個位,也就是兩個字符。有相應值的位標記為 1 ,沒有的則標記為 0 。最后這 16 個二進制的位通過進制轉換即可變成十六進制的- QR 1bit
- 0?為客戶端請求包
- 1?為服務器響應包
- Opcode 4bits
- 0000?為普通的 DNS 請求
- 0001?為 rDNS 請求
- 0002?為服務器狀態
- 0003?無
- 0004?為通知 (Notify)
- 0005?為更新 (Update)
- 0006 - 0015?保留
- AA 1bit
- 0?為應答服務器不是該域名的權威解析服務器
- 1?為應答服務器是該域名的權威解析服務器
- TC 1bit
- 0?為報文未截斷
- 1?為報文過長被截斷 (只返回了前 512 個字節)
- RD 1bit
- 0?為不期望進行遞歸查詢
- 1?為期望進行遞歸查詢 (從域名服務器進行遞歸查詢)
- RA 1bit
- 0?為應答服務器不支持遞歸查詢
- 1?為應答服務器支持遞歸查詢
- Z 1bit保留位
- AD 1bit
- 0?為應答服務器未驗證了該查詢相關的 DNSSEC 數字簽名
- 1?為應答服務器已經驗證了該查詢相關的 DNSSEC 數字簽名
- CD 1bit
- 0?為服務器已經進行了相關 DNSSEC 數字簽名的驗證
- 1?為服務器并未進行相關 DNSSEC 數字簽名的驗證
- Rcode 4bits十進制
- 0000?為正常
- 0001?為格式錯誤 (NS 無法解析這個請求)
- 0002?為服務器錯誤 (NS 有問題所以無法進行這個請求)
- 0003?為名稱錯誤 (請求中的地址并不存在)
- 0004?為未實施查詢 (NS 服務器不支持這種查詢)
- 0005?為拒絕 (由于策略原因拒絕執行這個錯誤)
- 0006?為域名出現了但是它不該出現
- 0007?為集合 RR 存在但是他不該存在
- 0008?為集合 RR 不存在但是他應該存在
- 0009?為服務器并不是這個區域的權威服務器
- 0010?為該名稱并不包含在區域中
- 0011 - 0015?保留
- 0016?為錯誤的 OPT 版本或者 TSIG 簽名無效
- 0017?為無法識別的密鑰
- 0018?為簽名不在時間范圍內
- 0019?為錯誤的 TKEY 模式
- 0020?為重復的密鑰名稱
- 0021?為該算法不支持
- 0022?為錯誤的截斷
- 0023 - 3840?保留
- 3841 - 4095?私人使用
- 4096 - 65534?保留
- 65535?RFC 6195
數量字段:
Questions、Answer RRs、Authority RRs、Additional RRs 各自表示后面的四個區域的數目。Questions表示查詢問題區域節的數量,Answers表示回答區域的數量,Authoritative namesversers表示授權區域的數量,Additional recoreds表示附加區域的數量。RECORD域
Queries域
查詢名長度不固定,且不使用填充字節,一般該字段表示的就是需要查詢的域名(如果是反向查詢,則為IP,反向查詢即由IP地址反查域名),一般的格式如下圖所示。查詢類型:
| 1 | A | 由域名獲得IPv4地址 |
| 2 | NS | 查詢域名服務器 |
| 5 | CNAME | 查詢規范名稱 |
| 6 | SOA | 開始授權 |
| 11 | WKS | 熟知服務 |
| 12 | PTR | 把IP地址轉換成域名 |
| 13 | HINFO | 主機信息 |
| 15 | MX | 郵件交換 |
| 28 | AAAA | 由域名獲得IPv6地址 |
| 252 | AXFR | 傳送整個區的請求 |
| 255 | ANY | 對所有記錄的請求 |
查詢類
定義有下述?CLASS?助記符和值:
| IN | 1 | the Internet/互聯網 | |
| CS | 2 | the CSNET class/CSNET 類 | 被廢棄,僅在某些被廢棄的 RFCs 中用于舉例 |
| CH | 3 | the CHAOS class/CHAOS 類 | |
| HS | 4 | Hesiod [Dyer 87] |
備注:CHAOS 和 Hesiod 請參考?DNS classes
DNS Resource Records
RR的定義來自 rfc1035 中 3.2 RR definitions。所有的RR都有如下所示的相同的頂層格式:
| 1234567891011121314151617181920 | 1 1 1 1 1 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+| |/ // NAME /| |+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+| TYPE |+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+| CLASS |+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+| TTL || |+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+| RDLENGTH |+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--|/ RDATA // /+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ |
| NAME | 所有者名稱(owner name),例如,這個資源記錄匹配的節點的名稱 |
| TYPE | 包含 RR TYPE 代碼之一的 2 個八位字節(octets) |
| CLASS | 包含 RR CLASS 代碼之一的 2 個八位字節(octets) |
| TTL | 32位有符號整數,指定在再次咨詢信息源之前此資源記錄可以被緩存的時間間隔。零值被解釋為該 RR 僅能用于正在進行的流程,不應當被緩存。例如,總是將零 TTL 分配給 SOA 記錄,以便禁止緩存。零值也可以用于極短暫的數據。 |
| RDLENGTH | 無符號 16 位整數,指定以八位字節計的 RDATA 字段的長度。 |
| RDATA | 可變長度的八位字節字符串,用來描述資源。這個信息的格式取決于資源記錄的 TYPE 和 CLASS 。 |
TYPE 值域
TYPE 字段用于資源記錄。注意,這些類型是 QTYPE 的子集。
| A | 1 | a host address/主機地址 | |
| NS | 2 | an authoritative name server/權威名稱服務器 | |
| MD | 3 | a mail destination/郵件目的地 | 被廢棄,使用 MX |
| MF | 4 | a mail forwarder/郵件轉發器 | 被廢棄,使用 MX |
| CNAME | 5 | the canonical name for an alias/別名的正則名稱 | |
| SOA | 6 | a marks the start of a zone of authority/標記權威區域的開始 | |
| MB | 7 | a mailbox domain name/郵箱域名 | EXPERIMENTAL |
| MG | 8 | a mail group member/郵件組成員 | EXPERIMENTAL |
| MR | 9 | a mail rename domain name/郵件重新命名域名 | EXPERIMENTAL |
| NULL | 10 | a null RR | EXPERIMENTAL |
| WKS | 11 | a well known service description/眾所周知的服務描述 | |
| PTR | 12 | a domain name pointer/域名指針 | |
| HINFO | 13 | host information/主機信息 | |
| MINFO | 14 | mailbox or mail list information/郵箱或郵件列表信息 | |
| MX | 15 | mail exchange/郵件交換 | |
| TXT | 16 | text strings/文本字符串 | |
| SRV | 33 | service and protocol/服務和協議 | 在rfc2052中引入 |
| AXFR | 252 | A request for a transfer of an entire zone/請求傳送整個區域 | |
| MAILB | 253 | A request for mailbox-related records (MB, MG or MR)/請求相關郵箱記錄(MB、MG 或 MR) | |
| MAILA | 254 | A request for mail agent RRs/請求郵件代理 RR | 被廢棄,參閱 MX |
| * | 255 | A request for all records/請求所有記錄 |
| 123456 | 0 類型0用作SIG RR的特殊指示器。在其他情況下,不得分配普通用途1 - 127 此范圍內的剩余TYPE由IETF Consensus分配給數據類型128 - 255 此范圍內的剩余TYPE由IETF共識分配給Q和Meta TYPE256 - 32767 由IETF共識分配給 Q或Meta TYPE32768 - 65279 所需規范見[RFC 2434]65280 - 65535 私人使用 |
OPT(OPTion)RR,編號41,在[RFC 2671]中規定。其主要目的是擴展各種DNS字段的有效字段大小,包括RCODE,標簽類型,標志位和RDATA大小。特別是,對于識別它的解析器和服務器,它將RCODE字段從4位擴展到12位。
QCLASS 值域QCLASS 字段出現在查詢的 question 部分。QCLASS 值是 CLASS 值的超集;每一個 CLASS 都是合法的 CLASS。除了 CLASS 值以外,定義有下述 QCLASS:| * | 255 | any class/任何類 |
報文示例
請求報文
請求報文中主要Queries域比較主要,標識此請求的目的。
回應報文
回應報文比請求報文多了三個域:- Answers對請求的回應。此報文回應兩條A記錄。
- Authoritative nameservers域名所屬的NS。此報文表明alibaba.com有兩條NS。
- Additional recordsNS對應的記錄。此報文表明Authoritative nameservers中的NS有4條A記錄(每個NS兩條)。
診斷工具
dig(Domain Information Groper)域信息搜索器(dig)是一種用于從域名系統服務器那里收集信息的命令行工具。搜索有兩種模式:針對一條請求的簡單交互式模式和執行多查詢的批模式。所有的查詢選項都可以通過命令行上來完成。| 12 | dig [@服務器]域[查詢-類型] [查詢-類 [+查詢-選項] [-dig-選項] [%注釋] |
| 1 | dig @服務器 域 查詢類型 查詢類 (dig @server domain query-type query-class) |
host
Host功能利用一個命令行界面,提供查詢因特網主機名的功能。在默認狀態下,他只將對主機名和IP地址進行轉換,但是此項功能可以通過選項的使用得到拓展。
| 1 | host [-aCdlrTwv] [-c class] [-N ndots] [-t type] [-W timeout] [-R retries] hostname [server] |
| 1 | nslookup [-option…][host-to -find]-[server] |
總結
以上是生活随笔為你收集整理的dns解析过程_DNS原理总结及其解析过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dnf剑魂buff等级上限_DNF:传说
- 下一篇: directplay需要安装吗_燃气报警