1. 域名服务器(DNS)

        域名服务器(DNS),全称Domaine Name Server, 是互联网中的一个关键系统,负责将域名解析为相应的IP地址。

以下是关于DNS的一些关键信息:

1.1 为什么要使用域名

        用户更喜欢使用域名(例如,example.com)而不是数字形式的IP地址,因为域名更容易记忆和使用。

1.2 逻辑名称与IP地址的关联

        DNS建立逻辑名称(域名)与这些名称关联的IP地址之间的对应关系。

1.3 从初始阶段演变为分散式系统

        初始阶段,使用host.txt文件来解析域名到IP地址。该文件是集中式的,需要手动更新。由斯坦福研究所(SRI)维护,通过电子邮件或FTP进行更新。

        DNS发展为一个分散式系统,其中解析数据分布在世界各地的多个服务器上。使用分布式DNS服务器提供用于全球范围内的域名解析的目录服务(数据库)。

1.4 DNS的工作原理

        客户端使用DNS解析器来查询DNS服务器,以获取域名和IP地址之间的对应关系。

        DNS按照分层模型运行,有多种类型的服务器(名称服务器、域服务器等)。

1.5 DNS的性质

        分布式数据库:DNS是一个全球分布的数据库系统,它存储了域名和与之对应的IP地址信息。

        弱一致性:由于信息在整个网络中分布式存储,且更新需要一定的时间才能在所有服务器之间传播,所以DNS被认为是具有弱一致性的系统。这意味着,在某个时刻,不同的DNS服务器可能会返回不同的查询结果。

2. 域名系统组成部分

2.1 命名空间(Namespace)

        命名空间在DNS(Domain Name System)中是一个关键概念,它是指所有可能的域名的集合,这些域名通过DNS系统进行管理和解析、命名和组织。DNS提供了一个全球性的命名空间,保证了域名的唯一性和一致性。        

        命名空间是分层次的,顶级域名(如.com、.org、.net)位于层次结构的顶部,而二级域名、三级域名等依次往下。  二级域名(如 `example.com`)。

2.2 使命名空间可用的服务器(Servers)

        DNS使用一组分布式的DNS服务器。这些服务器存储了域名与IP地址之间的映射关系,客户端可以向这些服务器发送查询来获取相应的映射信息。 这些服务器是DNS的主体,它们使命名空间可用,并响应客户端请求。它们通常分为不同的类型,包括根服务器、顶级域名服务器、权威名称服务器和递归服务器等。

2.3 客户端(Resolvers)向服务器查询(解析器)

        客户端,通常是DNS解析器,会向DNS服务器发出查询请求,请求特定域名对应的IP地址或其他相关信息它在用户设备上运行,负责向DNS服务器发送查询请求,并接收响应。

2.4 传输协议

        DNS查询消息由UDP协议(端口53)提供传输,因为UDP更快且不需要建立连接。但对于大型消息或与DNS服务器之间的区域相关的信息传输,有时会使用TCP。

        总体而言,DNS的命名空间是一个巨大的、分层次的命名体系,通过分布式的DNS服务器提供域名解析服务,使用户可以通过易记的域名访问互联网上的资源。DNS允许用户通过域名来访问网络服务而不必记住复杂的IP地址。例如,当用户在浏览器中输入 `www.example.com` 时,DNS解析器将查询DNS服务器以找到与该域名对应的IP地址,然后用户的设备就可以使用这个IP地址与网站的服务器进行通信。

3. DNS的组织与层级结构

        域名系统(DNS)服务的分布式和分层组织对于域名到IP地址的解析至关重要。以下是关于该组织的关键信息:

3.1 层次结构的根

        DNS层次结构的根由一个点(.)表示,标志着最高层次。在顶端是根(root)域名,用一个点(.)表示。

3.2 分层级别(顶级域 - TLDs)

        顶级域名(TLDs)是DNS层次结构的最高级别。

        主要有两种类型的TLDs:

        通用顶级域名(gTLDs):包括.com、.net、.org等通用类别的域名,通常与通用类别或组织相关联。

        国家和地区顶级域名(ccTLDs - 国家代码TLDs):例如.fr(法国)、.us(美国)、.uk(英国)等,与特定国家或地区相关联。

3.3 第二级域名(SLD)

        位于TLD之下,是域名所有者可以选择的特定名称级别。

3.4 子域名和子层次结构

        在SLD之后,层次结构可以继续以子域名为单位扩展(例如,www.example.com),允许更详细的组织。

3.5 arpa的用途

        "arpa"域用于特定目的,包括IP地址和域名之间的对应关系,反转通常的解析过程。

        DNS的组织和层级是分散的,意味着没有单一的中心点控制整个系统,而是通过一系列分布式的数据库和协议工作的。这种结构有助于互联网的稳定性和扩展性。

4. 域名

4.1 分布式和分层的命名服务组织:

4.1.1 域名

        指互联网上用来识别各种资源的名称系统。

4.1.2 中间层级

        域名系统(DNS)采用分布式和分层的组织结构,其中域名按层次划分,包括顶级域、二级域、三级域等,以此类推。                

        中间层级是指在这个层次结构中,位于顶级域名(如.com、.org)和最终域名或主机名(比如www)之间的部分。例如,在完整的域名www.subdomain.example.com中,subdomain就是中间层级,它是example.com这个二级域名的一个分支。

4.1.3 叶节点层级

        叶节点层级通常是指域名结构中的最末端(通常为最左端),也就是具体的主机名或服务,例如host.subdomain.example.com中的host。

        中间层级包括子域名,而叶层包含子域名(主机或服务)。

4.1.4 域名示例

        以".fr"为例,所有在".fr"下面的内容都属于".fr"域。类似地,所有在"imt-atlantique.fr"下面的内容都属于"imt-atlantique.fr"域,也同时属于".fr"域。

4.2 顶级域名(TLDs)列表

        IANA维护的TLDs列表可在http://data.iana.org/TLD/tlds-alpha-by-domain.txt找到,列出了所有TLDs

4.3 树形结构的命名组织

        树形结构的命名组织讲的是域名系统使用类似树的方式组织域名,允许将管理权限委派给下一级。DNS的命名树结构不直接映射到互联网的物理拓扑。它基于逻辑层次结构,不一定反映网络的物理连接。

4.4 分层命名的组织结构的好处

        分层的命名结构允许将域的管理权委托出去。

        每个域的管理员都隐式信任其父域的管理员。

        若要在域内创建名称,只需获得该域的管理员授权。        

4.5 管理员的权限

        管理员可以随意创建子域。

        管理员可以将管理责任委派给其他人。

        父域知道哪个子域名被委托给了哪个管理员。

5. 域名系统(DNS)中的责任和行政分区

        域名系统(DNS)的责任和行政分区主要涉及到区域(Zone)和不同类型的服务器。这些组成部分共同确保了域名解析的效率和可靠性。

5.1 责任和行政分区

        区域(Zone):在DNS中,一个区域是一个管理空间或行政区域,它包含了一组域名,这些域名由同一DNS服务器或服务器组管理。

        权威服务器:对于其管理区域内的域名查询,权威服务器能够提供权威答案。如果一个服务器是某个区域的权威服务器,它就有权对该区域的DNS查询做出官方回应。

5.2 服务器类型

        权威服务器:负责为特定域提供权威答案的服务器。

        主服务器:主要负责编辑和更新区域数据的服务器。其他服务器(如从服务器)通常从主服务器获取最新数据。

        从服务器(备份服务器):用于复制和存储从主服务器获得的区域数据,以保证数据的冗余和系统的稳定性。

        缓存服务器(递归服务器):这些服务器不直接管理区域数据,而是存储过去查询的结果,以便加快未来相似查询的响应时间。

        在DNS体系中,这种分层和分布式的结构设计使得域名解析既高效又可靠,同时也允许在多个服务器之间同步域名数据,保证了不同查询的快速响应。

6. DNS(域名系统)中的根服务器(serveurs racines)

6.1 根服务器概述

        根服务器”是负责管理DNS系统最顶层的服务器,即根区域(用一个点“.”表示)。目前,全球共有13台根服务器,它们的名称从a.root-servers.net到m.root-servers.net。所有DNS服务器都可以访问根服务器的信息。

6.2 负责与管理

        根服务器由ICANN(互联网名称和数字地址分配机构)负责,但是由不同的组织和委员会共同管理。其中一个顾问委员会是RSSAC(DNS根服务器系统咨询委员会)。

6.3 功能

        这13个根服务器能够将DNS查询重定向到负责管理顶级域名(TLD)的DNS服务器。

6.4 管理组织

        有12个不同的组织负责这些根服务器的管理,包括Verisign、USC-ISI、Cogent等。

        这些根服务器对于全球DNS系统的稳定运行和域名解析起着至关重要的作用,负责管理整个域名层次结构的最高级别。根服务器是整个DNS查询过程的起点,当本地DNS服务器无法解析一个域名时,它会向根服务器查询,根服务器会告诉本地服务器去哪里查询相应的顶级域名服务器以获取答案。这个过程对于互联网的正常运作至关重要。

7. DNS(域名系统)中的请求解析过程以及两种解析模式

7.1 请求解析过程

        在DNS中,解析请求通常涉及向多个DNS服务器查询,直到找到答案为止。解析过程可能需要查询多个服务器,包括根服务器、顶级域服务器和授权服务器。

7.2 解析模式—两种解析模式

7.2.1 递归模式

        客户端向DNS服务器发出请求后,该服务器将负责整个解析过程。如果这个服务器没有请求的记录,它将代表客户端查询其他服务器,直到找到答案,然后将答案返回给客户端。这对客户端来说很方便,因为它只需要等待最终的答案。

a.解析器(resolver)向本地DNS服务器发起查询。本地DNS服务器可以是当前域的主服务器或辅助服务器。

b.如果本地DNS服务器没有存储请求的记录,它会查询一个更高级别的、具备该信息的权威DNS服务器,并将请求转发给它。

c.本地DNS服务器会继续这个过程,根据返回的信息向其他服务器进行查询,直到找到最终的答案。

        这个过程是递归的,因为本地DNS服务器代表客户端(解析器)做了所有工作,客户端只需等待最终的答案。在图示中,这个过程用箭头和数字1到5标出了查询的顺序。例如,一个客户端请求解析`www.example.fr`的IP地址,本地DNS服务器(标号2)会递归地查询更高级别的DNS服务器,直到获得答案,并将结果返回给客户端。

7.2.2 迭代模式

        在这种模式下,DNS服务器不会代替客户端完成所有查询。相反,服务器会向客户端提供它所知道的下一个查询服务器的地址。然后客户端会向这个新的服务器发起查询。如果这个新服务器也不知道答案,它会继续提供下一个服务器的地址,如此循环,直到找到答案。在这种情况下,客户端需要进行多次查询,直到找到最终的记录。

a. 在迭代模式下,当一个客户端(或本地DNS服务器)请求解析一个域名时,它会向根服务器或其他公共DNS服务器发送查询。

b. 根服务器或公共DNS服务器不会执行完整的查询过程,而是会告诉本地DNS服务器下一步应该查询哪个服务器。

c. 然后本地DNS服务器会根据这个信息继续向下一个服务器发送查询请求。

d. 这个过程会重复进行,直到找到最终的答案。

        通常情况下,根服务器或公共DNS服务器以迭代模式运行。网络核心的服务器或运营商提供的服务器,或者是内网中的服务器,会为用户提供递归查询服务。

        这意味着,虽然根服务器通常使用迭代模式来指导查询的下一步向哪里走,但用户通常不直接与根服务器进行交互。相反,他们的查询会通过提供递归服务的本地DNS服务器,这样的服务器会处理复杂的查询过程,最后将结果返回给用户。这两种模式允许DNS系统在解析请求时进行灵活的查询和交互,以确保最终找到正确的答案并将其返回给客户端。

8. Resource Records资源记录

8.1 基本概念

        DNS资源记录(Resource Records,简称RR)是DNS(域名系统)中的基本信息单位,它们用于提供关于域名的信息。当您在浏览器中输入一个网址,例如www.example.com,DNS服务器会使用资源记录来解析这个域名对应的IP地址,使您的浏览器能够连接到正确的服务器。

DNS资源记录(Resource Records)的结构和一些常见类型的解释。资源记录是DNS中用来定义域名及其关联数据的格式。这里是它们的含义:

        Label:这是完全限定域名(FQDN),例如`www.example.com`。

        TTL:时间至生存(Time To Live),表示资源记录在DNS缓存中的过期时间。

        Class:通常为“IN”,表示互联网。

8.2 类型

        A:指定域名对应的IPv4地址。

        NS:名称服务器记录,指定该域名由哪个DNS服务器控制。

        M:邮件交换记录,指定处理该域名电子邮件的服务器。

        Rdata:记录数据,包含了记录特定的信息,例如A记录中的IP地址。

8.3 SOA记录(Start Of Authority)

SOA记录:包含了关于域的一般信息,如:

8.3.1 主服务器(Primary Server)

        主服务器的名称,即该域的主权机构,负责管理此域的DNS记录。

8.3.2 管理员邮箱地址(Responsible Mail Address)

        管理员的电子邮件地址,负责管理该域的人员的联系信息。

8.3.3 序列号(Serial Number)        

        序列号,每次更新域信息时递增,用于跟踪更改并确保记录的正确更新。

8.3.4 刷新间隔(Refresh Interval)

        两次更新域信息之间的时间间隔,以秒为单位。

8.3.5 重试间隔(Retry Interval)

        在更新失败的情况下,重新尝试更新辅助服务器的时间间隔,以秒为单位。

8.3.6 最小生存时间(Minimum TTL)

        记录在缓存中保留的最小时间(生存时间),以秒为单位。

        SOA记录非常重要,因为它提供了关于域的重要指导,帮助管理和同步域,确保DNS系统的正常运行。

9. DNS-over-HTTPS(DOH)

9.1 DOH的概念

        一种通过将DNS请求封装在HTTPS协议中以确保安全性和隐私的技术。DNS over HTTPS(简称DoH)是一种网络安全协议,它通过HTTPS协议在客户端和DNS解析器之间加密DNS查询,这样可以提高隐私和安全性,因为它可以防止中间人攻击和DNS劫持。

a. 由云内容提供商提供:云服务提供商提供DoH服务,允许通过安全的HTTPS连接解析DNS请求。

b. 浏览器控制DNS查询:现代浏览器如Firefox和Chrome已经支持DoH,这意味着它们可以控制DNS流量,而不是传统的通过操作系统的DNS设置。

c. 加密传输:DoH请求通过HTTPS在443端口发送,这是标准的加密网页流量使用的端口,使得DNS查询和普通的HTTPS流量混合在一起,更难被监控和过滤。

d. 绕过ISP过滤:因为DoH使用的是加密的HTTPS连接,所以它可以绕过互联网服务提供商(ISP)的DNS过滤和监控,ISP难以看到或控制DNS查询内容。

        总的来说,DoH提供了一种更安全和隐私的方式来进行DNS查询,它通过标准的HTTPS协议,保护查询不被篡改或监听。这在保护用户隐私、防止审查和减少DNS基于攻击上是一个重要的步骤。

9.2 DOH的代码

        如何通过HTTPS协议发送一个DNS查询请求,即DNS over HTTPS(DoH)。这种方法可以让你通过HTTPS安全地获取一个网站的IP地址。具体的请求如下:

:method = GET
:scheme = https
:authority = dnsserver.example.net
:path = /dns-query?dns=AAABAAABAAAAAAAAA3d3d 2NvbQAAAQAB
accept = application/dns-message

:method = GET`:使用GET方法请求数据。

:scheme = https`:请求使用HTTPS协议,确保通信安全。

:authority = dnsserver.example.net`:指定域名服务器的地址,即dnsserver.example.net。

:path = /dns-query?dns=AAABAAABAAAAAAAAA3d3d2NvbQAAAQAB`:指定请求的具体路径和查询参数。这里的参数是经过Base64编码的DNS请求。

accept = application/dns-message告诉服务器,客户端希望以`application/dns-message`格式的DNS消息接收响应。

简单来说,这个GET请求是在告诉一个叫`dnsserver.example.net`的服务器:“我想安全地查询`www.example.com`的IP地址。”服务器会收到这个请求,进行DNS查询,然后以安全的方式返回查询结果。

这段文本是对一个DNS over HTTPS(DoH)请求的响应示例。响应内容如下:

:status = 200
content-type = application/dns-message
content-length = 61
cache-control = max-age=3709
¡61 bytes represented by the following hex encoding¿
00 00 81 80 00 01 00 01 00 00 00 00 03 77 77 77
07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 00 1c 00 ...

:status = 200:HTTP状态码为200,意味着请求成功。

content-type = application/dns-message:响应内容的类型为DNS消息。

content-length = 61:响应内容的长度为61字节。

cache-control = max-age=3709:这个HTTP头部字段指定了响应可以被缓存的最大时间,单位是秒,在这个例子中是3709秒。

接着,响应内容以16进制编码的形式表示,通常用于传输二进制数据。在这个例子中,只提供了响应内容的开头部分:

`00 00`:通常是事务ID,用于匹配请求和响应。

`81 80`:标志字段,表示响应和请求状态,`81 80`通常表示一个标准查询响应,查询成功。

`00 01`:问题计数,表示在请求中请求了一个DNS查询。

`00 01`:回答记录数,表示响应包含一个回答。

`00 00`:权威记录数,这里表示没有权威回答。

`00 00`:额外记录数,这里表示没有额外信息。

        接下来的一系列数字和字母(03 77 77 77 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 00 1c 00 ...)是查询的域名和查询结果,以及响应数据。

        解析这些16进制数据可以提供请求的域名和对应的IP地址。由于数据是不完整的,无法提供完整的解析结果。不过,从提4供的部分可以看出,查询的是`www.example.com`的地址记录。

总体来说,这是一个HTTP响应,其内容是61字节的DNS查询响应,状态码为200表示请求成功。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐