一、为什么需要DNS?(问题的起源)
我们首先要明白DNS是为了解决什么问题而诞生的。
在互联网世界里,每一台计算机(或服务器)都有一个独一无二的、由数字组成的地址,叫做IP地址(比如 202.118.1.80
)。计算机之间的通信就是依靠这些IP地址来找到对方的,就像打电话需要知道对方的电话号码一样。
但是,让你记住一长串无规律的数字是非常困难的。相反,我们更容易记住有意义的名字,比如 www.google.com
。这就产生了一个矛盾:人喜欢用名字,而机器需要用地址。
DNS(Domain Name System,域名系统) 就是为了解决这个矛盾而生的。它的核心任务就是充当一个“翻译官”或者“电话簿”,负责将人类易于记忆的域名(如 www.google.com
)翻译成机器能够识别的IP地址(如 172.217.160.78
)。
二、DNS的核心构成:域名与域名服务器
要理解DNS的工作原理,我们首先要了解它的两大核心组成部分:域名的层次结构和域名服务器的体系。
1. 域名的层次结构 (Hierarchical Structure)
互联网的域名并不是一个杂乱无章的列表,而是像一棵倒过来的树,具有非常清晰的层次化结构。 一个域名由多个部分组成,各部分之间用点“.”隔开,从右到左,级别越来越低。
例如域名:mail.pku.edu.cn
. (根域):树的根,通常省略不写。
.cn:顶级域名 (Top-Level Domain, TLD)。它表示这是一个注册在中国的域名。
.edu:二级域名。在.cn
下,.edu
表示这是一个教育机构。
.pku:三级域名。这里指代北京大学。
mail:四级域名(也称主机名)。这里指代北京大学的邮件服务器。
顶级域名 (TLD) 主要分为三类:
国家顶级域名 (nTLD / ccTLD): 如 .cn
(中国), .us
(美国), .uk
(英国)。
通用顶级域名 (gTLD): 如 .com
(商业公司), .org
(非营利组织), .net
(网络服务机构)。 后来还增加了许多新的通用顶级域名,如 .biz
, .info
等。
基础设施域 (.arpa): 一个特殊域,用于互联网内部基础设施。
这种分层的结构使得域名的管理可以分级负责,高效且有序。例如,全球的顶级域名由 ICANN 这样的国际机构管理,而 .cn
下的域名则由我国的 CNNIC (中国互联网络信息中心) 负责管理。
2. 域名服务器的体系 (Hierarchy of Name Servers)
因为互联网上的域名实在太多了,不可能用一台服务器存下所有的“域名-IP”对应关系。所以,DNS采用了一个分布式的数据库系统,域名服务器也按照域名的层次结构进行组织,主要分为四类:
根域名服务器 (Root Name Server)
它是最高级别的服务器,全世界只有13套(不是13台,而是13个IP地址,背后是庞大的服务器集群)。
它不直接“翻译”域名,但它知道所有顶级域名服务器的IP地址。 当有服务器不认识某个域名时,第一个求助的就是它。
顶级域名服务器 (TLD Name Server)
负责管理所有以特定顶级域名结尾的域名,比如 .com
的顶级域名服务器知道所有注册在 .com
下的二级域名的信息(比如 google.com
应该去问谁)。
权限域名服务器 (Authoritative Name Server)
这是真正“拥有”并负责维护特定区域(如 pku.edu.cn
)内所有主机“域名-IP”映射关系的服务器。 比如,mail.pku.edu.cn
的确切IP地址,就记录在 pku.edu.cn
的权限域名服务器上。每个域名都必须在某个权限域名服务器上注册。
本地域名服务器 (Local Name Server)
它不属于上述层次结构,但离用户最近,是用户进行DNS查询的第一站。 通常由你的网络服务提供商(ISP,如电信、移动)提供。它像一个“中介”或“代理”,负责帮助用户完成整个查询过程。 它还具有高速缓存 (Caching) 功能,可以记下最近查询过的域名和IP地址,下次再有相同请求时,就可以直接返回答案,大大提高效率。
三、DNS的工作原理 (The Working Principle)
这部分是考试的重中之重。DNS的查询过程主要有两种方式:递归查询和迭代查询。 在实际应用中,这两种方式是结合使用的。
让我们通过一个完整的例子来理解这个过程:假设你在连接着校园网的电脑上,首次访问 www.abc.com
。
整个流程如下(结合了递归和迭代查询):
[主机 -> 本地域名服务器] (递归查询)
你的电脑首先会向你的本地域名服务器(校园网提供的)发送一个DNS请求,问:“www.abc.com
的IP地址是什么?”
这种查询方式是递归查询 (Recursive Query)。意思是,你的电脑把任务完全委托给了本地域名服务器,说:“请你务必帮我找到答案,我等着就行”。
[本地域名服务器 -> 根域名服务器] (迭代查询)
本地域名服务器收到请求后,先检查自己的缓存里有没有记录。因为是首次访问,缓存里没有。
于是,本地域名服务器向一台根域名服务器发起请求。
根域名服务器回答:“我不认识 www.abc.com
,但它是一个 .com
域名,你可以去问负责 .com
的顶级域名服务器,它的IP地址是 X.X.X.X
。”
[本地域名服务器 -> 顶级域名服务器] (迭代查询)
本地域名服务器接着向IP地址为 X.X.X.X
的 .com
顶级域名服务器发起请求。
顶级域名服务器回答:“我也不知道,但我知道管理 abc.com
这个域的权限域名服务器的IP地址是 Y.Y.Y.Y
,你应该去问它。”
[本地域名服务器 -> 权限域名服务器] (迭代查询)
本地域名服务器再向IP地址为 Y.Y.Y.Y
的 abc.com
权限域名服务器发起请求。
权限域名服务器一查自己的记录,找到了!它回答:“www.abc.com
的IP地址是 Z.Z.Z.Z
。”
[本地域名服务器 -> 主机] (递归查询的响应)
本地域名服务器终于得到了最终答案 Z.Z.Z.Z
。它将这个结果返回给你的电脑,并将这个映射关系存入自己的高速缓存中,以便下次再有相同请求时能快速响应。
[主机 -> Web服务器]
你的电脑拿到了IP地址 Z.Z.Z.Z
,现在就可以通过这个地址与 www.abc.com
的Web服务器建立TCP连接,开始请求网页内容了。
总结一下查询方式:
递归查询 (Recursive Query):主机向本地域名服务器的查询通常是递归的。主机当“甩手掌柜”,本地服务器必须返回最终结果。
迭代查询 (Iterative Query):本地服务器向其他域名服务器的查询通常是迭代的。本地服务器当“跑腿的”,每次都只得到“下一步该去哪”的线索,然后自己再去问下一家,直到找到答案。
四、DNS报文格式 (DNS Message Format)
DNS的查询和响应都是通过特定的报文格式来传输的。这个报文格式分为五个部分,非常重要,需要牢记。
[ 报文首部 | 问题部分 | 回答部分 | 授权部分 | 附加信息部分 ]
1. 报文首部 (Header) – 12字节
首部是定长的,包含了报文的控制信息。
标识 (ID) (2字节): 一个随机数,用来匹配请求和响应。响应报文会原封不动地复制请求报文中的ID,这样客户端就知道这个响应是针对哪个请求的。
标志 (Flags) (2字节): 这是最重要的字段,包含了很多子字段,用来控制查询和响应的行为。
QR
(1位): 0表示查询报文,1表示响应报文。
Opcode
(4位): 0表示标准查询。
AA
(1位): 授权回答标志。只有权限域名服务器返回的响应中,此位才为1。
TC
(1位): 截断标志。如果响应报文太长(超过UDP的512字节限制),此位为1,表示报文被截断了。
RD
(1位): 期望递归标志。在查询报文中设为1,表示希望目标服务器进行递归查询。我们向本地域名服务器发出的请求就是这样的。
RA
(1位): 可用递归标志。在响应报文中由服务器设置,如果为1,表示该服务器支持递归查询。
Rcode
(4位): 返回码。0表示没有差错;3 (NXDomain) 表示域名不存在。
问题数 (Questions) (2字节): 问题部分中的问题数量(通常为1)。
资源记录数 (Answer RRs) (2字节): 回答部分中的资源记录数量。
授权资源记录数 (Authority RRs) (2字节): 授权部分中的资源记录数量。
附加资源记录数 (Additional RRs) (2字节): 附加信息部分中的资源记录数量。
2. 问题部分 (Question Section)
这部分包含了客户端想要查询的信息。
查询名 (Query Name): 要查询的域名,格式比较特殊,比如www.google.com
会被编码成3www6google3com0
。
查询类型 (Query Type): 指明想要查询哪种类型的资源记录。
查询类 (Query Class): 通常是IN
(值为1),表示互联网地址。
3. 回答、授权、附加信息部分 (Answer, Authority, Additional Sections)
这三个部分的格式是相同的,都采用资源记录 (Resource Record, RR) 的格式。
资源记录 (RR) 的格式:
域名 (Name): 该记录所属的域名。
类型 (Type): 资源记录的类型,决定了“资源数据”字段的含义。
类 (Class): 同样,通常是 IN
。
生存时间 (TTL – Time to Live): 一个数值(单位:秒),告诉接收方这个记录可以在缓存中保留多久。TTL过期后,缓存中的记录将被丢弃。
资源数据长度 (RDLength): “资源数据”字段的长度。
资源数据 (RDATA): 核心数据,其内容由“类型”字段决定。
重要的资源记录类型 (Type):
A: RDATA
是一个 IPv4 地址。这是最常见的查询类型。
AAAA: RDATA
是一个 IPv6 地址。
NS (Name Server): RDATA
是负责该域的权限域名服务器的主机名。
CNAME (Canonical Name): RDATA
是一个别名对应的规范主机名。比如 www.example.com
可能是 server1.example.com
的一个别名。
MX (Mail eXchanger): RDATA
是负责接收该域邮件的邮件服务器的主机名。
五、考试要点总结
DNS的核心功能:将域名翻译成IP地址,方便人类使用。它是一个分层、分布式的数据库系统。
两大支柱:域名的层次结构(根->顶级->二级…)和域名服务器体系(根->顶级->权限,以及旁路的本地域名服务器)。
查询过程:
记住“主机到本地服务器是递归,本地服务器到其他服务器是迭代”这个典型模式。
理解每种服务器在查询链中的作用:根服务器指路给顶级,顶级指路给权限,权限给出最终答案。
高速缓存 (Caching) 是提高DNS效率的关键,TTL决定了缓存的有效期。
报文格式:
熟悉五个部分的顺序:首部、问题、回答、授权、附加。
掌握首部中标志字段(Flags) 的含义,特别是 QR
、AA
、RD
、RA
和 Rcode
。
了解资源记录(RR) 的通用格式,并记住几个关键的RR类型:A
(IPv4), AAAA
(IPv6), NS
(域名服务器), CNAME
(别名), MX
(邮件服务器)。
DNS vs. ARP:这是一个常见的比较题。
DNS:实现应用层地址(域名)到网络层地址(IP)的翻译,是全局性的服务。
ARP:实现网络层地址(IP)到数据链路层地址(MAC)的翻译,是局域性的服务(仅在同一个局域网内有效)。
暂无评论内容