«

简单说说 DNS 是什么,以及原理

时间:2026-4-7 00:25     作者:独元殇     分类: 开发相关


欢迎关注我的公众号,名叫「串串狗小刊」

这个 DNS 是计算机里的基础底层知识之一,是互联网运行的最重要的低级。

这个 DNS 的命名非常硬核,Domain Name System ,域名系统,就是一个巨大的数据库目录。

因为互联网设备在网上都是使用的 IP 地址,因此我们需要一个更有利于我们记忆的方式,来访问别人的设备,就是域名,比如 example .com这种。

但是!!!

这个转化过程可超级复杂!

有多复杂呢?比如我的 ccgxk 站点,Mac OS 里预先安装了 dig,它可以显示这个过程:

img

这个是这个过程的简略图。一共分成四块儿。

第一块儿,最上面是 状态 ,生成了个查询 id ,59615 ,防止搞混嘛。然后 status 是 NOERROR ,告诉我们查询成功了。

第二 块儿,是协议,用的 version 0 协议,用处不大。然后下面是 QUESTION ,也就是问 DNS 问题是 ccgxk 的地址是?

第三块儿,是回答,这个域名对应的 ip 是 198 .18 .2 .65 。其中有个 1 非常重要,就是说缓存 1S ,过了一秒,还得重新问 DNS 这个问题。

最后一块儿就是本次的统计,消耗了 0 毫秒(几乎是一瞬间,因为我访问过,已经存到本地了,如果是生僻的,这个过程可能得 50~1000 毫秒),然后这个 DNS 是阿里云的 DNS 服务器,223.5 .5 .5 ,然后是时间和回复大小。

(注意:198 .18 .2 .65 这个是因为我电脑里有那种能上谷歌的软件(你懂的),并不是真实 IP ,代理委托人而已)

当然,这个 223.5 .5.5 并不是我的域名设置的,而是我的电脑里设置的。

在我的电脑 WiFi 设置里可以看到:

img

它只是一个中介而已,是 阿里云 公司搞的,它会再去问别的节点,然后别的节点再问别的节点.... 视复杂程度,可能得很久很久,也可能只有几十毫秒。

它只是个跑腿的,它本身并不是目录库。

之后,为了速度,我的本地可能会缓存,它里面也可能缓存。

不可能有一个 DNS 服务器,把全世界的域名和 IP 都对应的,当然,容量撑死几个 TB ,主要是域名和 IP 都在实时变化.... 因此,这就是个分布式去中心化的设计,靠「中间商」跑跑跑,接力询问,最后定位真实目录。

内网 DNS 和 公网 DNS

有个机制叫做 DHCP 机制,动态分配 DNS 。当然,可以以固定。这个无所谓。

如果我们公司内部,有自己的【互联网】,而不是访问咱们通常使用的这个全球国际大互联网,那么我们可以把 DNS 改成自己本地的。比如 192.168. 1. 50 (当然你本地得部署配套的 DNS 服务器)。

而访问全球国际互联网,就使用大公司的 DNS ,比如国内大陆常使用的 DNS 有阿里的 223.5 .5.5 ,或者 腾讯的 119.29 .29.29 或者 360 动不动就给你 windows 改的 101. 226. 4.6.... 都可以。当然还有很多很多,广义上都没啥区别,唯一区别就是速度,有些会给你拦截,甚至.... 把一些不存在的页面换成广告(流氓666),甚至监听你的网络活动,天天访问哪些网站,一清二楚。

根域名服务器

咱们的 DNS ,向上问话,一层一层的,每一级都有自己的 NS 记录,然后指向自己这一级的域名服务器地址。

一级一级的,有不同的管理者,比
如 www.example.com 里面的www,又称为"三级域名",这是用户在自己
的域里面为服务器分配的名称,是用户可以任意分配的。

. 根域名
com. TLD(一级域名)
example.com. SLD(二级域名)
www.example.com. 域名所有者(三级域名)

可是上一节,我们的 DNS 有一个问题,它是去问话,但是第一步,要去问谁呢?

答案就是,先问根域名服务器!

在网络设计上,一共有 13 个根服务器,分别是 A.ROOT-SERVERS .NET 到 M.ROOT-SERVERS .NET ,注意前面的 A ,一直到 M ,按照这个顺序编号。(为了兼容性,一个 512 字节的 UDP 数据包里,只能容纳 13 个 IP 地址。所以设计为 13)。

"根域名服务器" 的NS记录和IP地址一般是不会变化的,内置在我们每一个 DNS 服务器里面。所以,DNS 去问话的起点就开始了 ~

(如果根服务器全部宕机了怎么办??? 首先这些服务器,背后是几千个节点,而不是一个机柜,只要有一个活着就行,其次也别担心,我们不傻,我们国内早捣鼓了几千个镜像备份了哈哈哈哈)

DNS 类型

买过域名,设置过解析的,一定对 A 记录、NS 记录、MX 、CNAME、PTR、TXT 等不陌生吧!

比如我的域名部分解析如下所示,我自己可以自由管理设置:

img

第一行就对应了 www . ccgxk. com ,是 A 记录。

这个是直接返回了我的 IP 。

而 NS 一般用不到,只有 dns 服务器这种问话跑腿服务器才用到。

这些类型大概解析如下:

A 记录:域名直接指向 IPv4 地址

AAAA 记录:域名直接指向 IPv6 地址

CNAME 记录:域名指向 另一个域名(也就是 DNS 还得再跑一级的腿,为服务器配置提供灵活性,用户感知不到)

MX 记录:指定 邮件服务器 地址。

TXT 记录:存文本信息(一般是验证这个域名是不是你在用的)

标签: 原创 DNS