计算机网络 —— 应用层(DNS域名系统)
- 什么是DNS
- 域名的层次结构
- 域名分类
- 域名服务器的分类
- 域名解析方式
- 递归查询(Recursive Query)
- 迭代查询(Iterative Query)
- 域名的高速缓存
我们今天来看DNS域名系统
什么是DNS
DNS,全称为Domain Name System,即域名系统,它是互联网的核心组件之一,扮演着互联网“电话簿”的角色。DNS的主要职责是将人类易于记忆和使用的域名(比如www.example.com
)转换为计算机能够识别和连接的IP地址(如192.168.1.1
)。这一过程称为域名解析。
DNS的工作原理大致如下:
- 客户端查询:当用户在浏览器中输入一个网址时,计算机首先查询本地DNS缓存(如果之前已经访问过该网站),看是否有该域名对应的IP地址记录。如果没有找到,请求会被转发到本地配置的DNS递归解析器,通常是用户的ISP(互联网服务提供商)提供的DNS服务器。
- 递归查询:DNS递归解析器接收到请求后,如果其缓存中也没有相关信息,它会代表客户端开始一个递归查询过程。这个过程涉及与多个DNS服务器的交互,从根域名服务器开始,然后到*域名(TLD)服务器,再至权威域名服务器,直到找到存储该域名对应IP地址的服务器。
- 解析过程:
- 根域名服务器会指引查询到正确的*域名服务器(如.com、.org)。
- *域名服务器进一步将查询转发到负责该特定域名的权威域名服务器。
- 权威域名服务器最终提供该域名对应的IP地址给递归解析器,递归解析器再将此信息返回给客户端。
- 缓存:为了提高效率,每一级DNS服务器和客户端都会缓存得到的域名到IP地址的映射关系,这样后续相同的查询就可以直接从缓存中获取结果,而不需要重复完整的查询过程。
DNS不仅用于网站地址的解析,还应用于电子邮件路由、及其他依赖于域名的服务中。它是互联网基础设施的关键部分,确保了用户能通过简单易记的域名访问全球各地的网络资源。
域名的层次结构
DNS域名层次结构是一种倒置的树状结构,从最顶层的根域开始,向下依次是*域(TLD)、二级域、三级域等,直至具体的主机名。以下是DNS域名层次结构的组成部分及其说明:
- 根域(Root Domain):
标志为一个点(.
),位于树形结构的顶端,是所有域名查询的起点。实际上,它是所有DNS查询的最高层级,但通常在域名书写时不显示。全球共有13组根域名服务器,负责引导查询者前往相应的*域名服务器。
- *域(Top-Level Domain, TLD):
位于根域之下,是最靠近根域的一级域名,如.com
、.org
、.net
、.edu
、.gov
、.cn
(中国)等。还包括国家代码*域名(ccTLDs),如.uk
(英国)、.de
(德国)等。
- 二级域(Second-Level Domain, SLD):
在*域之下的域名层,通常代表组织或公司的名称,例如在example.com
中,example
就是二级域。
- 三级域(Third-Level Domain)及其他子域:
可以在二级域下继续细分,形成多级子域名结构。例如,在www.example.com
中,www
是一个三级域,通常用于指定特定的服务类型(如web服务器)。
- 主机名(Hostname):
树状结构中最底层的部分,直接关联到具体的网络设备或服务,如www
、ftp
等。主机名加上前面各级域名,构成了完整的域名,用于唯一标识互联网上的每一台主机。
举个简单的例子:
假设我们访问的网站是
www.example.com
。
- 根域(Root Domain):虽然在实际的网址中不会显示出来,但在DNS查询过程中是起始点,用"."表示。
- *域(Top-Level Domain, TLD):在这个例子中是
.com
,表示这是一家商业机构的网站。- 二级域(Second-Level Domain, SLD):
example
是二级域名,它代表了一个具体的组织或公司的名字。- 三级域(Third-Level Domain):在这个例子中是
www
,它是一个常见的前缀,用来指示该域名指向的是一个网站(World Wide Web)服务器。
所以,当你在浏览器中输入www.example.com
并敲击回车时,DNS系统会从根域开始,逐步向下查询到*域.com
的DNS服务器,再到管理example.com
这个二级域名的权威DNS服务器,最终找到与www
相对应的IP地址,从而让你的电脑能够连接到存放该网站内容的服务器上。
整个域名系统通过这种层次化的结构,实现了域名到IP地址的有效映射,并且允许分散管理,便于查询和维护。每个级别的域名通常由不同的组织或个人管理,*域名由互联网号码分配局(IANA)和相应的注册管理机构负责,而更低级别的域名则由相应的注册人或组织管理。
域名分类
域名分类主要可以根据不同的标准来划分,以下是几种常见的分类方式:
- 按后缀分类:
- 通用*域名(gTLD):包括最早期的.com(商业)、.net(网络服务)、.org(非营利组织)等,以及后来新增的如.info(信息)、.biz(商业)、.mobi(移动设备)等。
- 国家及地区*域名(ccTLD):根据ISO 3166国家代码分配,如.cn(中国)、.us(美国)、.uk(英国)等。
- 新通用*域名(New gTLD):近年来大量增加的*域名,如.app(应用)、.shop(商店)、.xyz(通用)等,旨在提供更多样化的选择。
- 按功能或用途分类:
- 教育机构:如.edu(教育机构)。
- *机构:如.gov(*部门)、.gov.cn(中国*部门)。
- 军事组织:如.mil(军事机构)。
- 网络服务:如.net(网络服务相关)。
- 非营利组织:如.org(非营利组织)。
- 按结构或级别分类:
- *域名(Top-Level Domain, TLD):上述提到的各类*域名。
- 二级域名:在*域名之下的域名,例如在example.com中,"example"是二级域名。
- 三级及以下域名:在二级域名基础上进一步细分,如sub.example.com中的"sub"。
选择合适的域名时,考虑目标受众、品牌定位、易记性以及SEO优化等因素是很重要的。
域名服务器的分类
按照根域名服务器的标准来划分,DNS服务器可以分为以下几类,这种划分方式主要关注DNS层次结构的*元素:
- 根域名服务器(Root DNS Servers):
这是DNS层次结构的最高层级,全球共有13组根域名服务器,每组可能包含多个物理服务器和镜像站点,以确保稳定性和冗余。它们的主要职责是响应DNS查询的第一步,即指引查询者到适当的*域(TLD)服务器。根服务器并不直接提供域名到IP地址的具体映射,而是告诉查询者下一步应该询问哪个*域服务器。
- *域(TLD)服务器:
接收从根服务器转发来的查询请求,负责管理其下一级(即二级域)的域名解析,例如.com、.org、.net等通用*域以及国家和地区*域(ccTLD)。
- 权威域名服务器(Authoritative DNS Servers):
存储特定域的权威DNS记录,直接负责提供某个域名的最终解析结果。当一个域名的DNS记录发生更改时,这些更改会在权威服务器上进行。
- 本地缓存域名服务器(Local Caching DNS Servers):
有时也部署在企业网络或ISP内部,作为客户端的直接查询对象,以缓存之前查询过的域名记录,提高查询速度并减少对外部网络的流量需求。
综上所述,根域名服务器作为DNS查询路径的起始点,是整个域名解析流程的关键环节,而其他类型的DNS服务器则在其后各司其职,共同完成域名到IP地址的解析任务。
域名解析方式
递归查询(Recursive Query)
当一个客户端(如用户的计算机)向其配置的DNS递归解析器发出域名查询请求时,该解析器承担起查找完整答案的责任,并以最终的IP地址响应客户端。递归解析器会依次查询多个DNS服务器,直到找到最终的权威答案。在整个过程中,客户端只需发送一次查询请求,之后的工作由递归解析器“递归”地完成。
过程简述如下:
- 客户端向递归解析器发送查询请求。
- 递归解析器先查询本地缓存,若无结果,则向根域名服务器查询。
- 根据根域名服务器的指引,递归解析器继续向相应的*域服务器查询,然后是二级域名服务器,直至找到权威域名服务器。
- 权威服务器返回最终的IP地址给递归解析器。
- 递归解析器将此信息返回给客户端,并可能缓存该结果以供将来使用。
迭代查询(Iterative Query)
在迭代查询中,DNS服务器不会直接给出最终答案,而是每次回应客户端时提供下一步应该查询的DNS服务器的信息。因此,客户端需要自己负责后续的查询工作,一步步接近最终答案。
过程简述如下:
- 客户端首先向本地DNS服务器(可能是递归解析器或迭代服务器)发起查询。
- 如果本地服务器没有答案,它不会继续查询,而是直接告诉客户端应该去询问的下一个DNS服务器的地址(可能是根域名服务器)。
- 客户端再向这个新的DNS服务器发送查询。
- 该服务器如果也不能直接回答,会再次返回一个提示,告诉客户端接下来应该查询哪个服务器。
- 这个过程重复,直到客户端联系到一个能提供权威答案的服务器。
总结来说,递归查询中客户端只需要提出请求,剩余工作由DNS服务器完成;而在迭代查询中,客户端需要自己根据收到的提示一步步执行查询操作,直至找到最终答案。
域名的高速缓存
域名的高速缓存是DNS(域名系统)中一个重要的性能优化机制。它的工作原理如下:
当你的设备(比如电脑或手机)需要访问一个网站时,它会向DNS服务器发起请求,要求将网站的域名(如 example.com)转换为对应的IP地址。这个过程分为以下几个步骤:
- 查询本地缓存:首先,设备会检查自己的本地缓存中是否有该域名的解析记录。如果之前不久访问过该网站,解析记录可能还存储在本地,这样就可以直接使用而无需向外查询。
- 查询递归解析器:如果本地没有缓存,请求会转到递归解析器(通常是ISP提供的DNS服务器)。递归解析器同样会先查看自己的缓存。如果有,直接返回结果;如果没有,递归解析器会继续查询过程。
- 迭代查询至权威服务器:递归解析器随后会依次查询根域名服务器、*域名服务器(如.com)、二级域名服务器(如.example.com),直至找到负责该域名的权威DNS服务器。权威服务器会提供域名到IP的映射记录。
- 结果返回与缓存:一旦权威服务器提供了IP地址,递归解析器会将这个结果返回给初始请求者,并且通常会把这个解析结果在递归解析器上缓存一段时间,以便后续相同的查询可以更快响应。同时,发起查询的设备也会将结果缓存起来,以减少未来相同请求的解析时间。
- 缓存过期与刷新:缓存中的记录都有一个生存时间(Time to Live, TTL),过了这个时间,缓存记录就会被视为过期并被删除。下次再有相同的查询请求时,就需要重新进行DNS解析流程。
高速缓存的存在大大减少了对DNS系统根服务器和*域名服务器的压力,降低了网络延迟,提升了用户的上网体验。