计算机网络——域名服务

一、为什么需要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.Yabc.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) 的含义,特别是 QRAARDRARcode
了解资源记录(RR) 的通用格式,并记住几个关键的RR类型A (IPv4), AAAA (IPv6), NS (域名服务器), CNAME (别名), MX (邮件服务器)。

DNS vs. ARP:这是一个常见的比较题。

DNS:实现应用层地址(域名)到网络层地址(IP)的翻译,是全局性的服务。
ARP:实现网络层地址(IP)到数据链路层地址(MAC)的翻译,是局域性的服务(仅在同一个局域网内有效)。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容