域名的分层结构
域名解析过程遵循分层递归查询机制,这一机制由域名的层次结构所决定。
下面以example.com为例,详细说明域名的组成结构及其级别:

- 根域(.)
根域即“.”,是最高级别的域名。
域名在DNS系统中的完整格式为“example.com.”。当我们在浏览器中输入域名时,通常会省略最后的“.”,输入“example.com”,DNS系统会默认将域名转换为完整格式。
“.”对应根域名服务器,是最高级别的DNS服务器,保存顶级域DNS服务器地址。
- 顶级域(.com)
顶级域根据域名后缀进行区分,主要包括两大类:
- 通用顶级域,如.com,.net,.org,.top等。
- 国家顶级域,如.cn,.uk,.de等。
顶级域对应顶级域名服务器,保存顶级域对应二级域DNS服务器地址。例如,.com顶级域对应的顶级域名服务器保存后缀为.com的二级域名的DNS服务器地址。
- 二级域(example.com)
二级域是顶级域的子域,对应权威DNS服务器,为域名提供权威域名解析服务。
例如,您在域名服务商处购买域名example.com,并设置域名的DNS服务器地址,实际上就是将为域名example.com提供权威解析服务的DNS服务器地址告知.com顶级域的过程。
如果您选择华为云的云解析服务解析域名,则云解析服务作为权威DNS服务器,为您提供域名的权威DNS服务。
- 子域(www.example.com)
二级域名进一步细分产生子域名,表示具体的服务器或服务。
DNS的分层结构
对应域名的分层结构,DNS也有对应的层次结构,DNS的分层结构从根服务器开始,依次经过顶级域名服务器、权威域名服务器,再到本地和缓存服务器,每一层都有其特定的功能,共同协作完成域名解析过程。这种分层设计不仅提高了效率,还增强了系统的可靠性和可扩展性。
- 根域名服务器(Root Name Server,简称Root Server)
作为DNS的顶层,根服务器管理所有顶级域名(TLD)。当本地域名服务器在本地查询不到解析结果时,则第一步会向根域名服务器进行查询,并获取对应的IP地址。
- 顶级域名服务器(Top-Level Domain Name Server,简称TLD Server)
顶级域名服务器管理特定的顶级域名,如.com、.org、.net等通用顶级域名,以及和.cn、.us等国家顶级域名。
每个顶级域名都有自己的服务器,负责处理该域名下的所有子域名。例如“www.example.com”,.com则是顶级域名服务器,在向它查询时,可以返回二级域名“example.com”所在的权威域名服务器地址。
- 权威域名服务器(Authoritative Name Server,简称NS)
负责管理特定域名与IP地址之间的对应关系,如域名example.com下的子域名www.example.com,当DNS查询到达该级别时,服务器返回目标域名的IP地址。
- 本地域名服务器(Local DNS Server,简称Local DNS)
本地域名服务器指用户客户端(手机、电脑等)连接Internet网络使用的DNS,通常由互联网服务提供商(Internet Service Provider,简称ISP)或组织内部使用,用于响应来自客户端的递归请求。当用户请求访问一个域名时,本地服务器发起递归查询,逐层向上查找,直到找到对应的IP地址,并将结果缓存以提高后续请求的速度。
用户也可以将该DNS修改为公共DNS服务器,例如,114.114.114.114、8.8.8.8。
DNS的解析过程
通过域名www.example.com访问网站的域名解析过程如图1所示。
图1 域名解析过程
- 用户通过Web浏览器输入网站域名www.example.com。
- Web浏览器将对域名www.example.com的查询请求路由到Local DNS。
Local DNS缓存域名解析数据,并提供递归查询功能。Local DNS通常是Internet服务商提供的DNS。
- Local DNS在缓存中没有查询到域名的解析记录,将对域名www.example.com的查询请求路由到根域名服务器。
- 因域名后缀为.com,根域名服务器向Local DNS返回.com顶级域服务器的地址。
- Local DNS将对域名www.example.com的查询请求路由到.com顶级域服务器。
- .com顶级域服务器向Local DNS返回为域名example.com提供权威解析服务的权威DNS服务器地址。
- Local DNS将对域名www.example.com的查询请求路由到权威DNS服务器。
如果域名www.example.com的DNS服务器设置为华为云DNS服务器地址,则云解析服务作为权威DNS服务器为域名提供权威的解析记录。
- 权威DNS服务器向Local DNS返回域名对应的网站IP地址。
- Local DNS向Web浏览器返回网站IP地址。
- Web浏览器通过网站IP地址访问网站服务器。
- 网站服务器向Web浏览器返回网站主页。
- 终端用户从Web浏览器获取网站主页,对网站的访问成功。
术语
DNS缓存
DNS缓存是一种存储机制,用于临时保存域名的解析数据,通常位于用户的设备、路由器或ISP的服务器中,以提高网络访问速度和效率。
当用户访问一个域名时,设备首先检查本地缓存,若找到对应解析数据则直接使用,否则设备会向ISP或其他DNS服务器查询,并将结果存储在缓存中以备后续使用。
相关文档:
TTL
TTL(Time To Live),指解析记录在本地DNS服务器中的缓存时间,合理设置TTL可以平衡DNS服务器的负载和解析速度,同时影响DNS变更的生效时间。
当本地DNS服务器收到某一域名的解析请求时,需要向域名指定的权威DNS服务器发送解析请求获取解析记录。获得的解析记录会在本地DNS服务器中保存一段时间。在这段时间内,如果本地DNS服务器再次收到域名的解析请求,将不再向权威DNS服务器发送解析请求,而是直接返回保存在本地DNS服务器中的解析记录。
解析记录在本地DNS服务器的保存时间就是TTL值,用户可以在为公网域名或者内网域名添加记录集时设置,具体操作请参见管理记录集。
如下操作的生效时间均与TTL值有关,如果要加快生效,可以通过调小TTL值的方式实现:
URL转发
URL转发,也称为URL重定向,当用户或系统访问一个特定的URL时,服务器自动将请求重定向到另一个URL。这种重定向可以是永久的或临时的,具体取决于使用的HTTP状态码。通常应用在以下场景中:
- 网站迁移:当网站从一个服务器迁移到另一个服务器时,可以使用URL转发来确保用户访问原服务器地址时能够被重定向到新服务器地址。
- 域名更改:当企业更改其域名时,旧域名可以通过URL转发保持活跃,避免用户访问错误。
- 缩短URL:一些服务使用URL转发来缩短长链接,便于分享和跟踪。
- 维护SEO:搜索引擎优化中,URL转发可以保持旧页面的SEO价值,同时将流量引导到新页面。
- 负载均衡:在服务器负载均衡中,URL转发可以帮助将用户请求分配到不同的服务器上。
URL转发一般分为URL显性转发和URL隐性转发,本节介绍的Nginx实现URL转发即URL显性转发。
相关文档:
添加显性/隐性URL类型记录集
递归查询/递归解析
递归查询和递归解析是DNS解析中的两个关键步骤,递归查询由客户端发起,递归解析由DNS服务器执行,确保客户端能够高效地获得域名解析结果。
- 递归查询:是客户端(如用户的计算机)向DNS服务器发送的一种请求类型。客户端发送递归查询请求到DNS服务器,DNS服务器负责处理整个查询过程,直到找到目标域名的查询结果并返回给客户端。客户端只需发送一次请求,无需多次查询不同的服务器。
- 递归解析:是DNS服务器在处理递归查询请求时所采用的方法。当DNS服务器收到递归查询请求时,从根服务器开始,逐步查询顶级域名服务器,直到找到权威域名服务器,获取目标域名的查询结果并返回给客户端。用户无需自行处理复杂的查询过程。
相关文档:
设置子域名递归解析
DNSSEC
域名系统安全扩展(Domain Name System Security Extensions,简称DNSSEC),通过数字签名和公钥加密确保DNS应答报文的真实性和完整性,能够保护用户不被重定向到非预期地址,防止DNS欺骗和缓存污染等攻击,保护用户核心业务。
工作原理和主要功能
- 数字签名保证数据完整性:对DNS记录进行签名,验证数据完整性,确保DNS记录未被篡改。
- 公钥加密保证数据来源可信:使用公钥验证签名,确保信息来自可信来源。
- 完整信任链预防DNS欺骗与缓存污染:从根服务器到顶级域名服务器,再到权威服务器,形成完整的信任链,阻止攻击者在DNS缓存中插入虚假记录。
相关文档:
配置DNSSEC
DKIM
域名密钥识别邮件(DomainKeys Identified Mail,简称DKIM)是一种用于验证电子邮件来源真实性和完整性的技术标准,通过数字签名机制防止邮件伪造和篡改。
核心原理和工作流程:
- 密钥生成与分发
- DKIM使用一对密钥:私钥和公钥。
- 私钥由发送方的邮件服务器保管,用于签名邮件。
- 公钥存储在发送方域名的DNS记录中,通常作为TXT记录,供接收方查询。
- 邮件签名过程
- 发送邮件时,邮件服务器使用私钥对邮件的特定部分(如报头和正文)生成数字签名。
- 签名信息被插入到邮件的DKIM-Signature报头字段中,包含哈希值、使用的算法(如RSA-SHA256)和域名信息。
- 接收方验证
- 接收方服务器解析邮件头中的DKIM-Signature字段,提取签名信息。
- 通过查询发送方域名的DNS记录获取公钥。
- 使用公钥验证签名,计算邮件内容的哈希值并与签名中的哈希值进行比较。
- 如果匹配,验证通过,确认邮件未被篡改且来源真实;否则,可能标记为垃圾邮件或拒收。
示例:
一个典型的DKIM签名头字段如下:
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.com;
s=mail; h=From:Subject:Date:Message-ID:To:MIME-Version:Content-Type;
bh=abc123==; b=def456==;
- v=1:DKIM版本。
- a=rsa-sha256:使用的签名算法。
- c=relaxed/relaxed:签名内容的处理方式。
- d=example.com:发件人域名。
- s=mail:密钥选择器。
- h=...:签名的邮件头字段。
- bh=...:邮件正文的哈希值。
- b=...:签名值。
SPF
发送方框架策略(Sender Framework Policy,简称SPF)是一种用于验证电子邮件发件人身份的技术,旨在防止垃圾邮件和钓鱼攻击。它通过检查发送邮件的IP地址是否被发件人域名的管理员授权,来验证邮件的合法性。
核心原理和工作流程:
- 定义授权IP地址
域名所有者在DNS中配置一条TXT或SPF记录,列出所有被授权发送邮件的IP地址或服务器。
- 验证过程
- 当邮件服务器收到邮件时,它会检查邮件的Return-Path(发件人地址)。
- 邮件服务器通过DNS查询发件人域名的SPF记录。
- 验证发送邮件的IP地址是否在SPF记录中被授权。
- 如果匹配,邮件通过验证;否则,可能被标记为垃圾邮件或拒收。
示例:
以下是TXT类型解析记录的SPF记录值:
v=spf1 include:spf.example.com -all
相关文档:
泛解析
泛解析,是指使用通配符“*”作为子域名的主机记录,实现所有子域名指向同一个IP地址或目标。
例如,域名.example.com设置泛解析*.example.com,则会将该域名下的所有子域名如www.example.com、abc.example.com、test.example.com等子域名都将解析到与 *.example.com 相同的IP地址或目标。
应用场景:
- 静态资源托管
将所有子域名指向同一个CDN或静态资源服务器,提高资源加载速度和管理效率。
- 测试和开发环境
快速创建和测试多个子域名,无需频繁调整DNS设置,提升开发效率。
- 用户生成内容平台
允许用户创建个人子域名博客或网站,所有子域名自动指向同一服务器,简化管理流程。
- API服务
通过不同子域名访问同一API服务,统一管理API请求,提升服务灵活性。
- 多语言或地区站点
所有子域名指向同一多语言网站,根据用户语言或地区自动切换内容,优化用户体验。
- 临时或动态子域名
快速创建临时促销或活动子域名,无需手动配置,提升响应速度。
相关文档:
设置域名泛解析
域名所有者
域名所有者,即注册购买域名的个人或组织。以下是域名所有者的详细说明:
- 所有权与控制权:域名所有者拥有域名的使用权,可以决定如何使用该域名,例如指向特定的服务器或设置子域名。
- 注册与维护:域名所有者需在注册商处注册域名,并支付年度费用以续费,确保域名不被过期。
- 信息管理:注册时需提供个人信息(如姓名、地址、邮箱),这些信息通常在WHOIS数据库中公开,但可选择隐私保护服务以隐藏真实信息。
- 管理权限:域名所有者可以管理DNS设置,控制网站的解析,设置安全记录(如DKIM、SPF),以及转移域名至其他注册商。
- 续费与转移:必须及时续费以避免域名过期。若想转让域名,需通过注册商进行转移或在二级市场交易。
DNS服务商
DNS服务商是提供域名系统(DNS)服务的公司,负责管理域名的解析设置,确保域名正确指向对应的服务器IP地址。以下介绍DNS服务商的主要作用:
- 域名解析:将用户输入的域名转换为对应的IP地址,使用户能够访问目标网站。
- 管理DNS记录:允许用户设置和管理各种DNS记录,如A记录、CNAME记录、MX记录等。
- 高可用性和稳定性:通过多节点分布,确保DNS解析的稳定性和快速响应。
- 增值服务:提供负载均衡、CDN集成、DDoS防护、智能解析等功能,提升网站性能和安全性。
项目
项目用于将资源(计算资源、存储资源和网络资源等)进行分组和隔离。项目可以是一个部门或者一个项目组。
一个账户中可以创建多个项目。
对于云解析服务,公网域名属于Global级别的资源,而内网域名和反向解析属于区域级别的资源。因此,系统会基于项目实现内网域名、反向解析资源的隔离和管理。在创建、查询、设置内网域名和反向解析前,用户需先指定区域和项目,然后在指定项目下执行相关操作。