文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

DNS详解

2023-10-10 21:16

关注

1 背景

DNS 是 Domain Name System 的缩写,即域名系统。

DNS可以理解是将域名(如:www.baidu.com)和IP地址进行相互映射的一个分布式数据库。人直接去记忆IP地址数串是相当困难的(像是电话号码,记忆常用的几个还行,太多了会疯掉的),而域名就相当于是IP地址的助记符号。平时在访问网站时只需要输入域名就可以,通过DNS服务能够将域名“翻译”成计算机可以理解的IP地址,这大大方便了人们对互联网的访问。

e8f3e709ea0cbbe8aa92626ea042602f.png

DNS最早于1983年由保罗·莫卡派乔斯(Paul Mockapetris)发明;原始的技术规范在882号因特网标准草案(RFC 882)中发布。1987年发布的第1034和1035号草案修正了DNS技术规范,并废除了之前的第882和883号草案。在此之后对因特网标准草案的修改基本上没有涉及到DNS技术规范部分的改动。

2 DNS基本内容

下面来了解几个相关的重要概念。

2.1 域名

域名(英语:Domain Name),又称网域,是由一串用点分隔的字符串组成的Internet上某一台计算机或计算机组的名称(如:www.baidu.com),用于在数据传输时对计算机的定位标识。
全球域名的最高管理机构是ICANN (Internet Corporation for Assigned Names and Numbers),即互联网名称与数字地址分配机构,总部在美国加利福尼亚。ICANN负责管理全世界域名系统的运作。

d970c3be58078ff16fbb16c67046c04d.png

图1 ICANN董事会

域名采用分层的管理模式,可以分为:一级域名(或称顶级域名)二级域名三级域名四级域名等等。如下图2是一个典型的域名分层结构。www.baidu.com整体是一个二级域名;baidu.com是一个一级域名;.com顶级域(英文:Generic top-level domain)。

b86d45128708003fe6aa3b07c9d4be2e.png

图2 典型的域名分层结构

顶级域ICANN负责管理,常用的顶级域有如下:

上面列举出来的是通用顶级域,还有一类国家顶级域,如下:

一个完整域名是由字符串+顶级域后缀组成的。那如何区分一个域名是多少级域名呢?一个简单的方法是,数域名中有几个点,一个点一级,两个点二级。如下:

2.2 域名服务器

在整个互联网世界中,域名的数量相当庞大。靠一台域名服务器无法完成这个互联网上所有主机的映射。在实际中,DNS使用了大量的域名服务器,所有这些服务器形成了一个有层次结构的分布式数据库。这也是分布式数据库在实际应用中的一个精彩范例。
下面通过一个具体的例子看一下这些域名服务器的协同工作过程。当我们在浏览器中输入www.sina.com.cn时,DNS程序就把DNS请求发送至根域名服务器,因为该域名的顶级域是.cn,因此该DNS请求会发到负责该顶级域.cn顶级域名服务器。依次类推,该DNS请求依次经过权限域名服务器本地域名服务器,直到解析出对应的IP地址为止。如下图3示意了上述过程。

5e5ba07508faaf79113a420ec7bb72f4.png

图3 域名解析过程及域名服务器

2.2.1 根域名服务器

DNS的体系结构中,根域名服务器是最高层级的域名服务器,所有的根域名服务器都知道所有的顶级域名服务器的IP地址。根域名服务器也是最重要的域名服务器,不管是哪个本地域名服务器,若要对互联网上任何一个域名进行解析,只要自己无法解析,就首先要求助于根域名服务器

关于根域名服务器,最早是IPV4,全球只有13台(这13台IPv4根域名服务器名字分别为“A”至“M”),1个为主根服务器在美国,由美国互联网机构Network Solutions运作。其余12个均为辅根服务器,其中9个在美国,2个在欧洲(位于英国和瑞典),1个在亚洲(位于日本)。

至于IPv6,全球目前完成25台IPv6根服务器架设。中国部署了其中的4台,由1台主根服务器和3台辅根服务器组成,打破了中国过去没有根服务器的困境。

c4af5bf908b05865869b1eeb1f2ff88e.png

图4 IPv6根服务器全球分布情况

2.2.2 顶级域名服务器

顶级域名服务器负责管理在该顶级域名服务器注册的所有顶级域(如:.cn .com .gov等等)。收到DNS查询请求时,就给出相应的回答,可能是最后的结果,也可能是下一步应当查找的域名服务器的IP地址。

2.2.3 权限域名服务器

权限域名服务器负责管理一个 “区” 的域名服务器。“区” 是DNS服务器管辖的范围,一个 “区” 的大小可能等于一个域,也可能小于一个域。一个域名服务器可以管理多个子域,也可以把某个子域委派出去,委派出去的一个子域也是一个 “区” ,这样一个域就可以包括多个 “区” 。没有委派子域时, “区” 和域的大小是一样的。每一台主机的域名都必须在某个权限域名服务器进行解析,因此权限域名服务器记录了其管辖范围内的域名和IP地址的解析关系。此外,权限域名服务器还知道下一级域名服务器的地址。

2.2.4 本地域名服务器

当一个主机发出DNS查询请求时,会首先请求本地域名服务器,再由本地域名服务器进行递归查询。为了提高域名服务器的可靠性,DNS域名服务器会把数据复制并保存到多个域名服务器,其中一个是主域名服务器(mastername server),其他的是辅助域名服务器(secondary name server)。当主域名服务器发生故障时,辅助域名服务器可以保证DNS的查询工作不会中断。主域名服务器定期把数据复制到辅助域名服务器中,而数据更改只能在主域名服务器中进行,这样就保证了数据的一一致性。

2.3 域名解析

域名解析是指把域名映射成为IP地址或把IP地址映射成域名的过程。前者称为正向解析,后者称为反向解析。在域名解析过程中,有两种查询方式,分别为递归查询和迭代查询。

2.3.1 递归查询

递归查询模式下,DNS服务器接收到主机请求,必须使用一个准确的查询结果回复给主机。如果DNS服务器本地没有存储查询DNS信息,则该服务器会询问其他服务器,并将返回的查询结果提交给主机。简言之,就是主机只查询一次,等DNS服务器的响应结果就行,剩下所有的事情都交给DNS服务器来处理。

2.3.2 迭代查询

迭代查询模式下,DNS服务器会向主机提供其他能够解析查询请求的DNS服务器IP地址,当主机发送查询请求时,DNS服务器并不直接回复查询结果,而是告诉主机另一台DNS服务器IP地址,主机再向这台DNS服务器提交请求,依次循环直到返回查询的结果为止。

2.3.3 递归查询+迭代查询

在DNS实际运作模式中,一般采用递归查询+迭代查询相结合的模式。即是主机向本地DNS服务器的查询采用的是递归查询,而本地DNS服务器向根域名服务器的查询采用迭代查询,其过程如图5所示。

7b2185d8d5c86afffaa3233bd00be404.png

图5 递归查询与迭代查询

3 DNS协议报文格式

DNS分为查询请求和查询响应,请求和响应的报文结构基本相同。DNS报文格式如下表所示。

0ab1e67c245360a83ef37eb8ae9fb181.png

上表中显示了DNS的报文格式。其中,事务 ID、标志、问题计数、回答资源记录数、权威名称服务器计数、附加资源记录数这6个字段是DNS的报文首部,共12个字节。整个DNS报文格式主要分为3部分内容,即基础结构部分、问题部分、资源记录部分。

3.1 基础结构部分

DNS报文的基础结构部分指的是报文首部,如下表所示。

98a894d53be917304d735af810f7a298.png

基础结构部分中的标志字段又分为若干个字段,如下表所示。

79dfa60c35688ed5ac5ff6017c26442a.png

3.2 问题部分

问题部分指的是报文格式中查询问题区域(Queries)部分。该部分是用来显示 DNS 查询请求的问题,通常只有一个问题。该部分包含正在进行的查询信息,包含查询名(被查询主机名字)、查询类型、查询类。

19d6aa540793a114387ff114ae0aa779.png

该部分中每个字段含义如下:

3.3 资源记录部分

资源记录部分是指 DNS 报文格式中的最后三个字段,包括回答问题区域字段、权威名称服务器区域字段、附加信息区域字段。这三个字段均采用一种称为资源记录的格式,格式如下表所示。

80803afba168f4d5ae777b3f9798e4a8.png

资源记录格式中每个字段含义如下:

资源记录部分只有在DNS响应包中才会出现。

3.4 DNS报文抓包分析

下面通过Wireshark进行抓包分析DNS报文。

3.4.1 基础结构部分报文分析

(1)下图中的数据包为 DNS请求包,Domain Name System(query) 部分方框标注中的信息为 DNS 报文中的基础结构部分。

58f52bd0975a2bada82a878bc627681c.png

为了方便讲解这里将信息列出进行说明:

Domain Name System (query)    Transaction ID: 0x9ad0                              #事务ID    Flags: 0x0000 Standard query                        #报文中的标志字段        0... .... .... .... = Response: Message is a query                                                        #QR字段, 值为0, 因为是一个请求包        .000 0... .... .... = Opcode: Standard query (0)                                                        #Opcode字段, 值为0, 因为是标准查询        .... ..0. .... .... = Truncated: Message is not truncated                                                        #TC字段        .... ...0 .... .... = Recursion desired: Don't do query recursively                                                         #RD字段        .... .... .0.. .... = Z: reserved (0)           #保留字段, 值为0        .... .... ...0 .... = Non-authenticated data: Unacceptable                                                           #保留字段, 值为0    Questions: 1                                        #问题计数, 这里有1个问题    Answer RRs: 0                                       #回答资源记录数    Authority RRs: 0                                    #权威名称服务器计数    Additional RRs: 0                                   #附加资源记录数

以上输出信息显示了 DNS 请求报文中基础结构部分中包含的字段以及对应的值。这里需要注意的是,在请求中 Questions 的值不可能为 0;Answer RRs,Authority RRs,Additional RRs 的值都为 0,因为在请求中还没有响应的查询结果信息。这些信息在响应包中会有相应的值。

(2)DNS响应数据包基础结构部分如下图所示。

4b3ac4790be228a55ecd397f349db7e5.png

图中方框标注部分为响应包中基础结构部分,每个字段如下:

Domain Name System (response)    Transaction ID: 0x9ad0                                    #事务ID    Flags: 0x8180 Standard query response, No error           #报文中的标志字段        1... .... .... .... = Response: Message is a response                                                              #QR字段, 值为1, 因为是一个响应包        .000 0... .... .... = Opcode: Standard query (0)      # Opcode字段        .... .0.. .... .... = Authoritative: Server is not an authority for        domain                                                #AA字段        .... ..0. .... .... = Truncated: Message is not truncated                                                              #TC字段        .... ...1 .... .... = Recursion desired: Do query recursively                                                               #RD字段        .... .... 1... .... = Recursion available: Server can do recursive        queries                                               #RA字段        .... .... .0.. .... = Z: reserved (0)        .... .... ..0. .... = Answer authenticated: Answer/authority portion        was not authenticated by the server        .... .... ...0 .... = Non-authenticated data: Unacceptable        .... .... .... 0000 = Reply code: No error (0)        #返回码字段    Questions: 1    Answer RRs: 2    Authority RRs: 5    Additional RRs: 5

以上输出信息中加粗部分为 DNS 响应包比请求包中多出来的字段信息,这些字段信息只能出现在响应包中。在输出信息最后可以看到 Answer RRs,Authority RRs,Additional RRs 都有了相应的值(不一定全为 0)。

3.4.2 问题部分报文分析

(1)DNS 请求包的问题部分字段信息,如下图所示。

0ba9feb6007faabc2068149d41eb474a.png

在下图中,Queries 部分的信息为问题部分信息,每个字段说明如下:

Domain Name System (query)                        #查询请求    Queries                                       #问题部分        baidu.com: type A, class IN            Name: baidu.com                       #查询名字段, 这里请求域名baidu.com            [Name Length: 9]            [Label Count: 2]            Type: A (Host Address) (1)            #查询类型字段, 这里为A类型            Class: IN (0x0001)                    #查询类字段, 这里为互联网地址

其中,可以看到 DNS 请求类型为 A,那么得到的响应信息也应该为 A 类型。

(2)DNS 响应包的问题部分字段信息,如下图所示。

eac5dac19a0d0fc7d56f302345347d0a.png

从图中 Queries 部分中可以看到,响应包中的查询类型也是 A,与请求包的查询类型是一致的。

3.4.3 资源记录部分报文分析

资源记录部分只有在 DNS 响应包中才会出现。下面通过 DNS 响应包来进一步了解资源记录部分的字段信息。

(1)DNS 响应包的资源记录部分的字段信息,如下图所示。

7d91236b44bdc013c098fa6ca25a77c6.png

其中,方框中标注的信息为 DNS 响应报文的资源记录部分信息。该部分信息主要分为三部分信息,即回答问题区域权威名称服务器区域附加信息区域,下面依次分析这三部分信息。

(2)回答问题区域字段的资源记录部分信息如下:

Answers                                                      #“回答问题区域”字段    baidu.com: type A, class IN, addr 220.181.57.216         #资源记录部分        Name: baidu.com                                      #域名字段, 这里请求的域名为baidu.com        Type: A (Host Address) (1)                           #类型字段, 这里为A类型        Class: IN (0x0001)                                   #类字段        Time to live: 5                                      #生存时间        Data length: 4                                       #数据长度        Address: 220.181.57.216                              #资源数据, 这里为IP地址    baidu.com: type A, class IN, addr 123.125.115.110        #资源记录部分        Name: baidu.com        Type: A (Host Address) (1)        Class: IN (0x0001)        Time to live: 5        Data length: 4        Address: 123.125.115.110

其中,Name 的值为 baidu.com,表示 DNS 请求的域名为 baidu.com;类型为 A,表示要获取该域名对应的 IP 地址。Address 的值显示了该域名对应的 IP 地址。这里获取到了 2 个 IP 地址,分别为 220.181.57.216和 123.125.115.110

(3)权威名称服务器区域字段的资源记录部分信息如下:

Authoritative nameservers                               #“权威名称服务器区域”字段baidu.com: type NS, class IN, ns ns7.baidu.com      #资源记录部分Name: baidu.comType: NS (authoritative Name Server) (2)        #类型字段, 这里为NS类型Class: IN (0x0001)Time to live: 5Data length: 6Name Server: ns7.baidu.com                      #权威名称服务器baidu.com: type NS, class IN, ns dns.baidu.com      #资源记录部分Name: baidu.comType: NS (authoritative Name Server) (2)        #类型字段, 这里为NS类型Class: IN (0x0001)Time to live: 5Data length: 6Name Server: dns.baidu.com                      #权威名称服务器baidu.com: type NS, class IN, ns ns3.baidu.com      #资源记录部分Name: baidu.comType: NS (authoritative Name Server) (2)Class: IN (0x0001)Time to live: 5Data length: 6Name Server: ns3.baidu.com                      #权威名称服务器baidu.com: type NS, class IN, ns ns4.baidu.com      #资源记录部分Name: baidu.comType: NS (authoritative Name Server) (2)Class: IN (0x0001)Time to live: 5Data length: 6Name Server: ns4.baidu.com                      #权威名称服务器baidu.com: type NS, class IN, ns ns2.baidu.com      #资源记录部分Name: baidu.comType: NS (authoritative Name Server) (2)Class: IN (0x0001)Time to live: 5Data length: 6Name Server: ns2.baidu.com                      #权威名称服务器

(4)附加信息区域字段的资源记录部分信息如下:

Additional records                                            #“附加信息区域”字段    dns.baidu.com: type A, class IN, addr 202.108.22.220      #资源记录部分        Name: dns.baidu.com                                   #“权威名称服务器”名称        Type: A (Host Address) (1)                            #类型字段, 这里为A类型        Class: IN (0x0001)        Time to live: 5        Data length: 4        Address: 202.108.22.220                               #“权威名称服务器”的IP地址    ns2.baidu.com: type A, class IN, addr 61.135.165.235      #资源记录部分        Name: ns2.baidu.com                                   #“权威名称服务器”名称        Type: A (Host Address) (1)                            #类型字段, 这里为A类型        Class: IN (0x0001)        Time to live: 5        Data length: 4        Address: 61.135.165.235                               #“权威名称服务器”的IP地址    ns3.baidu.com: type A, class IN, addr 220.181.37.10       #资源记录部分        Name: ns3.baidu.com                                   #“权威名称服务器”名称        Type: A (Host Address) (1)                            #类型字段, 这里为A类型        Class: IN (0x0001)          Time to live: 5        Data length: 4        Address: 220.181.37.10                                 #“权威名称服务器”的IP地址    ns4.baidu.com: type A, class IN, addr 220.181.38.10        #资源记录部分        Name: ns4.baidu.com                                    #“权威名称服务器”名称        Type: A (Host Address) (1)                             #类型字段, 这里为A类型        Class: IN (0x0001)        Time to live: 5        Data length: 4        Address: 220.181.38.10                                 #“权威名称服务器”的IP地址    ns7.baidu.com: type A, class IN, addr 180.76.76.92         #资源记录部分        Name: ns7.baidu.com                                    #“权威名称服务器”名称        Type: A (Host Address) (1)                             #类型字段, 这里为A类型        Class: IN (0x0001)        Time to live: 5        Data length: 4        Address: 180.76.76.92                                  #“权威名称服务器”的IP地址

例如,权威名称服务器名称 ns7.baidu.com 对应的 IP 地址为 180.76.76.92

4 总结

 

 

来源地址:https://blog.csdn.net/m0_59795797/article/details/130020058

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-服务器
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯